Entrada: se le dan 2 enteros, n
y k
. n
es un número entero positivo (> = 1) y k
un número entero, que es la cantidad de veces que puede usar n
.
Salida: salida de todos los números enteros no negativos que se pueden formar usando como máximo k
n
's el uso de estas operaciones matemáticas: +
, -
, *
, /
, y paréntesis.
Editar: si su idioma admite la eliminación de elementos de una matriz / conjunto / etc., se requiere el requisito de enteros no negativos. Si no, entonces no es obligatorio.
El único valor numérico que puede existir en la expresión es n (aunque muchas veces). Si el valor de la expresión excede el valor máximo de cualquier almacenamiento de datos que tenga (como int
o long
, etc.), debe compensarlo (no se puede dar un valor máximo n
).
La velocidad no es importante, ¡pero gana el código más corto!
Bonificaciones:
-50: incluye exponenciación en la lista de operaciones matemáticas. La exponenciación se define como que la base es alguna expresión de n, no e = 2.71828 ...
-50: incluye las funciones de piso (o techo) si una posible operación dada no es un número entero.
Ejemplos
> 2 2
0 1 4
> 4 3
3 4 5 12 20 64 ...
(Las entradas / salidas de muestra no necesariamente incluyen bonificaciones)
2
por lo que 2 deben incluirse en la salida. 2. por exponenciación quieres decir elevar a una potencia, noe^x?
3. si quieres código golf (código más corto), entonces la etiqueta de desafío de código es redundante.2^x
(o2**x
) como exponenciación, mientras queexp(x)
es exponencial. Según 3, eso era parte de una edición que estaba haciendo, por lo que se eliminó ahoraRespuestas:
Javascript (E6) 215 (315 - 2 * 50 de bonificación)
252Editar simplificado. Fallo correcto de 0 faltantes
Definido como una función, luego contar 10 bytes más para la salida usando
alert()
Importante Realmente este no es válido según las reglas, porque JavaScript no puede manejar grandes números. Por ejemplo, con los parámetros 2,5 no puede encontrar 2 ^ 2 ^ 2 ^ 2 ^ 2 (es decir, 2 ^ 65536). Un número tan grande es 'Infinity' en javascript.
Golfed
Para jugar al golf.Tengo una idea que quiero compartir: use una notación postfix. En postfix, cualquier tipo de expresión está hecha solo de valores y operadores, no se necesitan paréntesis. La notación postfix se puede traducir a la notación infija algebraica habitual, pero eso está fuera de alcance en este desafío.Uso
Salida
1,2,3,4,5,8,12,16,20,32,64,252,256,260,1024,4096,65536,4294967296,1.3407807929942597e+154
Sin golf
Primera versión, esto es más complicado pero quizás más fácil de seguir
Mostrar la expresión de postfix para cada número
Uso
Salida
fuente
Python 2, 249 caracteres - 50 bonus = 199
Ejecuciones de muestra:
Esto reclama el bono de exponenciación de -50 puntos. Permitir la exponenciación puede dar algunos resultados asombrosamente grandes para entradas pequeñas (eliminar
pow
de la lista de operadores para intentar sin exponenciación).fuente
Mathematica, 105 bytes - 100 bonus = 5
Nota: Actualmente, esto no admite paréntesis. Arreglando una vez que el OP aclara el desafío.
Si los enteros negativos también están bien, esto puntúa 1 en su lugar.
Algo descabellado:
Estoy reclamando ambos bonos por incluir exponenciación y resultados no enteros de piso.
Ejemplos:
fuente
Python 2.x: 32 (
132-(50+50)
)Reclamaré ambos bonos: se
x/y
comporta como esperaríasfloor(x/y)
comportarte, y admite poderes.Manifestación:
fuente
abs
es inteligente, creo que lo estoy robando como recompensa por señalar el error;)4,3
embargo, ¿cómo se obtiene el número largo para el caso?4^4^4
comienza con13407...
.2**2**2**2**2
, porque tuve una repetición de más.f(5,2)
Todavía debería dar esa respuesta.J: -23 (77-50 * 2)
Esto aún no funciona
n<=2
, no estoy seguro de por qué. Me ocuparé de arreglar esto, pero si alguien conoce una respuesta, dígalo en los comentarios.fuente
Haskell, 35
No estoy seguro de si una función es suficiente o si se requiere un programa real, así que estoy publicando dos versiones, ambas con 100 de bonificación.
Como programa, puntaje de 80:
o como una función, puntaje de 35:
salida de muestra, para
(4%3)
oecho 4 3|codegolf.exe
, ordenada para su conveniencia:Lo único que es un poco extraño acerca de esto es que el número de coma flotante se
Infinity
convierte en un número entero enorme, pero espero que esto no importe demasiado.fuente
J, -43 (53-2 * 50)
Esto no siempre funciona, porque J intenta evitar los cálculos con números que son demasiado grandes. Si se nos permite usar flotadores (máquina), que simplemente se configuran al infinito en un desbordamiento, obtenemos lo siguiente, un poco más corto, para una puntuación de 52-100 = -48:
Esta es una versión que no tiene forma ni está inspirada en mi respuesta J anterior, así que la publico como una respuesta separada. Trivia: esta podría ser la primera vez que tengo que usar una función explícita en una respuesta J.
Uso (Sí, los pequeños cuadros son estructuras de datos reales en J, y en realidad se muestran así):
fuente
Python 2: 212 bytes (262-50)
Segundo código de golf!
EDITAR: Ok con corchetes se hace un poco más grande:
Con paréntesis: 354 bytes (404-50)
fuente
Haskell - 235 bytes - 100 bonus = 135
Probado con
Este resultado se logra usando
replicateM
. Si usamos la entrada4 3
,replicateM
nos dará las siguientes matrices de funciones:[[(+),(+)],[(+),(-)],[(+),(*)],[(+),(/)],[(+),(**)],[(-),(+)],[(-),(-)],[(-),(*)],[(-),(/)],[(-),(**)],[(*),(+)],[(*),(-)],[(*),(*)],[(*),(/)],[(*),(**)],[(/),(+)],[(/),(-)],[(/),(*)],[(/),(/)],[(/),(**)],[(**),(+)],[(**),(-)],[(**),(*)],[(**),(/)],[(**),(**)]]
o más simplemente[[a->a->a]]
. Cada matriz se pliega entonces de la derecha utilizandon
como entrada:[(+),(+)] = 4+(4+4) = 12
. Tenga en cuenta que no hay prioridad de operador aquí:[(*),(+)] = 4*(4+4) != (4*4)+4
.Los números dados luego se anulan, se nublan, se ordenan y se filtran para números menores que 0.
fuente
2
es que falta? (como(4+4)/4
)C, dc y bash utils - 259 (fuente) + 21 (para ejecutar) - 100 bonos = 180
Guardar como
calc.c
:Compilar:
Esto generará permutaciones de
dc
entrada compatible.dc
es una calculadora de precisión ilimitada, por lo que puede generar grandes números, también tiene exponenciación.dc
en el modo predeterminado, usa la aritmética de enteros, por lo que estáfloor
integrado, y los comandos comunesd*v
cerca del final toman efectivamente el valor absoluto para aumentar el número de posibles salidas válidas.Ejecutar solo solo genera una gran cantidad de resultados, por ejemplo
Entonces, para obtener los resultados, vincule esto
dc | sort -n | uniq | xargs
para obtener el resultado deseado, p. Ej.La k más alta que puede manejar es 13, ¡pero esperarás mucho tiempo por los resultados!
En este momento, sigue un
# # op # op # op ...
patrón estricto , pero puede obtener más números cambiando el patrón, por ejemplo:La forma en que esto podría hacerse es tratar los números y operadores como símbolos y permutarlos por igual. Obtendría muchas secuencias que no son legales
dc
, pero déjelodc
descubrir. Resultados pendientes ...fuente
HASKELL 98 (bono 198-100)
editar: comentaría, pero no puedo, sugeriría tratar el rango ilimitado como un bono
Me parece que unos pocos respuesta pierda un punto:
using at most k n
. Esto significa que f (4,3) puede generar (4/4) = 1 o (4 * 4) = 16.De todos modos esa es mi respuesta. Supongo que int / int se comportará como piso. La exponenciación está incluida.
HASKELL 111 (bonificación 211-100)fuente
<!-- language: lang-haskell -->
dos líneas antes del código para resaltar la sintaxis.<!-- language-all: lang-haskell -->
algún lugar antes del primer bloque de código, un truco que aprendí hace unos días.Rubí 181-50-50 = 81
fuente