Скручивание слов!
Дана строка и положительное целое число. Вы должны крутить струну, взад и вперед.
Пример ввода / вывода
вход
Programming Puzzles & Code Golf
4
Выход
Prog
mmar
ing
zzuP
les
oC &
de G
flo
вход
Ввод может быть принят через STDIN или аргумент функции. Входные данные будут состоять из строки и положительного целого числа n . Целое число будет определять длину каждой витой линии.
Струна скручена взад-вперед. Ввод HELLO, WORLD!
и 5 будет выглядеть так:
Выход
На выходе будет искривленный текст. Это может не быть какой-либо конечный пробел. Если длина входной строки не делится на длину строки, добавьте пробел, пока строка не будет заполнена:
Пример этого:
вход
Hello, World!
5
Вывод (обратите внимание на пробел в самом конце)
Hello
roW ,
ld!
Ответы:
Пиф,
1915Предварительно дополняет строку, а затем переворачивает каждую строку, когда она печатается. Заполнение равно размеру поля, но последняя строка после выделения ввода отбрасывается.
Попробуй здесь
источник
CJam, 19 байтов
Пример ввода:
Пояснения
источник
Снеговик 1.0.1 , 91 байт
Или все в одну строку (для эстетики или, более конкретно, для антиэстетики), стоимостью 2 байта:
Это слишком коротко, для Снеговика. (Это, вероятно, самое короткое, что он может получить, хотя; я занимался этим в гольф довольно долго.)
Это имеет одно предостережение: оно завершится с ошибкой (но все равно выдаст правильный вывод) в 50% случаев, когда последняя строка не перевернута. (Это потому, что я использую,
ag
чтобы сгруппировать элементы массива в группы по два, чтобы я мог повернуть вспять все остальные, но я не проверяю, имеет ли последний элемент оба ожидаемых элемента, поэтому он попытается получить доступ к несуществующему элементу, если там нечетное количество строк.)Ungolfed / объяснение:
источник
Python 2, 60
Принимает
n
символы за один раз из отs
, печатая их в направлении,d
которое чередуется между1
и-1
. Для интервала в последней строкеs
дополняетсяn
пробелами в конце до его нарезки, что влияет на него только тогда, когда в нем осталось меньшеn
символов.Рекурсивное решение сохранит char (59) за исключением того, что оно оставляет завершающий символ новой строки, что недопустимо.
источник
Хаскелл ,
8375 байтПростая
chunksOf
реализация с взятием и выпуском, применяя четное или нечетное количество обращений к выводу по мере продвижения.Спасибо @BMO за пять байтов и @ ØrjanJohansen за три байта!
Попробуйте онлайн!
источник
cycle
экономит 5 байт, попробуйте онлайн!g
и заменыn
иl
: Попробуйте его в Интернете!Застрял ,
42414038 байтЭто слишком долго, вероятно, будет пытаться играть в гольф больше!
Ввод должен быть как
"string"|n
.Объяснение:
источник
Haskell, 108 байт
Это довольно долго, господи. Вот оно в действии:
источник
let
выражения?let
разделенный точкой с запятой - обычно вы используете переводы строки и отступы, но Haskell также позволяет писатьlet a=b; c=d in expr
.(%) :: String -> String -> String
а неIO ()
.Python 2, 109 байт
Пришлось добавить отступы с пробелами, чтобы последняя строка была правильной.
Попробуй здесь
источник
Луа,
918888848382 байтаСтарая версия:
Новая версия:
источник
O, 60 байтов
Моя самая первая программа O, и длинная в этом!
Живая демоверсия.
источник
Perl, 87 байт
Старая версия (печатает завершающий символ новой строки):
Строка передается как аргумент функции без завершающего символа новой строки. Звоните так:
источник
Свинка, 86 байт
Хотя это может быть на 2 байта короче, если вы удалите первый ',!' символы в операторе R (читать из STDIN); это добавляет возврат каретки между входом и выходом. Если этого не было, выходные данные являются технически правильными, но первая строка будет добавлена к входной строке.[[Стандартный терминал Mumps, который я использую, не имеет локального эха. ]] Как он сидит, вот тест:
Также обратите внимание, что на самом деле есть нажатие возврата каретки / ввода между «123» и «6» в конце ввода. [[Местное эхо снова. ]]
Если кому-то интересно, я могу описать, что происходит с кодом; но я понимаю, что там не куча энтузиастов свинки ... :-)
источник
PowerShell, 102 байта
Вызывается следующим образом (если сохранено в файл
CodeGolf55051.ps1
)Предыдущие попытки
(длиннее или недействительно)
PowerShell, 110 байт
PowerShell, 111 байт
объяснение
PowerShell, 180 байт
PowerShell, 196 байт
объяснение
(
{...}
в приведенных выше комментариях на самом деле{0}|{1}|{2}
; я положил{...}
для улучшения читаемости.Powershell, 120 байт (недействительно)
источник
param($s,$i)$s+' '*($i-$s.Length%$i)-replace'(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n"-split"`n"|?{$_-ne""}
что приведет вас к 108.[$r]
индекс на[-not$r]
... иначе первая строка будет читать противоположное (то есть справа налево), чем в приведенных примерах. В противном случае, действительно гладкое исполнение!n
положительное, и мы гарантируем, что длина строки неотрицательна (по определению), это означает, что(($i-$l%$i)%i)
это эквивалентно($i-$l%$i)
сохранению четырех символов.(-$l)%$i
. Не знаю, откуда это. Интересно, однако, что это не эквивалентно, хотя это должно быть. Это, очевидно, изворот того, как PowerShell (среди других языков) реализует функцию по модулю, которая отличается от того, что я ожидал (математика) или Wolfram-Alpha. Видимо, вам нужно придерживаться более длинной версии. Справочное доказательство ->((y-x%y)%y) ==> ((y%y)-(x%y%y))%y ==> ((0)-(x%y))%y ==> (-x%y)%y ==> (-x)%y
Clojure, 83 байта,
87 байтов,79 байтовнесколько исправлений после комментариев ниже, спасибо rrjan .
Попробуйте онлайн!
Кажется, что Clojure часто отсутствует в кодах ответов. Конечно, он не может конкурировать по длине в байтах с языками игры в гольф, но я думаю, что полное отсутствие несколько неоправданно.
Объяснение:
s
на последовательность, разделяющую ее на последовательность списков символов, длина которых у списков естьn
. Последний кусок будет дополнен пробелами по длине,n
используя(repeat " ")
возвращаемую «коллекцию площадок», которая возвращает бесконечную ленивую последовательность пробелов#(..)
)#(or %)
которая функционирует как функция тождества и обратная (то есть[#(or %) reverse #(or %) reverse ...]
), возвращаемая циклом .#(apply ...)
:identity
илиreverse
чередующимся на куске. Это делается с помощью(% %2)
выражения, которое вызывает функцию, отправляемую в качестве первого аргумента анонимной функции [т.е.identity
илиreverse
], используя второй аргумент [т.е. кусок] анонимной функции в качестве аргумента вызова.(apply str ...)
преобразовать список символов в строкуЗдесь мы используем один трюк, заключающийся в том, что многие закрывающие функции, например,
map
принимают произвольное количество коллекций в качестве аргументов, т. е.(map f coll1 coll2 coll3 ...)
когда функции f нужно просто принять столько аргументов, сколько существует коллекций. В этом случае мы отправляем две коллекции: коллекцию чередующихся ссылок на функции и упорядоченную строку.источник
ld!
.fn
либоdefn
хорошо.) С другой стороны, ваша функция может просто возвращать результат, а не печатать его.APL (Dyalog Unicode) , 19 байт
Попробуйте онлайн!
Взял
⊢∘⌽\
трюк из блестящего ответа СПП, чтобы на boustrophedonise вызов .После осознания того, что моя передача прерывается для строк с ведущими символами новой строки, я добавил еще два байта. Ниже старое представление.
APL (Dyalog Unicode) , 17 байт
Попробуйте онлайн!
источник
Python 3,
110108107103 байта(глядя на другие ответы), с
rjust
:95939290 байтисточник
PHP, 135 байт
Принимает два аргумента командной строки, как показано с
$argv
.источник
CoffeeScript, 131 байт
Это кажется слишком длинным.
источник
Юлия, 104 байта
Ungolfed:
источник
Python 3, 101 байт
Попробуй здесь
источник
д, 46
,
источник
{-1@[l;(&)(til(#)l:y cut x)mod 2;'[neg[y]$;|:]];}
(49 байт). Спасибо за вдохновение! :)Q,
6456 байт{}
это функция, которая должна быть вызвана как{}[x;y]
.x
будет строкаy
будет длина результирующих строк.Тест:
редактировать : использовали более короткие функции, вдохновленные другим ответом q от @tmartin
источник
Python 2,
8275 байтЯ не мог комментировать @willem, но я сделал его код меньше.
Попробуйте здесьПопробуйте здесьисточник
Perl, 72 байта
70 байтов плюс 2 байта для
-p0
.Демо-версия:
Обратите внимание, что чтение ввода из STDIN не может заканчиваться символом новой строки (это будет стоить 2 дополнительных байта).
Объяснение:
источник
JavaScript ES6, 123 байта
Вызов с
t(input_string, twist_length)
, который возвращает строку вывода.источник
Perl 5 , 51 байт
Попробуйте онлайн!
источник
Руби, 80
Демо онлайн: http://ideone.com/w6o8PI
источник
Coffeescript, 151 байт
Слишком много = (
источник
Баш,
8374Это чередуется между
cat
иrev
для подстрок первого аргумента с длиной второго аргумента.Используемые специальные переменные включают
${#1}
(длина строки$1
)((i/$2%2))
(арифметическое выражение, делающее инкрементатор$i
на$2
и затем принимающее его по модулю для определения нечетного и четного, которое диктовало, использовать или нетrev
)${1:i:$2}
(подстрока$1
начала в позиции$i
с длиной$2
).источник
bash
ответа, который я только сейчас увидел. У нас фактически такая же логика. ... на самом деле, ответ viktorahlström просто позволил мне сбрить еще 9 символов.JavaScript ES6, 113 байт
Просто моя собственная трещина на мой собственный вопрос. Это добавит пробелы, так что это делится на
n
, таким образом, это просто расщепление и обращение.источник