Crédito para Geobits na TNB pela ideia
Um post sem detalhes suficientes postou recentemente um jogo interessante:
2 crianças sentam-se na frente de uma variedade de doces. Cada pedaço de doce é numerado de 1 a x
, x
sendo a quantidade total de presente presente. Há exatamente 1 ocorrência de cada número.
O objetivo do jogo é que as crianças comam doces e multipliquem os valores dos doces que comeram para chegar a uma pontuação final, obtendo a pontuação mais alta.
No entanto, a postagem original perdeu informações importantes, como a seleção de doces, para que as crianças de nossa história decidissem que a criança mais velha iria primeiro e pudessem comer até metade do doce, no entanto, depois que ele anuncia o fim de seu turno, ele não pode mudar de idéia.
Uma das crianças deste jogo não gosta de doces, então ele quer comer o mínimo possível, e uma vez viu o pai escrever algum código uma vez e acha que pode usar as habilidades adquiridas com isso para descobrir quanto doce ele precisa comer para garantir a vitória, enquanto ainda come o mínimo possível.
O desafio
Dado o número total de doces x
, seu programa ou função deve produzir a menor quantidade de doces que ele precisa comer para garantir a vitória n
, mesmo que o oponente coma todo o restante do doce.
Números naturalmente maiores produzem números maiores, então, qualquer que seja a quantia que você lhe der, ele comerá os n
maiores números.
As regras
x
sempre será um número inteiro positivo no intervalo em0 < x! <= l
quel
está o limite superior dos recursos de manipulação de números do seu idioma- É garantido que o garoto sempre coma o
n
maior número, por exemplo, parax = 5
en = 2
, ele coma4
e5
Casos de teste
x = 1
n = 1
(1 > 0)
x = 2
n = 1
(2 > 1)
x = 4
n = 2
(3 * 4 == 12 > 1 * 2 == 2)
x = 5
n = 2
(4 * 5 == 20 > 1 * 2 * 3 == 6)
x = 100
n = 42
(product([59..100]) > product([1..58]))
x = 500
n = 220
(product([281..500]) > product([1..280]))
Pontuação
Infelizmente, nosso corajoso concorrente não tem nada com o qual escrever seu código; portanto, ele precisa organizar os pedaços de doces nos caracteres do código; como resultado, seu código precisa ser o menor possível, o menor código em bytes ganha!
fonte
x = 0
Também deve ser tratado, desde0! = 1
? (Talvezx
também deva ser especificado como um número inteiro positivo?)Respostas:
Python 3 , 76 bytes
Experimente online!
Conta com o fato de que, para comern balas, ainda ganha e o número total de balas sendo x , x !( x - n ) !> ( x - n ) ! deve ser verdadeiro, o que significax !> ( ( x - n ) ! )2 .
-1 de Skidsdev
-3-6 do BMO-3 de Sparr
+6 para corrigir
x = 1
fonte
from math import factorial as F
n*(F(x)>F(x-n)**2)or f(x,n+1)
. Da mesma forma,x<2or x*F(x-1)
para o primeiro que é mais curto que a importação.import math;F=math.factorial
que eu provavelmente deveria ir encontrar o dicas python meta de mencionar ...F=lambda x:x<2or x*F(x-1)
é três bytes a menos?JavaScript (ES6), 53 bytes
Experimente online!
Área de trabalho
Curiosamente, as diferenças entre os produtos infantis são sempre grandes o suficiente para que a perda de precisão inerente à codificação IEEE 754 não seja um problema.
Como resultado, ele funciona para0 ≤ n ≤ 170 . Além disso, a mantissa e o expoente estouram (produzindo + Infinito ) e precisaríamos de BigInts (+1 byte).
Quão?
Sejap o doce da outra criança e q seja o nosso próprio doce.
Começamos comp = n ! (todos os doces para a outra criança) q= 1 (nada para nós).
Repetimos as seguintes operações atéq≥ p :
O resultado é o número de iterações necessárias. (A cada iteração, 'pegamos o próximo doce mais alto do outro garoto'.)
Comentado
Isso é implementado como uma única função recursiva que primeiro calculan ! e então entra no loop descrito acima.
fonte
Geléia , 9 bytes
Experimente online! Ou veja a suíte de testes .
Quão?
fonte
R ,
704138 bytes-29 porque Dennis conhece todas as funções internas
-3 alternando para a entrada scan ()
Experimente online!
Implementação R bastante simples da resposta Python3 de nedla2004 .
Sinto que há uma implementação mais limpa do manuseio 1 e gostaria de perder o aparelho.Estou bravo por não voltar a usar uma abordagem que, mais bravo por usar um estrito menos do que, mas ainda mais bravo por não saber que há uma
cumprod()
função. Ótima otimização por Dennis.fonte
APL (Dyalog Unicode) , 10 bytes
Experimente online!
Resposta do porto de Dennis . Obrigado ao Dennis por isso.
Quão:
Como essa resposta não foi feita estritamente por mim, manteremos minha resposta original abaixo.
APL (Dyalog Unicode) ,
14 1211 bytesExperimente online!
Função de prefixo tácito. Basicamente, um porto Dyalog da resposta de Jonathan .
Obrigado a ngn e H.PWiz pela ajuda no chat. Obrigado a ngn também por me salvar um byte.
Obrigado a Dennis por apontar que meu código original estava errado. Acontece que me salvou 2 bytes.
Usos
⎕IO←0
.Quão:
fonte
+/
for entre parênteses, uma das composições poderá ser omitida:(+/!>×\)⌽∘⍳
Haskell ,
5251 bytesExperimente online!
fonte
Geléia , 7 bytes
Experimente online!
Como funciona
fonte
Python 3 ,
183176149 bytesExperimente online!
É muito mais rápido que algumas outras soluções - multiplicações 0 (N) em vez de O (N²) - mas não consigo reduzir o tamanho do código.
-27 de Jo King
fonte
Limpo , 57 bytes
Experimente online!
Uma solução direta.
fonte
05AB1E ,
1511 bytesExperimente online!
Usa a mesma abordagem que meu envio do Python . Muito novo para 05AB1E, portanto, qualquer dica sobre código ou explicação é muito apreciada.
-4 bytes graças a Kevin Cruijssen
fonte
1
. Se a instrução if for verdadeira, ela enviará o índiceN
para a pilha e sairá do programa (gerando esse índice implicitamente). Para entrada,1
a instrução if será falsey, mas produzirá sua entrada1
implicitamente após esse loop de iteração única.!
, agora que a pilha está vazia, pois não duplicamos / triplicamos o resultado if.1
corrigia o caso de teste que produzia a entrada implicitamente quando a pilha estiver vazia. :)Gelatina , 14 bytes
Experimente online!
Manipula 1 corretamente.
fonte
Carvão , 20 bytes
Experimente online!Link é a versão detalhada do código. Explicação:
Product
em uma lista vazia em Charcoal retorna emNone
vez de1
, então eu tenho que logicamenteOr
.fonte
PHP , 107 bytes
Experimente online!
Usa o mesmox2> ( ( x - 1 ) ! )2 método como outros usaram.
Usa a função fatorial da submissão do PHP para este desafio (graças a @ donutdan4114)
fonte
Wolfram Language (Mathematica) , 43 bytes
Experimente online!
fonte
05AB1E , 7 bytes
Resposta de Port of Dennis ♦ 'Jelly , por isso, certifique-se de vomitá-lo se você gosta desta resposta!
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Japt
-x
, 7 bytesSolução de geléia no porto de Dennis.
Só funciona na prática até
n=4
quando entramos em notação científica acima disso.Tente
fonte
C # (.NET Core) , 93 bytes
Experimente online!
Baseado na resposta javascript de @ Arnauld.
fonte
C (gcc) , 68 bytes
Experimente online!
Edit: troca de bytes contra mults, sem fazer 2 * x mults em vez de x + n
Editar: voltando ao int em vez da macro longa. Falharia aos 34 com muito tempo.
Bem, eu tenho isso em C. Falha em 21.
Existe uma possível ambiguidade sobre se o bom garoto sempre quer vencer ou nunca perder ... o que você acha?
fonte
Python 3 , 75 bytes
Experimente online!
Versão de 74 bytes
mas esta versão transbordou para 500 ...
fonte