Zainspirowany tym źle odebranym migrowanym postem .
Szef bezpieczeństwa w Twojej firmie jest zaniepokojony systemem generowania PIN-u po jego przekazaniu 12345
. Nie docenił też żartu Kosmicznych Kul, który zrobiłeś na jego koszt, więc zostałeś delegowany do ponownego napisania generatora PIN. Ponieważ musi zmieścić się na jakimś specjalnym sprzęcie, musisz uczynić go tak małym, jak to możliwe.
Twoje zadanie
- Podajesz dwa dane wejściowe - liczbę PIN i rozmiar PIN w cyfrach.
- Wygeneruj losowo określoną liczbę kodów PIN o określonym rozmiarze i wydrukuj ją.
- Wszystkie prawidłowe kody PIN o rozmiarze muszą być możliwe do wydrukowania, nawet jeśli nie są jednoznacznie prawdopodobne.
Istnieją jednak pewne ograniczenia dotyczące kodów PIN - tutaj są nieprawidłowe:
- Jeśli wszystkie pary mają tę samą cyfrę:
114422
(Uwaga: będzie to oczywiście obejmowało wszystkie te same cyfry PIN). - PIN coraz bardziej liniowe (10): mod
246802
. - Wszystkie grupy 3 są linie fizyczne na klawiaturze
1 2 3;4 5 6;7 8 9;bksp 0 enter;
:147369
. - Kod PIN można całkowicie podzielić na grupy z reguły 1 i reguły 3.
- Jeśli wszystkie pary mają tę samą cyfrę:
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
55123
)?123
, ale55432
byłoby dobrze.Odpowiedzi:
Pyth, 120 bajtów
Pomyślałem, że powinienem wtedy dodać prawdziwą implementację. Generuje losowe liczby, dopóki nie zostanie znaleziona jedna spełniająca wszystkie wymagania. Prawdopodobnie można go znacznie poprawić!
Wersja online
źródło
Perl 5, 244
Zaczyna się od generowania liczb losowych dla danego rozmiaru.
I drukuje tylko te, które nie spełniają ograniczeń.
Znalezienie rozwiązania dla linii klawiatury (bez kombinacji kodowania) było trochę zabawne.
Test
źródło