Le chaos est une échelle ASCII


43

Vous ne savez rien Ce que je fais pour "Le chaos est une échelle " est une ligne mémorable de la série télévisée Game of Thrones .

Le but de ce défi est de construire une échelle du chaos, dans l'art ASCII.

Le défi

Contribution

  • Largeur de l'échelle, W >= 3(entier)
  • Hauteur du pas, H >= 2(entier)
  • Nombre de barreaux, N >= 2(entier).

Sortie

Une échelle avec des barreaux horizontaux et des rails verticaux , tous larges d'un caractère. La largeur de l'échelle ( W) inclut les deux rails et la hauteur de marche ( H) inclut le barreau correspondant.

Tous les barreaux, y compris les plus hauts et les plus bas, auront un morceau de rail vertical de longueur H-1directement au-dessus et au-dessous. L'exemple rendra cela plus clair.

Le schéma sera constitué de caractères ASCII imprimables non-d'espaces , c'est-à-dire de la plage comprise entre !(point de code 33) et ~(point de code 126). Les caractères réels seront choisis de manière aléatoire . Étant donné les entrées, chacun des choix aléatoires de caractères doit avoir une probabilité non nulle. Autre que cela, la distribution de probabilité est arbitraire.

Les espaces de début ou de fin , horizontaux ou verticaux, sont autorisés.

Exemple

Étant donné W=5, H=3, N=2, une sortie possible est la suivante.

x   :
g   h
q$UO{
t   T
6   <
bUZXP
8   T
5   g

Notez que la hauteur totale est H*(N+1)-1, car il y a des Nbarreaux et N+1des sections verticales.

Règles additionnelles

  • Les moyens de saisie et le format sont flexibles comme d’habitude. Par exemple, vous pouvez entrer les trois nombres dans n'importe quel ordre ou un tableau les contenant.

  • La sortie peut être via STDOUT ou un argument renvoyé par une fonction. Dans ce cas, il peut s'agir d'une chaîne avec des nouvelles lignes, d'un tableau de caractères 2D ou d'un tableau de chaînes.

  • Un programme ou une fonction peut être fourni.

  • Les failles standard sont interdites.

  • Le code le plus court en octets gagne.

Cas de test

Pour chacun, W, H, Nune sortie possible est affichée.

W=5, H=3, N=2:

\   ~
:   K
ke:[E
5   u
0   _
8Fr.D
#   r
7   X


W=3, H=2, N=2:

$ X
Mb)
0 ]
(T}
j 9


W=12, H=4, N=5:

d          Y
P          `
5          3
p$t$Ow7~kcNX
D          x
`          O
*          H
LB|QX1'.[:[F
p          p
x          (
2          ^
ic%KL^z:KI"^
C          p
(          7
7          h
TSj^E!tI&TN8
|          [
<          >
=          Q
ffl`^,tBHk?~
O          +
p          e
n          j


W=20, H=5, N=3:

G                  %
o                  y
%                  3
-                  7
U'F?Vml&rVch7{).fLDF
o                  }
U                  I
h                  y
a                  g
;W.58bl'.iHm\8v?bIn&
,                  U
N                  S
4                  c
5                  r
F3(R|<BP}C'$=}xK$F]^
'                  h
h                  u
x                  $
6                  5    

pouvez-vous ajouter la plage (numérique) pour les caractères ascii?
Rod

@Rod Bonne idée. Fait
Luis Mendo, le

1
Quel type de limite inférieure sur la qualité du hasard existe-t-il? Je suppose que commencer à un point aléatoire et incrémenter modulo (126-33) ne serait pas admissible en raison d'une corrélation évidente entre les valeurs adjacentes. Ou doit-il être capable de produire toutes les séquences possibles? (Un générateur congruentiel linéaire de 8 bits ne fonctionnerait donc pas, car un caractère détermine uniquement le caractère suivant?)
Peter Cordes

@PeterCordes Il n’ya aucun problème à avoir une corrélation, dans la mesure où toutes les combinaisons possibles peuvent se produire. L'approche que vous décrivez n'est, comme vous le dites, pas valable car elle introduit une dépendance statistique trop forte entre des caractères situés à des positions différentes, rendant ainsi certaines combinaisons impossibles
Luis Mendo

1
@PeterCordes Oui, je voulais dire théoriquement. Ne vous inquiétez pas de la force du GNA; vous pouvez supposer que le RNG est idéal. Il y a un méta consensus à ce sujet. Je pensais qu'il y avait quelque chose de plus spécifique, mais tout ce que j'ai pu trouver, c'est ceci et cela
Luis Mendo

Réponses:


6

Jelly ,  24 23  22 octets

«þỊoU$ẋ⁵‘¤Ḋ×94X€€+32ỌY

Un programme complet prenant les trois arguments W, H, Net d' imprimer le résultat.

Essayez-le en ligne!

Comment?

Construit un masque de tableau en 2D à partir d’un seul réseau et de ses sections verticales ci-dessous, répète N+1fois et supprime le dernier réseau, puis place des caractères aléatoires ou des espaces en fonction de la valeur du masque.

«þỊoU$ẋ⁵‘¤Ḋ×94X€€+32ỌY - Main link: W, H (N is third input / 5th command line argument)
 þ                     - outer product (build a table using):
«                      -  minimum
                       -  ...note: þ implicitly builds ranges of W and H prior
  Ị                    - insignificant? (abs(z)<=1) - yields a W by H 2-d array,
                       -   all zeros except the left and top edges which are 1s
     $                 - last two links as a monad:
    U                  -   upend (reverse each row)
   o                   -   or (vectorises) - giving us our |‾| shape of 1s
         ¤             - nilad followed by link(s) as a nilad:
       ⁵               -   5th command line argument, N
        ‘              -   increment -> N+1
      ẋ                - repeat list - giving us our ladder-mask plus a top rung)
          Ḋ            - dequeue - remove the top rung
            94         - literal ninety-four
           ×           - multiply (vectorises) - replace the 1s with 94s
              X€€      - random for €ach for €ach - 0 -> 0; 94 -> random integer in [1,94]
                  32   - literal thirty-two
                 +     - add (vectorises) - 0 -> 32; random integers now from [33,126]
                    Ọ  - character from ordinal (vectorises)
                     Y - join with newlines
                       - implicit print

34

Langage de script Operation Flashpoint , 643 624 octets

f={l=["""","!","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"];t=_this;w=t select 0;r={l select random 92};v="";s=v;i=2;while{i<w}do{i=i+1;v=v+" "};p={i=1;while{i<t select 1}do{i=i+1;s=s+call r+v+call r+"\n"}};k=0;call p;while{k<t select 2}do{k=k+1;i=0;while{i<w}do{i=i+1;s=s+call r};s=s+"\n";call p};s}

Ridiculement long car il n'y a aucun moyen de créer les caractères à partir des codes de caractères.

Appeler avec:

hint ([5, 3, 2] call f)

Sortie:

L'échelle est très chaotique car la police n'est pas à espacement fixe.

Déroulé:

f =
{
    l = ["""","!","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"];

    t = _this;
    w = t select 0;

    r =
    {
        l select random 92
    };

    v = "";
    s = v;

    i = 2;
    while {i < w} do 
    {
        i = i + 1;
        v = v + " "
    };

    p =
    {
        i = 1;
        while {i < t select 1} do 
        {
            i = i + 1;
            s = s + call r + v + call r + "\n"
        }
    };

    k = 0;
    call p;
    while {k < t select 2} do 
    {
        k = k + 1;

        i = 0;
        while {i < w} do
        {
            i = i + 1;
            s = s + call r
        };
        s = s + "\n";

        call p
    };

    s
}

Il semble que ça "\n"marche, "\xa3"que quelque chose £ne marche pas? Si vous pouvez utiliser des échappements Unicode, vous pourrez peut-être réduire ce tableau.
Tschallacka

Comment puis-je gérer cela moi-même? : D
Geeky I

22
Cela ressemble à un script a été écrit et les espaces et les nouvelles lignes ont été supprimés. Est-ce que c'est seulement parce que j'ai eu une image d'échelle que de recevoir des votes positifs?
Jonathan Allan

@steadybox utilisez-vous des captures d'écran contextuelles maintenant, après avoir demandé une capture d'écran autre que celle d'une prairie sur cette seule question xD?
Magic Octopus Urn

@Tschallacka \nest la seule issue reconnue. (Et entre ""guillemets pour en représenter un ")
Steadybox

14

05AB1E , 29 octets

Entrée prise dans la commande N, H, W

>*GNUžQ¦©.RIÍFð®.R«X²Öè}®.RJ,

Essayez-le en ligne!

Explication

>*G                              # for N in [1 ... (N+1)*H)-1] do:
   NU                            # store N in variable X
     žQ                          # push a string of printable ascii
       ¦©                        # remove the first (space) and save a copy in register
         .R                      # pick a random character
           IÍF                   # W-2 times do:
              ð                  # push a space
               ®.R               # push a random ascii character
                  «              # concatenate
                   X²Ö           # push X % H == 0
                      è          # index into the string of <space><random_char> with this
                       }         # end inner loop
                        ®.R      # push a random ascii character
                           J,    # join everything to a string and print

C'est un peu tricher.
vdegenne

4
@ user544262772 pourquoi alors?
Jonathan Allan

pouvez-vous expliquer cela un peu?
Mischa

@MischaBehrend: Bien sûr, j'ai ajouté une explication maintenant.
Emigna

3
@ user544262772 il peut être assez difficile de répondre correctement au golf dans une langue de golf, croyez-moi, ils sont conçus pour le golf, mais leur utilisation nécessite généralement une certaine réflexion (à moins que ce ne soit "voici un outil intégré qui fait exactement ce que vous voulez ").
Jonathan Allan

13

C, 95 octets

f(w,h,n,i){++w;for(i=0;i++<w*~(h*~n);)putchar(i%w?~-i%w%(w-2)*((i/w+1)%h)?32:33+rand()%94:10);}

8

R , 138 129 111 98 93 octets

-13 octets grâce à Neal Fultz!

-1 octet grâce à Robin Ryder

function(W,H,N){m=matrix(intToUtf8(32+sample(94,W*(h=H*N+H-1),T),T),h)
m[-H*1:N,3:W-1]=" "
m}

Essayez-le en ligne!

Fonction anonyme; renvoie le résultat sous forme de matrice.

Grâce à cette question de Word Grids , j'ai beaucoup plus pensé aux matrices que d'habitude. J'ai observé que les lignes se trouvaient dans les lignes de la matrice qui étaient un multiple de la hauteur de l'étape H(R est indexé sur 1), et que les rails étaient les première et dernière colonnes, 1et W. Je crée donc une matrice de caractères ASCII aléatoires, remplace les lettres qui ne correspondent pas à ces critères par des espaces et renvoie la matrice. Le lien TIO l’imprime bien.

Neal Fultz a suggéré une indexation différente pour les caractères d'espacement [-H*(1:N),3:W-1], qui remplace tous les caractères à l'exception de ceux en rangées de multiples de H: -H*(1:N)et non sur le bord, 3:W-1<==> 2:(W-1).

R , 121 octets

function(W,H,N)for(i in 1:(H*N+H-1)){for(j in 1:W)cat("if"(!(i%%H&j-1&j-W),sample(intToUtf8(33:126,T),1)," "))
cat("\n")}

Essayez-le en ligne!

Une amélioration par rapport à l'approche initiale basée sur la matrice avec laquelle j'ai commencé; C'est le même algorithme mais les forboucles sont plus courtes que de construire et d'imprimer une matrice (mais pas si je ne l'imprime pas!)


m[-H*(1:N),3:W-1]=" "semble un peu plus court - vous pouvez toujours remplacer les tests rowet colpar une tranche de 2 jours.
Neal Fultz le

@NealFultz wow, c'est tout à fait excellent! Merci!
Giuseppe

-1 octet en remplaçant sample(33:126,...)par 32+sample(94,...).
Robin Ryder


6

Charbon de bois , 34 32 octets

E…¹×⁺¹NN⪫EIζ⎇∧﹪ιIη﹪λ⁻Iζ¹ §⮌γ‽⁹⁴ω

Essayez-le en ligne! Prend les entrées dans l'ordre approximatif N, H, W. Verbose ( Plus(InputNumber(), 1)est actuellement cassé sur TIO). Explication:

E…¹×⁺¹NN

Carte sur la plage 1..H*(N+1). Cela signifie que les barreaux apparaissent quand iest un multiple de H.

Rejoignez le résultat de:

EIζ

mappage sur la plage implicite 0..W:

⎇∧﹪ιIη﹪λ⁻Iζ¹ 

si la colonne n'est pas 0ou W-1et que la ligne n'est pas un multiple de, Hindiquez un espace;

§⮌γ‽⁹⁴

sinon, prenez la variable de caractère ASCII prédéfinie, inversez-la (en plaçant l'espace à la 94e place) et imprimez un caractère aléatoire de ce qui est maintenant le premier 94. (Parce que c'est Slicenul.)

ω

Rejoignez en utilisant la chaîne vide. Le résultat final est imprimé implicitement.


Je ne sais pas si c'est utile, mais vous pouvez dessiner l'échelle, puis jeter un coup d'œil et cartographier l'imprimé au hasard, je pense? EDIT Il semble être cassé. Oops.
ASCII seulement

Je vais essayer de résoudre le problème (je suis presque sûr que cela fonctionnait auparavant), mais j'ai été un peu occupé et cela pourrait prendre un certain temps
ASCII uniquement

@ ASCII uniquement, je suppose que vous pensez à NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«? Eh bien, je l'ai coupé en deux et j'ai commis une a0a6316erreur
Neil

@ ASCII-only En fait, ce n'est pas tout à fait vrai, il y avait un bogue sans rapport dans Maplequel il utilisait not is_commandquand il voulait dire is_command. Donc, vous étiez censé écrire NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴s'il n'y avait pas eu ce bogue.
Neil

6

C (gcc) , 141 131 114 109 107 octets

Devrait être capable de jouer au golf un peu ...

i,j,c;f(w,h,n){for(i=1;i<h*n+h;i+=j==w)printf(i%h?i++,j=0,"%c%*c\n":"%c",++j^w?c^8:10,w-2,c=33+rand()%94);}

Essayez-le en ligne!


pouvons-nous éditer i=1dans la déclaration globale?
Mukul Kumar

6

Perl 6 , 76 73 octets

->\h,\n,\w{map {chrs (roll(w,1..94)Z*1,|($_%%h xx w-2),1)X+32},1..^h*n+h}

Essayez-le en ligne!

Prend (h, n, w) comme arguments. Retourne une liste de chaînes.

Explication:

-> \h, \n, \w {  # Block taking arguments h, n, w
    map {
        # String from codepoints
        chrs
             # Generate w random numbers between 1 and 94
             (roll(w, 1..94)
              # Set inner numbers on non-rungs to zero
              Z* 1, |($_%%h xx w-2), 1)
             # Add 32 to numbers
             X+ 32
    }
    # Map h*n+h-1 row numbers (1-indexed)
    1..^h*n+h
}

Alternative 73 byter utilisant xxet ++$au lieu de map. Peut-être que vous pouvez trouver un endroit pour jouer au golf avec des octets?
Jo King

5

PowerShell , 132 124 octets

param($w,$h,$n)-join([char[]]((($a=('#'+' '*($w-2)+"#`n")*--$h)+'#'*$w+"`n")*$n+$a)|%{($_,[char](33..126|Random))[$_-eq35]})

Essayez-le en ligne!

Nous construisons une échelle composée uniquement de #premier ( exemple ), puis nous parcourons |%{...}chaque caractère et, ifcomme d' -eqhabitude 35, nous extrayons un nouveau Randomcaractère de la plage appropriée. Sinon, nous produisons une sortie (c’est-à-dire un espace ou une nouvelle ligne).


5

JavaScript (ES6), 117 115 octets

Une fonction récursive construisant la sortie caractère par caractère.

"Regardez Ma, pas de saut de ligne littéral!"

(w,h,n)=>(g=x=>y<h*n+h-1?String.fromCharCode(x++<w?x%w>1&&-~y%h?32:Math.random()*94+33|0:10)+g(x>w?!++y:x):'')(y=0)

Démo


Bon sang! J'étais en train de jouer au golf quand j'ai vu cela. :\ Tu as encore gagné! : p
Shaggy

J'ai fini de jouer au mien (pour le moment) - je me suis débrouillé pour déplacer tous les ternaires à l'intérieur String.fromCharCode, car je ne pouvais honnêtement pas dire que je le ferais moi-même après avoir vu cela. Faites-moi savoir si vous pensez que le mien est maintenant trop similaire au vôtre.
Shaggy

@Shaggy Pas de soucis! (En fait, je n'ai vu votre réponse qu'après avoir posté la mienne. Si je l'avais vue plus tôt, j'aurais probablement abandonné.)
Arnauld

1
Ah, c'est la nature du jeu! :) La combinaison de nos solutions donne 113 octets , par la voie
Shaggy




3

SOGL V0.12 , 32 31 octets

 ~ΔkψR
I{e{R}¶bH{Re⁾⌡@R¶}}¹∑e⌡k

Essayez-le ici!

Entrée dans l'ordre N, W, H.

Explication:

 ~ΔkψR

     R  a function named "R", pushes a random character:
 ~       push "~"
  Δ      get the charasters from " " to "~"
   k     remove the 1st character
    ψ    choose a random character from that

I{e{R}¶bH{Re⁾⌡@R¶}}¹∑e⌡k  main program

I                         increase the 1st input - N
 {                }       N times do
  e                         push the variable e, which is here initialised to the next input - W
   { }                      E times do
    R                         execute R
      ¶                     push a newline
       bH                   push b-1, where b is initialised to the next input - H
         {       }          B-1 times do
          R                   execute R
           e⁾                 push e-2 aka width-2
             ⌡@               push that many spaces
               R              execute R
                ¶             push a newline
                   ¹∑     join the stack together
                     e⌡k  remove the first width characters

18 octets sans les caractères aléatoires: /


3

Java 8, 203 188 168 133 132 130 130 128 126 octets

W->H->N->{for(double i=0,j,q;++i<H*N+H;)for(j=W,q=10;j-->=0;q=i%H*j<1|j>W-2?33+Math.random()*94:32)System.out.print((char)q);}

Essayez-le en ligne!


133 octets:W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
Nevay

Vous imprimez actuellement le résultat W-1, la boucle interne doit effectuer une itération supplémentaire ( >=0+1 octet).
Nevay

1
132 octets:W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
Nevay

2
;++i<H*N+H;: -2 octets.
Olivier Grégoire

3

Haskell , 226 220 211 190 octets

import System.Random
a=mapM id
b=(putStr.unlines=<<).a
c=randomRIO('!','~')
r w=a$c<$[1..w]
s w=a$c:(return ' '<$[3..w])++[c]
(w#h)0=b$s w<$[2..h]
(w#h)n=do{b$(s w<$[2..h])++[r w];(w#h)$n-1}

Essayez-le en ligne!

Économisé 9 octets grâce à Laikoni

21 octets sauvés grâce à wchargin

Devrait être golfable ( b$(s w)<$[2..h]et b$((s w)<$[2..h])++[r w]). Je ne me sens pas à l'aise avec IO et le golf.


Vous pouvez utiliser la notation infixe pour t w h n= ...: (w#h)n= .... purepeut être utilisé à la place de return. Vous pouvez supprimer les parenthèses (d ' ')<$et (s w)<$.
Laikoni

@ Laikoni Je n'oublierai pas la notation infixe la prochaine fois! Merci.
jferard

1
Enregistrer un tas d'octets avec c=randomRIO('!','~'), ce qui vous permet également en ligne d=return. En outre, mapM idest un octet plus court que sequence.
wchargin

1
@ wchargin Merci. J'ai appris quelque chose aujourd'hui!
jferard

2

JavaScript (ES6), 144 octets

(w,h,n)=>Array(n+1).fill(("#".padEnd(w-1)+`#
`).repeat(h-1)).join("#".repeat(w)+`
`).replace(/#/g,_=>String.fromCharCode(33+Math.random()*94|0))

Crée l’échelle de #caractères, puis les remplace par un caractère ASCII aléatoire.

Test Snippet


String.fromCharCodeet Math.randomdans une solution - pourquoi JavaScript nous déteste?! Entré avec cela pour 137 octets, ce qui est très similaire au vôtre, juste sans le tableau. Je me demande maintenant si une solution récursive pourrait être encore plus courte; enquêtera plus tard.
Shaggy


2

JavaScript (ES6), 129 117 octets

Malheureusement, alors que j'étais en train de jouer au golf, Arnauld m'a battu pour une solution similaire mais plus courte . En combinant nos 2 solutions, cela peut être 113 octets

Inclut un retour à la ligne.

(w,h,n)=>(g=c=>l?(c++<w?c%w>1&&l%h?` `:String.fromCharCode(94*Math.random()+33|0):`
`)+g(c>w?!--l:c):``)(0,l=h*++n-1)

L'essayer

o.innerText=(f=
(w,h,n)=>(g=c=>l?(c++<w?c%w>1&&l%h?` `:String.fromCharCode(94*Math.random()+33|0):`
`)+g(c>w?!--l:c):``)(0,l=h*++n-1)
)(i.value=5,j.value=3,k.value=2);oninput=_=>o.innerText=f(+i.value,+j.value,+k.value)
label,input{font-family:sans-serif;font-size:14px;height:20px;line-height:20px;vertical-align:middle}input{margin:0 5px 0 0;padding:0 0 0 5px;width:100px;}
<label for=i>W: </label><input id=i min=3 type=number><label for=j>H: </label><input id=j min=2 type=number><label for=k>N: </label><input id=k min=2 type=number><pre id=o>



1

QBIC , 76 octets

[:*:+b-1|G=chr$(_r33,126|)~a%b\[:-2|G=G+@ `]][e|G=G+chr$(_r33,126|)]?_sG,1,e

Explication

[                       FOR a = 1 TO
 :                         input 1 (Height, now in var b)
  *                        times
   :                       input 2 (# of rungs, now in var c)
    +b-1|                  plus one bottom rung without crossbar
G=chr$(_r33,126|)       Assign to G a random char (_r is the RAND() function, chr$() is BASIC's num-to-char)
~a%b|                   IF we are not at a crossbar (the modulo returns anything but 0), 
  [:-2|G=G+@ `            add to G x spaces, where x is width (input 3, now 'e') - 2
                        Note that G is now either 'X' or 'X   '  (for rnd char X and W=5)
]]                      Close the spacing FOR, close the IF 
[e|                     FOR f = 1 to width
  G=G+chr$(_r33,126|)]     Append to G a rnd char
                        G is now either 'XXXXXX'  or 'X   XXXXX' (for rnd char X and W=5)
?_sG,1,e                PRINT the first w characters of G, and on to the next line

Échantillon échantillon

Command line: 3 2 5
N   F
M   `
Bj#=y
!   (
S   N
q(.Ho
%   7
g   ,

1

MATL , 63 50 octets

-13 octets grâce à Luis Mendo

Q*qXJ*6Y2HY)wT3$ZrJ3G3$eJ3G&Ol5LZ(J:HG\~3GTX"!+g*c

Essayez-le en ligne!

Je suis encore nouveau au golf en MATL (et je ne suis pas très bon chez MATLAB d'ailleurs), donc je sais que cela n’est probablement pas optimal. Les pourboires sont les bienvenus. Prend les entrées dans l'ordre N,H,W.

Et c'est parti:

Q*qXJ                     # compute H*(N+1)-1, store as J
     *                    # multiply by W
      6Y2HY)              # push printable ASCII
            wT3$Zr        # sample uniformly with replacement
                  J3G3$e  # reshape to make a matrix of the appropriate shape.

Nous avons maintenant une matrice de caractères aléatoires.

J3G                       # push J,W
   &O                     # zero matrix, J x W
     l5LZ(                # assign 1 to first and last columns

Maintenant, il y a aussi une matrice logique pour les rails.

J:                        # push J, range, so 1...J
  HG                      # take second input (H)
    \~                    # mod and bool negate (so it's 1 for rows of multiples of H)
      3GTX"!              # repmat and transpose so we have 1's for rungs

Maintenant nous avons 3 matrices sur la pile:

  • Top: 0 pour les autres, 1 sinon
  • Au milieu: 0 pour les chemins de fer, 1 sinon
  • En bas: caractères aléatoires, -20

Nous faisons donc ce qui suit:

+                         # add the top two matrices.
 g                        # convert to logical so 0->0, nonzero->1
   *                      # elementwise multiply
    c                     # convert to char, implicit output (0 -> space).

Voici quelques conseils: X"est 3$par défaut. 6Y2peut - être à portée de main au lieu de 13:106... 20+. ~~est g. J3G&Ol5LZ(peut être utilisé à la place de1F3G2-Y"h1hJT3$X"
Luis Mendo

@ LuisMendo Ah, je n'ai pas tout à fait traversé tous les docs ou j'aurais découvert ça à peu près X". Dans ce dernier conseil, 5Lest , [1 0]mais je ne sais pas comment cela est utilisé conjointement avec Z(- je reçois qu'il est l' affectation 1aux première et dernière colonnes , mais je ne comprends pas comment 5LZ(accomplit cela. Je vais probablement vous envoyer un message plus tard dans MATL CHATL à ce sujet, alors ne vous inquiétez pas pour le moment.
Giuseppe

1
L'indexation est modulaire, donc 0identique à "fin". Z(assigne aux colonnes. Bien sûr, n'hésitez pas à me cingler!
Luis Mendo

1

Powershell, 102 octets

param($w,$h,$n)1..(++$n*$h-1)|%{$l=$_%$h
-join(1..$w|%{[char](32,(33..126|Random))[!$l-or$_-in1,$w]})}

Script de test moins joué:

$f = {

param($w,$h,$n)
1..(++$n*$h-1)|%{       # for each lines of the ladder
    $l=$_%$h            # line number in a step
    -join(1..$w|%{      # make a line
        [char](32,(33..126|Random))[!$l-or$_-in1,$w]
    })                  # a random character if the line number in a step is a rung line or char position is 1 or width
                        # otherwise a space
}

}

&$f 5 3 2
&$f 3 2 2
&$f 12 4 5
&$f 20 5 3

Sortie:

0   {
H   S
']UxR
G   ]
3   t
q^R8O
q   y
t   J
U h
YQZ
_ i
3#D
I #
=          m
&          <
]          6
8nmuyw2'Y7%+
o          l
;          !
D          M
Fn[zGfT";RYt
@          B
$          e
z          @
@J[1|:-IS~y<
(          L
:          [
|          q
zBow0T0FnY8)
/          *
e          B
R          p
9{d2(RacBdRj
u          ~
`          l
J          h
v                  t
T                  -
v                  H
'                  Y
IS7{bx2&k@u7]o}>[Vq?
F                  U
?                  U
|                  Q
}                  T
:wv1wEfc6cS;430sigF|
<                  L
:                  }
*                  `
H                  =
L8k5Q/DQ=0XIUujK|c6|
j                  =
!                  p
V                  :
#                  w

1

Ruby , 71 octets

EDIT: Oups, je pensais que c'était un nouveau défi à cause de la récente modification pour corriger une faute de frappe. Je laisse encore ça parce qu'il n'y a pas encore de réponse pour Ruby.

->w,h,n{(1..h*-~n-1).map{|i|[*?!..?~].sample(x=i%h>0?2:w)*(' '*(w-x))}}

Essayez-le en ligne!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.