Angesichts einer Liste von mathematischen Ausdrücken, die alle zutreffen und aus Modulo-Restberechnungen mit zwei Zahlen und einem Ergebnis bestehen, müssen Sie die ersten n
Zahlen ermitteln, die für alle Aussagen in der Liste zutreffen.
Beispielsweise:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
, wobei% der Modulo-Operator ist.
Für n
= 3 sind die ersten 3 Zahlen (beginnend mit 0), die zur Sequenz passen 33, 93, 153
, daher wäre das Ergebnis das (Format nach Belieben).
Regeln / IO
- Du nimmst eine positive Zahl
n
und eine Liste von Wahrheiten. Natürlich sind die Dinge, die Sie mitnehmen müssen, nur die RHS der Modulo-Operation und das Ergebnis. n
und die Zahlen in der Liste der Wahrheiten werden immer im Bereich 1 -> 2 ^ 31-1 liegen , und so sind die Ergebnisse.- Sie nehmen Eingaben in beliebiger Form entgegen und geben sie in beliebiger Form aus. Zum Beispiel, Eingang:
3 [3 0, 4 1, 5 3]
und Ausgang:33 93 153
. - Es ist garantiert, dass die Lösung mathematisch möglich ist.
- Die Eingabequelle kann aus einer Datei, Funktionsparametern, stdin usw. stammen. Gleiches gilt für die Ausgabe.
- Keine Lücken.
- Das ist Code-Golf, also gewinnt die niedrigste Bytezahl.
Testfälle
# 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
Referenzimplementierung in Pseudocode
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
ein gültiges Ergebnis?Antworten:
Gelee , 7 Bytes
Dies ist ein volles Programm. Argumente sind Teiler, Zielmodul und Anzahl der Lösungen in dieser Reihenfolge.
Probieren Sie es online!
Wie es funktioniert
quelle
Perl 6 , 33 Bytes
Versuch es
Die Eingabe ist
( number-of-values, list-of-divisors, list-of-remainders )
Erweitert:
quelle
JavaScript (ES6),
71-68ByteEine einfache rekursive Funktion. Verwenden Sie, indem Sie zuerst und dann im Array
n
wie folgt vorgehen :quelle
JavaScript (ES6),
747069 ByteÜbernimmt Eingaben als Ganzzahl
n
und als Arraya
von[modulo, remainder]
Arrays mit aktueller Syntax(n)(a)
.Testfälle
Code-Snippet anzeigen
quelle
Haskell, 47 Bytes
Anwendungsbeispiel:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.quelle
Python, 67 Bytes
quelle
range(2**31)
. Auch sehr nett. Ich habe diese Antwort unabhängig gefunden.JavaScript (ES6),
72-70ByteWurde zuerst über das Bedingungsfeld und dann über die Anzahl der Ergebnisse gewechselt. Bearbeiten: 2 Bytes werden gespeichert, indem der Null-Fall nicht behandelt wird.
quelle
Mathematica, 42 Bytes
Unbenannte Funktion, die eine Liste positiver Ganzzahlen zurückgibt und drei Eingaben vornimmt: die Liste der Module, die Liste der verbleibenden
n
Zahlen und die Anzahl der zurückzugebenden Ganzzahlen. Beispielsweise wird der zweite Testfall von aufgerufenund kehrt zurück
{120, 848, 1576}
.Das eingebaute
#2~ChineseRemainder~#
gibt die kleinste nichtnegative Lösung; Um alle gewünschten Lösungen zu erhalten, addieren wir diese Zahl zuRange[0,#3-1]LCM@@#
, die das ersten
nichtnegative Vielfache des am wenigsten verbreiteten Vielfachen aller Module ist.Soweit ich weiß, hat Mathematica keine trägen unendlichen Listen ausgewertet. Daher war diese Implementierung kürzer als alles, was ich fand, dass nichtnegative Ganzzahlen einzeln getestet wurden - selbst mit der Länge des Funktionsnamens
ChineseRemainder
und obwohl ein Test wieMod[k,{8,13,14}]=={0,3,8}
perfekt funktioniert Gut.quelle
PHP, 97 Bytes
längste Antwort bisher. Aber ich bin froh, dass ich es unter 100 schaffen konnte.
Nimmt Eingaben von separaten Befehlszeilenargumenten entgegen,
druckt Übereinstimmungen getrennt und mit Unterstrichen.
Schleife bricht nie; Für Online-Tester kaum geeignet.
Laufen wie
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.Nervenzusammenbruch
Anmerkungen
$argc==count($argv)
. Für drei Paare gibt es 8 Argumente: den Dateinamen$argv[0]
,n
=$argv[1]
und dasmodulo
/result
-Paar darüber.$v=2
3-mal erhöht ergibt5
>$argc/2
.Fügen Sie ein Byte für einen sauberen Exit hinzu: Ersetzen
&&$a[1]-->0?print$k._
durch?$a[1]--?print$k._:die
.quelle
Pyth -
1413 BytesProbieren Sie es hier online aus .
quelle
SmileBASIC, 102 Bytes
Dies ist das erste Mal, dass ich
ON
SB benutzt habe. Der Grund, warum ich es hier anstelle von verwendet habe,IF F GOTO@L
war, dass ich?T
es in dieselbe Zeile stellen und 1 Byte sparen konnte.quelle
Python, 59 Bytes
m
ist eine Liste von Ausdrücken in Stringform wie["i % 4 == 1", ...]
Probieren Sie es online aus (mit einer kürzeren Reichweite, damit es tatsächlich zu Ende geht)
quelle
PHP, 91 Bytes
Nehmen Sie die Liste als assoziatives Array
Probieren Sie es online!
quelle