Um homem das estrelas chegou à Terra! Felizmente, o presidente dos Estados Unidos, Donald Trump, tem um dado infinito. Usando esse dado, ele pode conjurar um número que você , o prefeito de Podunk , deve usar para determinar quem deve ser enviado para impedir o invasor! Mas tenha cuidado, você só pode enviar uma quantidade limitada de bytes na parte de trás do seu sapo !
Dada uma entrada do usuário (que será um número inteiro positivo), você deve retornar uma string, dependendo da categoria em que o número estiver.
- Se o número for um número de Fibonacci , você deverá enviar o Ness .
- Se o número for um número de Lucas , você deverá gerar a saída de Lucas .
- Se o número é tanto um número Lucas e um número de Fibonacci , você deve saída Travis .
- Se o número é nem aa número Lucas , nem um número de Fibonacci , você deve saída Pippi .
Exemplos
Aqui estão alguns casos de teste:
1 => Travis 2 => Travis 3 => Travis 4 => Lucas 5 => Ness 6 => Pippi 7 => Lucas 8 => Ness 610 => Ness 722 => Pippi 843 => Lucas
Regras
- Isso é código-golfe , a resposta mais curta em bytes vence.
- Seu programa pode ser um programa completo ou uma função (n anônima).
Bónus
Existem alguns bônus que você pode usar para ajudar seu sapo a enviar os dados ao presidente Trump mais rapidamente:
- Para
-15
bytes: se o número de entrada for2016
, você deve enviarTrump
, pois ele está no auge de sua presidência.
0, 1
enquanto outras começam1, 1
, acredito que isso depende da definição usada. Não é incomum ver os números de Lucas começarem2, 1
, por exemplo, o OEIS possui as duas versões ( 1 , 2 ), mas a que começa com 2 é a fase de definição.Respostas:
Pitão, 59 - 15 = 44 bytes
ou 42 bytes após a correção de um bug
Hexdump:
Os dois primeiros caracteres (
&Q
) são necessários devido a um erro de análise Pyth que ocorreQ
após a."
falha. Correção foi aplicada. Se o interpretador pós-correção de bug for permitido, -2 bytes.Sem compressão de string ilegível:
Pitão, 63 - 15 = 48 bytes
49 bytes sem Trump
Suíte de teste
Bem simples, basta gerar as seqüências, duplicar uma e verificar a associação.
As sequências são geradas iniciando com
[1, 2]
e[2, 1]
, e depois aplicando a regra de fibonacci.fonte
Julia,
146142121120 bytesIsso cria uma função sem nome que retorna um booleano. Para chamá-lo, dê um nome, por exemplo
f=n->...
.Ungolfed:
Corrigido um problema e economizado 7 bytes graças ao Glen O!
fonte
Mathematica
143156-15 (bônus) = 141 bytesCom 2 bytes salvos, graças a LegionMammal978.
fonte
False
eTrue
pode ser substituído1<0
e, respectivamente1>0
.Mathematica,
9287 bytesInspirado pela resposta do Sp3000 .
fonte
Python 2, 107
A chave é duas verificações puramente aritméticas dos números de Fibonacci e Lucas:
n
é um número de Fibonacci exatamente se5*n*n+4
ou5*n*n-4
é um quadrado perfeiton
é um número de Lucas exatamente se5*n*n+20
ou5*n*n-20
é um quadrado perfeitoEste site tem esboços de provas .
Portanto, a saída depende dos valores de
5*n*n+i
fori
in{4,-4,20,-20}
. A funçãof
testa um valor dei
, verificando se o valor correspondente não possui uma raiz quadrada de número inteiro.abs
Existe apenas para evitar um erro de obter a raiz negativa den=1, i=-20
.A função
f
pega o valor do númeron
para testar a partir de STDIN. O Python avalia isso apenas uma vez, não uma vez por chamada de função.Se o número não é Fibonacci, é avaliado como
f(4)*f(-4)
usando a conversão implícita de booleano para número e de forma semelhante para não Lucas, e a sequência correspondente é obtida. Se espaços à direita fossem permitidos, a intercalação de cordas seria mais curta.fonte
Python 2, 117 bytes
Para a lista de cadeias,
"Pippi Lucas Ness Travis".split()
é o mesmo comprimento.fonte
CJam,
585554 bytesAbordagem ingênua de gerar os números de Fibonacci e Lucas e depois contar as ocorrências em ambos, converter em binário e escolher a sequência apropriada.
Experimente online .
fonte
Sério, 69 bytes
Antes desse desafio, o Seriamente possuía o
f
índice interno (índice em números de Fibonacci, -1 se não for um número de Fibonacci) ... mas não o índice em uma lista ou "está na lista"! (Desde então, foi adicionado comoí
.)Como resultado, é isso que gasto descobrindo se a entrada é um número de Fibonacci:
É isso que gasto gerando uma lista de números de Lucas:
E é isso que gasto descobrindo se a entrada está na lista de números de Lucas:
Essa é uma string sendo formatada usando a notação% Python em algo parecido
:610:=
e convertida em uma função, que é mapeada sobre o array e somada. (Os números de Lucas são únicos, portanto, a soma é sempre 0 ou 1.)Obrigado ao @Mego pelo último bit com a formatação da string.
fonte
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 bytes+1 byte para o
-n
sinalizador.Com novas linhas após ponto e vírgula, para facilitar a leitura:
Demo:
Truques:
Você pode estar se perguntando por que meus variáveis são nomeados$a
,$b
,$%
, e$d
. Essa é uma excelente questão! De fato, isso me permite salvar um byte.é um byte menor que
Isso não se aplica mais porque eu joguei meu código reorganizando as coisas, fazendo com que a alteração do nome da variável não salvasse mais bytes. Eu mudei de volta para que os nomes das variáveis fizessem sentido novamente.$_-2?$f+$l*2:3
é levemente interessante. Basicamente, eu tive um caso especial2
para os números de Lucas porque meu programa verifica se um número é um número de Lucas depois de "atualizar" os números de Fibonacci e Lucas. Então2
foi considerado um número não-Lucas.$_-2?foo:bar
é um caractere mais curto que$_==2?bar:foo
. A mesma coisa é usada para o2016
teste.Isso também não é mais verdade porque pude reestruturar o programa para não exigir um revestimento especial
2
. Mas ainda uso em$_-2016?stuff:Trump
vez de$_==2016?Trump:stuff
, que é um byte a mais.Falando nisso, você pode estar se perguntando como eu fiz essa reestruturação. Acabei de fazer o programa fazer 9 vezes mais iterações do que o necessário, o que custa apenas 2 bytes (
*9
), mas me permite fazer suposições em outros lugares que ajudam a resolver problemas do golfe.Como as variáveis padrão são zero,
é mais curto que
O Perl suporta palavras de barra, por isso não preciso citar nenhuma das minhas strings (\ o /).
fonte
-n
sinalizador (conforme observado na resposta).-n
bandeira faz?while(<>) { ... }
ciclo em torno do seu programa. Veja: Documentos Perl .Julia,
101100 bytesUngolfed:
fonte
{}
sintaxe alternativa paraAny[]
está obsoleta; isso economizaria alguns bytes.Oitava, 93 bytes
Essa abordagem é semelhante à minha resposta do MATLAB com a exceção de que o Octave permite indexar diretamente em uma nova matriz:
fonte
MATL (Não Competente),
575554(67-15) = 52 bytesExperimente Online!
Explicação
Novamente, lógica semelhante às minhas outras respostas aqui e aqui .
fonte
C ++ 11, 176 + 15 (#include) = 191
Ungolfed com uso. Posso adicionar uma explicação, se solicitado amanhã, GTG para a cama agora!
fonte
Javascript (ES6), 108 bytes
Mesma função para Fibonnacci e Lucas. É uma função recursiva que aceita os dois primeiros valores como init.
fonte
Java, 151 bytes
Você poderia argumentar que Trump nunca terceirizaria essa decisão crucial, para que não precisássemos tornar o método público, economizando outros 7 bytes.
Ungolfed incluindo a chamada principal de teste
Até agora, não encontrei nenhuma maneira de testar em 2016 e retornar "Trump" em código com menos de 15 bytes.
fonte
C (gcc) ,
128120116110 bytesExperimente online!
Explicação
Vamos citar
F(n)
o n-ésimo número de Fibonacci eL(n)
o n-ésimo número de Lucas.a
,b
sãoF(n-1)
,F(n)
respectivamente.Em seguida, podemos calcular
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Esta função calculará sucessivamente os números de Fibonacci e Lucas, até
n
, e verificará sen
há algum deles.Se
n
for um número de Fibonacci, o 1º bito
será definido como1
Se
n
for um número de Lucas, o 2º bito
será definido como1
o
será usado para determinar qual nome será emitidoEditar
a<b<c
ea<a+c=L(n)
, portanto( b<=n || a+c<=n ) => a<n
. Eu realmente precisavaa<=n
lidar corretamenten=1
c
igual aF(n+1)
que era inútil, pois já podemos calcularF(n+1)
coma
eb
fonte
b+=a
vez deb=a+b
Perl 5.10, 119 - 15 (bônus) = 104 bytes
Ungolfed:
Isso explora o fato de que
é o maior número de Lucas menor ou igual a F (n).
fonte
Groovy, 149 bytes
Código do teste:
g
é um fechamento que gera uma lista de números com base em uma semente (s
) e um valor máximo (m
).(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
localiza o índice a ser usado com base no número sendo lucas ou fibonacci.fonte
MATLAB,
122119 bytesBreve explicação
Primeiro criamos uma matriz de células contendo os valores para imprimir:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Em seguida, para descobrir qual valor exibir, verificamos sen
é um número de Fibonacci ou Lucas.Para Fibonnaci, usamos a seguinte fórmula:
Isso verifica se um quadrado é perfeito
5*n^2 + 4
ou5*n^2 - 4
não. E seany
eles são, então é um número de Fibonacci.A fórmula para um número de Lucas é muito semelhante, com exceção de que usamos +/- 20 em vez de 4:
Nesta solução, combinei esses dois casos em um usando a matriz:
Ao aplicar a mesma equação acima, mas forço
any
a considerar apenas a primeira dimensão, recebo uma matriz lógica de dois elementos em que se o primeiro elemento fortrue
, então é um número de Lucas e se o segundo elemento fortrue
, é um número de fibonacci .Em seguida, para calcular o índice em minha matriz inicial de células, trato isso como uma sequência binária executando a multiplicação por elementos deste booleano com
[2^0, 2^1]
ou simplesmente[1,2]
. E somar os elementos. Obviamente, tenho que adicionar 1 por causa da indexação baseada em MATLAB.Então eu tenho que usar
subsref
esubstruct
indexar na matriz de células inicial para obter o resultado final.fonte
JavaScript (ES6), 97 bytes
A
a==1
verificação é necessária, caso contrário, não percebo que 1 é um número de Lucas.fonte
Gelatina , 47 bytes - 15 = 32 (não concorrente ...?)
Experimente online!
fonte
05AB1E ,
3937 bytes (52 - 15 bônus)Experimente online ou verifique todos os casos de teste .
Explicação:
fonte