Étant donné une liste d'expressions mathématiques qui sont toutes vraies et consistent en des calculs de reste modulo avec deux nombres et un résultat, votre tâche consiste à produire les premiers n
nombres qui sont vrais pour toutes les instructions de la liste.
Par exemple:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
, où% est l'opérateur modulo.
Pour n
= 3, les 3 premiers nombres (en comptant à partir de 0) qui correspondent à la séquence sont 33, 93, 153
, donc votre résultat serait que (formatez-vous).
Règles / IO
- Vous prenez un nombre positif
n
et une liste de vérités. Bien sûr, les choses dont vous avez besoin ne sont que le RHS de l'opération modulo et le résultat. n
et les nombres dans la liste des vérités seront toujours dans la plage 1 -> 2 ^ 31-1 , et les résultats aussi.- Vous prenez l'entrée sous n'importe quelle forme pratique et la sortie sous n'importe quelle forme pratique. Par exemple, l' entrée:
3 [3 0, 4 1, 5 3]
et la sortie:33 93 153
. - Il est garanti que la solution est mathématiquement possible.
- La source d'entrée peut provenir d'un fichier, des paramètres de fonction, stdin, etc ... Il en va de même pour la sortie.
- Pas de failles.
- C'est le code-golf, donc le nombre d'octets le plus bas l'emporte.
Cas de test
# 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
Implémentation de référence en pseudo-code
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
résultat valide?Réponses:
Gelée , 7 octets
Ceci est un programme complet. Les arguments sont les diviseurs, les modules cibles et le nombre de solutions, dans cet ordre.
Essayez-le en ligne!
Comment ça fonctionne
la source
Perl 6 , 33 octets
Essayez-le
L'entrée est
( number-of-values, list-of-divisors, list-of-remainders )
Étendu:
la source
JavaScript (ES6),
7168 octetsUne fonction récursive simple. Utilisez en currying dans le tableau premier et
n
deuxième, comme ceci:la source
JavaScript (ES6),
747069 octetsPrend l'entrée comme un entier
n
et un tableaua
de[modulo, remainder]
tableaux avec une syntaxe de curry(n)(a)
.Cas de test
Afficher l'extrait de code
la source
Haskell, 47 octets
Exemple d'utilisation:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.la source
Python, 67 octets
la source
range(2**31)
. De plus, très agréable. J'ai trouvé cette réponse indépendamment.JavaScript (ES6),
7270 octetsCurry sur le tableau de conditions en premier et le nombre de résultats en second. Edit: enregistré 2 octets en ne gérant pas le cas zéro.
la source
Mathematica, 42 octets
Fonction sans nom, renvoyant une liste d'entiers positifs et prenant trois entrées: la liste des modules, la liste des restes et le nombre
n
d'entiers à renvoyer. Par exemple, le deuxième cas de test est invoqué paret retourne
{120, 848, 1576}
.Le builtin
#2~ChineseRemainder~#
donne la plus petite solution non négative; pour obtenir toutes les solutions souhaitées, nous ajoutons ce nombre àRange[0,#3-1]LCM@@#
, qui est le premiern
multiple non négatif du multiple le moins commun de tous les modules.Pour autant que je sache, Mathematica n'a pas de listes infinies évaluées paresseusement, donc cette implémentation était plus courte que tout ce que j'ai trouvé qui testait les entiers non négatifs un par un - même avec la longueur du nom de la fonction
ChineseRemainder
, et même si un test similaireMod[k,{8,13,14}]=={0,3,8}
fonctionne parfaitement bien.la source
PHP, 97 octets
réponse la plus longue jusqu'à présent. Mais je suis content d'avoir pu descendre en dessous de 100.
prend les entrées d'arguments de ligne de commande séparés,
affiche les correspondances séparées et suivies par des traits de soulignement.
La boucle ne se rompt jamais; à peine adapté aux testeurs en ligne.
Courez comme
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.panne
Remarques
$argc==count($argv)
. Pour trois paires, il y a 8 arguments: le nom de fichier$argv[0]
,n
=$argv[1]
et les pairesmodulo
/result
au-dessus.$v=2
incrémenté 3 fois donne5
>$argc/2
.Ajoutez un octet pour une sortie propre: remplacez
&&$a[1]-->0?print$k._
par?$a[1]--?print$k._:die
.la source
Pyth -
1413 octetsEssayez-le en ligne ici .
la source
SmileBASIC, 102 octets
C'est la première fois que je l'utilise
ON
dans SB. La raison pour laquelle je l'ai utilisé ici au lieu deIF F GOTO@L
c'était pour que je puisse le mettre?T
sur la même ligne, en économisant 1 octet.la source
Python, 59 octets
m
est une liste d'expressions sous forme de chaîne comme["i % 4 == 1", ...]
Essayez-le en ligne (avec une gamme plus courte, donc il se terminera réellement)
la source
PHP, 91 octets
Prendre la liste comme tableau associatif
Essayez-le en ligne!
la source