Dada una lista de expresiones matemáticas que son verdaderas y consisten en cálculos de módulo restante con dos números y un resultado, su tarea es producir los primeros n
números que son verdaderos para todas las declaraciones en la lista.
Por ejemplo:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
, donde% es el operador del módulo.
Para n
= 3, los primeros 3 números (contando desde 0) que se ajustan a la secuencia son 33, 93, 153
, por lo tanto, su resultado sería ese (formatee hasta usted).
Reglas / IO
- Tomas un número positivo
n
y una lista de verdades. Por supuesto, las cosas que necesita tomar son solo el RHS de la operación del módulo y el resultado. n
y los números en la lista de verdades siempre estarán en el rango 1 -> 2 ^ 31-1 , y también lo son los resultados.- Usted toma la entrada en cualquier forma conveniente y la salida en cualquier forma conveniente. Por ejemplo, la entrada:
3 [3 0, 4 1, 5 3]
y salida:33 93 153
. - Se garantiza que la solución es matemáticamente posible.
- La fuente de entrada puede ser de un archivo, parámetros de función, stdin, etc. Lo mismo ocurre con la salida.
- No hay escapatorias.
- Este es el código de golf, por lo que gana el conteo de bytes más bajo.
Casos de prueba
# Input in the form <n>, <(d r), (d2 r2), ...>
# where <d> = RHS of the modulo expression and <r> the result of the expression. Output in the next line.
5, (3 2), (4 1), (5 3)
53 113 173 233 293
3, (8, 0), (13, 3), (14, 8)
120 848 1576
Implementación de referencia en pseudocódigo
n = (an integer from stdin)
truths = (value pairs from stdin)
counter = 0
while n != 0 {
if matches_criterias(counter, truths) {
print counter
n -= 1
}
counter += 1
}
0
un resultado válido?Respuestas:
Jalea , 7 bytes
Este es un programa completo. Los argumentos son divisores, módulos de destino y número de soluciones, en ese orden.
Pruébalo en línea!
Cómo funciona
fuente
Perl 6 , 33 bytes
Intentalo
La entrada es
( number-of-values, list-of-divisors, list-of-remainders )
Expandido:
fuente
JavaScript (ES6),
7168 bytesUna simple función recursiva. Utilice curry en la matriz primero y
n
segundo, así:fuente
JavaScript (ES6),
747069 bytesToma la entrada como un entero
n
y una matriza
de[modulo, remainder]
matrices con sintaxis curry(n)(a)
.Casos de prueba
Mostrar fragmento de código
fuente
Haskell, 47 bytes
Ejemplo de uso:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.fuente
Python, 67 bytes
fuente
range(2**31)
. Además, muy agradable. Se me ocurrió esta respuesta de forma independiente.JavaScript (ES6),
7270 bytesCurry sobre el conjunto de condiciones primero y el número de resultados segundo. Editar: guardado 2 bytes al no manejar el caso cero.
fuente
Mathematica, 42 bytes
Función sin nombre, que devuelve una lista de enteros positivos y toma tres entradas: la lista de módulos, la lista de restos y el número
n
de enteros a devolver. Por ejemplo, el segundo caso de prueba es invocado pory vuelve
{120, 848, 1576}
.El builtin
#2~ChineseRemainder~#
da la solución no negativa más pequeña; para obtener todas las soluciones deseadas, agregamos este número aRange[0,#3-1]LCM@@#
, que es el primern
múltiplo no negativo del mínimo común múltiplo de todos los módulos.Hasta donde yo sé, Mathematica no tiene listas infinitas evaluadas perezosamente, por lo que esta implementación fue más corta que cualquier cosa que encontré que probara enteros no negativos uno por uno, incluso con la longitud del nombre de la función
ChineseRemainder
, y aunque una prueba comoMod[k,{8,13,14}]=={0,3,8}
funciona perfectamente bien.fuente
PHP, 97 bytes
La respuesta más larga hasta ahora. Pero me alegro de poder llegar a menos de 100.
toma datos de argumentos de línea de comando separados,
imprime coincidencias separadas y seguidas por guiones bajos.
El bucle nunca se rompe; apenas adecuado para probadores en línea.
Corre como
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.Descompostura
notas
$argc==count($argv)
. Para tres pares hay 8 argumentos: el nombre de archivo$argv[0]
,n
=$argv[1]
y losmodulo
/result
pares por encima de eso.$v=2
incrementado 3 veces da5
>$argc/2
.Agregue un byte para una salida limpia: reemplace
&&$a[1]-->0?print$k._
con?$a[1]--?print$k._:die
.fuente
Pyth -
1413 bytesPruébelo en línea aquí .
fuente
SmileBASIC, 102 bytes
Esta es la primera vez que uso
ON
en SB. La razón por la que lo usé aquí en lugar deIF F GOTO@L
fue para poder ponerlo?T
después en la misma línea, ahorrando 1 byte.fuente
Python, 59 bytes
m
es una lista de expresiones en forma de cadena como["i % 4 == 1", ...]
Pruébelo en línea (con un rango más corto, para que realmente termine)
fuente
PHP, 91 bytes
Tome la lista como matriz asociativa
Pruébalo en línea!
fuente