Ваша задача - взять строковый ввод и число и выровнять строку вправо, сделав ширину текста номером. Если строка слишком длинная, разбейте ее и поместите остальные на следующую строку, повторяя, пока это не нужно. Если строка короче ширины, добавьте пробелы. Может быть несколько новых строк, и их следует рассматривать как любой другой символ.
Например, строка
Programming
Puzzles
&
Code
Golf
и число 5
будет производить:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Принимая во внимание, что та же самая строка и число 10
произвели бы:
Programmin
g
Puzzles
&
Code
Golf
Струна
a
b
и число 5 будет производить:
a
<-- note the 5 spaces
b
Самый короткий код выигрывает!
Programming Puzzles\n&\nCode Golf
?Ответы:
Pyth, 14 байт
демонстрация
Использует оператор клавиатуры Pyth.
источник
Python 2, 84
Принимает в качестве ввода строку с символами новой строки и числом и печатает результат. Для каждой строки на входе
n
за один раз берется и печатается символ, используя встроенную функциюrjust
для заполнения пробелов слева перед печатью.Я исправил случай с пустой строкой с помощью хака
w=w or' '
. Вероятно, есть лучший метод, но я не буду много думать об этом.источник
CJam, 21 байт
Спасибо @ Sp3000 за отыгрывание 1 байта и прокладывание пути еще 3.
Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
Pyth, 16
Попробуйте это онлайн здесь
объяснение
источник
Perl, 39 байт
36 байт + 3 байта для
-ni
. Ширина переноса передается в качестве аргумента-i
.Правильно обрабатывает пустые строки, заполняя их пробелами:
Как это работает
Это решение использует оператор подстановки для циклического прохождения ввода, сохраняя байт поверх эквивалентного
for
цикла. Настоящий трюк, тем не менее, заключается в регулярном выражении LHS замены:С глобальным модификатором это будет соответствовать
$^I
символам одновременно; если$^I
в строке осталось меньше символов, оно будет соответствовать всему концу. Чередование с^$
требуется для обработки пустых строк. Например:RHS замены просто использует
printf
для дополнения левой части сопоставленного фрагмента пробелами.источник
$^I
!Javascript (ES6), 107
Хотелось бы, чтобы у JS была встроенная функция площадки. Ну что ж.
Объяснение:
источник
Юлия, 126 байт
Ungolfed:
источник
Баш,
62,61+ функция, 59Короче, если
N
вызывающий может установить его, вместо того, чтобы читать его как первую строку ввода.Это не в состоянии обрабатывать пустые строки на входе. В противном случае, это не подвергает входные данные разделению слов, расширению пути или иным образом обрабатывает их как нечто большее, чем просто необработанные данные.
read -n$N
сохраняет один символ, но позволяетread
munge\
.[[ $r ]]&&
Необходимо потому , чтоread -n4
не может LOOKAHEAD видеть , что следующий символ является символом новой строки. Таким образом, он устанавливаетсяr
на строку из 4 символов, а при следующем чтении получается пустая строка с нулевым символом. Фильтрация этих ложных новых строк без фильтрации реальных новых строк потребует отслеживания состояния: была ли предыдущая строка максимальной длины или нет. Потребуется либо больше кода, либо совершенно другой подход.[[ $r ]]
короче, чем[ -n "$r" ]
необходимо, чтобы избежать ошибок, если строка начинается с-z foo
, или является*
или что-то, если вы использовали[ $r ]
.Правосудие происходит со стандартной строкой формата printf "% 4s".
Тест с
источник
-r
в подсчет байтов. 2.f()(while ... done)
немного короче.[[ $r ]]&&
, если N = 4, строка ввода длины 4 будет давать пустую строку вывода, где ее раньше не было. Посколькуread
возвращает строку из 4 символов, то при следующем вызове видит новую строку и сразу возвращается. Также спасибо за()
совет. Я не знал, что вы могли бы определить fns таким образом.while
это уже соединение, вам даже не нужны круглые скобки:f()while ... done
Haskell, 108 байт
Пример использования:
Как это работает
источник
GNU awk + bash, 70
Использование bash для вставки счетчика в программу awk является вероятным. меньше, чем читать его с
NR==1{N=$0}
блоком.Читайте строки за раз. Разбить не более чем на 4 символа, используя FPAT. (Соответствует полям, а не разделителям. Расширение GNU.) printf каждое поле отдельно. (По умолчанию ORS = \ n).
/^$/
Правило там печатать пустые строки, которые имеют NF = 0 и , следовательно , не печатают вообще в другом блоке. Так что, в отличие от моего решения с чистым bash, в общем случае это работает.Полуотносительно, но моя идея для perl - 112 символов только для кода perl:
Это съедает одну из новых строк, и это слишком долго.
$/=\1
читает байт за раз. Мы добавляем к $ l. Возможно, линейный подход с разделением по фиксированной ширине будет короче.источник
Утилиты Bash + GNU, 41
Строка вводится через STDIN, ширина вводится в командной строке arg:
источник
Python 2, 151 байт
Это адаптация ответа @ xnor выше, поскольку он неправильно обрабатывает переводы строки.
for
Цикл был изменен с:чтобы:
пример
источник
C #, 143 байта
Linq позволяет вам делать довольно грубые выражения.
GroupBy
здесь полезно, но жаль, что они не смогли создать перегрузки функций, принимающих индекс.Присвойте лямбду a,
Func<string, int, string>
чтобы запустить ееМенее гольф:
источник
Groovy, 63 байта
Возвращает правильно выровненную строку. До сих пор не знал, что существует функция padLeft (и padRight, padCenter).
источник
JavaScript
174136источник
Цейлон, 107
источник
Matlab, 99 байт
Спасибо @beaker за удаление 6 байт!
Использование и анонимная функция:
Определите функцию и используйте
ans
для ее вызова:источник
Бурлеск, 28 байт
То же, что и в приведенной ниже версии, но обрабатывает строку 1 как число, а остальные строки как строку.
Использование как в:
Старая версия (16 байт):
Пример:
источник