Вы ничего не знаете То, что я делаю для « Хаоса - это лестница » - это запоминающаяся строка из телесериала « Игра престолов» .
Цель этой задачи - построить лестницу из хаоса в искусстве 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
Ответы:
Желе ,
24 2322 байтаПолная программа принимает три аргумента
W
,H
,N
и печать результата.Попробуйте онлайн!
Как?
Создает 2-мерную маску массива для одной ступени и ее вертикальных секций ниже, повторяет ее
N+1
раз и удаляет верхнюю ступеньку, а затем помещает случайные символы или пробелы в зависимости от значения маски.источник
Язык сценариев работы Flashpoint ,
643624 байтаСмешно долго, потому что нет возможности создавать символы из кодов символов.
Звоните с:
Выход:
Лестница очень хаотична, потому что шрифт не моноширинный.
раскатали:
источник
"\n"
работает,"\xa3"
получить что-то вроде£
не работает? если вы можете использовать экранирование Юникода, вы можете обрезать свой массив.\n
- единственный побег, который признан. (И""
внутри кавычек, чтобы представить один"
)05AB1E , 29 байт
Ввод взят в порядке
N, H, W
Попробуйте онлайн!
объяснение
источник
C, 95 байтов
источник
R ,
1381291119893 байт-13 байтов благодаря Нилу Фульцу!
-1 байт благодаря Робину Райдеру
Попробуйте онлайн!
Анонимная функция; возвращает результат в виде матрицы.
Благодаря этому вопросу 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 байт
Попробуйте онлайн!
Улучшение по сравнению с оригинальным матричным подходом, с которого я начал; это тот же алгоритм, но
for
циклы короче, чем построение и печать матрицы (но не если я ее не распечатаю!)источник
m[-H*(1:N),3:W-1]=" "
кажется немного короче - вы всегда можете заменить тестированиеrow
иcol
2-й срез.sample(33:126,...)
на32+sample(94,...)
.Perl 5 , 81 байт
80 байт код + 1 для
-p
.Попробуйте онлайн!
источник
Древесный уголь ,
3432 байтаПопробуйте онлайн! Принимает входные данные в порядке N, H, W. Подробное приближение (
Plus(InputNumber(), 1)
в настоящее время нарушено на TIO). Объяснение:Карта в диапазоне
1..H*(N+1)
. Это означает, что цепочки появляются, когдаi
кратноH
.Присоединяйтесь к результату:
отображение по неявному диапазону
0..W
:если столбец не равен
0
или,W-1
а строка не кратна,H
выведите пробел;в противном случае возьмите предопределенную символьную переменную ASCII, переверните ее (поместив пробел на 94-е место) и напечатайте случайный символ из того, что сейчас является первым 94-м. (потому что
Slice
отстой.)Присоединяйтесь, используя пустую строку. Конечный результат неявно печатается.
источник
NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«
? Ну, я разделил пополам иa0a6316
сломал его.Map
где он использовался,not is_command
когда имел в видуis_command
. Таким образом, вы должны были написать,NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴
если бы не эта ошибка.C (gcc) ,
141131114109107 байтДолжен быть в состоянии сыграть в гольф немного вниз ...
Попробуйте онлайн!
источник
i=1
в глобальной декларации?Perl 6 ,
7673 байтаПопробуйте онлайн!
Принимает (h, n, w) в качестве аргументов. Возвращает список строк.
Объяснение:
источник
xx
и++$
вместоmap
. Может быть, вы можете найти место для игры в гольф от байтов?PowerShell ,
132124 байтаПопробуйте онлайн!
Мы строим лестницу, состоящую только из
#
первого ( пример ), затем|%{...}
перебираем каждый символ, иif
,-eq
конечно же35
, мы вытаскиваем новогоRandom
персонажа из соответствующего диапазона. В противном случае мы выводим (то есть, пробел или перевод строки).источник
JavaScript (ES6),
117115 байтРекурсивная функция, строящая вывод за символом.
"Смотри, мама, без буквального перевода строки!"
демонстрация
Показать фрагмент кода
источник
String.fromCharCode
, поскольку я не мог честно сказать, что сам придумал это, увидев это. Дайте мне знать, если вы чувствуете, что мое сейчас слишком похоже на ваше.Python 2 , 142 байта
Попробуйте онлайн!
Сохраненные байты благодаря ovs!
источник
1
Pyth, 33 байта
Попробуйте онлайн: демонстрация
источник
Python 2 , 114 байт
Попробуйте онлайн!
источник
SOGL V0.12 ,
3231 байтПопробуй здесь!
Ввод в порядке N, W, H.
Объяснение:
18 байт без случайных символов: /
источник
Ява 8,
203188168133132130128126 байтПопробуйте онлайн!
источник
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 байт).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);}}
;++i<H*N+H;
: -2 байта.Haskell ,
226220211190 байтПопробуйте онлайн!
Сохранено 9 байтов благодаря Laikoni
Сохранено 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)<$
.c=randomRIO('!','~')
, что также позволяет вам встроитьd=return
. Кроме того,mapM id
на один байт корочеsequence
.JavaScript (ES6), 144 байта
Создает лестницу из
#
символов, а затем заменяет каждого случайным символом ASCII.Тестовый фрагмент
Показать фрагмент кода
источник
String.fromCharCode
иMath.random
в одном решении - почему JavaScript ненавидит нас ?! Придумал это для 137 байтов, что очень похоже на ваше, только без массива. Интересно, может ли рекурсивное решение быть еще короче? буду расследовать позже.JavaScript (ES6),
129117 байтК сожалению, пока я занимался игрой в гольф, Арно выбил мне подобное, но более короткое решение . Объединив наши 2 решения, это может быть 113 байтов
Включает завершающий перевод строки.
Попытайся
источник
Japt
-R
,42414037342825 байтВводит заказ в порядке
H,W,N
.Попытайся
источник
QBIC , 76 байт
объяснение
Пробный прогон
источник
MATL ,
6350 байт-13 байт благодаря Луису Мендо
Попробуйте онлайн!
Я все еще новичок в гольфе в MATL (и я не очень хорош в MATLAB в этом отношении), поэтому я знаю, что это, вероятно, не близко к оптимальному. Советы приветствуются. Принимает ввод в порядке
N,H,W
.Вот так:
Теперь у нас есть матрица случайного символа.
Теперь есть и логическая матрица для рельсов.
Теперь у нас в стеке 3 матрицы:
Итак, мы делаем следующее:
источник
X"
это3$
по умолчанию.6Y2
может быть удобно , а не13:106
...20+
.~~
естьg
.J3G&Ol5LZ(
можно использовать вместо1F3G2-Y"h1hJT3$X"
X"
. В последнем совете5L
есть,[1 0]
но я не уверен, как это используется в сочетании сZ(
- я понимаю, что он присваивается1
первому и последнему столбцам, но я не понимаю, как этого5LZ(
добиться. Я, вероятно, позже напишу вам об этом в MATL CHATL, так что пока не беспокойтесь об этом.0
же как и «конец».Z(
присваивает столбцам. Конечно, не стесняйтесь пинговать меня в чате!Powershell, 102 байта
Менее гольф тестовый скрипт:
Выход:
источник
Рубин , 71 байт
РЕДАКТИРОВАТЬ: Ой, я думал, что это была новая проблема из-за недавнего редактирования, чтобы исправить опечатку. Я все еще оставляю это, хотя, потому что нет никакого ответа Руби для этого еще.
Попробуйте онлайн!
источник