Twoim zadaniem jest napisanie programu lub funkcji, która określa, czy liczba jest podzielna przez inną. Haczyk polega na tym, że powinien udzielić odpowiedzi tak szybko, jak to możliwe , nawet jeśli nie podano wszystkich cyfr numeru.
Twój program powinien przyjąć jako liczbę całkowitą D ≥ 2, a następnie ciąg cyfr. Reprezentują one cyfry innej liczby całkowitej N ≥ 1, zaczynając od co najmniej znaczącej cyfry. Na pierwszym miejscu, że N albo musi lub nie może być divisble przez D , Twój program powinien wypisać właściwą odpowiedź i wysiadanie. Po osiągnięciu końca wejścia, to powinien wypisać czy pełny N jest podzielna przez D .
Oto lista dopuszczalnych formatów wejściowych dla N (zostaw komentarz, jeśli uważasz, że coś nieuwzględnionego powinno być dozwolone):
Standardowe wprowadzanie : cyfry są podawane w osobnych wierszach; koniec wejścia to EOF lub wartość specjalna; Wyjście oznacza, że funkcja zwraca lub program kończy działanie.
Wejście analogowe : np. Poprzez naciśnięcia klawiszy lub dziesięć przycisków reprezentujących każdą cyfrę; koniec wprowadzania jest wartością specjalną; Wyjście oznacza, że funkcja zwraca lub program kończy działanie.
Funkcja ze stanem globalnym : wywoływana wielokrotnie z kolejnymi cyframi; koniec wprowadzania jest wartością specjalną; exit oznacza, że funkcja zwraca wartość inną niż null. Pamiętaj, że jeśli używasz stanu globalnego, musi on zostać wyczyszczony po zwróceniu wartości lub w inny sposób zresetowany , aby funkcja działała wiele razy .
Funkcja curry : zwraca inną funkcję, która ma zostać wywołana z następną cyfrą lub wartością; koniec wejścia to specjalna wartość lub wywołanie funkcji bez argumentu; Wyjście oznacza, że funkcja zwraca odpowiedź, a nie inną funkcję.
Pytanie GUI lub podobne : wyświetlane wielokrotnie; koniec wprowadzania to „anuluj” lub równoważny albo wartość specjalna; exit oznacza, że monity przestają się pojawiać.
Funkcja iteratora : wejście jest obiektem stanowym lub funkcją, która po wywołaniu zwraca następną cyfrę, koniec wejścia to wyjątek lub wartość specjalna; exit oznacza, że iterator przestaje być wywoływany.
Dane wejściowe dla D i dane wyjściowe można przeprowadzić dowolną akceptowalną metodą standardową .
Przypadki testowe:
2; 6 => true
5; 6 => false
20; 0 3 => false
20; 0 4 => true
100; 1 => false
100; 0 0 => true
100; 0 2 => false
4; 2 4 => false
4; 2 5 => true
4; 2 [eof] => false
4; 4 [eof] => true
625; 5 5 => false
625; 5 7 2 => false
625; 5 7 3 6 => false
625; 5 7 3 4 => true
7; 9 3 4 [eof] => false
7; 9 3 4 5 [eof] => true
140; 0 3 => false
140; 0 4 5 [eof] => false
140; 0 4 5 1 [eof] => true
14; 4 5 1 4 [eof] => false
14; 4 5 1 4 1 [eof] => true
digits
danych wejściowych o specjalnej wartości dla EOF?[]
i[2]
coś innego niż powrótfalse
lubtrue
(w tym samej funkcji etc ...), podczas[2,3]
,[2,3,1]
i[2,3,1,EOF]
powróttrue
. Uderza mnie to tak blisko opcji globalnego stanu.Odpowiedzi:
JavaScript (ES6), 70 bajtów
Format wejściowy: funkcja curry
Wypróbuj online!
W jaki sposób?
Skomentował
źródło
Partia,
177169 bajtówPobiera
d
jako parametr wiersza polecenia i odczytuje cyfryn
na osobnych wierszach-
jako znacznik EOF. Wyniki1
dla podzielnej,0
jeśli nie. Wyjaśnienie:Zainicjuj
n
pusty ciąg.g
jestgcd(d, 10**len(n))
Rozpocznij pętlę odczytującą cyfry.
Przeczytaj następną cyfrę.
Zatrzymaj przetwarzanie w EOF.
Wpisz następną cyfrę do
n
.Zaktualizuj
g
teraz, żelen(n)
wzrosła i obliczn%g
.Jeśli
r
jest niezerowe, tod
zdecydowanie się nie dzielin
, ponieważg
współczynnikd
nie. Jeślir
wynosi zero, wiemy tylko, czyd
dzieli,n
jeślig
jest równed
, więc jeśli nie jest, kontynuuj pętlę.Wyjdź z pętli odczytu cyfr tutaj na EOF.
Oblicz i domyślnie wyprowadź wynik.
źródło