W ostatnim odcinku QI pierwszych 5 mnożników 142857 opisano jako anagramy oryginalnej liczby. Oczywiście każdy, kto ma wiedzę na temat tej liczby, może wiedzieć, że liczby te są cykliczne, a nie tylko anagramy. Ale to mnie zastanowiło.
Napisz program lub funkcję, która wypisuje wszystkie liczby po sześć lub mniej cyfr, które mają odpowiedni współczynnik, który jest anagramem samego siebie. Lista powinna zaczynać się od następujących liczb:
3105 (divisible by 1035)
7128 (divisible by 1782)
7425 (divisible by 2475)
8316 (divisible by 1386)
8712 (divisible by 2178)
9513 (divisible by 1359)
9801 (divisible by 1089)
Jeśli wolisz, możesz znaleźć liczby z anagramem, który jest właściwym współczynnikiem liczby, ale pamiętaj, aby wykluczyć zera wiodące z anagramów.
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach, który nie łamie żadnych standardowych luk.
Odpowiedzi:
Mathematica (środowisko REPL),
7574 bajtówDzięki ngenisis za zaostrzenie tego bajtu!
Sort/@IntegerDigits@Divisors@#
tworzy posortowaną listę cyfr dla każdego dzielnika argumentu; sam numer wejściowy jest dzielnikiem, więc posortowana lista cyfr jest ostatnią.Most@#~MemberQ~Last
wykrywa, czy ta ostatnia posortowana lista cyfr pojawia się również na liście przed ostatnim elementem. ISelect[Range[10!],...]
zachowuje tylko te liczby całkowite do 3 628 800, które przejdą ten test (ta granica została wybrana, ponieważ jest o jeden bajt krótszy niż 10 6 ). Działa za około 5 minut na moim komputerze, uzyskując listę 494 liczb, z których największa to 3 427 191; istnieje 362 liczb do 10 6 , z których duża to 989,901.źródło
IntegerDigits@Divisors@#
.Galaretka , 12 bajtów
Wypróbuj online! (używa pięciu lub mniej cyfr ze względu na limit czasu TIO)
Weryfikacja
Jak to działa
źródło
ÆḌṢ€ċṢµȷ#
przez 10. Zajęło ~ 27 minut, aby uruchomić na rdzeniu i7 (nie na Uniksie, nic przyjemnegotime
); największy wynik był6671928
.Brachylog , 12 bajtów
Wypróbuj online!
Może to jednak przekroczyć limit czasu przed wydrukowaniem czegokolwiek (a jeśli nie, wydrukuje tylko 3105).
Wyjaśnienie
Spowoduje to wydrukowanie tych liczb w nieskończoność, ponieważ autor stwierdził, że dopuszczalne jest, aby program wypisał liczby większe niż 6 cyfr.
To jest zbyt wolne; możesz użyć tego programu (i zmienić
8300
przez dowolnyN
), aby rozpocząć drukowanie od liczb znacznie większych niżN
.Jak wskazał @ ais523, potrzebujemy cięcia, aby uniknąć wielokrotnego drukowania liczby, jeśli kilka jej czynników to permutacje.
źródło
JavaScript (ES6),
103…9694 bajtówAnonimowa funkcja zwracająca tablicę pasujących liczb całkowitych.
Sformatowane i skomentowane
Statystyka dzielnika
W przypadku 6-cyfrowych liczb całkowitych każdy stosunek od
2
do9
pasującej liczby całkowitejn
i jej anagramu występuje co najmniej raz. Ale niektóre z nich pojawiają się tylko kilka razy:Test
Poniższy test jest ograniczony do zakresu,
[1 ... 39999]
więc jego ukończenie nie zajmuje dużo czasu.Pokaż fragment kodu
źródło
_=>[...Array(1e6).keys()].filter(n=>n&&![...Array(9)].every(_=>n%++i||(F=i=>[...i+''].sort()+'')(n/i)!=F(n),i=1))
.2
do9
są wymagane (8
używane tylko dwa razy dla911736
i931176
).Pyke, 14 bajtów
Wypróbuj tutaj!
Powinny wypisać wszystkie liczby w ten sposób, ale przekroczą limit czasu.
Przetestuj algorytm tutaj!
źródło
Perl 6 , 59 bajtów
Strasznie powolne rozwiązanie brutalnej siły.
Zwraca leniwą sekwencję, więc mogłem sprawdzić kilka pierwszych wyników, ale nie osiągnie wszystkich wyników w rozsądnym czasie. (Czy powinienem zaznaczyć to jako niekonkurujące?)
źródło
Pure Bash ,
128126122121120 bajtówWypróbuj online!
(Ten program jest dość szybki - przejście przez wszystkie 6-cyfrowe liczby na moim MacBooku zajęło tylko 14 minut. Niestety TIO przekroczyło limit czasu, ponieważ nakłada limit czasu 1 minuty, który jest wystarczający, aby przejść około 5-cyfrowe liczby.)
Narzędzia Bash + Unix, 117 bajtów
Jest to krótsze niż wersja czysto bashowa, ale nieco wolniejsze, prawdopodobnie w dużej mierze z powodu całego rozwidlania się.
źródło
05AB1E , 15 bajtów
Wyjaśnienie:
Wypróbuj online! (to nie zadziała, upłynie limit czasu)
źródło
Japt , 23 bajty
Wypróbuj online! Zauważ, że połączony kod oblicza tylko 1e4, ponieważ 1e6 przekroczy limit czasu dla TIO.
źródło
Python 2, 98 bajtów
źródło
10**6
?x%i==0
tak może byćx%i<1
.05AB1E ,
1210 bajtówPrzekroczono limit czasu TIO z powodu nieskończonej pętli.
Zaoszczędziliśmy 2 bajty, ponieważ zgodnie z komentarzem OP możemy wydać więcej niż 6 cyfr.
Wypróbuj online!
Wyjaśnienie
źródło
Partia, 263 bajtów
Powolny. Jak w, zabiera dzień do końca na moim komputerze. Objaśnienie:
c
podprogram dzieli pierwsze dwa argumenty. Jeśli reszta jest równa zero, wówczas oblicza skrót wyniku, obliczając sumę n-tych potęg 8 dla każdej cyfry. Ta funkcja skrótu, skradziona z odpowiedzi bash, zderza się tylko z anagramami. (To działałoby dla liczb siedmiocyfrowych, ale nie mam wszystkich co dwa tygodnie.) Trzeci argument jest odejmowany, a podprogram kończy się z prawdziwym wynikiem, jeśli wynosi zero.n
Podprogram wywołujec
podprogram raz do obliczania hash, a następnie osiem razy, aby porównać hash; jeśli znajdzie kolizję, drukujen
i opuszcza podprogram wcześniej.źródło