Учитывая строку 1
и 2
любой длины, написать код (не должен быть функцией больше, все будет просто отлично) , который вычисляет , сколько шагов это нужно сжать строку в окончательной форме, следуя этому критерию:
Если строка 112112
, это означает , что вы должны напечатать A 1, два 1s и 2, как это:
1112
. Когда вы снова выполните операцию, вам придется распечатать 1 и 2. Вы получите 12
. Затем вы печатаете один 2, получив 2
. Это окончательная форма, так как эта строка больше не будет меняться. Ваш код будет выведен 3
, так как вам нужно 3 шага, чтобы добраться до окончательной формы.
Другие правила
Если строка имеет неравномерную длину, последний номер остается нетронутым.
Каждая строка, которая больше не может изменяться (например
222222
), считается окончательной формой.Вы не можете использовать любой внешний источник.
Ваш код должен работать с каждой строкой
1
и2
.Самый короткий код выигрывает, так как это код-гольф.
Ваш код должен печатать каждый шаг.
Каждый метод ввода будет в порядке.
Примеры
Input >> 122122122121212212
Your code has to print:
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps:7 (you can omit the "Steps")
---- ---- ---- ----
Input >> 22222221
Your code has to print:
22222211
2222221
2
---- ---- ---- ----
Input >> 2222
Your code has to print:
0
РЕДАКТИРОВАТЬ: Сильно отредактировано. Извините за это.
1 11 2
. Каждые два числа являются парой: первое число в паре говорит, сколько раз визуализировать второе число в паре. Любая последняя нечетная цифра без парного партнера отображается как есть.Ответы:
Ruby 1.9+, 73 символа
Я считаю правило без регулярных выражений глупым и произвольным, так что вот злобноерешение на основе регулярных выражений:Тестовый забег:
Последняя строка - это количество шагов.
Редактировать: ограничение регулярных выражений было снято Vereos.
источник
С -
156154Мой первый код гольф здесь!
Тестовое задание:
Выход:
источник
GolfScript: 69 символов
Каждая итерация внутреннего цикла находит первые 2 числа в строке и использует их для формирования блока формы
{num1 num2 '' + *}
. Когда этот блок оценивается, мы получаем желаемое чтение этих чисел. Повторяйте это, пока не останется больше персонажей. Затем повторите этот цикл, отслеживая количество итераций и печатая.Образец:
источник
Питон - 126
Это не печатает входное значение. Если нужно, то двигайтесь
print s;
вправо, прежде чемn="";
Примечание: вы сказали «функция», так что это функция. Вот версия, которая не является функцией (127 символов):
(Если я могу сделать так, чтобы пользователь вставил число в число 118 (вставьте данные между кавычками в первой строке)):
Образец прогона:
В качестве бонуса каждое из этих решений работает для строк, содержащих большие числа (до 9), но некоторые строки выдают все большие и большие выходные данные (например,
99
)источник
JavaScript, 107
(требуется поддержка функции стрелки, например, как в Firefox)
s
это строка вводаВ каждом раунде мы используем регулярное выражение,
.?.?
чтобы взорватьсяs
в массив двухсимвольных строк, затемmap
эти строки в их уменьшенные формы и склеить массив обратноr
сохраняет результат текущего раунда для сравнения с предыдущимs
k
это круглая стойкаМы ужасно злоупотребляем
prompt
(псевдонимомp
) как механизмом ввода и вывода, поскольку он может представлять сообщение пользователюисточник
Perl - 50 (+2) байтов
Требуются
-pl
ключи командной строки.Пример использования:
источник
PHP, 240
Пример: http://skyleo.de/codegolf.php?i=211222111111222
Я немного плох в Codegolf. Может быть, я не должен использовать только Java и PHP (и я должен думать более сложным)
источник
str_split
поскольку вы можете обращаться к отдельным символам в строке, как к массиву в PHP.R 158
Пример:
источник
МАТЕМАТИКА, 117
источник
POWERSHELL, 2
Основываясь на ответе Вереоса «Вы можете использовать любой метод ввода, сокращающий ваш код» на мой вопрос в комментариях ОП, следующий сценарий достигает результата:
Пример выполнения для "122122122121212212":
Очевидно, что это не серьезная запись - ее цель состоит в том, чтобы проиллюстрировать мою мысль о том, что разрешение любого метода ввода может тривиализировать фактический код, необходимый для получения ответа. Следовательно, метод ввода должен быть более точным.
источник
J, 41 символ
Как функция (ew parens! Не очень довольна ими):
В разобранном виде Пробный прогонисточник
Perl, 107 символов
Другой Perl-код явно превосходит это, но за это он стоит. Я использовал ключ -l за счет дополнительного символа:
Более разборчивая версия этого:
источник