Twój program musi przyjąć dane wejściowe ( n
do celów opisu) i wypisać wszystkie permutacje liczby, która jest n
długa, bez powtarzających się cyfr, gdzie każda z cyfr poprzedzających indeks wraz z indeksem jest podzielna przez miejsce w liczbie, w której się znajduje .
Możesz przeczytać o magicznych liczbach tutaj .
Zasady:
1 <= n <= 10
- Żadne cyfry nie mogą się powtarzać
- Wiodące 0 musi być obecne (jeśli dotyczy)
- Od 1 do 3
x
cyfry liczby (zaczynając od pierwszego znaku jako 1) muszą być podzielne przezx
, tj. W30685
,3
jest podzielne przez 1,30
jest podzielne przez 2,306
jest podzielne przez 3,3068
jest podzielne przez 4 i30685
jest podzielne przez 5 . - Program musi przyjmować liczbę całkowitą jako dane wejściowe (poprzez wiersz poleceń, jako argument funkcji itp.) I wypisać wszystkie kombinacje spełniające reguły.
- Dane wyjściowe muszą być oddzielone co najmniej 1 spacją
- Permutacje mogą zaczynać się od zera (więc nie są to technicznie magiczne liczby).
- Kolejność produkcji nie ma znaczenia
- Zdajesz nie trzeba obsłużyć nieoczekiwane wejście
- Wygrywa najmniej znaków w bajtach
Przykłady
Biorąc pod uwagę 1:
0
1
2
3
4
5
6
7
8
9
Biorąc pod uwagę 2:
02
04
06
08
10
12
14
16
18
20
24
26
28
30
32
34
36
38
40
42
46
48
50
52
54
56
58
60
62
64
68
70
72
74
76
78
80
82
84
86
90
92
94
96
98
Biorąc pod uwagę 10:
3816547290
Podziękowania dla Pizza Hut i Johna H. Conwaya za oryginalną układankę (Opcja A). Dzięki @Mego i @ sp3000 za ich linki .
code-golf
permutations
DavisDude
źródło
źródło
Odpowiedzi:
Galaretka ,
201716 bajtówJest to bardzo wolne i wymaga dużej ilości pamięci ... Wypróbuj online!
Jak to działa
źródło
JavaScript (Firefox 30-57), 77 bajtów
Edycja: Zapisano 1 bajt dzięki @ edc65.
źródło
...of"012...
Pyth, 19 bajtów
Demonstracja
Rozwiązanie brutalnej siły. Wyjaśnienie do naśladowania. Inspiracja dzięki FryAmTheEggman
22 bajty
Demonstracja
Liczby są budowane i przechowywane jako ciągi znaków i są konwertowane tylko na ints, aby sprawdzić podzielność.
Wyjaśnienie:
źródło
._
i kilkoma innymi rzeczami, ale dla dużych nakładów jest on o wiele wolniejszy:jjLkf!s.e%ib10hk._T.PUT
MATL , 30 bajtów
Wypróbuj online!
Jest bardzo wolny. W
input 3
kompilatorze internetowym zajmuje to kilka sekund. Aby zobaczyć liczby pojawiające się jeden po drugim, dołączD
na końcu kodu .Wyjaśnienie
źródło
3
widzę, że masz kilka wskazań (np. 026). Docenione zostanie również wyjaśnienieRubinowy, 87 bajtów
Podstawowe rozwiązanie rekurencyjne.
Jeśli zamiast drukowania możesz zwrócić listę permutacji, 85 bajtów:
źródło
Python, 132 bajty
Usunąłem 26 bajtów, pozbywając się
itertools
, dzięki Sp3000 za uświadomienie mi, że nie powinienem go używać.Usunąłem 2 bajty, używając zamiast tego listy
filter
, dzięki jeszcze raz dzięki Sp3000 za wskazówkę.Wypróbuj online: Python 2 , Python 3
źródło