Ваша задача - написать программу, которая, учитывая число и строку, разбивает строку на куски такого размера и переворачивает их.
правила
Ваша программа получит положительное целое число n
, а также строку s
длиной не менее одной, состоящую только из печатного ASCII (не включая пробелы). Затем строка должна быть разбита на куски длины n
, если длина строки не делится n
ни на один остаток в конце, следует считать ее собственным куском. Затем поменяйте порядок кусков и соедините их снова.
Тестовые случаи
n s Output
2 abcdefgh ghefcdab
3 foobarbaz bazbarfoo
3 abcdefgh ghdefabc
2 a a
1 abcdefgh hgfedcba
2 aaaaaa aaaaaa
2 baaaab abaaba
50 abcdefgh abcdefgh
6 abcdefghi ghiabcdef
Это код-гольф , поэтому вы должны стремиться к как можно меньшему количеству байтов.
Ответы:
Желе , 2 байта
Полная программа, которая печатает результат.
Попробуйте онлайн!
Как?
источник
Python 3 , 35 байт
Попробуйте онлайн!
источник
and
ключевое слово? @Dennis05AB1E ,
5 43 байта-1 благодаря Деннису
-1 благодаря carusocomputing
Попробуйте онлайн!
источник
¹
не нуженJavaScript (ES6), 37 байт
Принимает ввод с помощью карри: сначала число, затем строка, как
f(2)("abcdefgh")
.Показать фрагмент кода
источник
Perl 6 ,
2820 байтовПопытайся
Попытайся
Expanded:
источник
Bash + coreutils, 22
Попробуйте онлайн .
источник
Haskell , 32 байта
Попробуйте онлайн!
источник
PHP, 53 байта
источник
Рёда , 36 байт
Попробуйте онлайн!
Это функция, которая принимает один аргумент. Символы строки должны быть в потоке.
try
используется для сброса ошибок в случае, еслиhead
функция не может прочитатьn-1
значения.Объяснение:
Не так запутанно, как обычно. Я думаю, что это довольно красиво. :)
источник
[[try head n]]
работает вместо[[_]..[try head n-1]]
?_
цикл выражения.[[try head n]]
будет принимать n значений один раз , но[[_]..[try head n-1]]
принимает n значений до тех пор, пока остаются значения.CJam , 5 байтов
Входные данные - это число и строка, заключенные в двойные кавычки, разделенные пробелом.
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Пакетная, 74 байта
Скорее досадно, что в итоге получается рекурсивным, а не хвостовым.
источник
V ,
1310 байтПопробуйте онлайн!
В бою:
превращается в
который становится
прежде чем все новые строки будут удалены
источник
брейкфак , 78 байт
Первый байт ввода - это размер порции, заданный значением байта. Остальные байты считаются строкой.
Попробуйте онлайн!
Расширено и прокомментировано
источник
PowerShell,
5649 байт-7 байт благодаря маззи
Попробуйте онлайн!
источник
.ps1
и попробуйте вызвать этот скрипт вместо вашего кода. Если это работает, то тест прошел успешно.Mathematica, 46 байтов
Анонимная функция. Принимает число и строку в качестве ввода и возвращает строку в качестве вывода. Не так много, чтобы увидеть здесь.
источник
Javascript -
544746 байтПеределал:
Используется как
Спасибо @ETHproductions за некоторое ускорение RegEx. Спасибо @Shaggy за дополнительный байт в eval!
Оригинал:
источник
eval('/.{1,'+n+'}/g')
s=>n=> ...
eval("/.{1,${n}}/g")
, используя кавычки вместо кавычек.Pyth, 5 байт
Попробуйте онлайн .
объяснение
источник
Сетчатка , 38 байт
1 байт сохранен благодаря @LeakyNun
(Обратите внимание на пробел во второй строке и завершающий пробел)
Эта программа воспринимает ввод как одинарный в первой строке, а строку - во второй.
Попробуйте онлайн!
Тестирование! (слегка модифицированный)
объяснение
Первый шаг - добавить пробел (это станет важным позже).
Теперь мы изменим. Это использует балансирующие группы .NET. Важно отметить, что группы здесь действуют как стеки, поэтому каждое совпадение по существу помещается в стек. Здесь мы записываем каждую цифру унарного числа в группу 2. Теперь каждый раз, когда символ в строке обнаруживается, совпадение выбирается из группы 2. Это гарантирует, что количество символов не превышает число унарного числа.
И, наконец, удалите одинарный номер и перевод строки.
источник
\d
на,.
чтобы сохранить байт.^
также избыточно.\d
. И спасибо заЯва,
147138 байтString r(String s,int n){String r="";int l=s.length();for(int i=l/n*n;i>=0;i-=n)if(!(i>=l))r+=(i+n)>=l?s.substring(i):s.substring(i,i+n);return r;}
Сохранено 9 байт благодаря Кевину Круйссену!
В развернутом виде:
На самом деле, это моя первая попытка поиграть в кодегольф, поэтому любые отзывы приветствуются
источник
int l=s.length();for(int i=l/n*n;
может быть, уint l=s.length(),i=l/n*n;for(;
вас есть толькоint
один раз. Аif(!(i>=l))
может бытьif(l<i)
. Аr+=(i+n)>=l?
можно без скобокr+=i+n>=l?
. Кроме того, если вы еще не видели его, я могу порекомендовать просмотреть « Советы по игре в гольф на Java», чтобы найти несколько полезных советов по игре в гольф. :) Еще раз добро пожаловать.Perl 5 , 25 байт
Использует
-lnM5.010
флаги.Попробуйте онлайн!
Привет Гринну за то, что он рассказал мне о
=~ m/.{1,$n}/g
-M5.010
позволяет использоватьsay
функцию, которая для наших целей является печать с более коротким именем.-n
помещает первую строку ввода в$_
и-l
отключает завершающий перевод строки.Затем мы получаем вторую строку ввода с помощью
<>
и применяем ее к регулярному выражению.{1,$_}
: любой символ, от 1 до $ _ (первый ввод) раз. Так как по умолчанию он жадный, он всегда пытается найти символы $ _.1,
Необходимо для возможного остаточного куска в конце./g
Модификатор дает нам каждый матч , что регулярное выражение в строке ввода в виде списка, который затем обращенно и напечатанной. В Perl передача списка дляsay
присоединения к нему без разделителя по умолчанию.источник
Dyalog APL Extended ,
1615 байтПопробуйте онлайн!
источник
f←
,/
→∊
∊∘⌽⊢⊂⍨≢⍤⊢⍴1↑⍨⊣
Python, 62 байта
Попробуйте онлайн!
источник
f=lambda n,s:s and f(n,s[n:])+s[:n]
С накоплением , 9 байтов
Попробуйте онлайн!
#<
куски,rev
переворачивает и''#`
соединяет пустую строку. Довольно просто.источник
QBIC , 24 байта
Это прекрасно использует новую подстроку-функцию, которую я недавно добавил в QBIC:
источник
Pyth, 4 байта
Принимает как
"s",n
: Попробуйте сами!источник
Выпуклый , 2 байта
Попробуйте онлайн!
источник
C 69 байтов
Результат распечатывается на стандартный вывод.
источник
Scala,
5755 байтСпасибо Джейкоб! Попробуй здесь .
Примечание: используя символьную форму foldLeft ("/:"), я смог снять еще пару байтов.
источник
mkString
вместоreduceLeft
(n:Int,s:String)=>s.grouped(n).toSeq.reverse.mkString("")
Ом , 5 байт
Попробуйте онлайн!
объяснение
источник
R ,
6960 байтПопробуйте онлайн!
Спасибо Кириллу Л. за предложение удалить
seq
.источник
:
и некоторые манипуляции позволят нам избавиться от конечного результата-1
.