Primeiro, vamos falar sobre sequências Beatty . Dado um número irracional positivo r , podemos construir uma sequência infinita multiplicando os números inteiros positivos para r em ordem e tomando o piso de cada cálculo resultante. Por exemplo,
Se r > 1, temos uma condição especial. Podemos formar outro número irracional s como s = r / ( r - 1). Isso pode gerar sua própria sequência Beatty, B s . O truque é que B r e B s são complementares , o que significa que todo número inteiro positivo está exatamente em uma das duas seqüências.
Se definirmos r = ϕ, a proporção áurea, obteremos s = r + 1 e duas seqüências especiais. o sequência Wythoff inferior para r :
1, 3, 4, 6, 8, 9, 11, 12, 14, 16, 17, 19, 21, 22, 24, 25, 27, 29, ...
e a sequência Wythoff superior para s :
2, 5, 7, 10, 13, 15, 18, 20, 23, 26, 28, 31, 34, 36, 39, 41, 44, 47, ...
Essas são as seqüências A000201 e A001950 no OEIS, respectivamente.
O desafio
Dado um número inteiro positivo, insira 1 <= n <= 1000
um dos dois valores distintos indicando se a entrada está na sequência Wythoff inferior ou na sequência superior . Os valores de saída podem ser -1
e 1
, true
e false
, upper
e lower
, etc.
Embora o algoritmo enviado deva teoricamente funcionar para todas as entradas, na prática, ele só precisa funcionar com os primeiros 1000 números de entrada.
E / S e regras
- A entrada e saída podem ser fornecidas por qualquer método conveniente .
- Pode-se presumir que a entrada e a saída cabem no tipo de número nativo do seu idioma.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
fonte
Respostas:
JavaScript (ES6),
5035 bytesSaídas
1
para inferior e0
superior. Explicação: As listas parciais de valores booleanos pode ser construído usando uma Fibonacci semelhante de identidade: dado duas listas, começando com1
e10
, cada lista subsequente é a concatenação dos dois anteriores, resultando em101
,10110
,10110101
etc. Neste caso é ligeiramente Golfier ter uma 0ª entrada falsa0
e use-a para construir o segundo elemento da lista.fonte
Haskell , 26 bytes
Experimente online!
Sem flutuadores, precisão ilimitada. Obrigado por H.PWiz por dois bytes.
fonte
~(x:t)
. Graçasundefined
. O fato de que existem dois diferentes definidos também é acidental.Python , 25 bytes
Experimente online!
Usa a condição muito simples:
Observe que o resultado do módulo é positivo, embora
-n
negativo, correspondendo à forma como o Python faz o módulo.Isso corresponde a este código:
Experimente online!
Salvamos um byte dobrando para
-(n*2)%(phi*2)<2
.fonte
05AB1E , 9 bytes
Experimente online!
0 significa superior, 1 significa inferior. Experimente os 100 primeiros: Experimente online!
Despejo de comando bruto:
fonte
ï
:) #5t>;
para a 2 Byter pode não valer a pena embora ...ï
e¢
lol :) Todas as nossas soluções são tão intimamente relacionadosGelatina , 5 bytes
Experimente online!
Economizou 1 byte graças ao golfe Python do xnor .
Gelatina , 6 bytes
Experimente online!
Retorna 1 para inferior e 0 para superior.
fonte
Øp
5t>;
Brain-Flak , 78 bytes
Experimente online!
Não produz nada para inferior e
0
para superior. Mudar para um esquema de saída mais sensato custaria 6 bytes.fonte
Python 2 ,
393332 bytes-6 bytes graças ao Sr. Xcoder
-1 byte graças a Zacharý
Experimente online!
Retorna
False
para inferior eTrue
para superiorfonte
lambda n,r=(1+5**.5)/2:-~n//r<n/r
economiza 6 bytes.lambda n,r=.5+5**.5/2:-~n//r<n/r
deve funcionar bem para raspar um byteJulia 0,6 , 16 bytes
Experimente online!
Enquanto brincava com os números, me deparei com essa propriedade: floor (n / φ) == floor ((n + 1) / φ) se n estiver na sequência Wythoff superior e floor (n / φ) <floor ( (n + 1) / φ) se n estiver na sequência Wythoff inferior. Ainda não descobri como essa propriedade ocorre, mas fornece os resultados corretos pelo menos até n = 100000 (e provavelmente além).
Resposta antiga:
Julia 0,6 , 31 bytes
Experimente online!
Retorna
true
para afalse
sequência Wythoff inferior e superior.fonte
Pitão , 8 bytes
Experimente aqui!
Retorna 1 para inferior e 0 para superior.
fonte
Wolfram Language (Mathematica) , 26 bytes
Experimente online!
Um número inteiro
n
está na sequência Wythoff inferior, seceil(n/phi) - 1/phi < n/phi
.Prova de que
ceil(n/phi) - 1/phi < n/phi
é ...Suficiente:
Let
ceil(n/phi) - 1/phi < n/phi
.Então
ceil(n/phi) * phi < n + 1
,.Nota
n == n/phi * phi <= ceil(n/phi) * phi
.Portanto
n <= ceil(n/phi) * phi < n + 1
,.Como
n
eceil(n/phi)
são números inteiros, chamamos a definição de piso e estadofloor(ceil(n/phi) * phi) == n
en
está na sequência Wythoff inferior.Necessário; prova por contrapositivo:
Let
ceil(n/phi) - 1/phi >= n/phi
.Então
ceil(n/phi) * phi >= n + 1
,.Nota
n + phi > (n/phi + 1) * phi > ceil(n/phi) * phi
Por isso
n > (ceil(n/phi) - 1) * phi
.Desde
(ceil(n/phi) - 1) * phi < n < n + 1 <= ceil(n/phi) * phi
,n
não está na seqüência Wythoff inferior.fonte
Japonês , 10 bytes
Retorna verdadeiro para inferior e falso para superior.
Experimente online!
Explicação:
fonte
Java 10,
775352 bytesPorto da resposta do @ Rod's Python 2 .
-1 byte graças a @ Zacharý .
Experimente online.
Resposta antiga
7776 bytes:-1 byte graças a @ovs 'por algo que eu me recomendei semana passada .. xD
Retorna
1
para menor;0
para superior.Experimente online.
Explicação:
i*Phi
é calculado usando-se(sqrt(5)+1)/2 * i
, e então o projetamos convertendo-o em um número inteiro para truncar o decimal.fonte
++i<=n
em sua antiga resposta pode seri++<n
.n->{var r=Math.sqrt(5)/2+.5;return(int)(-~n/r)<n/r;}
Haskell ,
15313912679 bytesPrecisão ilimitada!
Experimente online!
Explicação
Em vez de usar uma aproximação da proporção áurea para calcular o resultado, eles são propensos a erros à medida que o tamanho da entrada aumenta. Esta resposta não. Em vez disso, usa a fórmula fornecida no OEIS que
a
é a sequência única, de modo queOnde
b
está o elogio ordenado.fonte
Braquilog , 8 bytes
Experimente online!
O predicado será bem-sucedido se a entrada estiver na sequência Wythoff inferior e falhará se estiver na sequência Wythoff superior.
Se a falha ao finalizar for um método de saída válido, o primeiro byte poderá ser omitido.
fonte
φ
é usada em um programa Brachylog. Finalmente!MATL , 8 bytes
Experimente online!
Explicação
fonte
K (oK) , 20 bytes
Solução:
Experimente online!
Explicação:
fonte
TI-BASIC (TI-84), 18 bytes
A entrada é no
Ans
.A saída está dentro
Ans
e é impressa automaticamente.Imprime
1
se a entrada estiver na sequência inferior ou0
se estiver na sequência superior.Coincidentemente, este programa será executado apenas por0 < N< 1000 .
Exemplo:
Explicação:
Nota: TI-BASIC é um idioma tokenizado. Contagem de caracteres não é igual à contagem de bytes.
fonte
cQuents , 5 bytes
Experimente online!
Explicação
fonte