Niektóre dodatnie liczby całkowite mogą wykazywać właściwość zwaną podzielnością łańcucha. Aby liczba mogła być podzielna przez n , musi spełniać trzy wymagania:
Każda cyfra dzieli liczbę utworzoną przez n cyfr po niej.
Na przykład, liczba 7143 jest podzielna przez łańcuch 2, ponieważ 7 dzieli 14 i 1 dzieli 43. Nie łańcucha podzielna przez 3 ponieważ 7 nie dzieli 143.
Każda podsekwencja brana pod uwagę przy podzielności nie może mieć zer wiodących.
Na przykład liczby 14208 nie można podzielić przez 2, ponieważ 08 ma wiodące zero. Można go jednak podzielić przez 3, ponieważ 208 nie ma wiodącego zera.
Wszystkie cyfry w numerze muszą być unikalne.
Na przykład liczba 14280 jest podzielna przez 2, 3 i 4. Jeśli moje wyjaśnienie podzielności przez łańcuch jest niejasne, proszę zadawać pytania w komentarzach.
Wejście
Dane wejściowe do programu składają się z jednej liczby całkowitej n
, po której następuje spacja, a następnie liczba, w której pewne cyfry zostały zastąpione znakami podkreślenia. Na przykład możliwe są dane wejściowe:
3 6__2__4508
n będzie większe niż 1. Liczba nigdy nie będzie całkowicie podkreślona. Nie ma gwarancji, że pierwsza cyfra nie jest znakiem podkreślenia. Pierwsza cyfra nigdy nie będzie wynosić 0. n nigdy nie będzie większa ani równa liczbie cyfr w liczbie.
Wynik
Wyprowadza liczbę z cyframi zastąpionymi liczbami całkowitymi, tak że wynikowa liczba jest podzielna przez n . Jeśli istnieje więcej niż jeden sposób uzupełnienia liczby podzielnej przez łańcuch, dowolny może być użyty jako wynik. Jeśli nie ma liczb, które mogłyby go uzupełnić, wyjdź no answer
. Na przykład dane wyjściowe przykładowego wejścia mogą wyglądać następująco:
6132794508
To jest kod golfowy, więc wygrywa najkrótszy kod.
n
jest większa lub równa liczbie cyfr w tej liczbie, liczba jest podzielna przez łańcuch?Odpowiedzi:
Bash + coreutils, 197 bajtów
Wynik:
Wyjaśnienie
${2//_/{0..9\}}
zastępuje wszystkie podkreślenia znakiem{0..9}
.eval
edytowany, aby rozwinąć wszystkie te wyrażenia nawiasów.grep
Chwasty wszystkie możliwości, gdzie istnieją powtarzające się cyfry.źródło
Python -
239267Powoli, ale krótko. Wystarczy porównać każdą możliwą permutację N-cyfrową z danym wzorcem i sprawdzić wszystkie wymagania. Przetestowałem to tylko z 7 lub 8 cyframi. Powinien działać również na 9 lub 10, ale zajmie to sporo czasu.
Edycja: Dodałem brakujące wyjście „brak odpowiedzi”.
źródło
MathematicaRuby,349224229 bajtówTo bardzo naiwna implementacja. Liczę liczbę znaków podkreślenia, a następnie po prostu tworzę listę wszystkich kombinacji cyfr o tej długości, aby brutalnie wymusić każdą możliwą kombinację. Będzie to działało okropnie w przypadku większej liczby znaków podkreślenia, ale jest to kod golfowy, a nie najszybszy kod. :)
Edytować: Przeniesiono to z Mathematica. Zobacz historię edycji oryginalnej wersji.
Edycja: Naprawiono wiodące przypadki podkreślenia.
źródło
Tuples
nie nakłada tego ograniczenia.Permutations
będzie, pod warunkiem, że w zestawie wejściowym nie ma powtarzających się cyfr. I możesz permutować tylko cyfry, które nie zostały jeszcze użyte. (Chociaż znowu może to wydłużyć twój kod.)Tuples
ponieważ jest krótszy.Java, 421
Mniej golfa, z wyjaśnieniem:
źródło