Crédito a Geobits en TNB por la idea
Una publicación sin suficientes detalles recientemente presentó un juego interesante:
2 niños se sientan frente a una variedad de dulces. Cada pieza de dulce está numerada del 1 al x
, x
siendo la cantidad total de dulce presente. Hay exactamente 1 aparición de cada número.
El objetivo del juego es que los niños coman dulces y multipliquen los valores de los dulces que han comido para llegar a un puntaje final, ganando el puntaje más alto.
Sin embargo, la publicación original omitió información clave, como cómo se seleccionan los dulces, por lo que los niños de nuestra historia decidieron que el niño mayor es el primero y puede comer hasta la mitad de los dulces, sin embargo, una vez que anuncia el final de su turno, No puede cambiar de opinión.
A uno de los niños en este juego no le gustan los dulces, por lo que quiere comer lo menos posible, y una vez vio a su padre escribir un código una vez, y cree que puede usar las habilidades obtenidas de eso para calcular la cantidad de dulces necesita comer para asegurar la victoria, mientras sigue comiendo lo menos posible.
El reto
Dada la cantidad total de dulces x
, su programa o función debería generar la menor cantidad de dulces que tiene que comer para garantizar la victoria n
, incluso si su oponente se come todos los dulces restantes.
Naturalmente, los números más grandes hacen números más grandes, así que sea cual sea la cantidad que le des, él se comerá los n
números más grandes.
Las normas
x
siempre será un número entero positivo en el rango0 < x! <= l
dondel
está el límite superior de las capacidades de manejo de números de su idioma- Se garantiza que el niño siempre comerá los
n
números más grandes, por ejemplo parax = 5
yn = 2
, comerá4
y5
Casos de prueba
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]))
Puntuación
Desafortunadamente, nuestro valiente concursante no tiene nada con lo que escribir su código, por lo que tiene que organizar los dulces en los caracteres del código, como resultado, su código debe ser lo más pequeño posible, ¡el código más pequeño en bytes gana!
fuente
x = 0
También se debe manejar,0! = 1
¿ desde entonces ? (¿Quizásx
también debería especificarse como un número entero positivo?)Respuestas:
Python 3 , 76 bytes
Pruébalo en línea!
Se basa en el hecho de que para comernorte caramelos aún gana y el número total de caramelos es X , x !( x - n ) !> ( x - n ) ! debe ser cierto, lo que significax ! > ( ( x - n ) ! )2 .
-1 de Skidsdev
-3-6 de BMO-3 de Sparr
+6 para arreglar
x = 1
fuente
from math import factorial as F
n*(F(x)>F(x-n)**2)or f(x,n+1)
. Del mismo modox<2or x*F(x-1)
para el primero que es más corto que la importación.import math;F=math.factorial
que probablemente debería buscar los meta consejos de Python para mencionar ...F=lambda x:x<2or x*F(x-1)
son tres bytes menos?JavaScript (ES6), 53 bytes
Pruébalo en línea!
Rango de trabajo
Curiosamente, las diferencias entre los productos para niños siempre son lo suficientemente grandes como para que la pérdida de precisión inherente a la codificación IEEE 754 no sea un problema.
Como resultado, funciona para0 ≤ n ≤ 170 . Más allá de eso, tanto la mantisa como el exponente se desbordan (produciendo + Infinito ) y necesitaríamos BigInts (+1 byte).
¿Cómo?
Deje quepag sea el producto dulce del otro niño y que q sea nuestro propio producto dulce.
Comenzamos conp = n ! (todos los dulces para el otro niño) y q= 1 (nada para nosotros).
Repetimos las siguientes operaciones hastaq≥ p :
El resultado es el número de iteraciones requeridas. (En cada iteración, 'tomamos el siguiente dulce más alto del otro niño').
Comentado
Esto se implementa como una sola función recursiva que primero calculan ! y luego entra en el bucle descrito anteriormente.
fuente
Jalea , 9 bytes
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
R ,
704138 bytes-29 porque Dennis conoce todas las funciones internas
-3 cambio a entrada scan ()
Pruébalo en línea!
Implementación R bastante simple de la respuesta Python3 de nedla2004 .
Siento que hay una implementación más limpia del manejo de 1, y me gustaría perder las llaves.Estoy enojado porque no volví a usar ese enfoque, más enojado porque usé un estricto menor que, pero aún más enojado porque no sabía que había una
cumprod()
función. Gran optimización por Dennis.fuente
APL (Dyalog Unicode) , 10 bytes
Pruébalo en línea!
La respuesta del puerto de Dennis . Gracias a, bueno, Dennis por ello.
Cómo:
Como esta respuesta no fue estrictamente hecha por mí, conservaré mi respuesta original a continuación.
APL (Dyalog Unicode) ,
14 1211 bytesPruébalo en línea!
Función de prefijo tácito. Básicamente un puerto Dyalog de la respuesta de Jonathan .
Gracias a ngn y H.PWiz por la ayuda en el chat. Gracias a ngn también por salvarme un byte.
Gracias a Dennis por señalar que mi código original estaba equivocado. Resulta que me ahorró 2 bytes.
Usos
⎕IO←0
.Cómo:
fuente
+/
va dentro de los paréntesis, una de las composiciones se pueden omitir:(+/!>×\)⌽∘⍳
Haskell ,
5251 bytesPruébalo en línea!
fuente
Jalea , 7 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 3 ,
183176149 bytesPruébalo en línea!
Es mucho más rápido que otras soluciones: multiplicaciones 0 (N) en lugar de O (N²), pero no puedo reducir el tamaño del código.
-27 de Jo King
fuente
Limpio , 57 bytes
Pruébalo en línea!
Una solución directa.
fuente
05AB1E ,
1511 bytesPruébalo en línea!
Utiliza el mismo enfoque que mi Python envío de . Muy nuevo en 05AB1E, por lo que cualquier sugerencia sobre código o explicación es muy apreciada.
-4 bytes gracias a Kevin Cruijssen
fuente
1
. Si la declaración if es verdadera, empujará el índiceN
a la pila y saldrá del programa (generando ese índice implícitamente). Para la entrada,1
la instrucción if será falsey, pero generará su entrada1
implícitamente después de ese ciclo de iteración única.!
, ahora que la pila está vacía ya que ya no duplicamos / triplicamos el resultado if.1
genera la entrada implícitamente Cuando la pila está vacía. :)Jalea , 14 bytes
Pruébalo en línea!
Maneja 1 correctamente.
fuente
Carbón de leña , 20 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Product
en una lista vacía en el carbón regresa enNone
lugar de1
, así que tengo que lógicamenteOr
.fuente
PHP , 107 bytes
Pruébalo en línea!
Usa lo mismoX2> ( ( x - 1 ) ! )2 método como otros han usado.
Utiliza la función factorial del envío de PHP para este desafío (gracias a @ donutdan4114)
fuente
Wolfram Language (Mathematica) , 43 bytes
Pruébalo en línea!
fuente
05AB1E , 7 bytes
Puerto de Dennis ♦ 'Jelly respuesta , ¡así que asegúrate de votarlo si te gusta esta respuesta!
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Japt
-x
, 7 bytesSolución de gelatina del puerto de Dennis.
Solo funciona en la práctica hasta que
n=4
entramos en notación científica por encima de eso.Intentalo
fuente
C # (.NET Core) , 93 bytes
Pruébalo en línea!
Basado en la respuesta de JavaScript de @ Arnauld.
fuente
C (gcc) , 68 bytes
Pruébalo en línea!
Editar: intercambiando bytes contra mults, no hacer 2 * x mults en lugar de x + n
Editar: volver a int en lugar de largo a través de macro. Fallaría a los 34 con mucho tiempo.
Bueno, tengo esto en C. Falla a los 21.
Existe una posible ambigüedad en cuanto a si el niño bueno siempre quiere ganar o nunca perder ... ¿qué opinas?
fuente
Python 3 , 75 bytes
Pruébalo en línea!
Versión de 74 bytes
pero esta versión se desbordó por 500 ...
fuente