Adaptado deste enigma FiveThirtyEight .
fundo
Examine a seguinte sequência infinita:
3 3 3 2 3 3 3 2 3 3 3 2 3 3 2 3 3 3 2 ...
Digamos que a sequência seja indexada em 1. O i
número th na sequência determina quantos 3
s existem antes do i
th 2
e após os 2
s anteriores . Portanto, como a sequência começa com a, 3
a sequência deve começar 3 3 3 2
e, como existem três 3
s no início da sequência, a subsequência 3 3 3 2
deve se repetir três vezes. Depois disso, você alcança 3 3 2
porque o quarto número na sequência é 2
.
O enigma FiveThirtyEight pede o limite das proporções de três a dois (o que não vou estragar aqui), mas você também pode perguntar qual é a proporção cumulativa após o índice i
. Por exemplo, a proporção em i=4
é 3/1 = 3
e i=15
é 11/4 = 2.75
.
Vamos nos generalizar
Dados os números n
e k
podemos criar uma sequência semelhante que comece com n
e, assim como a sequência original descrita, o número no índice i
determina quantos n
s aparecem antes do i
th k
e após os k
s anteriores .
Exemplos:
n=2, k=5
dá a sequência 2 2 5 2 2 5 2 2 2 2 2 5 2 2 5 ...
n=3, k=0
dá 3 3 3 0 3 3 3 0 3 3 3 0 0 3 3 3 0 ...
n=1, k=3
dá 1 3 1 1 1 3 1 3 1 3 1 3 1 1 1 3 1 ...
O desafio
Escreva uma função / programa e com ela faça o seguinte. Tome como entrada:
- um número inteiro positivo
n
- um número inteiro não negativo
k ≠ n
- um número inteiro positivo
i > n
As duas primeiras entradas n
e k
determinam uma sequência como descrito acima e i
é um índice. Estou usando a indexação 1 nos exemplos, mas você tem a liberdade de usar a indexação 0 ou 1. Se indexado em 0, a restrição i
é i ≥ n
.
Com os três números, imprima a proporção de n
s para k
s na sequência até e incluindo o número no índice i
. O formato da saída pode ser um valor decimal com pelo menos 5 dígitos de precisão ou um valor exato como uma proporção como 3524/837
ou 3524:837
.
Na forma decimal, o último dígito pode ser arredondado da maneira que desejar. Zeros à direita e espaços em branco são permitidos.
Em qualquer uma das formas de cadeia, os dois números precisam ser normalizados para que sejam coprime. Por exemplo, se a proporção era 22/4 11/2
e 11:2
é aceitável, mas 22/4
não é.
Exemplos
n k i output
2 4 15 2.75 or 11/4
6 0 666 5.1101 or 557:109
50 89 64 63 or 63:1
3 2 1000 2.7453 or 733/267
9 12 345 9.4545 or 104/11
Esse é o código de golfe por idioma; portanto, o código mais curto em cada idioma é o vencedor.
/
ou:
simplesmente adicionar uma complicação desnecessária ao desafio.Respostas:
Casca , 16 bytes
Experimente online!
Recebe entradas na mesma ordem que os casos de teste. Produz um número racional. Sinto que há muitos sobrescritos, mas não sei como me livrar deles ...
Explicação
fonte
Python 3 ,
94928987 bytesExperimente online!
Créditos
fonte
.count(n)
?Gelatina , 22 bytes
Experimente online!
Programa completo. Toma argumentos
n
,k
,i
.Há um erro que faz com que essa necessidade seja desnecessariamente maior em 1 byte.
fonte
`
faz funcionar. Ah, e onde sua resposta difere é que eu esqueci de implementar um golfe que encontrei em outro idioma> _>Geléia ,
2516 bytes-9 bytes ~ 50% atribuível a resposta de Erik the Outgolfer's Jelly (1. usando a tecla new-ish rapidamente,
ƙ
mesmo com um bug no interpretador que atualmente custa um byte; 2. usando uma repetição mapeada para evitar a contagem e a indexação na sequência atual .) Vá dar-lhe algum crédito!Um programa completo com três argumentos:
n
,k
,i
que imprime o resultado.Experimente online!
Quão?
exemplo de execução com entradas
n=2
,k=3
,i=30
:fonte
Mathematica, 85 bytes
Experimente online!
fonte
APL (Dyalog Unicode) ,
12670 bytesExperimente online!
Bem, obrigado a @ Adám por eliminar 56 bytes desta resposta.
Este é um Tradfn niladic ( trad itional f unctio n ) tendo uma entrada, que é uma lista de três elementos.
⎕PP←5
não é adicionado à contagem de bytes, porque só é usado para limitar o P rint P recision para 5 dígitos.∇f
e∇
não são adicionados à contagem de bytes porque não fazem parte do código, apenas delimitadores para o tradfn.Como funciona:
fonte
R , 88 bytes
Experimente online!
fonte
for
corpo do loop, pois há apenas uma declaração.Rápido , 152 bytes
Será mais curto que o Java?
Explicação
fonte
Ruby ,
777170 bytesExperimente online!
Retorna um Rational, que opera como um número e restringe a fração reduzida exata.
fonte
Pitão , 24 bytes
Suíte de teste.
Ponto fixo de
[n]
sob determinada função da matriz.fonte
Zephyr , 284 bytes
Toma os três números de stdin em três linhas separadas. Produz uma proporção exata como
104/11
ou63
.Ungolfed
fonte