Biorąc pod uwagę listę wyrażeń matematycznych, które są prawdziwe i składają się z obliczeń reszty modulo z dwiema liczbami i wynikiem, Twoim zadaniem jest uzyskanie pierwszych n
liczb, które są prawdziwe dla wszystkich instrukcji na liście.
Na przykład:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
, gdzie% jest operatorem modulo.
Dla n
= 3 pierwsze 3 liczby (licząc od 0), które pasują do sekwencji, są 33, 93, 153
więc wynikiem (format do ciebie).
Zasady / IO
- Bierzesz liczbę dodatnią
n
i listę prawd. Oczywiście, potrzebne są tylko RHS operacji modulo i wynik. n
a liczby na liście prawd zawsze będą w zakresie 1 -> 2 ^ 31-1 , podobnie jak wyniki.- Bierzesz dane w dowolnej dogodnej formie i dane wyjściowe w dowolnej dogodnej formie. Na przykład, wejście:
3 [3 0, 4 1, 5 3]
i wyjście:33 93 153
. - Gwarantuje to, że rozwiązanie jest matematycznie możliwe.
- Źródło danych wejściowych może pochodzić z pliku, parametrów funkcji, standardowego wejścia itd. To samo dotyczy danych wyjściowych.
- Bez luk.
- To jest golf golfowy, więc wygrywa najmniejsza liczba bajtów.
Przypadki testowe
# 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
Implementacja referencji w pseudokodzie
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
prawidłowy wynik?Odpowiedzi:
Galaretka , 7 bajtów
To jest pełny program. Argumentami są dzielniki, moduły docelowe i liczba rozwiązań w tej kolejności.
Wypróbuj online!
Jak to działa
źródło
Perl 6 , 33 bajtów
Spróbuj
Dane wejściowe to
( number-of-values, list-of-divisors, list-of-remainders )
Rozszerzony:
źródło
JavaScript (ES6),
7168 bajtówProsta funkcja rekurencyjna. Użyj, curry w tablicy pierwszy i
n
drugi, tak:źródło
JavaScript (ES6),
747069 bajtówStaje wejście liczbą całkowitą
n
oraz szerega
z[modulo, remainder]
tablic z currying składni(n)(a)
.Przypadki testowe
Pokaż fragment kodu
źródło
Haskell, 47 bajtów
Przykład użycia:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.źródło
Python, 67 bajtów
źródło
range(2**31)
. Również bardzo miło. Wymyśliłem tę odpowiedź niezależnie.JavaScript (ES6),
7270 bajtówZwinięte w pierwszej kolejności tablica warunków i druga liczba wyników. Edycja: Zapisano 2 bajty, nie obsługując wielkości zerowej.
źródło
Mathematica, 42 bajty
Funkcja bez nazwy, zwracająca listę dodatnich liczb całkowitych i przyjmująca trzy dane wejściowe: listę modułów, listę reszt i liczbę
n
liczb całkowitych do zwrócenia. Na przykład drugi przypadek testowy jest wywoływany przezi wraca
{120, 848, 1576}
.Wbudowane
#2~ChineseRemainder~#
daje najmniejsze nieujemne rozwiązanie; aby uzyskać wszystkie pożądane rozwiązania, dodajemy tę liczbęRange[0,#3-1]LCM@@#
, która jest pierwsząn
nieujemną wielokrotnością najmniejszej wspólnej wielokrotności wszystkich modułów.O ile mi wiadomo, Mathematica nie ma leniwie ocenianych nieskończonych list, więc ta implementacja była krótsza niż cokolwiek, co znalazłem, które testowało nieujemne liczby całkowite jeden po drugim - nawet przy długości nazwy funkcji
ChineseRemainder
, i mimo że test takiMod[k,{8,13,14}]=={0,3,8}
działa idealnie dobrze.źródło
PHP, 97 bajtów
najdłuższa jak dotąd odpowiedź. Ale cieszę się, że udało mi się uzyskać go poniżej 100.
pobiera dane wejściowe z oddzielnych argumentów wiersza poleceń,
drukuje dopasowania oddzielone i poprzedzone znakami podkreślenia.
Pętla nigdy nie pęka; ledwo odpowiedni dla testerów online.
Biegnij jak
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.awaria
notatki
$argc==count($argv)
. Dla trzech par istnieje 8 argumentów: nazwa pliku$argv[0]
,n
=$argv[1]
i parymodulo
/result
powyżej.$v=2
inkrementowane 3 razy daje5
>$argc/2
.Dodaj jeden bajt na czystą wyjścia: Wymień
&&$a[1]-->0?print$k._
się?$a[1]--?print$k._:die
.źródło
Pyth -
1413 bajtówWypróbuj online tutaj .
źródło
SmileBASIC, 102 bajty
To pierwszy raz, kiedy używałem
ON
w SB. Powodem, dla którego użyłem go tutaj,IF F GOTO@L
było umieszczenie?T
go w tym samym wierszu, oszczędzając 1 bajt.źródło
Python, 59 bajtów
m
jest listą wyrażeń w postaci łańcucha, takich jak["i % 4 == 1", ...]
Wypróbuj online (z mniejszym zasięgiem, więc faktycznie się skończy)
źródło
PHP, 91 bajtów
Weź listę jako tablicę asocjacyjną
Wypróbuj online!
źródło