Вызов
Учитывая строку и число, разделите строку на столько частей одинакового размера. Например, если число равно 3, вы должны разделить строку на 3 части независимо от длины строки.
Если длина строки не делится поровну на предоставленное число, вы должны округлить размер каждой части и вернуть строку «остаток». Например, если длина входной строки равна 13, а число равно 4, вы должны вернуть четыре строки размером 3, а также строку остатка размера 1.
Если остатка нет, вы можете просто не вернуть его или вернуть пустую строку.
Указанное число гарантированно будет меньше или равно длине строки. Например, ввод "PPCG", 7
не произойдет, потому что "PPCG"
не может быть разделен на 7 строк. (Я полагаю, что правильный результат будет (["", "", "", "", "", "", ""], "PPCG")
. Это проще просто запретить в качестве ввода.)
Как обычно, I / O является гибким. Вы можете вернуть пару строк и оставшуюся строку или один список строк с остатком в конце.
Контрольные примеры
"Hello, world!", 4 -> (["Hel", "lo,", " wo", "rld"], "!") ("!" is the remainder)
"Hello, world!", 5 -> (["He", "ll", "o,", " w", "or"], "ld!")
"ABCDEFGH", 2 -> (["ABCD", "EFGH"], "") (no remainder; optional "")
"123456789", 5 -> (["1", "2", "3", "4", "5"], "6789")
"ALABAMA", 3 -> (["AL", "AB", "AM"], "A")
"1234567", 4 -> (["1", "2", "3", "4"], "567")
счет
Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке.
Бонусные баллы (на самом деле не 😛) за то, что ваше решение фактически использует оператор деления вашего языка.
;⁹/
PPCG
7
PPCG
Ответы:
Python 2 , 63 байта
Попробуйте онлайн!
источник
PHP> = 7.1, 75 байт
Testcases
PHP> = 7,1, 52 байта
печатать только остаток
Тестовые случаи
источник
Пип , 21 байт
20 байт кода, +1 за
-n
флаг.Принимает входные данные в качестве аргументов командной строки; выводит строки и остаток, разделенный символом новой строки. Попробуйте онлайн!
объяснение
Веселье с помощью регулярных выражений!
Давайте возьмем
abcdefg
нашу строку и3
наш номер. Мы создаем регулярное выражение(.{2})(.{2})(.{2})
, которое соответствует трем сериям двух символов и сохраняет их в трех группах захвата. Затем, используя переменные соответствия регулярного выражения Пипа, мы можем вывести 1) список групп захвата["ab";"cd";"ef"]
и 2) остаток строки, которая не была сопоставлена"g"
.источник
Haskell , 62 байта
#
оператор, принимающий aString
и anInt
и возвращающий списокString
s.Использовать как
"Hello, world!"#4
.Попробуйте онлайн!
Как это работает
s
является входной строкой иn
является количеством не-остатков.d
длина каждого «нормального» куска.div
целочисленное деление.n+1
куски, причем последним является остаток.i
повторяется от0
доn
, включительно.i*d
) начальных символовdrop
начинается с началаs
, а затем исходная подстрока -take
n из результата.d
, за исключением оставшейся части.n
, так как в противном случае нормальные части будут удлинены.take
возвращает всю строку, если указанная длина слишком велика, поэтому мы можем использовать любое число>=n-1
для оставшейся части.d+n*0^(n-i)
дает,d
еслиi<n
иd+n
еслиi==n
. Она использует , что0^x
это1
когдаx==0
, но0
еслиx>0
.источник
Python 2 ,
68 6765 байт[]
x[p*i:p+p*i]
какx[p*i][:p]
Попробуйте онлайн!
источник
x[p*i:p+p*i]
наx[p*i:][:p]
:p
😛 Молодец, превзошел все остальные ответы Python!C ++ 14,
209180 байтЭто слишком долго, но использует оператор деления:
Использование:
Онлайн версия: http://ideone.com/hbBW9u
источник
Pyth, 9 байт
Попробуйте онлайн
Как это работает
Сначала
Q
происходит автоинициализацияeval(input())
иz
выполняется автоинициализацияinput()
.источник
Желе , 11 байт
Попробуйте онлайн!
источник
Ржавчина , 107 байт
Попробуйте онлайн!
отформатирован:
Это просто
map
указатели на правильные срезы источникаstr
(collect
входящие в aVec
) и удаляет остаток.К сожалению, я не могу сделать это закрытием (74 байта):
так как компилятор не работает с
и если я предоставлю тип
s:&str
, время жизни неправильное:источник
Сетчатка , 92 байта
Попробуйте онлайн! Объяснение: Первый этап преобразует количество частей в одинарный, а также принимает длину строки. Затем второй этап делит длину на количество частей, оставляя остаток. Третий этап снова умножает результат на количество частей. Это дает нам правильное количество строк правильной длины, но они еще не имеют содержимого. Количество частей теперь может быть удалено четвертым этапом. Пятая стадия меняет всех персонажей. Это приводит к переключению исходного содержимого со строками-заполнителями, но хотя теперь оно находится в нужном месте, оно в обратном порядке. Заполнители выполнили свою задачу и удалены шестым этапом. Наконец, седьмой этап возвращает персонажей обратно в их первоначальный порядок.
источник
Perl 6 , 36 байт
Попробуйте онлайн!
Возвращает список списков строк, где последний элемент является остатком (если он есть).
Объяснение:
источник
JavaScript (ES6), 77 байт
Возвращает массив из двух элементов: разделенных строковых частей и оставшейся части.
Тестовый фрагмент
источник
Japt , 18 байт
Проверьте это онлайн! (использование
-Q
флаг для визуализации вывода)объяснение
источник
Python,
827674 байтаНу, похоже, это соответствует бонусным баллам. Могу ли я получить печенье вместо этого? Ой, подождите, они не настоящие? Штопать...
Попробуйте онлайн!
источник
len(h)
? :)Python,
95, 87, 7673 байтаПопробуйте онлайн!
источник
05AB1E , 12 байтов
Попробуйте онлайн!
объяснение
источник
Брахилог , 16 байт
Попробуйте онлайн!
Принимает ввод как список
[string, number]
и выводит как список[remainder, parts]
. (Для ясности запятые были заменены точкой с запятой в контрольных примерах «Hello, world!», Поскольку фрагменты строки не печатались в кавычках.)(Я также заменил запятую в коде точкой с запятой для согласованного формата вывода. С запятой , случаи без остатка будут просто выводить части без пустого остатка, и как бы хорошо это ни было для некоторых целей, я не на самом деле знаю, почему это так работает ...)
После получения целых 16 байтов я попытался сделать что-то на основе
+₁ᵗ⟨ġl⟩
работы, но, поскольку исправления становились все длиннее и дольше, я решил, что пока просто буду придерживаться своего первоначального решения.источник
C (gcc), 72 байта
Попробуйте онлайн
источник
Формула Excel,
185173165161149 байтСледующее должно быть введено как формула массива ( Ctrl+ Shift+ Enter):
Где
A1
содержится ваш вклад (например12345678
) иB1
содержит делитель. Это также использует оператор деления Excel в качестве бонуса.После ввода формулы в виде формулы массива выделите ее в строке формул и оцените, используя, F9чтобы вернуть результат, например:
-12 байт: замените каждый
INDIRECT("1:"&B1+1)
на,OFFSET(A1,,,B1+1)
чтобы сэкономить 2 байта за один раз, а также уберите лишние скобки.-8 байт: удалить избыточную
INDEX
функцию.-4 байта: переделать обработку «остатка».
-12 байт: удалить избыточность
INT(LEN(A1)/B1)
путем смещения массива, сгенерированногоROW(OFFSET(A1,,,B1+1))
на -1.источник
Python 2 ,
7776 байт-1 байт благодаря musicman523.
Попробуйте онлайн!
источник
Рубин , 53 байта
Попробуйте онлайн!
источник
Mathematica, 58 байт
Чистая функция, принимающая список символов и положительное целое число в качестве входных данных. Например, последний контрольный пример вызывается
и возвращает:
источник
Haskell,
12088 байтов (спасибо Эрджану Йохансену!)Имеет ли
div
оператором деления?Мне любопытно, как я мог сократить это, я еще не изучил все уловки.
источник
t=splitAt;x!s|n<-div(length s)x,let g""=[];g s|(f,r)<-t n s=f:g r,(a,b)<-t(n*x)s=(g a,b)
. Итак, (1) многократно используемый идентификатор может быть сокращен, особенно если он длинный. (2) Охранники и паттерны почти всегда корочеlet
...in
,where
иif
then
else
. (3) Сравнение с образцом часто лучше, чем проверка на равенство. (Хорошо, чтоlet
в паттерне шаблонов это не так просто, я недавно узнал об этом от кого-то еще здесь.) И посмотрите codegolf.stackexchange.com/questions/19255/… .let
в охране довольно коварны. Но более короткий код более читабелен, верно?Ом, 3 байта (не конкурирующие?)
Не конкурирует, потому что встроенный модуль еще не реализован в TIO, и у меня нет компьютера, чтобы проверить, работает ли он в последней версии репо.
Встроенный ¯ \\ _ (ツ) _ / ¯. Я использовал неправильный встроенный ... Но эй, есть еще один, лежащий вокруг.Теперь я использовал неверный встроенный два раза (или один встроенный неправильно работает с остатками).Получу ли я бонусные баллы, потому что
v
это (этаж) деление?источник
Hello, world!
5
контрольный пример неправильный. Попробуйте онлайн!CJam , 16 байтов
Анонимный блок ожидает аргументы в стеке и оставляет результат в стеке после.
Попробуйте онлайн!
объяснение
Ожидает аргументов как
number "string"
.источник
J , 26 байт
Помимо элиминирующих пространств и промежуточных ступеней, это не игра в гольф. Я ожидаю, что я как-то прошел долгий путь, что с моими скобками и ссылками на аргументы (
[
и]
).См. Блокнот Jupyter для тестовых случаев, таких как следующие:
источник
Р ,
7963 байта-16 от Джузеппе, исправляющего индексацию
Попробуйте онлайн!
Построен вокруг предоставления векторных входов
substring()
источник
PHP , 152 байта
Спасибо @ JörgHülsermann (скобки чаевые!)
Попробуйте онлайн!
источник
preg_replace
является альтернативой или вы можете использовать[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
в первом заездеPython 3 , 94 байт
Попробуйте онлайн!
источник
PowerShell v3 + ,
72, 80 байтПредполагает
$s
содержит входную строку;$n
содержит количество символов на «кусок». Это также предполагает, что «StrictMode» выключен. В противном случае будет возвращена ошибка из-за индексации дальше в массив, чем фактически существует (то есть, если массив имеет 4 элемента, и я вызываю несуществующий 5-й элемент). С выключенным StrictMode PS не волнует, и он проигнорирует ошибку.Используя нотацию,
($s|% ToCharA*)
я смог сохранить 1 символ по сравнению с$s.ToCharArray()
:)Обновить:
Обновленный код для удовлетворения требований Снова предполагает,
$s
содержит входную строку; однако это время$n
содержит количество «штук». Остальная часть печатается последней. И я использовал оператор деления PowerShellПопробуйте онлайн!
источник