Сумасшедший преподаватель математики хочет закодировать все свои исследования, используя систему, гарантирующую, что ее найдут даже самые хитрые конкуренты!
С этой целью профессор решил изменить базу не только числа, которое они пишут, но и каждой отдельной цифры в этом номере, в соответствии с тем, в каком месте находится цифра (считая справа, начиная с 1). Например:
Число 0 имеет одну цифру, поэтому оно представлено в базе 1: 0
Число 1 будет иметь одну цифру в базовой десятке, но в системе нашего профессора это недействительно. Первое место зарезервировано только для базовой цифры 1! Это означает, что его нужно перенести на второе место, где разрешено основание 2: 10
Число 2 требует написания как минимум основы 3: 100
Но теперь число 3 можно записать, изменив цифру во втором месте: 110
и 4 как так: 200
Вот еще несколько примеров, которые помогут вам понять:
5: 210
6: 1000
7: 1010
8: 1100
9: 1110
10: 1200
11: 1210
12: 2000
13: 2010
14: 2100
15: 2110
16: 2200
17: 2210
18: 3000
Используя эту систему, заметки профессора не будут иметь никакого смысла ни для кого, кроме них, и они могут наконец захватить мир !!!! Спи спокойно ночью.
Конечно, метод кодирования должен быть как можно более неясным.
Ваша задача - написать 10 фрагментов кода, каждый из которых представляет одну из 10 основных цифр.
0 1 2 3 4 5 6 7 8 9
который при объединении в порядке числа, подлежащего преобразованию, произведет число, записанное в дьявольской системе нумерации профессора (метод вывода может быть на ваш выбор, но должен быть удобочитаемым числом, используя только цифры 0-9)
Например, если мои фрагменты:
0 = обезьяна 1 = пример, 2 = код, 3 = гольф и 9 = тест
тогда
19 = EXAMPLETEST -> 3010
20 = кодовый ключ -> 3100
21 = кодовый пример -> 3110
22 = КОДЕКС -> 3200
23 = CODEGOLF -> 3210
Не нужно рассматривать входные числа с более чем 10 цифрами или отрицательными числами, хотя, если вы захотите написать код для дополнительных цифр, вы получите дополнительные баллы. Это кодовый гольф, поэтому самый короткий ответ (используя объединенные байтовые суммы всех фрагментов) выигрывает, и стандартные лазейки не допускаются.
ДОБАВЛЕНИЕ: Прежде чем кто-либо начнет понимать, является ли 0 правильным представлением 0 в базе 1, я хотел бы напомнить вам, что этот профессор псих. Живи с этим.
источник
Ответы:
Mathematica (среда REPL), всего 858 байт
Вот 86-байтовый фрагмент кода для цифры 9:
Фрагменты кода для цифр от 1 до 8 идентичны, за исключением того, что цифра 9 заменена соответствующей цифрой. Фрагмент кода для цифры 0 идентичен, за исключением того, что
+9
просто удаляется.a~IntegerDigits~MixedRadix@Range[b,1,-1]
вычисляет список цифр факториальной системы чиселa
, если их количествоb
не меньше, чем количество цифр;FromDigits
преобразует этот список цифр в обычное целое число-10 для целей вывода. (Если какой-либо из элементов списка превышает 9, происходит нечто забавное.)В среде REPL Mathematica вычисления могут заканчиваться точкой с запятой для подавления вывода; поэтому будет отображаться только последний вывод в цепочке, разделенной точкой с запятой. Мы рекурсивно определяем целое число,
a
обозначаемое фрагментами, а также ограничениеb
числа необходимых цифр факториальной системы. КомандаValueQ@a||(a=0;b=3)
инициализирует эти переменные, если они неинициализированы (то есть в первом фрагменте), и в противном случае оставляет их в покое; затемa=10a+9;b++
проводит рекурсию. И, наконец, исходное значение1;
предназначено для склеивания фрагментов: оно умножает промежуточные вычисления на 1 (что мы никогда не видим).источник
Goruby, 790
810980Вот вторая попытка, основанная на том факте, что в практически любой оболочке печать возврата каретки ("\ r") без перевода строки ("\ n") перезапишет ранее напечатанную строку, в конечном итоге гарантируя, что будет напечатан только последний бит (то есть, конечный результат) показан.
Это должно быть запущено в оболочке, например
ruby name_of_file.rb
.Это работает для положительных чисел неограниченной длины.
Код представляет собой десять копий фрагмента ниже, с
X
заменой (вверху) цифрами от 0 до 9, по одной на фрагмент.То есть фрагмент, представляющий (например) 8, будет выглядеть так:
Задача гласит, что фрагменты должны быть «объединены» для создания представления многозначного числа, поэтому, чтобы добавить цифру к числу, просто поместите ее в квадратные скобки в конце числа. Таким образом, число 103 (в десятичном виде) будет:
источник