Леонардо Пизанский (ок. 1175 - ок. 1245) более известен как Фибоначчи . Но это на самом деле сокращение от латинского «filius Bonacci» (сын Bonacci), который был составлен в 18 веке (согласно Википедии ).
В этом задании вам дадут порядковый номер (в буквальном смысле) от 1- го до 20- го, и вы должны вернуть соответствующий член в последовательности Фибоначчи .
Суть в том, что порядковый номер будет дан на латыни.
Пример : "двенадцатиперстная кишка" → .
Полная таблица ввода / вывода
input | meaning | output
--------------------+---------+--------
"primus" | 1st | 0
"secundus" | 2nd | 1
"tertius" | 3rd | 1
"quartus" | 4th | 2
"quintus" | 5th | 3
"sextus" | 6th | 5
"septimus" | 7th | 8
"octavus" | 8th | 13
"nonus" | 9th | 21
"decimus" | 10th | 34
"undecimus" | 11th | 55
"duodecimus" | 12th | 89
"tertius decimus" | 13th | 144
"quartus decimus" | 14th | 233
"quintus decimus" | 15th | 377
"sextus decimus" | 16th | 610
"septimus decimus" | 17th | 987
"duodevicesimus" | 18th | 1597
"undevicesimus" | 19th | 2584
"vicesimus" | 20th | 4181
правила
- Входные данные гарантированно будут точно одной из строк, описанных выше.
- Если это поможет, вы можете вместо этого взять его в верхнем регистре. Но это должно быть согласовано для всех записей. Смешанные случаи не допускаются.
- В зависимости от вашего алгоритма и языка, жесткое кодирование или вычисление условий последовательности могут либо выиграть, либо проиграть байты. Оба подхода явно разрешены.
- Это код-гольф !
Ответы:
R ,
9186 байтНайдите индекс суммы байтов в таблице поиска UTF8 с грубым принуждением и используйте волшебную функцию генерации Фибоначчи, чтобы дать ответ.
Попробуйте онлайн!
Редактировать: -2 байта за счет улучшенного округления чисел
Изменить: -3 байта с изменением поиска (спасибо за подсказку, @Giuseppe!)
источник
chartr
UTF8 суммы с UTF8 значенияintToUtf8
chartr
"sextus decimus"
, Джузеппе.Рубин,
10493 байтаПопробуйте онлайн!
Просто берет сумму байтов по модулю 192 по модулю 76 по модулю 23 и индексирует в таблицу поиска. (Магические числа, найденные грубой силой.)
источник
Чисто , 87 байт
Все экранирования, за исключением
\n
, обрабатываются как один байт, так как компилятор в порядке с фактическими необработанными значениями. (TIO и SE имеют проблемы с тем, что он не является действительным UTF-8, и поэтому здесь он избежал)FryAmTheEggman сделал хорошую демонстрацию / обходной путь: здесь
Попробуйте онлайн!
Определяет функцию
$ :: [Char] -> Int
, которая использует уникальность в суммировании значений символов в верхнем регистре, чтобы определить, какой член в последовательности (сгенерированный вспомогательной функциейk
) вернуть.источник
6502 машинный код (C64), 82 байта
Это использует хеширование (конечно), но оптимизировано для краткой реализации на 6502, используя преимущество флага переноса, установленного путем сдвига и используемого дополнительно. Магические числа для хеширования были найдены при помощи грубой форсировки с помощью небольшой программы на Си; в
FF
байты несчастными отверстия в хэш - таблице;)Количество байтов: 2-байтовый адрес загрузки, 38-байтовый код, 42-байтовая хеш-таблица для значений.
Онлайн демо
Использование:
SYS49152"[ordinal]"
напримерSYS49152"DUODECIMUS"
. (обратите внимание, что буквы отображаются заглавными буквами в конфигурации C64 по умолчанию).Важно : перед первым запуском введите
NEW
команду. Это необходимо, потому что команда C64 BASIC работаетLOAD
с некоторыми векторами BASIC, даже при загрузке машинной программы по некоторому абсолютному адресу (как здесь$C000
/49152
).Прокомментировал разборку :
Тестовый набор C64 BASIC V2
(содержит машинную программу в
DATA
строках)Онлайн демо
источник
Perl 6 , 62 байта
Попробуйте онлайн!
Использует таблицу поиска в строке, а также генератор коротких последовательностей Фибоначчи.
источник
C (gcc) ,
135129 байтов6 байтов по предложению потолка и Логерна
Попробуйте онлайн!
Объяснение:
источник
return i;
наa=i;
Pyth , 54 байта
Тестирование
Обратите внимание: поскольку код использует некоторые непечатаемые символы, он может некорректно отображаться в Stack Exchange. Предоставленная ссылка ведет к рабочему и копируемому источнику.
Короче говоря,
Q[0]+Q[618%len(Q)]
дает уникальные результаты для всех принятых материаловQ
.источник
Python 2 , 292 байта
Попробуйте онлайн!
Генератор Фибоначчи бесстыдно украден из этого ответа .
Разбивает каждое слово на его значимые составные части и отбрасывает остальные (например, в «duodevicesimus» мы заботимся только о «duo ev es» -> «2 - 20» -> abs («2-20») -> 18).
Передает вычисленное значение (от смещения от 1 до 0) в функцию генератора Фибоначчи.
Ungolfed Объяснение:
источник
Python 2 ,
9779 байтПопробуйте онлайн!
Во-первых, мы хотим конвертировать из латинского в число
n
; это достигается путемрепликации входной строки достаточное количество раз, чтобы обеспечить общее количество не менее 11 символов; и затемвзяв хеш-мод 69 и превратив его в печатный символ.3
rd и10
th символы (с нулевым индексом) образуют уникальную пару,Теперь у нас есть
n
. Чтобы найти числоn
Фибоначчи, мы можем использовать метод округления , используя только столько цифр точности, сколько нам нужно, вплоть до Fib (20).источник
JavaScript (Node.js) ,
10097959291 байтПопробуйте онлайн!
Предупреждение: РАБОТАЕТ ИЗ-ЗА НЕТОЧНОСТИ ПЛАВУЩЕЙ ТОЧКИ
В JavaScript нет ни встроенной хеш-функции, ни достаточно короткой символьно-ASCII-функции (
String.charCodeAt
уже самая короткая), поэтому мне нужно самостоятельно определить простую хеш-функцию.Использовал тот же метод округления, что и Час Браун после вычисления хеша.
После целого дня перебора найдено лучшее:
b32_to_dec(x.length + x) % 12789 % 24
(* неточность с плавающей запятой)b32_to_dec(x.length + x) % 353 % 27
(* неточность с плавающей запятой)b36_to_dec(x.length + x[2]) % 158 % 29 - 4
b36_to_dec(x[2] + x.length) % 741 % 30
b36_to_dec(x[0] + x[2] + x.length) % 4190 % 27
parseInt(x.length + x, 32)
результатВерсия без использования погрешности с плавающей запятой: 95 байт
Попробуйте онлайн!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Хеш-таблица
источник