Problemy z palindromicznymi liczbami pierwszymi są dość powszechne, ale nie o to chodzi w tym pytaniu. W tym wyzwaniu liczba nie musi być palindromem, a czynniki pierwsze.
Zadanie
Twój kod musi przyjmować jedną dodatnią liczbę całkowitą jako dane wejściowe. Następnie sprawdź, czy któraś z permutacji czynników pierwszych tej liczby całkowitej jest palindromiczna po połączeniu. Jeśli tak, wypisz jeden z nich (listę czynników, a nie połączony ciąg). W przeciwnym razie musisz wyjść -1
.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
Przypadki testowe
11 -> [11]
4 -> [2, 2]
39 -> [3, 13]
6 -> -1
1207 -> [17, 71]
393 -> -1
2352 -> [2, 2, 7, 3, 7, 2, 2]
code-golf
palindrome
factoring
Maltysen
źródło
źródło
-1
zostać zwrócone inne wartości odróżnialne ? W Perl 6 myślę oNil
,Fail
lub inne wartości nieokreślone. Czy wynik może być dowolną wartością pozycyjną?1
, czy-1
?Odpowiedzi:
05AB1E , 7 bajtów
Wypróbuj online!
Wyjaśnienie:
(
.Δ
wygodnie domyślnie na -1, więc nie wymaga dodatkowej pracy)źródło
Pyth, 14 bajtów
-2 bajty autorstwa @FryAmTheEggman
Wyjaśnienie:
Dzięki @FryAmTheEggman za przypomnienie mi o
I
. Nie sądzę, żebym go wcześniej używał.Zestaw testowy
źródło
jk
jest taki sam jaks`M
CJam - 17 bajtów
Dzięki Martin Büttner za uratowanie mi 10 bajtów!
Mój pierwszy raz pisałem w CJam! Wyjaśnienie:
źródło
W%
. Możesz także użyć=
z blokiem, aby uzyskać pierwszą palindromową pierwszą faktoryzację. To daje 18 bajtów:Wrimfe!{s_W%=}=p];
... możesz zapisać jeszcze jeden, kończąc z błędem (ponieważ wyjście błędu przechodzi do STDERR):Wrimfe!{s_W%=}=p;
Rubin, 89 + 7 = 96
102 + 7 = 109+7 za
-rprime
flagę.Westchnienie , niektóre wbudowane Ruby mają tak długie nazwy ... przynajmniej to sprawia, że kod jest dość oczywisty.
flat_map
Nieco dlategoprime_division
zwrotów ex.[[2, 2], [3, 1]]
dla danych wejściowych12
(które reprezentują ).2231
Dzięki @histocrat za 13 bajtów!
źródło
Julia,
132122 bajtyJest to funkcja lambda, która przyjmuje liczbę całkowitą i zwraca tablicę lub -1. Aby go wywołać, przypisz go do zmiennej.
Nie golfowany:
Zaoszczędź 10 bajtów dzięki Glen O!
źródło
foldl
raczej niżreduce
(robią to samo, alefoldl
mają określoną kolejność i są o jeden bajt krótsze). Zamiast tego użyj bezpośredniego porównania z pustą strukturąisempty
(nie jestem w 100% pewien, jakix
jest typ , ale jeśli jest to na przykład zestaw, użyjx==[]
). I użyj,(q=join(p))
a następnie tylkoq
w filtrze, aby zapisać dwa kolejne bajty.x
jest tablicą, to zamiast tegofirst(x)
po prostu użyjx[]
.==[]
i dawało mi to błędy, ale próbowałem teraz ponownie i działa. Musiałem coś wcześniej zepsuć. ¯ \ _ (ツ) _ / ¯ Jedyną sugestią, której nie mogłem zastosować, jest pozbycie sięfirst
; w tym przypadku muszę użyć,first
ponieważx
jest to iterator / kolekcja / coś, co nie zostałogetindex
zdefiniowane.Brachylog , 10 bajtów
Wypróbuj online!
Początkowo spodziewałem się, że wyjście,
-1
zamiast pozwolić na awarię, wiązałoby się z dość dużym kosztem bajtów, ale ponieważ dane wyjściowe w przypadku sukcesu nie mogą zostać połączone, kosztuje to tylko dwa bajty niezbędne do zapisu_1
(jeśli usunęliśmy je, pozostawiając wyjście nieograniczone domyślnie na0
, a jeśli dodatkowo zmienimy∨
na∧
, predykat nie powiedzie się zamiast tego), ponieważ musimy przerwać unifikację z niejawnym wyjściem. (Gdyby konkatenacja była wyjściem do sukcesu, ale-1
nadal była wyjściem do niepowodzenia, mielibyśmyḋpc.↔|∧_1
lubḋpc.↔.∨_1
. W najkrótszym przypadku, gdy wynik jest konkatenowany, a predykat może się nie powieść, całość ma tylko pięć bajtów:ḋpc.↔
. Chociaż nie wyprowadzanie faktycznych czynników daje więcej wrażenia problemowego z decyzją ...)źródło
Haskell, 122 bajty
Przykład użycia:
f 39
->[3,13]
.Oczywiste podejście brutalnej siły. Iterowanie po wszystkich permutacjach czynników pierwszych i sprawdzanie palindromów. Wybierz pierwszy. Jeśli nie ma, lista jest pusta i dołącza się dołączona
[-1]
.źródło
Perl 6 , 100 bajtów
Stosowanie:
Około połowa (53 bajty) jest zajęta przez główny kod faktoryzacji.
Gdyby istniała
prime-factorize
metoda, całość mogłaby być znacznie krótsza.źródło
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Galaretka , 16 bajtów
Dłużej niż się spodziewałem, zarówno pod względem liczby bajtów, jak i czasu potrzebnego na napisanie.
Wypróbuj online!
Wyjaśnienie:
źródło
Japt
-F-1
, 9 bajtówSpróbuj
źródło
Japt, 18 bajtów
Prawie tak krótki jak CJam ...
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6),
256244208187 bajtówZaoszczędź 36 bajtów dzięki @Neil
Definiuje anonimową funkcję; przygotuj np.
F=
aby go użyć. W rzeczywistości jest dość szybki na wejściu 2352, zajmuje tylko ~ 150 milisekund, aby zakończyć na moim komputerze.źródło
x=>eval("for(a=[],i=2;x>1;x%i?i++:(a.push(i),x/=i));p=[],f=(z,t=[])=>z.length?z.map((u,i)=>f([...z.slice(0,i),...z.slice(i+1)],[...t,u])):(y=t.join``)==[...y].reverse().join``&&p.push(t),f(a),p[0]||-1")
APL (NARS), 169 znaków, 338 bajtów
G byłoby funkcją znajdowania permutacji, a f jest funkcją tego ćwiczenia; test:
źródło