Хаос - драбина ASCII


43

Ви нічого не знаєте. Те, що я роблю для " Хаосу - це сходи ", - пам'ятна лінія із телесеріалу " Гра престолів" .

Мета цього виклику - побудувати сходи з хаосу, в мистецтві ASCII.

Змагання

Вхідні дані

  • Ширина сходів, W >= 3(ціле число)
  • Висота кроку, H >= 2(ціле число)
  • Кількість зубців, N >= 2(ціле число).

Вихідні дані

Драбина з горизонтальними перекладинами і вертикальними поручнями , усі на 1 символа. Ширина драбини ( W) включає дві рейки, а висота кроку ( H) включає відповідний переступ.

Усі стулки, включаючи верхній і нижній, мають шматок вертикальної рейки довжиною H-1безпосередньо над і знизу. Приклад зробить це зрозумілішим.

Сходи виготовлятимуться з друкованих символів ASCII , що не мають пробілу , тобто діапазону включення від !(кодова точка 33) до ~(кодова точка 126). Фактичні символи будуть вибрані випадковим чином . З огляду на входи, кожен з випадкових варіантів символів повинен мати ненульову ймовірність. Крім цього, розподіл ймовірностей є довільним.

Допускається провідна або задні пробіли , горизонтальні або вертикальні.

Приклад

Враховуючи W=5, H=3, N=2, один можливий вихід такий.

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

Зверніть увагу, що загальна висота є H*(N+1)-1, оскільки є Nстулки та N+1вертикальні секції.

Додаткові правила

  • Засоби введення та формат гнучкі, як завжди. Наприклад, ви можете ввести три числа в будь-якому порядку або масив, що їх містить.

  • Вихід може бути через STDOUT або аргумент, повернутий функцією. У цьому випадку це може бути рядок з новими рядками, двовимірний масив символів або масив рядків.

  • Можна надати програму або функцію .

  • Стандартні лазівки заборонені.

  • Виграє найкоротший код у байтах.

Тестові справи

Для кожного W, H, Nпоказано можливий вихід.

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    

Ви можете додати діапазон (числовий) для символів ascii?
Прут

@Rod Хороша ідея. Готово
Луїс Мендо

1
Яка нижня межа якості випадковості? Я припускаю, що початок у випадковій точці та збільшення модуля (126-33) не кваліфікується через очевидну кореляцію між суміжними значеннями. Або воно повинно бути здатним виробляти всі можливі послідовності? (Отже, 8-бітний лінійний конгрурентний генератор не працюватиме, оскільки один символ однозначно визначає наступного символу?)
Пітер Кордес,

@PeterCordes Там немає ніяких проблем з наявністю деякої кореляції, до тих пір , як може статися всі можливі комбінації. Як ви говорите, підхід, який ви описуєте, недійсний, оскільки він вводить занадто сильну статистичну залежність між персонажами на різних позиціях, що робить деякі комбінації неможливими
Луїс Мендо

1
@PeterCordes Так, я мав на увазі теоретично. Не турбуйтеся про міцність СПГ; можна припустити, що RNG є ідеальним. Існує деякий мета консенсус щодо цього. Я подумав, що є щось більш конкретне, але все, що я міг знайти, це це і це
Луїс Мендо

Відповіді:


6

Желе ,  24 23  22 байт

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

Повна програма приймає три аргументи W, H, Nі друк результату.

Спробуйте в Інтернеті!

Як?

Створює маску двовимірного масиву з одного стовбура та його вертикальні ділянки внизу, повторює їх N+1разів і видаляє верхній перебір, а потім розміщує випадкові символи або пробіли залежно від значення маски.

«þỊ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

Операція Мова сценарію Flashpoint , 643 624 байт

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}

Смішно довго, тому що немає ніяких способів створити символи з кодів символів.

Телефонуйте за допомогою:

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

Вихід:

Сходи надзвичайно хаотичні, тому що шрифт не є однобічним.

Розгорнуто:

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
}

Здається, "\n"працює, "\xa3"аби щось подібне £не працювало? якщо ви можете використовувати уникнення unicode, можливо, ви зможете обрізати свій масив.
Цхаллачка

Як я можу сам це запустити? : D
Geeky I

22
Це виглядає так, що сценарій був написаний, а пробіли та нові рядки були видалені. Це тільки отримання грошей через зображення сходів або я пропустив трохи розумного гольфу?
Джонатан Аллан

@steadybox Ви використовуєте контекстні скріншоти зараз після того, як я попросив скріншот, який не є травою, для цього питання xD?
Чарівна восьминога урна

@Tschallacka \n- єдина втеча, яку визнають. (І ""внутрішні цитати, щоб представити одну ")
Steadybox

14

05AB1E , 29 байт

Введення, взяте в порядку N, H, W

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

Спробуйте в Інтернеті!

Пояснення

>*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

Це трохи обман.
vdegenne

4
@ user544262772 чому так?
Джонатан Аллан

ви можете трохи пояснити це?
Міша

@MischaBehrend: Звичайно, зараз я додав пояснення.
Емінья

3
@ user544262772 скласти відповідь на гольф на мові гольфу може бути досить складно, повірте, вони призначені для гри в гольф, але для їх використання зазвичай потрібна певна думка (якщо тільки це не "ось вбудований, який робить саме те, що ви хочете" ").
Джонатан Аллан

13

C, 95 байт

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 байт

-13 байт завдяки Нілу Фульцу!

-1 байт завдяки Робіну Райдеру

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}

Спробуйте в Інтернеті!

Анонімна функція; повертає результат у вигляді матриці.

Завдяки цьому питанню Word Grids , я думав про матриці набагато більше, ніж зазвичай. Я зауважив, що переклади знаходяться в тих рядках матриць, які кратні висоті кроку H(R - 1-індексований), і що рейки - це перший і останній стовпці, 1і W. Тому я створюю матрицю випадкових символів ASCII і замінюю ті літери, які не відповідали цим критеріям пробілами, і повертаю матрицю. TIO-посилання добре роздруковує його.

Ніл Фульц запропонував іншу індексацію символів пробілу [-H*(1:N),3:W-1], яка замінює всі символи, за винятком рядків, кратних H: -H*(1:N)і не на краю, 3:W-1<==> 2:(W-1).

R , 121 байт

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")}

Спробуйте в Інтернеті!

Удосконалення в порівнянні з оригінальним підходом до матриці, з якого я почав; це той самий алгоритм, але forпетлі коротші, ніж створення та друк матриці (але не, якщо я не друкую її!)


m[-H*(1:N),3:W-1]=" "здається трохи коротше - ви завжди можете замінити тестування rowта col2-денний фрагмент.
Ніл Фульц

@NealFultz ух, це зовсім чудово! Дякую!
Джузеппе

-1 байт, замінивши sample(33:126,...)на 32+sample(94,...).
Робін Райдер


6

Вугілля деревне , 34 32 байт

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

Спробуйте в Інтернеті! Здійснює введення в порядку N, H, W. Довершене наближення ( Plus(InputNumber(), 1)зараз порушено на TIO). Пояснення:

E…¹×⁺¹NN

Карта за діапазоном 1..H*(N+1). Це означає, що зубці з’являються, коли iкратна H.

Приєднуйтесь до результату:

EIζ

відображення за неявним діапазоном 0..W:

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

якщо стовпець НЕ 0або W-1й рядок не є кратним Hпотім виведення простору;

§⮌γ‽⁹⁴

в іншому випадку візьміть заздалегідь задану змінну символів ASCII, поверніть її назад (поставивши пробіл на 94-е місце) та надрукуйте випадковий символ із того, що зараз є першим 94. (Тому що це Sliceвідстійно).

ω

Приєднуйтесь, використовуючи порожній рядок. Кінцевий результат друкується неявно.


Не впевнений, чи це корисно, але ви могли б намалювати сходи, а потім заглянути і скласти карту по випадковому друку? РЕДАКТИВ Здається, зламано. На жаль
Лише ASCII

Я спробую виправити це (досить впевнений, що він працював раніше), але я трохи зайнявся, тому це може зайняти деякий час
лише ASCII

@ ASCII-тільки я припускаю, що ти думаєш NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«? Добре, що я розрізав і a0a6316порушив її.
Ніл

@ ASCII-Тільки насправді це не зовсім вірно, там була непов’язана помилка, Mapде вона використовувалася, not is_commandколи це означало is_command. Тож ви повинні були написати, NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴якби не ця помилка.
Ніл


6

Perl 6 , 76 73 байт

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

Спробуйте в Інтернеті!

Приймає (h, n, w) як аргументи. Повертає список рядків.

Пояснення:

-> \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
}

Альтернативний 73 byter використання xxі ++$замість map. Можливо, ви можете знайти місце для гольфу з будь-яких байтів?
Джо Кінг

5

PowerShell , 132 124 байт

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

Спробуйте в Інтернеті!

Ми побудуємо сходи, складені лише #спочатку ( приклад ), потім проведіть цикл |%{...}через кожен символ і ifце -eqнереально 35, ми витягнемо нового Randomсимволу з відповідного діапазону. В іншому випадку ми виводимо (тобто, пробіл або новий рядок).


5

JavaScript (ES6), 117 115 байт

Рекурсивна функція, що будує вихідний символ за символом.

"Дивись, ма, ніякої буквальної стрічки!"

(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)

Демо


Блін! Коли я бачив це, я був у процесі гольфу вниз. : \ Ви знову виграєте! : p
Shaggy

Я закінчив майданчик для гри в гольф (поки що) - я намалював лінію при переміщенні всіх територій всередині String.fromCharCode, тому що я не міг чесно сказати, що придумав це сам, побачивши це. Дайте мені знати, якщо ви вважаєте, що моє зараз занадто схоже на ваше.
Кудлатий

@Shaggy Не хвилюйтесь! (Насправді я бачив вашу відповідь лише після публікації моєї. Якби я бачив її раніше, я, мабуть, відмовився б.)
Арнольд

1
Ах, це природа гри! :) Об'єднання наших рішень дає 113 байт , до речі
Shaggy

5

Python 2 , 142 байти

lambda w,h,n,e=lambda:chr(randint(33,126)):[e()+[eval(("e()+"*(w-2))[:-1])," "*(w-2)][-~i%h>0]+e()for i in range(h*-~n-1)]
from random import*

Спробуйте в Інтернеті!

Збережені байти завдяки ovs!


@LuisMendo Я думаю, що зараз це виправили.
Містер Xcoder

@LuisMendo Я винен, що не ретельно перевіряв.
Містер Xcoder


@ovs Дякую! Ви забули 1спереду, хоча> _>
Містер Xcoder



3

SOGL V0.12 , 32 31 байт

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

Спробуйте тут!

Введення в порядку N, W, H.

Пояснення:

 ~Δ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 байт без випадкових символів: /


3

Java 8, 203 188 168 133 132 130 128 126 байт

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);}

Спробуйте в Інтернеті!


133 байт: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);}}
Невай

Ви зараз друкуєте результат для W-1, внутрішній цикл повинен зробити додаткову ітерацію ( >=0+1 байт).
Невай

1
132 байти: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);}}
Невай

2
;++i<H*N+H;: -2 байти.
Олів'є Грегоар

3

Haskell , 226 220 211 190 байт

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}

Спробуйте в Інтернеті!

Збережено 9 байт завдяки Лайконі

Збережено 21 байт завдяки wchargin

Повинно бути гофрованим ( b$(s w)<$[2..h]і b$((s w)<$[2..h])++[r w]). Мені не комфортно з IO та гольфом.


Ви можете використовувати інфіксне позначення t w h n= ...: (w#h)n= .... pureможна використовувати замість return. Ви можете опустити круглі дужки навколо (d ' ')<$та (s w)<$.
Лайконі

@Laikoni Я не забуду наступного разу позначення інфіксації! Дякую.
jferard

1
Збережіть купу байтів за допомогою c=randomRIO('!','~'), що також дозволяє вам вбудовувати рядки d=return. Крім того, mapM idна один байт коротший, ніж sequence.
wchargin

1
@wchargin Дякую Я щось сьогодні дізнався!
jferard

2

JavaScript (ES6), 144 байти

(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))

Створює сходи з #символів, а потім замінює кожного випадковим символом ASCII.

Тест-фрагмент


String.fromCharCodeі Math.randomв одному рішенні - чому нас ненавидить JavaScript ?! Придумали це на 137 байт, що дуже схоже на ваше, лише без масиву. Мені зараз цікаво, чи може рекурсивне рішення ще коротше; буде досліджено пізніше.
Кудлатий


2

JavaScript (ES6), 129 117 байт

На жаль, поки я в процесі гри в гольф, Арнольд побив мене до подібного, але коротшого рішення . Поєднавши наші 2 рішення, це може бути 113 байт

Включає зворотний новий рядок.

(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)

Спробуй це

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 байт

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

Пояснення

[                       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

Вибірка зразка

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

1

MATL , 63 50 байт

-13 байт завдяки Луїсу Мендо

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

Спробуйте в Інтернеті!

Я все ще новачок у гольфі в MATL (і в цьому питанні я не надто хороший в MATLAB), тому знаю, що це, мабуть, не близьке до оптимального. Поради вітаються. Вводить порядок N,H,W.

Ось і ми:

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.

Тепер у нас є матриця випадкових символів.

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

Тепер також є логічна матриця для рейок.

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

Тепер у нас на стеці є 3 матриці:

  • Вгорі: 0 для неприступних, 1 - інакше
  • Середній: 0 для не рейкових, 1 в іншому випадку
  • Знизу: випадкові символи, -20

Тому ми робимо наступне:

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

Ось кілька простих порад: X"це 3$за замовчуванням. 6Y2може бути зручно , а не 13:106... 20+. ~~є g. J3G&Ol5LZ(можна використовувати замість1F3G2-Y"h1hJT3$X"
Луїс Мендо

@LuisMendo Ах, я не зовсім пробрався через усі документи, або я би виявив це про X". В останній підказці 5Lє, [1 0]але я не впевнений, як це використовується в поєднанні з Z(- я розумію, що він призначається 1до першого та останнього стовпців, але я не розумію, як це 5LZ(досягти. Я, мабуть, пізніше вас в MATL CHATL десь пізніше з цього приводу, тому зараз не турбуйтеся про це.
Джузеппе

1
Індексація є модульною, так 0само як "кінець". Z(призначає стовпцям. Звичайно, не соромтеся пінг мене в чаті!
Луїс Мендо

1

Powershell, 102 байти

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

Менш тестовий сценарій для гольфу:

$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

Вихід:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.