Задача:
На этом сайте есть много ответов, которые организованы в ascii art, как этот . Обычно это делается вручную, но не поможет ли программа в этом? :)
Ваша программа будет принимать 3 входа:
- Код, как одна строка
- Количество строк в шаблоне (может быть опущено, если не нужно)
- Сам шаблон, как
*
s или другой символ
Правила:
- Вы должны написать программу (не функцию), которая читает из стандартного ввода
- Текст размещается слева направо в каждой строке
- Если текста недостаточно для заполнения шаблона, поставьте
.
s в оставшиеся пробелы - Если текста слишком много для заполнения шаблона, распечатайте его после вывода
- код-гольф , поэтому выигрывает самый короткий код в байтах
Пробные прогоны:
Вход (тест точной посадки) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
Выход :
qwert y uio
p a s d
f g h j
klzxc v bnm
Ввод (тест дополнительных символов) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
Выход :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
Ввод (тест на недостаточность символов) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
Выход :
qwert y uio
p a s d
f g . .
..... . ...
X
на наши программа для работы?Ответы:
GolfScript, 30 символов
Запустить онлайн .
Примеры:
источник
Perl 6:
60 символовРЕДАКТИРОВАТЬ : 38 баллов (см. Внизу)Если вы не цените мои ужасные художественные навыки, вот гольф:
Этот делает странные вещи со временем оценки.
Во-первых,
BEGIN
ключевое слово вынуждает[get.comb, "." xx *]
вычисляться первым, помещая в массив список символов, составляющих «код», за которым следует бесконечное количество"."
s.Затем,
get
в конце оценивается, получая количество строк художественного шаблона ASCII.xx
Оператор повторяет первую часть программы это много раз. Это имеет больше смысла, когда вы понимаете, чтоcode() xx count()
это в основном сахар дляcode() for 1..count()
:count()
следует оценить в первую очередь.Наконец,
get
в начале программы получает строку художественного шаблона ASCII и заменяет каждый"*"
значением, смещенным относительно начала массива, который мы создали до всего остального ({shift BEGIN …}
).РЕДАКТИРОВАТЬ:
Гольф до 37 символов, плюс один для переключателя командной строки:
Это та же концепция, что и в оригинале:
-p
переключатель выполняет итерацию по каждой строке (после того, какBEGIN
он прочитал в «коде») и заменяет все*
s следующей буквой из «кода» перед его печатью. Формат ввода для этого не должен включать количество строк формата.источник
Ruby 2.0,
5352 персонажаСогласно спецификации, не использует параметр «количество линий».
Пример выполнения:
Выход:
источник
./ascii.rb: line 2: syntax error near unexpected token `(' ./ascii.rb: line 2: `puts gets($n).gsub(?*){c.slice!(0)||?.},c'
puts
с$><<
и меняя,
в конце концов к+
PowerShell ,
63868382 байта+20 байт, спасибо @Veskah
Попробуйте онлайн!
Менее гольф:
источник
Japt , 18 байт
Попытайся
источник
sVl)iVr-@t°J1 ª'.
работает для 17T-SQL, 142 байта
Попробуйте онлайн
источник
Perl 5
-plF
, 51 байтПопробуйте онлайн!
источник
JavaScript - 199
Выводит дополнительные символы при вводе текста, если не используется в шаблоне, использует дополненный символ "." если не достаточно
РЕДАКТИРОВАТЬ: изменены, чтобы быть функцией, принимающей текст и шаблон
источник
function p(a,c){x=c.split(s='*').length-1;for(i=x-a.length;i--;)a+='.';for(;i++<x;)c=c.replace(s,a[i]);console.log(c+'\n'+a.substring(x))}
JavaScript (ES6) -
9687Примечание: как предложено ФП , я использую функцию. Но если требуется наличие программы, вот решение на 93 символа .
РЕДАКТИРОВАТЬ 1: Основные изменения, я не знаю, почему я не осознал это в первый раз: P Сохранено 40 символов.
Использование :
Тестовый ввод : (без ненужного необязательного номера согласно спецификации)
Выход :
Код Ungolfed :
Было бы очень приятно услышать о любых предложениях от пользователей :)
источник
Perl, 70 символов
Или без проверки границ, 56 символов
Обратите внимание, что этот код не использует вторую строку, как в спецификации, и может быть сокращен на три символа
<>;
источник
Bash,
166 156 111106Читает со стандартного ввода, не берет счетчик строк. Первая строка ввода - это код, который вы хотите вставить в ascii art, все последующие строки - это ascii art, состоящий из
@
символа. Ввод имеет максимальную длину 999 символов и не может содержать косую черту . (Я решил не использовать*
или#
потому, что они имеют особое значение в Bash).ВНИМАНИЕ: эта программа использует файл с именем
p
. После выполнения программы удалитеp
- она запутает программу при втором запуске.Большая часть работы здесь сделана
Первая строка заменяет первую
@
в данной области первым символом кода. Вторая строка удаляет первый символ кода.Если для заполнения фигуры не хватает кода, после основной операции ascii art выводится новая строка
echo $i
.источник
C,
98, 91 символовЗдесь довольно простое C-решение длиной до 100 символов. Это не использует ввод количества строк. (В противном случае потребуется второй ненужный get ()).
ungolfed:
источник
puts(s)
вместо того,printf("%s",s)
чтобы сохранить 7 байтов.\n
является ли проблема дополнительной.Python 2.7,
165155150138119 персонажейЛадно, в значительной степени, но я думаю, это самый крошечный способ сделать это с Python.
Редактировать: новая функциональная версия 1.0.1 с еще меньшим количеством используемых байтов:
Edit2:
map(r,['']*input())
вместо[r()for _ in[1]*input()]
и удален неиспользованный импортEdit3:
'>'*input()
вместо['']*input()
сохранения одного символа и добавления символа подсказки для шаблона :)источник
(['.']+l).pop(0)
вместо того,(len(l)and l.pop(0)or'.')
чтобы сохранить 9 байтов. Иinput()
вместо того,int(r())
чтобы сохранить 1 байт.input
! К сожалению, ваш первый совет не работает, потому что он выводит точки при длине строки> 0.(l+['.']).pop(0)
вместо этого, но если это не сработает, вы все равно можете сохранить 4 байта, используяl and
вместоlen(l)and
.(l+['.']).pop(0)
не удаляет элементы,l
поэтому печатается только первый символ, ноl
условие работает :)C # (интерактивный компилятор Visual C #) , 122 байта
Попробуйте онлайн!
источник
"\n"+
добавления дополнительных символов в одну строку05AB1E ,
181715 байтПринимает код как первый ввод, шаблон как второй (с
0
вместо#
).Попробуйте онлайн или проверьте все контрольные примеры .
1815 байтов альтернативы, принимая входные данные в обратном порядке:Попробуйте онлайн .
Объяснение:
источник