В этом задании вы должны использовать в качестве входных данных многострочное ASCII-изображение, например:
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO
OO OO OO OO OO OO OO OO OO OO OO
OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO
OO OO OO OO OO OO OO OO OO OO OO OO
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OOOOOOO OO
И вы также будете принимать целое число в качестве входных данных. Вы должны вывести искусство ASCII, увеличенное на величину, указанную целым числом. Например, если вы использовали второй аргумент 3
, результат будет
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
В частности, каждый символ должен превратиться в n
по n
коробке этого символа, где n
является целым числом аргументов. Например, ввод
ab
cd
и 3 приведет к
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Ответы:
APL, 7 символов / байт *
Функция, которая принимает число и входную строку в качестве параметров и возвращает результат:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL может быть записан в своей собственной (устаревшей) однобайтовой кодировке, которая отображает символы APL в верхние 128-байтовые значения. Следовательно, для целей оценки программа из N символов, в которой используются только символы ASCII и символы APL, может рассматриваться как длина N байтов.
источник
/
Функция (не путать с/
оператором… да, тот же символ ) дублирует и / или удаляет столбцы из матрицы согласно левому аргументу. Если это скаляр (простое число), то он реплицируется для всех входных столбцов. Следовательно2/m
, это матрица со всеми столбцами в два раза.⌿
Вариант делает то же самое, но для строк (или плоскостей первой оси в общем случае.)GolfScript, 20 символов
Принимает все входные данные из STDIN, первая строка - коэффициент масштабирования, остальные - многострочный ввод. Вы можете попробовать пример онлайн .
вход
Выход
Код
источник
1/
. Мне также нужно использоватьvalue function +
больше.golfscript.rb
это не помечено как исполняемое, или в первой строке указан неверный путь к интерпретатору Ruby для вашей системы. О, и это,echo
вероятно , должно бытьcat
. Попробуйтеcat inputFile | ruby golfscript.rb scriptFile
(или простоruby golfscript.rb scriptFile < inputFile
) и посмотрите, работает ли это.J,
2017 символовОпределяет глагол,
f
который делает то, что требуется. Использование:где
a
строка ввода.В Windows требуется дополнительный символ для удаления
\r
:Пояснение :
];._2
разбивает входную строку на куски, основываясь на последнем символе строки, который в этом случае будет a\n
. Окна имеют ,\r\n
поэтому мы должны использовать ,}:
чтобы расколоть дополнительный символ прочь:}:;._2
. Вырезать глагол документацииОстальная часть кода (за исключением присваивания
f=.
) является форком .Это ломается так:
[ #&.|: #
Если
a
наша входная строка, вычисление будет3 # a
(мы назовем этот результатx
), тогда3 [ a
(мы назовем этот результатy
) тогдаy #&.|: x
.3 # a
просто делает три копии каждого членаa
. Копировать глагол документацияВыдается
в
3 [ a
просто возвращает 3. Левая документация глаголаНаконец,
y #&.|: x
этоy
копия под транспонированиемx
. Эти#
работы , как и раньше, но&.|:
говорит J транспонировать вход первой , а затем перенести его обратно , когда она будет закончена. При конъюнкции документации , транспонировать глагол документацию .Транспонированные повороты
в
затем копия меняет его на
и перенос его обратно дает вам
источник
[##"1
Кроме того, я не уверен насчет неписаных правил игры в гольф в J, но я бы сказал, что разделение строк и назначение могут быть опущены, учитывая свободные требования вопроса. Я, конечно, сделал это в своем ответе APL. Пример:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 байтов
Функция увеличения
e
, которая берет счетчик и строку и возвращает строку:источник
APL, 11 символов
@Gareth сначала сделал то же самое, в J, так что эта запись APL только для выставки, а не для соревнований - он победитель.
Использование: увеличение в левом аргументе (⍺), художественное оформление в виде двумерной матрицы символов в правом аргументе (⍵).
⍺ / ⍵ будет реплицировать элементы в каждой строке вектора или матрицы (2 / «OO» становится «OO OO»).
⍉⍺ / trans транспонирует это, копирует элементы, транспонирует это.
(Если бы мы собирались для ясности вместо длины программы, код мог бы быть E ← {⍺ / [1] ⍺ / ⍵})
источник
Bash / Sed скрипт, 48 символов
Сохраните как скрипт
chmod +x
и запустите:Как это работает?
Мясо этого находится в
sed
команде. Например, если n = 3, то команда sed расширяется до чего-то вроде:Эта составная
sed
команда может быть разбита на:s/./&&&/g
- эта команда замены соответствует каждому символу и заменяет его на символ, повторенный 3 разаp
команды - это просто печатает все пространство шаблона (то есть текущую строку) 3 разаМы переходим
-n
к sed, чтобы запретить печатать что-либо, если это явно не указано, поэтому мы имеем полный контроль над тем, что печатается и сколько раз.Я не мог найти быстрый способ генерировать повторяющиеся строки произвольной длины непосредственно
sed
, поэтомуbash
вместо этого я использовал несколько трюков:Это печатает строку (не указано, т. Е. Пустую) с 3 начальными пробелами и присваивает результат
bash
переменнойr
.Затем мы используем
bash
расширение параметра, чтобы преобразовать эту строку пробелов в то, что нам нужно подставить вsed
выражение:Мне удалось удалить кавычки вокруг
printf
спецификатора формата иsed
выражения, так как ни один из символов внутри не нуждается в экранировании вbash
оболочке.Количество символов:
источник
$1
и удалитеn=3;
, вы даже сохраните 4 символа и, возможно,{}
тоже в printf.printf
«s аргумент не нужны, сведя его до 52 символов:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 символовPERL, простой и эффективный - создан правильно для задачи. Когда вызывается с
-pi3
, где3
это параметрn
:Классическое решение (39 символов):
Классическое решение должно
n
быть указано в первой строке ввода, напримерСпасибо @manatwork за
$&
трюк.источник
s/./$&x$n/ge
.Рубин:
6449 символовВсе данные, полученные по STDIN: сначала масштабный коэффициент, затем ASCII арт.
Образец прогона:
Рубин:
4441 символовПредполагая, что каждая строка ввода заканчивается разделителем строк. Благодаря @Ventero.
Образец прогона:
источник
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(к сожалению, пробел после двоеточия необходим, иначе парсер запутается). Беги сruby -n
.Питон 3 - 84
Не самый короткий, но другой ответ. Интересный лайнер.
Сначала введите число, затем искусство ASCII в виде списка Python, например:
источник
GolfScript, 29 символов
Это определяет блок
f
, который при вызове будет производить желаемый результат. Предполагается, что аргументы находятся в стеке (потому что именно так передаются аргументы в GolfScript).Ungolfed (это вообще имеет смысл?: P):
источник
Golfscript, 23 символа
Я решил написать целую программу, потому что она имеет меньше накладных расходов, чем даже анонимная функция:
~(:i;
- оцените ввод, затем уменьшите множитель, сохраните его какi
и отбросьте.n/{...}%n*
- разделить на новые строки, отобразить каждую строку, соединить новыми строками{...}:c%c
- взять блок, применить его к элементу карты-каждый, а затем применить его ко всей строке.{.}i*
- продублируйте этот элементi
разДемонстрационная версия: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D
Пример использования:
источник
Питон 3 -
10910793Сначала введите число, затем строку. Должен быть самоочевидным ...
Спасибо Валиду Хану за предложение удалить[]
Спасибо Волатильности за предложение
a
быть списком.источник
a
список, сделайтеa+=[''.join(c*n for c in s)]*n
, затем сделайтеprint('\n'.join(a))
в конце. Это должно работать.Ява - 217
Сначала попробуйте в гольф. Похоже, что Java не тот язык, на котором это делается.
В Windows вам нужно заменить "\ n" на "\ r \ n".
источник
aaabbb
и 3 строкиcccddd
).for
; 8 символов, используя вместо х (a=a[1].split("\n")
и изменить все х с помощью).main
занимает больше байтов, чем целые программы на других языках, участники будут получать призраки.enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
Integer.valueOf(a[0])
->new Integer(a[0])
(Редактировать: это решение теперь недействительно, потому что семантика
銻
инструкции изменилась. Я не осознавал, что уже использовал инструкцию, когда менял ее. Однако вы можете исправить эту программу, просто изменив ее на более новая инструкция壹
.)Скриптинг , 19 символовОжидается, что вход будет разделен
\n
(нет\r
), а первая строка будет содержать множитель.объяснение
В итоге стек будет выглядеть так:
Все, что выше отметки, автоматически объединяется и выводится, остальные отбрасываются.источник
i
произносится как [iː], а не [ɑi]; как бы вы написали это по-китайски сейчас?J, 7 символов
Точно так же, как в ответе APL @ Tobia, но в ascii chars.
источник
Powershell (96)
Думаю, я бы попробовал это в PS. Использование конвейера в foreach (%), чтобы сделать его коротким, но
function
иToCharArray
делает его кратким .Чтобы использовать его, вы вызываете его из командной строки следующим образом:
Вот не свернутая версия:
источник
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
для 63 байтовЮлия, 74 символа / байт
7 меньше, если я просто верну строку.
julia>
это интерактивная подсказка.источник
Холст 2 байта
Попробуй это здесь!
источник
Powershell, 54 байта
Тестовый скрипт:
Объяснение:
$s-replace'.',('$0'*$n)
повторяет каждый символ, кроме новой строки.-split'``n'
разбивает широкую строку на новую строку|%{,$_*$n}
повторяет каждую строку как элемент массива и возвращает массивРезультатом является массив широких и повторяющихся строк.
источник
R , 83/72 байта
Alt подход с использованием регулярных выражений
Если нам разрешен завершающий перевод строки, 72 байта:
Попробуйте онлайн!
В противном случае 83 байта:
Попробуйте онлайн!
источник
К, 20
.....
источник
Расширенный BrainFuck : 158
Превращается в:
Brainfuck: 185
Требуется интерпретатор, который либо имеет 0, либо не имеет изменений в качестве маркера EOF.
beef
, доступный в репозиториях Ubuntu, работает Swell:Ungolfed EBF код:
источник
Реболь -
8779Красиво отформатированная версия:
Пример использования:
NB. Этот код работает только в Rebol 2 на данный момент ( используемая функция INPUT еще не полностью реализована в Rebol 3).
источник
R 125 байтов
Попробуйте онлайн!
Преобразует строку в UTF8, помещает в матрицу, столбцы которой представляют собой строки текста (без перевода строки), а затем повторяет каждый символ и сгенерированные строки перед печатью, разделенными символами новой строки.
источник
R - 89
источник
cat
чтобы распечатать его как стандартный вывод? Кроме того, каждый элемент строки должен не только повторяться n раз по длине, но также повторяться по ширине.<-
может быть=
,paste0
здесь можно заменить на,paste
так как вы все равно используете аргумент коллапса, и аргументeach
может быть сокращен доe
. Смотрите здесь для некоторых основных идей по игре в гольф с Р.stringr
MATLAB: 20 символов
Это решение предполагает, что изображение хранится в файле с именем
startup.m
и что ему разрешено давать количество репликаций для matlab при его вызове. Это можно сделать с помощью:!matlab -r "n=3"&
MATLAB, вызов без аргумента: 23 символа
В отличие от первого решения, последние два предполагают, что количество повторений может не ожидаться в вызове. Для этих решений исходная строка и число ожидаются в файле, называемом
matlab.mat
в вашем текущем каталоге.MATLAB, математическая альтернатива: 27 символов
источник
C # (177)
Ожидает входную строку "i", содержащую новые строки "\ n" в качестве разделителя.
форматированная
источник
CJam, 14 байтов
CJam новее, чем этот вызов (а основная функция, которую я использую, на самом деле совсем недавно), поэтому этот ответ не будет принят, но в любом случае он не превзойдет APL, так что ...
Проверьте это здесь.
объяснение
С новым,
e*
который повторяет каждый символ в строке, это действительно просто:источник
{N/1$fe*e*N*}
RProgN 100 байт (Windows) неконкурентный
RProgN не имеет символьных экранирований на момент написания, поэтому любая обработка новых строк требует физической новой строки. Таким образом, этот ответ (и любой ввод) должен использовать CRLF, а не только LF. :(
Кроме того, функция «rep» была добавлена только после того, как этот вызов был выпущен, поэтому он не является конкурирующим.
источник
Vim, 39 нажатий клавиш (исключая ввод, не конкурируя)
причина и причина, по которой он не конкурирует, заключается в том, что ввод необходимо вводить дважды. Замените оба
2
своими собственными данными.объяснение
qayl2phxl@aquu
записывает макрос, который дергает персонажа, вставляет его и переходит к следующему, а затем воспроизводит сам. Тогда это отменяет изменения. Поскольку мы хотим, чтобы цикл не был бесконечным, мы не удаляем символ, что означает, что мы должны удалить посторонний, но по-прежнему заканчивать движение, которое завершается неудачно на последнем символе.:%norm @a<cr>
запускает макрос в каждой строкеgg0
возвращается в самое началоqbyy2P2jkddj@bq@b
использует ту же технику, что и@a
для копирования каждой строки, но с рекурсивным макросом.Я знаю, что это может быть лучше, например, путем обратного хода для дублирования линий, но из-за требования множественного ввода я остановлюсь и отмечу этот ответ как не конкурирующий.
Предыдущий ответ (32 нажатия клавиш, только двойные)
объяснение
qaylpl@aqu
записывает макрос, который дергает персонажа, вставляет его и переходит к следующему, а затем воспроизводит сам. Отмените изменение.:%norm @a<cr>
запускает макрос в каждой строке:%s/.*/&\r&<cr>
удваивает каждую строкуЯ хотел сделать вложенный макрос, но внутренний (символы) останавливает внешний (строки) ... Поэтому мне нужно выполнить две команды, добавив довольно много нажатий клавиш в простом решении.
источник