РЕДАКТИРОВАТЬ: Если вы используете Lisp, я дал некоторые рекомендации в подсчет байтов.
Цель: создать самую короткую функцию, которая разбивает строку на нецифровые символы и возвращает массив, состоящий только из цифр в каждой строке, без использования каких-либо регулярных выражений. Ведущие нули должны быть включены в каждую строку.
Текущие результаты (разделены на категории):
- C / C ++ / C # / Java: 68 (C) ....
- GolfScript / APL / J: 13 (APL)
- Все остальные: 17 (Bash, использует
tr
), 24 (Ruby)
Правила:
(Прошу прощения за длительность)
- Формат должен быть как функция с одним строковым аргументом. При необходимости для правильного возврата массива может быть добавлено до двух дополнительных аргументов (например, для sh / csh / DOS Batch требуется дополнительная ссылка на переменную для возврата и т. Д.).
- Объявление первичной функции не учитывается, равно как и импорт других стандартных библиотек. `# include`s,` import`s и `using`s не учитываются. Все остальное делает. Это включает в себя `# define`s и вспомогательные функции. Извините за путаницу. Обратитесь к этому как к полезному руководству относительно того, что учитывается / не учитывается (написано в синтаксисе в стиле C)
// к общему количеству не относится, может быть опущено, если // неочевидно, как половина стандартной библиотеки Java. #include <stdio.h> import some.builtin.Class // не в счет, см. выше #define printf p // рассчитывает на общее количество / * Подсчитать любые другие директивы препроцессора и т. Д. * / int i = 0; // считает SomeFunction (); // считает char [] [] myMainSplitFunction (массив char [] []) {// не считается // Здесь все имеет значение return returnArray; // Даже это считается. } // не считается / * Здесь учитывается все, включая объявление * / char [] [] someHelperFunction (char [] string) { // материал } // даже это считается
- Выходные данные должны быть строковым массивом или аналогичным (допустимы списки массивов в Java и аналогичные). Примеры принятого выхода:
String[]
,char[][]
,Array
,List
, иArray
(объект). - Массив должен содержать только строковые примитивы переменной длины или строковые объекты. В возвращении не должно быть пустых строк, за исключением ниже. Примечание: строки должны содержать строку последовательных совпадений, например, пример ввода и вывода ниже.
- Если совпадений нет, тело функции должно вернуть
null
пустой массив / список или массив / список, содержащий пустую строку. - Внешние библиотеки не допускаются.
- Окончания строки DOS считаются одним байтом, а не двумя (уже включены в мета, но необходимо подчеркнуть)
- И самое главное правило: регулярные выражения запрещены.
Это вопрос игры в гольф , поэтому выигрывает самый маленький размер. Удачи!
И вот несколько примеров входов и выходов (с выходами в стиле C):
Ввод: "abc123def456" Вывод: ["123", "456"] Ввод: "aitew034snk582: 3c" Выход: ["034", "582", "3"] Ввод: «as5493tax54 \\ 430-52@g9.fc» Вывод: ["5493", "54", "430", "52", "9"] Входные данные: "sasprs] tore \" re \\ forz " Вывод: null, [], [""] или аналогичный
Пожалуйста, укажите, сколько байтов используется в ваших ответах, и, как всегда, счастливого гольфа!
Руководство для Лисп
Вот что учитывается и не учитывается на диалектах Лисп:
;;; Опция 1 (defun extract-strings (ab); не считается (вещи) ;;; Все здесь имеет значение ); Не считается ;;; Вариант 2 (defun extract-strings (string & aux (начало 0) (конец 0)); Не считается (вещи) ;;; Все здесь имеет значение ); Не считаетсяВсе остальные лямбды полностью учитываются в счет байтов.