Все на борту поезда ASCII!
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___
o | C | | O | | D | | E | | | | G | | O | | L | | F |
TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___|
{======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
Лучше быть готовым ехать на поезде, потому что вы собираетесь построить поезд, на котором будете ездить. Учитывая строку s
, выведите полностью сформированный поезд, как показано выше. Первым выходным сигналом всегда является механизм, который будет тянуть вашу строку, как показано ниже:
o O O
o
TS__[O]
{======|
./o--000'
За локомотивом стоят вагоны, в которых каждый персонаж вашего драгоценного груза. Чтобы избежать путаницы при разгрузке, ваша компания поручила вам маркировать эти автомобили снаружи. Рассматриваемые автомобили всегда будут выглядеть так:
___
| # |
|___|
_|"""""|
"`-0-0-'
Где #
это представитель персонажа, который находится внутри "грузового" трюма. Привязка двигателя к каждому автомобилю также является частью вашей работы, поскольку вам поручено следить за плавностью и успехом всей этой перевозки. Итак, как только вы маркировали все вагоны и включили двигатель на рельсах, вы должны убедиться, что поезд собран и готов к работе.
правила
- Единственный вход, который должна принять ваша программа - это одна строка.
- Двигатель должен всегда работать, даже если ваш груз пуст.
- Каждая машина может содержать только одного персонажа, не испытывайте удачу, вы можете повредить товары.
- Вам нужно только поддерживать следующие печатаемые символы ASCII:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
если вы в конечном итоге делаете больше, это тоже хорошо, но это минимум. - Допустимо использовать 1-2 пробела, как и новую пробелку.
- Это код-гольф ascii-art , выигрывает самый короткий счетчик байтов.
Ответы:
05AB1E ,
10199 байтНаивная первая попытка.
Попробуйте онлайн!
источник
JavaScript (ES6),
149144 байтаЯ не думаю, что сам двигатель может быть сжат, но, возможно, это возможно.
Тестовый фрагмент
Показать фрагмент кода
источник
Befunge,
276270 байтПопробуйте онлайн!
объяснение
Автомобиль и двигатель кодируются в виде двух наборов из пяти строк в строках с 3 по 12. Значения символов отключены на 1, чтобы избежать необходимости иметь дело с двойными кавычками, которые нельзя использовать в строке Befunge.
Код работает, собирая полный набор символов, необходимых для рендеринга поезда в стеке. Для каждой строки вывода соответствующая строка автомобиля сначала добавляется в стек, повторяется столько раз, сколько необходимо для груза, а затем одна копия соответствующей строки двигателя.
После того как каждая строка построена, пара стрелок вниз слева от строк заменяется стрелкой вправо, поэтому следующая итерация цикла следует по другому пути в коде, используя другую пару строк для автомобиля и двигатель.
Как только все данные собраны в стеке, существует последний цикл рендеринга, который выписывает символы, каждый раз вычитая 1, чтобы учесть начальную кодировку.
В качестве бонуса источник выполнен в форме орудийной башни на случай, если поезд подвергнется атаке.Игроки в гольф уничтожили мою пушку.источник
PHP,
218 211 204 187183 байтаПринимает участие от STDIN; беги с
-nR
.Сжатие двигателя или вагона потребует больше кода для распаковки, чем экономит на хранении.
Я не вижу больше потенциала здесь.
источник
a&$c=$argn
вместо""<$c=$argv[1]
Python 2, 176 байт
Пример:
дает
источник
Powershell,
167166 байтПример:
Возможно, неверно! Если запустить без аргументов, он попытается вывести одну пустую строку и выглядеть так:
Если запустить с пустой входной строкой, он вернется правильно:
(вроде) Унгольфед:
Самое короткое сжатие в Powershell будет
+'c'*x
там, где c - это символ, а x - это количество повторений, и это только для конечных или ведущих повторений, любые повторения в центральной строке потребуют дополнительного+
и дополнительного"
- поэтому нет смысла в этом, где Я вижу, как сжатие экономит любое пространство, и единственный повторный набор символов -___
это всего 3 символа.Объяснение:
$l=($a=$args[0]).Length
Возьмите первый аргумент, поместите его в $ a, затем возьмите длину $ a и поместите в $ l, это единственные переменные, которые вам нужны." o O O"+" ___ "*$l
большинство других битов следуют этому формату левой части, а затем правой части умножается на количество требуемых символов." o "+([char[]]$a|%{" | $_ |"})
loop (|%{}
) через $ a как массив символов, так чтоforeach (char $_ in $a)
для неконвейерной версии, затем поместите символ в текст.это чрезвычайно простой подход, но поскольку я не могу найти хороший способ сжать строки после этого, он кажется наиболее полезным.
спас 1 байт благодаря бриантисту! и здесь я думал, что это не станет немного короче ..
источник
[char[]]$a
на$a[0..$l]
:)$l
и совершенно забыл об этом. Спасибо за это!Java, 361 байт
пример
источник
interface C{static void main(String[]v){String n="\n",b=" o O O ",c=" o ",d=" TS__[O] ",e=" {======|",f="./o--000'";for(String x:new java.util.Scanner(System.in).nextLine().split("")){b+="___ ";c+="| "+x+" | ";d+="|___| ";e+="_|\"\"\"\"\"|";f+="\"`-0-0-'";}System.out.print(b+n+c+n+d+n+e+n+f);}}
( 318 байт ) , или даже больше , если вы заменитеnew java.util.Scanner(System.in).nextLine()
сv[0]
как альтернативного ввода ( 279 байт ) Попробуйте здесь .Perl, 137 байт
132 байта кода + 5 байтов для
-pF
флагов.ascii_train.pl
:Обратите внимание, что я добавил
-a
флаг в код, но это только потому, что старые версии Perl требуют,-a
когда-F
используется.Чтобы запустить это:
Ввод должен быть введен без окончательного перевода строки (
echo -n
например, с).Пояснения:
Из того, что я видел, это примерно та же идея, что и в ответе ETHProduction на JavaScript.
Здесь не так много работы: к сожалению, шаблоны немного коротки, чтобы
x
оператор был полезен.Сначала
s/./ | $& | /g
окружает каждый символ ввода символами|
(и пробелами), чтобы сформировать второй уровень поезда.Затем внутри этой длинной строки все между a
!
и символом новой строки - это шаблон, который мы хотим повторить для построения автомобилей. Это повторение сделано благодаря регулярному выражениюs/!(.*)/$1x@F/ge
. (Я использовал,!
потому что вход не может содержать его).источник
C #, 277 байт
Golfed:
Ungolfed:
Тестирование:
А также...
источник
C # 221 байт
ничего особенного здесь не происходит .. просто создаю каждую строку и соединяю их новыми строками.
источник
C
217212208 байтПопробуйте онлайн
Выход:
источник
SOGL V0.12 ,
5756 байтПопробуй здесь!
Объяснение:
источник
Jq 1,5 , 178 байт
расширенный
Пробный прогон
Попробуйте онлайн
источник
Excel VBA, 218 байт
Функция анонимного непосредственного окна VBE, которая берет входные данные из диапазона
[A1]
и выводит в непосредственное окно VBEОтформатирован для удобства чтения
Пример вывода
источник