Человек из звезд пришел на Землю! К счастью, президент Соединенных Штатов Дональд Трамп имеет бесконечный кубик. Используя этот кубик, он может вызвать номер, который вы , мэр Подунка , должны использовать, чтобы определить, кого нужно отправить, чтобы остановить захватчика! Но будьте осторожны, вы можете отправить только ограниченное количество байтов на обратной стороне вашей лягушки !
Учитывая пользовательский ввод (который будет положительным целым числом), вы должны вернуть строку в зависимости от того, к какой категории относится число.
- Если число является числом Фибоначчи , вы должны вывести Ness .
- Если число является числом Лукаса , вы должны вывести Лукас .
- Если число одновременно число Лукаса и число Фибоначчи , то необходимо вывести Travis .
- Если число ни аа число Лукаса , ни число Фибоначчи , то необходимо вывести Пеппи .
Примеры
Вот несколько тестов:
1 => Трэвис 2 => Трэвис 3 => Трэвис 4 => Лукас 5 => Несс 6 => Пеппи 7 => Лукас 8 => Несс 610 => Несс 722 => Пеппи 843 => Лукас
правила
- Это код-гольф , выигрывает самый короткий ответ в байтах.
- Ваша программа может быть полной или анонимной функцией.
Бонусы
Есть пара бонусов, которые вы можете использовать, чтобы помочь вашей лягушке быстрее передать данные Президенту Трампу:
- Для
-15
байтов: если введен номер2016
, вы должны вывестиTrump
, как он на пике своего президентства.
0, 1
то время как другие начинаются с1, 1
, я считаю, что это зависит от используемого вами определения. Нередки случаи, когда числа Лукаса начинаются с2, 1
, например, OEIS имеет обе версии ( 1 , 2 ), но та, которая начинается с 2, - это фаза определения, с которой прошла.Ответы:
Pyth, 59 - 15 = 44 байта
или 42 байта после исправления ошибки
HexDump:
Первые два символа (
&Q
) необходимы из-за ошибки разбора Pyth, возникающейQ
после."
сбоя. Исправление было применено. Если интерпретатор пост-исправления разрешен, -2 байта.Без нечитаемого сжатия строк:
Pyth, 63 - 15 = 48 байт
49 байт без козыря
Тестирование
Довольно просто, просто сгенерируйте последовательности, продублируйте один и проверьте членство.
Последовательности генерируются, начиная с
[1, 2]
и[2, 1]
, а затем применяя правило Фибоначчи.источник
Юлия,
146142121120 байтЭто создает безымянную функцию, которая возвращает логическое значение. Чтобы назвать его, дайте ему имя, например
f=n->...
.Ungolfed:
Исправлена проблема и сохранены 7 байтов благодаря Glen O!
источник
Mathematica
143156 - 15 (бонус) = 141 байтС 2 байтами, сохраненными благодаря LegionMammal978.
источник
False
иTrue
может быть заменен на1<0
и соответственно1>0
.Mathematica,
9287 байтВдохновлен ответом Sp3000 .
источник
Python 2, 107
Ключ - две чисто арифметические проверки для чисел Фибоначчи и Люка:
n
число Фибоначчи, если5*n*n+4
или5*n*n-4
является идеальным квадратомn
число Лукаса точно, если5*n*n+20
или5*n*n-20
является идеальным квадратомНа этом сайте есть пробные эскизы .
Таким образом, вывод зависит от значений
5*n*n+i
дляi
in{4,-4,20,-20}
. Функцияf
проверяет значениеi
, проверяя , не имеет ли соответствующее значение квадратный корень из целых чисел. Этоabs
просто для того, чтобы избежать ошибки получения корня отрицательного значения дляn=1, i=-20
.Функция
f
принимает значение числаn
для проверки из STDIN. Python оценивает это только один раз, а не один раз за вызов функции.То, не является ли число Фибоначчи, оценивается как
f(4)*f(-4)
использование неявного преобразования логического числа в число и аналогично для не Лукаса, и берется соответствующая строка. Если бы допускались конечные пробелы, чередование строк было бы короче.источник
Python 2, 117 байт
Для списка строк,
"Pippi Lucas Ness Travis".split()
такой же длины.источник
CJam,
585554 байтаНаивный подход к генерации чисел Фибоначчи и Лукаса с последующим подсчетом совпадений в обоих, преобразованием в двоичное и выбором подходящей строки.
Попробуйте онлайн .
источник
Серьезно, 69 байтов
До этого у Серьезно была встроенная функция
f
(индекс в числах Фибоначчи, -1, если не число Фибоначчи) ... но не индекс в списке или "в списке"! (Это было добавлено какí
.)В результате, это то, что я трачу на поиск, если входные данные являются числом Фибоначчи:
Вот что я трачу на создание списка чисел Лукаса:
И это то, что я трачу на поиск, если вход находится в списке чисел Лукаса:
Это строка, которая форматируется с использованием нотации Python% во что-то вроде
:610:=
и преобразуется в функцию, которая затем отображается в массиве и суммируется. (Числа Лукаса уникальны, поэтому сумма всегда равна 0 или 1.)Спасибо @Mego за последний бит с форматированием строки.
источник
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 байт+1 байт за
-n
флаг.С новой строки после точки с запятой, для удобства чтения:
Демо-версия:
Трюки:
Вы можете быть удивлены , почему мои переменные называются$a
,$b
,$%
, и$d
. Это отличный вопрос! На самом деле, это позволяет мне сохранить байт.на один байт короче
Это больше не применяется, потому что я играл в свой код, переставляя вещи, заставляя изменение имени переменной больше не сохранять байты. Я изменил его обратно, чтобы имена переменных снова имели смысл.$_-2?$f+$l*2:3
мягко интересно. По сути, мне пришлось использовать специальный случай2
для чисел Лукаса, потому что моя программа проверяет, является ли число числом Лукаса после «обновления» чисел Фибоначчи и Лукаса. Так2
считалось не-Лукас число.$_-2?foo:bar
это символ короче$_==2?bar:foo
. То же самое используется для2016
теста.Это также больше не соответствует действительности, потому что я смог реструктурировать программу, чтобы не требовался специальный регистр
2
. Но я все еще использую$_-2016?stuff:Trump
вместо$_==2016?Trump:stuff
, что на один байт длиннее.Говоря об этом, вы можете быть удивлены, как я сделал эту реструктуризацию. Я просто заставил программу делать в 9 раз больше итераций, чем необходимо, что стоит всего 2 байта (
*9
), но позволяет мне делать предположения в других местах, которые помогают в игре в гольф.Поскольку переменные по умолчанию равны нулю,
короче чем
Perl поддерживает голые слова, поэтому мне не нужно заключать в кавычки ни одну из моих строк (\ o /).
источник
-n
флагом (как отмечено в ответе).-n
флаг?while(<>) { ... }
цикл вокруг вашей программы. Смотрите: Perl docs .Юлия,
101100 байтUngolfed:
источник
{}
альтернативный синтаксисAny[]
устарел; это сэкономило бы пару байтов.Октава, 93 байта
Этот подход аналогичен моему ответу на MATLAB, за исключением того, что Octave позволяет индексировать непосредственно в новый массив:
источник
MATL (неконкурентный),
575554(67-15) = 52 байтаПопробуйте онлайн!
объяснение
Опять же, логика похожа на мои другие ответы здесь и здесь .
источник
C ++ 11, 176 + 15 (#include) = 191
Неутолимый с использованием. Я могу добавить объяснение, если запрос завтра, gtg спать!
источник
Javascript (ES6), 108 байт
Та же функция для Фибоначчи и Лукаса. Это рекурсивная функция, которая принимает первые два значения как init.
источник
Java, 151 байт
Можно утверждать, что Трамп никогда не будет отдавать это важное решение на аутсорсинг, поэтому нам не нужно было бы обнародовать метод, сохранив еще 7 байтов.
Ungolfed, включая основной тестовый вызов
До сих пор я не нашел способа протестировать 2016 год и вернуть код «Трамп» в коде длиной менее 15 байт.
источник
C (gcc) ,
128120116110 байтПопробуйте онлайн!
объяснение
Давайте назовем
F(n)
n-ое число Фибоначчи иL(n)
n-ое число Лукаса.a
,b
ЯвляютсяF(n-1)
,F(n)
соответственно.Затем мы можем вычислить.
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Эта функция будет последовательно вычислять числа Фибоначчи и Люка, вплоть до
n
, и проверять, есть лиn
какое-либо из них.Если
n
это число Фибоначчи, 1-й битo
будет установлен в1
Если
n
это число Лукаса, 2-й битo
будет установлен на1
o
затем будет использоваться для определения, какое имя для выводаредактировать
a<b<c
иa<a+c=L(n)
так( b<=n || a+c<=n ) => a<n
. Мне действительно нужноa<=n
было правильно обращатьсяn=1
c
, равнуюF(n+1)
, которая была бесполезна, так как мы уже можем рассчитатьF(n+1)
сa
иb
источник
b+=a
вместоb=a+b
Perl 5,10, 119 - 15 (бонус) = 104 байта
Ungolfed:
Это использует тот факт, что
наибольшее число Лукаса меньше или равно F (n).
источник
Groovy, 149 байтов
Тестовый код:
g
является замыканием, которое генерирует список чисел на основе seed (s
) и максимального значения (m
).(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
находит индекс для использования, основываясь на числе lucas или fibonacci.источник
MATLAB,
122119 байтКраткое объяснение
Сначала мы создаем массив ячеек , содержащий значения для печати:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Затем, чтобы выяснить, какое значение отображать, мы проверяем,n
является ли число Фибоначчи или Лукаса.Для Фибоначчи мы используем следующую формулу:
Это проверяет, является ли
5*n^2 + 4
или5*n^2 - 4
идеальным квадратом. Еслиany
из них есть, то это число Фибоначчи.Формула для числа Лукаса очень похожа, за исключением того, что мы используем +/- 20 вместо 4:
В этом решении я объединил эти два случая в один с помощью матрицы:
Применяя то же уравнение, что и выше, но заставляя
any
рассматривать только первое измерение, я получаю двухэлементный логический массив, где, если первый элементtrue
, то это число Лукаса, а если второй элементtrue
, это число Фибоначчи ,Затем, чтобы вычислить индекс в моем исходном массиве ячеек, я рассматриваю это как двоичную последовательность, выполняя поэлементное умножение этого логического значения с
[2^0, 2^1]
или просто[1,2]
. И суммируйте элементы. Очевидно, я должен добавить 1 из-за индексации на основе MATLAB.Затем я должен использовать
subsref
иsubstruct
индексировать в начальный массив ячеек, чтобы получить конечный результат.источник
JavaScript (ES6), 97 байт
Необходим
a==1
чек, иначе я не замечаю, что 1 - это число Лукаса.источник
Желе , 47 байт - 15 = 32 (неконкурирующие ...?)
Попробуйте онлайн!
источник
05AB1E ,
3937 (52 - 15 бонусных) байтовПопробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник