Probablemente un simple desafío de código de golf. Dados 2 enteros positivos m
y n
, haga una lista de n
valores que sean enteros positivos cuya suma sea igual al número m
. O todos los valores en la salida son el mismo valor o la diferencia es exactamente 1.
Ejemplos
Por ejemplo
m=6
yn=3
se convertiría2, 2, 2
m=7
yn=3
se convertiría2, 2, 3
o2, 3, 2
o3, 2, 2
m=7
yn=2
se convertiría3, 4
o4, 3
m=7
yn=1
se convertiría7
m=7
yn=8
generaría un error porque la suma de 8 enteros positivos no puede ser 7.m=10
yn=4
se convertiría en3, 3, 2, 2
cualquier otra permutación
Reglas
- Tanto la entrada como la salida son solo enteros positivos.
- O todos los valores en la salida son el mismo valor o la diferencia es exactamente 1.
- El orden de los valores en la lista no es importante.
- La suma de los valores en la lista es igual a
m
. - Cuando no se puede resolver, genere un error o un valor falso (en el caso de m = 7 yn = 8, por ejemplo).
- Como resultado de las otras reglas
m=8
yn=3
generaría cualquiera de las permutaciones de3, 3, 2
(no2, 2, 4
)
El ganador
Este es el código de golf, por lo que gana la respuesta válida más corta, medida en bytes.
float a = -0f, b = 0f; System.out.println(a == b); System.out.println(a + "," + b);
... producetrue
y-0.0,0.0
. Mira, 0 positivo y 0 negativo son claramente dos números distintos ... ¡la implementación lo dice!Respuestas:
Gaia , 4 bytes
Casi solo hay un incorporado para esto ...
Explicación
fuente
Python 2 ,
4843 bytesDevoluciones
0
por error.Pruébalo en línea!
41 bytes (con el truco de @ xnor)
Lanza
NameError
en error.Pruébalo en línea!
fuente
Mathematica, 33 bytes
entrada
salida
da como resultado Falso cuando no es solucionable
fuente
MATL , 7 bytes
Cuando no hay solución, la salida es una matriz que contiene al menos un cero, que es falso en MATL .
Pruébalo en línea!
Explicación
Considere las entradas
m = 10
yn = 4
.fuente
Haskell , 30 bytes
Pruébalo en línea!
fuente
Carbón , 15 bytes después de aplicar NDD 1
Pruébalo en línea!
No genera nada si no hay solución. Enlace a la versión detallada .
1 NDD = Desarrollo Neil-Driven.
Mi respuesta anterior:
Carbón ,
32 27 2420 bytesPruébalo en línea!
No genera nada si no hay solución. Enlace a la versión detallada .
Por supuesto, no podría haber jugado golf sin la ayuda de Neil.
fuente
Cast
operador funciona por alguna razón, pero este no es un algoritmo ideal ... Tengo una solución de 16 bytes.Cast
sé que funciona en las listas, he reducido a 11 bytes ...Map
, ¿cómo demonios funciona?Map
es como la versión de expresión defor
, hasta usar la misma variable de bucle. Entonces, en su ejemplo, en lugar de insertar una expresión en una lista cada vez, lasMap
recopila automáticamente y las evalúa en la lista de resultados.R , 33 bytes
Un puerto de la respuesta de octava de Luis Mendo . Es bastante triste que esto sea casi un 50% más corto que mi respuesta anterior.
Pruébalo en línea!
respuesta anterior, 63 bytes:
Una función anónima que toma dos argumentos (obligatorios)
m
yn
, y dos opcionales que son para los propósitos de golf. Devuelve un vector en orden creciente. Para el fallo, el primer valor será0
, que es falsey en R, ya queif
solo usa el primer valor del vector (con una advertencia).Es esencialmente equivalente a la siguiente función:
Pruébalo en línea!
fuente
pryr::f(diff(trunc(0:n*m/n)))
funciona y es mas corto!Gelatina ,
76 bytesPruébalo en línea!No produce nada por falsedad.
Cómo funciona
fuente
TI-Basic, 23 bytes
Devuelve ERR: DIVIDE BY 0 en caso de error
fuente
Octava , 24 bytes
El código define una función anónima. La salida es una matriz numérica (vector de fila). Cuando no hay esta matriz contiene al menos un cero, que es falso en Octave.
Pruébalo en línea!
Explicación
0:m/n:m
produce una matriz den+1
valores de0
am
con pasom/n
.fix
redondea cada entrada hacia0
ydiff
calcula diferencias consecutivas.A modo de ejemplo, aquí están todos los resultados intermedios para
m = 7
,n = 3
:fuente
Haskell ,
938988878671 bytesPruébalo en línea!
Explicación
La función principal aquí es
e
.e
tomará una lista y esencialmente ejecutará un rodillo a lo largo de izquierda a derecha. Si bien hay un elemento en la lista que es mayor que su vecino a la derecha, moveremos uno de él a la derecha.Ahora todo lo que tenemos que hacer es alimentar esta función con una lista lo suficientemente desproporcionada y permitirle hacer la magia. La lista que elegiremos va
m
seguida den-1
ceros. Ya que eso es fácil de hacer.Lo último que debemos hacer es asegurarnos de que se maneje el caso de error. Para esto solo lanzamos un
Non-exhaustive patterns in function
error siempre quem>n
.fuente
error[]
al no con un patrón no exhaustiva en su lugar:m!n|m>n=e$m:replicate(n-1)0
.(0<$[1..n-1])
es más corto quereplicate(n-1)0
.C # (.NET Core) ,
868271 bytesarroja un error para entradas no válidas.
Pruébalo en línea!
-4 bytes gracias a TheLethalCoder
-11 bytes gracias a OlivierGrégoire
fuente
a=>b=>
al comienzo.using System.Collections.Generic
si devuelvo unIEnumerable<int>
?IEnumerable<int>
estaría en la definición de la función, no necesitará incluir elusing
.Haskell, 48 bytes
Comience con una lista de
n
ceros. Repita losm
tiempos: tome el primer elemento, agregue uno y colóquelo al final de la lista.Falla con un error de coincidencia de patrón si
n < m
.Pruébalo en línea!
fuente
Braingolf , 30 bytes
Pruébalo en línea!
Toma entradas en orden inverso (
n
es la primera entrada,m
es la segunda)Divide
m
porn
, duplica losn
tiempos de resultado , luego recorre e incrementa uno por unom % n
vecesfuente
Lote, 71 bytes
cmd/cset/a
no genera ningún separador, así que tengo que usarecho(
((
evita la impresiónECHO is on.
).fuente
PHP> = 7.1, 62 bytes
PHP Sandbox en línea
fuente
Python 2 , 41 bytes
Pruébalo en línea!
NameError
cuando es imposiblePython 2 , 43 bytes
Pruébalo en línea!
ValueError
cuando es imposiblefuente
NameError
para salir por errorJavascript (ES6),
57 56 5341 bytesLa respuesta ahora incluye una forma más inteligente de crear los valores. Gracias @Neil
Uso
Historia
Primero mio
Luego agregó el operador de propagación y la sintaxis de currículum con punta de @Arnauld
fuente
_=>m++/n|0
Guarda un montón de bytes.Java (OpenJDK 8) ,
8073636159 bytesPruébalo en línea!
Nota, para fines de curry,
m
yn
se invierten.fuente
Pyth , 11 bytes
Pruébalo en línea!
fuente
Pyth , 13 bytes
Pruébalo en línea! Salida
0
por error.Hacer trampa, 6 bytes
Pruébalo en línea! La matriz contiene un
0
error. Lamentablemente, esto no es falso en Pyth .Explicación
fuente
CJam ,
1312 bytesPruébalo en línea!
Este es un bloque anónimo que toma la entrada como
n m
en la pila. Hubiera sido una buena respuesta, pero el requisito de manejo de errores lo eliminó por completo.Errores con una división por cero cuando no es posible resolverlo.
Explicación
Si se levanta el requisito de manejo de errores, esto se puede acortar a 7 bytes, lo que es una disminución de más del 40%:
fuente