Zadanie
Zdefiniuj mod-krotnie jako funkcję postaci f (x) = x% a 1 % a 2 %…% a k , gdzie a i są liczbami całkowitymi dodatnimi i k ≥ 0 . (Tutaj % jest operatorem modulo asocjacyjnym z lewej strony).
Biorąc pod uwagę listę n liczb całkowitych y 0 ,…, y n − 1 , określ, czy istnieje mod-krotnie f , aby każde y i = f (i) .
Możesz wybrać i naprawić dowolne dwa wyjścia Y i N dla swojej funkcji / programu. Jeśli istnieje takie f , zawsze musisz zwrócić / wydrukować dokładnie Y ; Jeśli nie, należy zawsze powrócić / wydrukować dokładnie N . (Mogą to być true
/ false
, 1
/ / 0
, lub false
/ true
, itp.) Wspomnij o nich w swojej odpowiedzi.
Najkrótsze przesłanie w bajtach wygrywa.
Przykład
Zdefiniuj f (x) = x% 7% 3 . Jego wartości zaczynają się:
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...
| f(x) | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | ...
Zatem 0 1 2 0 1 2 0 0 1 2
jako dane wejściowe do naszego rozwiązania wypisujemy Y , ponieważ f generuje tę sekwencję. Jednak 0 1 0 1 2
jako dane wejściowe wypisujemy N , ponieważ żadne f nie generuje tej sekwencji.
Przypadki testowe
Wzory podane, gdy dane wyjściowe to Y, służą wyłącznie jako odniesienie; nie wolno ich w żadnym momencie drukować.
0 1 2 3 4 5 Y (x)
1 N
0 0 0 Y (x%1)
0 1 2 0 1 2 0 0 1 2 Y (x%7%3)
0 0 1 N
0 1 2 3 4 5 6 0 0 1 2 Y (x%8%7)
0 1 2 0 1 2 0 1 2 3 N
0 2 1 0 2 1 0 2 1 N
0 1 0 0 0 1 0 0 0 0 1 Y (x%9%4%3%2)
Odpowiedzi:
Pyth, 14 bajtów
Powraca
True/False
. Wypróbuj online: pakiet demonstracyjny lub testowyWyjaśnienie:
Pyth, 11 bajtów
Na podstawie pomysłu @ ferrsum . Właściwie myślałem o użyciu wskaźników zerowych do generowania podzbiorów, ale nie zdawałem sobie sprawy, że wszystkie wskaźniki zerowe muszą już być rozwiązaniem.
źródło
Python 3,
239218 bajtówAnonimowa funkcja, która pobiera dane z listy
z
i zwracaTrue
lubFalse
dlaY
iN
.Używa to metody podobnej do @Jakube odpowiedź , a mimo to jest w istocie brute force, biegnie bardzo szybko.
Wypróbuj na Ideone
źródło
Python 2, 69 bajtów
Wykorzystuje
True
/False
.Odpowiedź na to, co charakteryzuje serię składaną za pomocą modów, okazuje się mniej interesująca, niż się początkowo wydaje. Jest to szereg postaci 0, 1, ..., M - 1, 0, 1, ... x 1 , 0, 1, ..., x 2 , ... taki, że dla wszystkich i, 0 <= x i <M. Taka sekwencja może być wygenerowana przez łańcuch modów wszystkich (opartych na 0) indeksów zer w tablicy, z wyłączeniem pierwszego.
źródło
Galaretka ,
191514 bajtówZwraca 1 za prawdę, 0 za fałsz. Wypróbuj online!
Algorytmem jest O (n n ) , gdzie n jest długością listy, co powoduje, że jest ona zbyt wolna i wymaga dużej ilości pamięci dla większości przypadków testowych.
Zmodyfikowanej wersji - która zastępuje drugą
L
literą a5
- można użyć do weryfikacji wszystkich przypadków testowych . Pamiętaj, że ta zmodyfikowana wersja nie będzie działać na dowolnie długich listach.Jak to działa
źródło
JavaScript (ES6),
98bajtówZaoszczędzono 48 bajtów, przechodząc na odkrycie @ Feersum. Każda podana wartość
n
w tablicy jest równa zero, w którym to przypadku następna prognozap
wynosi 1, lub jest równa kolejnej prognozie, w którymp
to przypadku jest zwiększana. Mierzymy również długośćl
sekwencji początkowej, porównującp
doi
, ponieważn
zawsze musi być ona mniejsza niżl
zawsze.źródło
Python 2,
10399 bajtówDrukuje 1 dla prawdy i 0 dla fałszu. Przetestuj na Ideone .
źródło