По мне, торнадо выглядит так:
########
#######
######
#####
####
###
##
#
Этот торнадо начинается с ширины n
, и в каждой следующей строке символ удаляется слева или справа, в зависимости от ввода.
вход
Входными данными будут список каких-либо двух уникальных значений (работает также строка из двух уникальных символов) и необязательное положительное целое число, указывающее начальную ширину. Если необязательное целое число не взято, то начальная ширина на 1 больше длины списка. Пусть начальная ширина будет n
.
Как сделать торнадо
В моем примере я выбираю свой список, содержащий 1
s и 0
s, хотя вы можете выбрать любые два различных константных значения или строку из любых двух различных константных символов.
Первая строка будет состоять из n
непробельных символов (вы можете выбрать любой непротиворечивый символ; я выберу #
для своего примера).
Затем для каждого номера в списке, если номер есть 0
, удалите левый символ и создайте новую строку; если это 1
, удалите правильный символ и создайте новую строку.
Таким образом, вышеуказанный торнадо является выходом для 8, [1, 0, 0, 0, 1, 0, 0]
.
Выход
Выходными данными могут быть список строк, список списков символов или многострочная строка. Конечный пробел в каждой строке разрешен, а завершающий символ новой строки в конце разрешен.
Тестовые случаи
Эти тесты включают начальную ширину и списки использования 1, 0
.
5, [1,0,0,1]
#####
####
###
##
#
10, [1,0,0,1,0,1,0,0,1]
##########
#########
########
#######
######
#####
####
###
##
#
7, [1,1,1,1,1,1]
#######
######
#####
####
###
##
#
100,
[1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1]
правила
- Применяются стандартные лазейки
- Самый короткий код в байтах побеждает! Код-гольф
- Фон не должен быть пробелом (я забыл указать это ранее).
- Ваш язык должен поддерживать только те числа (ширины), которые он может обработать, но если ваш переводчик был переписан с большим размером, он должен работать теоретически.
Ответы:
V ,
15, 12 байтовПопробуйте онлайн!
l
справа (имеет смысл, не так ли?) и>
слева.источник
Python 2 ,
6659 байт-7 байт благодаря Арнольду Палмеру
Попробуйте онлайн!
0
убрать справа,1
убрать слеваисточник
len(z)+1
сx
если «необязательным положительным целым числом» означает , что вы не должны использовать его. Формулировка вопроса звучит так, как будто это разрешено, поскольку в нем говорится «Если необязательное целое число не взято», а не «Если необязательное целое число не задано».vim,
8582 байта<ESC>
является 0x1B,<CR>
это0x0D
,<C-v>
является 0x16. И<ESC>OH
является многобайтовой последовательностью, представляющей ключ HOME.Входные данные используют
a
в качестве значения «удалить влево» иb
в качестве значения «удалить влево».Нет ссылки TIO, к сожалению. Я не смог заставить его работать под V. Test, скопировав код в tornado.vim (заменив
<ESC>
и т. Д. Их действительными байтами) и выполнив следующее:-3 байта по предложению Нейла.
источник
^
вместо␛OH
?^
переходит к первому непустому символу.␛OH
переходит к первому персонажу0
, не так ли ...05AB1E ,
119 байтов-2 байта благодаря Эрику Аутгольферу
Удалить слева:
1
Удалить справа:
0
Попробуйте онлайн!
источник
0×ηsηO
имеет такой большой потенциал, но я не могу понять это до 11 байтов.ðy×ì
сyú
на -2.Сетчатка ,
3028 байтПопробуйте онлайн! Принимает только строку из 0 и 1 и вычисляет ширину на основе строки. Объяснение: Первый этап берет входную строку и дублирует ее один раз для каждой граничной точки, вставляя
#
в этой точке. Затем второй этап меняет все цифры после#
более на#
s, создавая треугольник. Затем третий набор удаляет все оставшиеся и заменяет нули на пробелы, что приводит к «колебанию» торндао.источник
J, 32 байта
ungolfed
Попробуйте онлайн!
источник
' #'#~0(,.#\.)@,+/\
, где входной сигнал инвертируется из выборки, поскольку запрос позволяет выбрать два различных значения.Perl, 43 байта
Код 42 байта + 1 для
-l
.Попробуйте онлайн!
источник
R ,
8582 байт3 байта сохранены благодаря Джузеппе
Попробуйте онлайн!
Объяснение:
источник
{}
и использовал буквальный'\n'
Haskell, 50 байтов
Попробуйте онлайн!
Если входной список может быть списком имен функций, мы можем сохранить байт
Haskell, 49 байтов
Пример использования:
h 5 [g,f,f,g]
.Попробуйте онлайн!
Как это работает:
источник
Python 2,
5857 байтредактирование: сохранено 1 байт благодаря xnor
Попробуйте онлайн!
1 удалить слева, 0 удалить справа.
источник
s=" "*i+s[:-1]
с левой и правой поменять местами.R ,
116109102 байт-5 байт благодаря пользователю 2390246 (и еще 2 я спас сам)
Outgolfed пользователем 2390246
Попробуйте онлайн!
Возвращает анонимную функцию, которая принимает
n
и векторl
с0
для удаления слева и1
для удаления справа, и выводит результат на консоль с правильным форматированием.источник
#
s будет n-i + 1: попробуйте онлайн! Хотя есть немного лучший подход, если вы просто печатаете построчно, а не строитеJapt ,
1413 байт-1 байт благодаря @ETH
Вход - это массив, затем размер. Значения массива - это
""
или" "
, которые представляют удаление справа или слева соответственно. Использует"
вместо#
и возвращает как массив строк.Идея здесь состояла в том, чтобы сначала создать массив левого отступа для каждой строки, отсюда и входные строки. Затем каждая строка
"
добавляет s, используя тот факт, что количество"
s уменьшается на 1 каждый раз.Попробуйте онлайн!
Все они используют
-R
флаг для форматирования вывода, соединяя его с символами новой строки.объяснение
Неявный:
U
= входной массив,V
= входной номер.Кумулятивно уменьшите входной массив (
å
) с помощью конкатенации строк (+
). Это приводит к массиву каждого промежуточного значения сокращения. Затем prepend (u
) пустая строка (P
) к массиву.Сопоставьте
£
каждое значение с собой (X
), объединенным с ...Символ кавычки (
Q
) повторяется (p
)V--
(V´
) раз. Это также уменьшаетсяV
каждый раз.источник
YnV
наV´
++
или--
в Japt.ArnoldC , 3132 байта
ArnoldC не имеет конкатенации строк, поэтому он создает торнадо из
8
s и использует1
s для его разметки. ArnoldC также поддерживает только до 16-битных целых чисел, поэтому он переполняется при вводе длиннее 7 цифр. (Так что он будет делать только мини-торнадо)1
слева, любая другая цифра справа (хотя я бы не советовал0
, так как вы не можете начать с этого.)Входные данные:
1221122
Выход:
Гольф-код:
Попробуйте онлайн!
Код Ungolfed (5178 байт):
источник
Haskell ,
6764 байтаВходные данные перевернуты:
0
означает удалить правую и1
удалить левую:Попробуйте онлайн!
"Ungolfed"
источник
Java (OpenJDK 8) ,
138133 байтаПопробуйте онлайн!
источник
C
6863 байтаЭто использует динамическую спецификацию ширины поля в
printf()
строке формата. Функция вызывается так:источник
int s=0;
и поместивs;
передf(w,i)
.JavaScript (ES6), 64 байта
Анонимная функция, принимающая параметры в синтаксисе карри (a) (b). В массиве b пустая строка представляет удаление справа, а пробел представляет удаление слева.
Используя 1 и 0, как в примерах, оценка 70
Тест
источник
PowerShell , 53 байта
Попробуйте онлайн!
Принимает input
$a
как необязательное целое число, а также$b
как массив1
и0
s. (Обратите внимание, что мой массив1
и0
триггер от вызова.) Создает начальную строку#
и оставляет ее на конвейере. Затем переходит от0
к$a
. На каждой итерации мы выводим возможно увеличенное количество пробелов, за которым следует предварительно уменьшенное число#
. Да, в конце вы получите пустой завершающий символ новой строки, так как мы$a
количества элементов в списке.Все отдельные строки остаются в конвейере, и вывод с разделителем новой строки между ними подразумевается при завершении программы.
источник
C #, 181 байт
Попробуйте онлайн!
Полная / Отформатированная версия:
источник
Древесный уголь , 17 байт
Попробуйте онлайн! Ссылка на ближайшую подробную версию кода. Объяснение:
Первый вход дает количество итераций цикла.
Поскольку индексы цикла по умолчанию имеют нулевое индексирование, мы добавляем один здесь, чтобы получить правильное число
#
s.Начиная с нижней части торнадо и работая вверх, вы экономите байт, но затем нам нужно повернуть второй вход, чтобы мы могли индексировать текущую цифру.
Если текущая цифра a
1
, двигайтесь вверх. Это делает предыдущий ряд лишним#
в конце.Если текущая цифра a
0
, двигайтесь вверх и влево. Это делает предыдущий ряд лишним#
в начале.источник
C # , 159 байт
объяснение
Попробуйте онлайн!
источник
PHP, 136 байт
Сохраните в php-файле и протестируйте с
php file.php 8 '1,0,0,0,1,0,0'
. Выход:Увы, подготовка ввода - это половина работы.
Другая версия (158 байт), использующая
str_repeat
вместоprintf
и ...goto
всех вещей:источник