Соревнование
В этом задании вы должны выполнить две разные (но связанные) задачи в зависимости от порядка ввода.
Ваша программа получит строку s
и целое число в n
качестве входных данных и будет
- разделить
s
на куски длины,n
если наs
первом месте. Последний элемент будет короче, если необходимо. - разделить
s
наn
кусочки равной длины, если этоn
произойдет первым. Еслиlen(s)
не кратноn
первымlen(s) mod n
элементам будет один длиннее.
Вы можете взять только эти 2 входа. s
никогда не будет содержать только цифры.
Заметки
- Вы можете использовать обратное отображение. Отметьте это в своем ответе, если вы это сделаете.
s
будет содержать только печатные символы ASCII (без перевода строки).- Вы не можете использовать любые встроенные функции, которые решают обе эти задачи напрямую. Все остальные встроенные функции разрешены.
- Вы должны взять оба аргумента из одного источника.
- Вы можете принимать аргументы в упорядоченном списке или любом другом формате, который четко указывает их порядок, если он однозначен.
- Вы можете взять входные данные как одну строку / поток и использовать символ, который не является допустимым входным (например, нулевой байт), чтобы разделить их.
n
всегда будет равно или меньше длиныs
и больше нуля.- Вы можете вывести итоговый список в любом подходящем формате, если он четко указывает конкретные части и их порядок.
пример
Входные данные: programming, 3
последний элемент содержит только 2 символа, потому что 11 не делится на 3.
Выходные данные: ["pro", "gra", "mmi", "ng"]
Вход: 3, programming
11 не кратен 3, поэтому первые 2 элемента будут на один длиннее:
Выход: ["prog", "ramm", "ing"]
правила
- Функция или полная программа разрешены.
- Правила по умолчанию для ввода / вывода.
- Применяются стандартные лазейки .
- Это код-гольф , поэтому выигрывает меньшее количество байт. Tiebreaker является более ранним представлением.
Контрольные примеры
Тестовые случаи были созданы с помощью этой программы Pyth (используются встроенные функции, поэтому нет правильного ответа). Спасибо @FryAmTheEggman за предоставление базовой версии этого!
3, helloworld -> ['hell', 'owo', 'rld'] helloworld, 3 -> ['hel', 'low', 'orl', 'd'] 1, программирование -> ['программирование'] программирование, 1 -> ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'i', 'n', 'g'] 8, программирование -> ['pr', 'og', 'ra', 'm', 'm', 'i', 'n', 'g'] программирование, 8 -> ['programm', 'ing'] 9, код гольф -> ['c', 'o', 'd', 'e', '', 'g', 'o', 'l', 'f'] код гольф, 9 -> ['код гольф'] 4, 133tspeak -> ['133', 'ts', 'pe', 'ak'] 133tspeak, 4 -> ['133t', 'spea', 'k']
Удачного кодирования!
Ответы:
MATL,
462621272942 байтаПопробуйте онлайн! (Немного обновлено для работы с последней версией языка)
объяснение
источник
e
запрещено?XUZN?...
наU?...
и поменять местами двеif
ветви. Кроме того, вам не нужно3$
e
не решает проблему напрямую, поэтому я не считаю ее запрещенной, нет.JavaScript (ES6), 132 байта
Это, вероятно, безнадежно перегружено.
источник
JavaScript (Firefox),
8887 байтНазовите это как
(...)("programming")(3)
использование Firefox 30+.источник
Рубин, 119 байт
И я занимаю первое место на 2 байта ...
источник
x.scan(/.{,#{y}})
в первом случае это работает так же хорошо, как и для разделения строк. Или это считается встроенным?AWK,
121130128122 байтЕдинственная проблема заключается в том, что первая запись - это строка, которая начинается с числового значения. Это приведет
AWK
к тому, что строка будет отображаться как этот номер, а вторая запись - как строка.ОК ... исправлена ошибка с числовым значением, но добавлено 9 байт :(.
Немного переработан, чтобы сэкономить пару байтов.
Почти вернемся к исходной длине. :)
источник
Haskell, 131 байт
Пример использования:
Как это работает: основная работа выполняется вспомогательной функцией,
q
которая принимает пару чисел(d,m)
и строкуs
. Сначала создается списокm
времен,d+1
за которым следует бесконечное множествоd
(например,(1,3)
->[2,2,2,1,1,1,1,1,...]
). Затем он используетsplitPlaces
для разбиенияs
на куски длины, указанные в списке.splitPlaces
останавливается, если неs
хватает элементов, так что бесконечный список в порядке.Основная функция
#
проверяет, какой параметр является числомn
/ строкой,str
и вызываетq
либо,(div (length str) n, mod (length str) n)
либо(n, 0)
плюсstr
.источник
C # (LINQPAD) - 335 байт
Входная часть чтения заняла немного места. Победитель самого длинного ответа.
Использование № 1:
Использование № 2:
источник
Pyth, 181 байт
Давайте представим, что самый длинный код в байтах выигрывает \ o /
Попробуй это здесь! (У онлайн-интерпретатора, похоже, есть ошибка, он отображает ввод, а не должен)
Вот вывод из терминала:
Серьезно, я открыт для нового подхода. Я новичок в Python, поэтому я, вероятно, пропустил несколько коротких позиций.
Я имею в виду, я думаю, что мой ответ неэффективен с точки зрения того, что он длиннее, чем ответ javascript ...
источник
testcases
. Тестовые случаи генерируются Pyth. Решение есть.xcsJKcJsK
, гдеJ
иK
два аргумента.PHP, 114 байт
(Заменить
+@$p
с ,is_numeric($p)
чтобы исправить.)(Вставьте
~
для печати ASCII,a&
для любой ASCII, прежде чем$t;
исправить.)-nr
или попробуйте онлайн .источник
PowerShell ,
122118 байтПопробуйте онлайн!
Меньше гольфа:
источник