Это кодовая версия аналогичного вопроса, который я задал в стеке ранее, но подумал, что это будет интересная головоломка.
Получив строку длиной 10, которая представляет собой базовое число 36, увеличьте его на единицу и верните полученную строку.
Это означает, что строки будут содержать только цифры от 0
до 9
и буквы от a
до z
.
База 36 работает следующим образом:
Правая цифра увеличивается, первый с помощью 0
к9
0000000000> 9 итераций> 0000000009
и после этого a
To z
используется:
000000000a> 25 итераций> 000000000z
Если z
необходимо увеличить, он возвращается к нулю, а цифра слева увеличивается:
000000010
Дальнейшие правила:
- Вы можете использовать заглавные или строчные буквы.
- Вы не можете опускать ведущие нули. И вход, и выход являются строками длиной 10.
- Вам не нужно обрабатывать в
zzzzzzzzzz
качестве ввода.
Тестовые случаи:
"0000000000" -> "0000000001"
"0000000009" -> "000000000a"
"000000000z" -> "0000000010"
"123456zzzz" -> "1234570000"
"00codegolf" -> "00codegolg"
code-golf
string
base-conversion
Джек Хейлз
источник
источник
"0zzzzzzzzz"
(изменить самую значащую цифру) в качестве контрольного примера. Это споткнуло моё решение на C из-за одной ошибки.Ответы:
05AB1E , 10 байтов
Ввод в верхнем регистре .
Код
объяснение
Использует кодировку 05AB1E . Попробуйте онлайн! или Проверьте все контрольные примеры .
источник
Japt , 13 байт
Попробуйте онлайн! и проверить контрольные примеры
Принимает ввод в виде строки
объяснение
источник
JavaScript (ES6), 45 байт
Сохранено 4 байта благодаря @OOBalance
Попробуйте онлайн!
источник
Haskell , 58 байт
Попробуйте онлайн!
Очень грубая стратегия: сгенерируйте все строки base-36 длины-10 по порядку и найдите ту, которая идет после ввода в списке. Потратьте огромное количество времени на строки далеко от начала списка.
Haskell , 60 байт
Попробуйте онлайн!
Читает строку слева направо, пока не достигнет символа, за которым следует суффикс всех z, который может быть пустым. Увеличивает этот символ и заменяет z на 0.
источник
Stax , 7 байт
Запустите и отладьте его
Объяснение:
источник
C (gcc) ,
5048 байтовЯвный флаг переноса не был необходим после реструктуризации цикла до конца, как только перенос не произошел. Настройка 9-> A выполняется во время проверки петли.
Благодарю потолочный кот за предложение.
Попробуйте онлайн!
Оригинальная версия:
7157 байтЭта версия использует флаг переноса для распространения обновлений: я установил для него значение truey, чтобы начать приращение. Строка изменяется на месте и принимает только 0-9, AZ. Сложной задачей было убедиться, что 9-> A правильно обрабатывается на переносах.
Изменить: я изменил указатель ввода в качестве флага переноса.
Попробуйте онлайн!
источник
C
82815350 байтовНепосредственно изменяет входную строку; ввод и вывод в верхнем регистре. Попробуйте это онлайн здесь . Спасибо Арно за игру в гольф 24 байта, а допуск к игре в гольф - еще 3 байта.
Ungolfed:
источник
ZZZZZZZZZZ
. Ответ ErikF делает то же самое, но еще короче: codegolf.stackexchange.com/a/169468/79343Симулятор машины Тьюринга онлайн , 745 байт
Онлайн переводчик
источник
Perl 6 ,
34 3230 байтБлагодаря nwellnhof за -2 байта благодаря использованию
o
оператора для объединения функцийПопробуйте онлайн!
Функция, которая преобразует аргумент в базу 36, добавляет 1, конвертирует обратно и затем форматирует его. Теперь использует ту же тактику, что и ответ Аднана, чтобы сохранить ведущие нули.
источник
{S/.//}o{base :36(1~$_)+1: 36}
для 30 байтов.o
при игре в гольф, но я вижу, где это может быть полезно!.succ
(увеличение на единицу) не работаетMATL , 12 байт
Попробуйте онлайн!
источник
Haskell , 63 байта
Попробуйте онлайн! Переворачивает строку и проверяет первый символ:
9
заменяется наa
.z
заменяется на A0
и рекурсивно проверяется следующий символ.succ
функции-преемника, которая может использоваться в Chars, потому что они являются экземпляром класса Enum .Наконец, полученная строка снова переворачивается.
источник
6502 (NMOS *) машинный код подпрограмма , 26 байтов
*) использует «нелегальный» код операции
ISB
/0xF3
, работает на всех оригинальных чипах NMOS 6502, а не на более поздних вариантах CMOS.Ожидается указатель на 10-символьную строку в
$fb
/$fc
которая, как ожидается, будет числом base-36. Увеличивает это число на месте.Не делает ничего толкового при неправильном вводе (например, более короткая строка) - обрабатывает
ZZZZZZZZZZ
"правильно" случайно;)Прокомментировал разборку
Пример ассемблерной программы C64 с использованием подпрограммы:
Онлайн демо
Код в синтаксисе ca65 :
источник
Сетчатка 0.8.2 , 12 байт
Попробуйте онлайн! Объяснение:
dl
Часть места назначения замещения расширяется до0-9a-z
покаo
копируется в источник, в результате чегоz0-9a-z
(хотя второеz
игнорируется, поскольку оно никогда не может совпадать). Это увеличивает соответствующие цифры..z*$
Часть шаблона совпадает с последним не-z
цифры плюс все хвостовоеz
с, таким образом , обработке переноса от их приращения к0
.источник
Рубин , 40 байт
Попробуйте онлайн!
0
с"zzzzzzzzzz"
возвращает строку длиной 11источник
брейкфук , 109 байт
Попробуйте онлайн!
источник
Apl (Dyalog Unicode) ,
302824 байтаСпасибо ngn за подсказку, чтобы сохранить несколько байтов.
Попробуйте онлайн!
Требуется ⎕IO 0
Использует верхний регистр
источник
'1',
частьюf
? затем1↓
станет частью его обратного(⎕D,⎕A)⍳'1',
->1,(⎕D,⎕A)⍳
(f⍣¯1)1+f←36⊥1,(⎕D,⎕A)⍳⊢
PHP,
6964 байтахромая версия :
Беги как труба с
-R
. Вход нечувствителен к регистру, вывод строчные.первый подход, 69 байт:
Беги как труба с
-F
зацикливающаяся версия, также 69 байтов :
младший PHP выдаст предупреждения для неопределенных констант.
Y
иA
строчными буквами для ввода строчных букв.Беги как труба с
-nR
... или попробуйте их онлайн .
источник
-R
и назвать его также 66 байтами.printf('%010s',($b=base_convert)(1+$b($argn,36,10),10,36));
- 59 байт($b=base_convert)(a,b,c)
. Я многому у тебя учусь.Python 2 , 88 байт
Попробуйте онлайн!
Увеличивает строку «вручную».
источник
Уголь , 14 байтов
Попробуйте онлайн!Ссылка на подробную версию кода. Объяснение:
Печать 9
0
с. Это служит для дополнения результата.Преобразуйте входные данные из базы 36, увеличьте их, затем преобразуйте обратно в базу 36. Затем измените результат на обратный и напечатайте его влево.
источник
Java 8,
907656 байтПринимает как прописные, так и строчные буквы для ввода. Выход всегда в нижнем регистре.
Спасибо Okx за игру в гольф 18 байтов.
Попробуйте это онлайн здесь .
Ungolfed:
источник
"".format("%10s",t).replace(' ','0')
1
в начале, а затем удалить его:s->Long.toString(Long.valueOf("1"+s,36)+1,36).substring(1)
"1"+s
=>1+s
JavaScript (ES6), 89 байт
Этот не настолько эффективен в байтах, как другая запись JavaScript , но я сделал это, не замечая этого правила:
Так что это не серьезная запись - просто для удовольствия! Он работает со строками общей длины, например
0abc
, и добавляет,1
когда первая цифра равнаz
, напримерzzz
->1000
. Ввод должен быть в нижнем регистре.объяснение
Выражение
(A, B, C)
фактически означает «делай A, потом делай B, потом возвращай C», что я использую для объявления некоторых переменных, которые я снова использую в коде.s
означает «строка»,l
означает «последний»,r
означает «отдых».Это рекурсивная функция. Для типичной строки, такой как
aza
, она будет просто увеличивать последний символ (см. Строку 6) -azb
. Но для строки, которая заканчиваетсяz
, напримерh0gz
, она будет работать сама на всем, вплоть до последнего символа (z
), и заменять ее0
вместо (см. Строку 5) -f(h0gz)
=f(h0g) + 0
=h0h0
.В
||'0'
строке 5 указано, что функция работает при вызове строки длиной 1 (то есть строка'z'
). Без негоf('')
вызывается (так как'z'.slice(0, -1)
есть''
), который имеет неопределенное поведение (буквально - попробуйте сами), и это бесполезно. Ожидаемый результатf('z')
- то'10'
, что мы получаемf('0') + 0
, поэтому мы используем||'0'
. (||'0'
особенно полезно, потому что это не мешает обычному случаю -r
быть по крайней мере 1-длины (s
мешает по крайней мере 2 длины) - потому что строки являются ложными, только когда они имеют длину 0).Метод увеличения строки такой же, как и в другой записи JS: преобразовать «число» base-36 в фактическое число, добавить 1, а затем преобразовать его обратно в base-36. Нам не нужно беспокоиться о
1
приращении 'z' ('z'
->'10'
), поскольку на самом деле мы никогда не увеличиваем z (см. Строки 4 и 6: последний символ увеличивается только в том случае, если он не равен z).Кроме того, мы никогда не рискуем отбросить ведущие нули, потому что на самом деле мы никогда не манипулируем более чем одним символом за раз - только последним символом в строке. Остальные символы аккуратно обрезаются, когда вы разрезаете любую строку и добавляете после слова.
источник
Чисто ,
8984 байтаПопробуйте онлайн!
Более короткое решение благодаря Laikoni .
Чисто , 115 байт
Мне нравится, когда я использую
limit(iterate...
Попробуйте онлайн!
Создает ответ без преобразования баз с использованием сопоставления списков.
? :: [Char] -> [Char]
выполняет перенос вперед.@ :: Char -> Char
увеличивается на единицу, учитывая разрыв между'9'
и'z'
.$ :: [Char] -> [Char]
увеличивает последний символ и применяется?
до тех пор, пока значение не стабилизируется.источник
R ,
152123 байтПопробуйте онлайн!
Совершенно другой подход. Получите кодовые точки ASCII и рекурсивно «увеличивайте» крайнюю правую кодовую точку (заставляя
0
(57) переходить кa
(97) иz
(122) возвращаться к0
(48)), пока не закончитсяz
s. Конвертировать обратно в строку.Старая версия
Попробуйте онлайн!
Это все текстовые манипуляции, которые не идут рука об руку с игрой в R код.
Заменить все
z
в конце строки на0
. Найти местоположение последнего элемента перед вновь отчеканенным трейлингом0
s. Найти следующую базовую 36 цифру. Внести изменения. Будьте рады, что едва ли победили онлайн-симулятор машин Тьюринга.источник
strtoi
чтобы вы начали; Есть еще пара трюков для игры в гольф до 72.strtoi
ограничивается довольно маленькими числами, хотя? Я отказался от этого некоторое время назад.int
ограничение было так проблематично. Облом! Для потомков это было мое неудачное решение: попробуйте онлайн!Звездный , 325 байт
Попробуйте онлайн!
Объяснение:
источник
Wolfram Language (Mathematica) , 39 байт
Попробуйте онлайн!
источник
Python 3.6+ и gmpy2 , 62 байта
Попробуйте онлайн!
(Обратите внимание, что gmpy2 не является частью стандартной библиотеки Python и требует отдельной установки)
источник
f=
. Анонимные функции обычно считаются находкой в коде гольфа.Пайк , 11 байт
Попробуй это здесь!
Может быть короче на 2 байта при следующем изменении языка: если используется шестнадцатеричный режим, измените все использования base_36 и base_10 на base_92 (который в любом случае не является базовым 92 в этом контексте)
источник
sed , 94 байта
Попробуйте онлайн!
Сед очень страдает от необходимости менять персонажей при поиске.
источник
Зш ,
4136 байтПопробуйте онлайн!
источник
Желе , 21 байт
Попробуйте онлайн!
Использует прописные буквы. Ссылка TIO позволяет использовать нижний / смешанный регистр.
источник