Хаос - драбина 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.