Leonardo de Pisa (ca. 1175 - ca. 1245) é mais conhecido como Fibonacci . Mas isso é realmente uma abreviação para o latim "filius Bonacci" (filho de Bonacci) que foi inventado durante o século 18 (de acordo com a Wikipedia ).
Neste desafio, você será dado um número ordinal (no sentido literal) entre 1 st e 20 th e você tem que devolver o termo correspondente na sequência de Fibonacci .
A diferença é que o número ordinal será dado em latim.
Exemplo : "duodecimus" → .
Tabela de E / S completa
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
Regras
- A entrada é garantida como exatamente uma das seqüências descritas acima.
- Se isso ajudar, você pode colocá-lo em maiúsculas. Mas deve ser consistente para todas as entradas. Casos mistos não são permitidos.
- Dependendo do seu algoritmo e idioma, codificar ou computar os termos da sequência podem ganhar ou perder bytes. Ambas as abordagens são explicitamente permitidas.
- Isso é código-golfe !
Respostas:
R ,
9186 bytesProcure o índice da soma de bytes em uma tabela de pesquisa UTF8 forçada bruta e use a função mágica de geração de Fibonacci para dar a resposta.
Experimente online!
Editar: -2 bytes por arredondamento numérico aprimorado
Edit: -3 bytes com uma alteração na pesquisa (obrigado pela dica, @ Giuseppe!)
fonte
chartr
o UTF8 da soma com o UTF8 do valor de Fibonacci, e depoisintToUtf8
a saída dochartr
."sextus decimus"
, Giuseppe.Ruby,
10493 bytesExperimente online!
Simplesmente pega a soma dos bytes, módulo 192 módulo 76 módulo 23 e indexa em uma tabela de pesquisa. (Números mágicos encontrados por força bruta.)
fonte
Limpo , 87 bytes
Todas as fugas, exceto,
\n
são tratadas como um byte, uma vez que o compilador está bem com os valores brutos reais. (O TIO e o SE têm problemas com o fato de não ser válido UTF-8, e por isso escapou aqui)FryAmTheEggman fez uma bela demonstração / solução alternativa: aqui
Experimente online!
Define a função
$ :: [Char] -> Int
, que usa a exclusividade no somatório dos valores de caracteres em maiúsculas para determinar qual termo na sequência (gerado pela função auxiliark
) deve ser retornado.fonte
Código da máquina 6502 (C64), 82 bytes
Isso usa hash (é claro), mas otimizado para implementação curta no 6502, aproveitando o sinalizador de transporte definido pelo deslocamento e usado adicionalmente. Números mágicos para o hash foram encontrados por força bruta com um pequeno programa C; os
FF
bytes são buracos infelizes na tabela de hash;)Contagem de bytes: endereço de carregamento de 2 bytes, código de 38 bytes, hashtable de 42 bytes para valores.
Demonstração online
Uso:,
SYS49152"[ordinal]"
por exemploSYS49152"DUODECIMUS"
. (observe que as letras aparecem em maiúsculas na configuração C64 padrão).Importante : Antes da primeira inicialização, emita um
NEW
comando. Isso é necessário porque oLOAD
comando C64 BASIC brinca com alguns vetores BASIC, mesmo ao carregar um programa de máquina em algum endereço absoluto (como aqui$C000
/49152
).Desmontagem comentada :
Conjunto de testes C64 BASIC V2
(contendo o programa da máquina em
DATA
linhas)Demonstração online
fonte
Perl 6 , 62 bytes
Experimente online!
Usa uma tabela de pesquisa em uma cadeia de caracteres, bem como um gerador de sequência de fibonacci curto.
fonte
C (gcc) ,
135129 bytes6 bytes abaixo por sugestão de ceilingcat e Logern
Experimente online!
Explicação:
fonte
return i;
pora=i;
Pitão , 54 bytes
Suíte de teste
Aviso: como o código utiliza alguns caracteres não imprimíveis, ele pode não ser exibido corretamente no Stack Exchange. O link fornecido leva a uma fonte de trabalho e cópia-colável.
Resumindo,
Q[0]+Q[618%len(Q)]
fornece resultados exclusivos para todas as entradas aceitasQ
.fonte
Python 2 , 292 bytes
Experimente online!
Gerador de Fibonacci roubado descaradamente desta resposta .
Divide cada palavra em suas partes componentes significativas e descarta o restante (em "duodevicesimus", por exemplo, nos preocupamos apenas com "duo ev es" -> "2 - 20" -> abs ("2-20") -> 18)
Passa o valor calculado (menos deslocamento de 1 a 0) para a função de gerador de Fibonacci.
Explicação Ungolfed:
fonte
Python 2 ,
9779 bytesExperimente online!
Primeiro, queremos converter de latino para um número
n
; isso é feitoreplicando a sequência de entrada vezes suficientes para garantir que haja pelo menos 11 caracteres no total; e depois opegando o hash mod 69 e transformando isso em um caractere imprimível.3
rd e10
caracteres th (indexados a zero) formam um par únicoAgora nós temos
n
. Para encontrar on
número de Fibonacci, podemos usar o método de arredondamento , usando apenas quantos dígitos de precisão precisamos até Fib (20).fonte
JavaScript (Node.js) ,
10097959291 bytesExperimente online!
Aviso: OBRAS POR CAUSA DE IMPRECISÃO DE PONTO FLUTUANTE
O JavaScript não possui uma função de hash embutida, nem uma função de caractere-ASCII curta o suficiente (
String.charCodeAt
já é a mais curta), então eu preciso definir uma função de hash simples por mim.Usou o mesmo método de arredondamento que Chas Brown usou após calcular o hash.
Após um dia inteiro de força bruta, é encontrado um melhor:
b32_to_dec(x.length + x) % 12789 % 24
(* imprecisão de ponto flutuante)b32_to_dec(x.length + x) % 353 % 27
(* imprecisão de ponto flutuante)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)
resultadoVersão sem exploração da imprecisão do ponto flutuante: 95 bytes
Experimente online!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Tabela de hash
fonte