Les problèmes palindromiques premiers sont assez courants, mais ce n'est pas de cela qu'il s'agit. Dans ce défi, le nombre n'a pas à être un palindrome, ses facteurs premiers le font.
Tâche
Votre code doit prendre un seul entier positif en entrée. Vérifiez ensuite si l'une des permutations des facteurs premiers de cet entier est palindromique lorsqu'elle est concaténée. Si c'est le cas, affichez l'un d'eux (la liste des facteurs, pas la chaîne concaténée). Sinon, vous devez sortir -1
.
C'est le code-golf , donc le code le plus court en octets gagne!
Cas de test
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
la source
la source
-1
être renvoyées? Dans Perl 6, je pense àNil
,Fail
ou à d'autres valeurs non définies. La sortie peut-elle également avoir une valeur positionnelle?1
, ou-1
?Réponses:
05AB1E , 7 octets
Essayez-le en ligne!
Explication:
(
.Δ
commodément par défaut à -1, donc aucun travail supplémentaire n'est nécessaire)la source
Pyth, 14 octets
-2 octets par @FryAmTheEggman
Explication:
Merci @FryAmTheEggman de me l'avoir rappelé
I
. Je ne pense pas l'avoir utilisé auparavant.Suite de tests
la source
jk
est le même ques`M
CJam - 17 octets
Merci à Martin Büttner de m'avoir économisé 10 octets!
Ma première fois en écrivant dans CJam! Explication:
la source
W%
. Vous pouvez également utiliser=
avec un bloc pour obtenir la première factorisation palindromique première. Cela fait 18 octets:Wrimfe!{s_W%=}=p];
... vous pouvez en enregistrer un de plus en terminant avec une erreur (puisque la sortie d'erreur va à STDERR):Wrimfe!{s_W%=}=p;
Rubis, 89 + 7 = 96
102 + 7 = 109+7 pour le
-rprime
drapeau.Soupir , certains buildins Ruby ont des noms si longs ... du moins, cela rend le code assez explicite.
Le
flat_map
bit est parce queprime_division
retourne ex.[[2, 2], [3, 1]]
pour l'entrée12
(qui représente ).2231
Merci à @histocrat pour 13 octets!
la source
Julia,
132122 octetsIl s'agit d'une fonction lambda qui accepte un entier et retourne un tableau ou -1. Pour l'appeler, affectez-le à une variable.
Non golfé:
10 octets enregistrés grâce à Glen O!
la source
foldl
plutôt quereduce
(ils font la même chose, maisfoldl
ont un ordre défini et sont plus courts d'un octet). Utilisez une comparaison directe avec une structure vide au lieu deisempty
(je ne suis pas sûr à 100% de ce typex
, mais s'il s'agit d'un ensemble, par exemple, utilisezx==[]
). Et utilisez(q=join(p))
puis justeq
dans le filtre pour enregistrer deux octets supplémentaires.x
s'agit d'un tableau, alors plutôt quefirst(x)
, utilisez-lex[]
.==[]
et ça me donnait des erreurs mais j'ai essayé à nouveau maintenant et ça marche. J'ai dû gâcher quelque chose avant. ¯ \ _ (ツ) _ / ¯ La seule suggestion que je n'ai pas pu utiliser est de me débarrasserfirst
; dans ce cas, je dois utiliserfirst
carx
est un itérateur / collection / quelque chose qui n'a pasgetindex
défini.Brachylog , 10 octets
Essayez-le en ligne!
Au départ, je m'attendais à ce que la sortie
-1
au lieu d'être autorisée à échouer ait un coût en octets assez élevé, mais comme la sortie en cas de succès ne peut pas être concaténée, cela ne coûte que les deux octets nécessaires pour écrire_1
(si nous les avons supprimés, cela laisserait la sortie sans contrainte par défaut à0
, et si nous avons également changé la valeur∨
en∧
, le prédicat échouera à la place), car nous devons rompre l'unification avec la sortie implicite dans les deux cas. (Si la concaténation était la sortie pour le succès mais-1
était toujours la sortie pour l'échec, nous aurionsḋpc.↔|∧_1
ouḋpc.↔.∨_1
. Dans le cas le plus court, où la sortie est concaténée et le prédicat peut échouer, le tout n'est que de cinq octets:ḋpc.↔
. Bien que ne pas produire les facteurs réels, cela donne plus une sensation de problème de décision ...)la source
Haskell, 122 octets
Exemple d'utilisation:
f 39
->[3,13]
.L'approche évidente de la force brute. Itérer sur toutes les permutations des facteurs premiers et vérifier les palindromes. Choisissez le premier. S'il n'y en a pas, la liste est vide et le fichier ajouté
[-1]
apparaît.la source
Perl 6 , 100 octets
Usage:
Environ la moitié (53 octets) est occupée par le code de factorisation premier.
S'il y avait une
prime-factorize
méthode, le tout pourrait être beaucoup plus court.la source
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Gelée , 16 octets
Plus long que prévu, à la fois en nombre d'octets et en temps d'écriture.
Essayez-le en ligne!
Explication:
la source
Japt
-F-1
, 9 octetsEssayez-le
la source
Japt, 18 octets
Presque aussi court que CJam ...
Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES6),
256244208187 octets36 octets enregistrés grâce à @Neil
Définit une fonction anonyme; ajouter par exemple
F=
pour l'utiliser. Il est en fait assez rapide à l'entrée de 2352, ne prenant que ~ 150 millisecondes pour terminer sur mon ordinateur.la source
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 caractères, 338 octets
G serait la fonction trouver les permutations et f est la fonction de cet exercice; tester:
la source