Los problemas primarios palindrómicos son bastante comunes, pero de eso no se trata esta pregunta. En este desafío, el número no tiene que ser un palíndromo, sino sus factores primos.
Tarea
Su código tiene que tomar un solo entero positivo como entrada. Luego verifique si alguna de las permutaciones de los factores primos de ese entero son palindrómicas cuando se concatenan. Si es así, envíe uno de ellos (la lista de factores, no la cadena concatenada). De lo contrario, tienes que dar salida -1
.
Este es el código de golf , por lo que gana el código más corto en bytes .
Casos de prueba
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
fuente
fuente
-1
pueden devolver otros valores distinguibles ? En Perl 6 que estoy pensandoNil
,Fail
u otros valores no definidos. ¿También puede la salida ser cualquier valor posicional?1
, o-1
?Respuestas:
05AB1E , 7 bytes
Pruébalo en línea!
Explicación:
(por
.Δ
defecto convenientemente a -1, por lo que no se necesita trabajo adicional)fuente
Pyth, 14 bytes
-2 bytes por @FryAmTheEggman
Explicación:
Gracias @FryAmTheEggman por recordarme
I
. No creo que lo haya usado antes.Banco de pruebas
fuente
jk
es lo mismo ques`M
CJam - 17 bytes
¡Gracias a Martin Büttner por salvarme 10 bytes!
¡La primera vez que escribo en CJam! Explicación:
fuente
W%
. También se puede usar=
con un bloque para obtener la primera factorización palindrómica prima. Eso equivale a 18 bytes:Wrimfe!{s_W%=}=p];
... puede guardar uno más terminando con un error (ya que la salida del error va a STDERR):Wrimfe!{s_W%=}=p;
Rubí, 89 + 7 =
96102 + 7 = 109+7 para la
-rprime
bandera.Suspiro , algunos componentes de Ruby tienen nombres tan largos ... al menos eso hace que el código se explique por sí mismo.
El
flat_map
bit es porqueprime_division
devuelve ex.[[2, 2], [3, 1]]
para entrada12
(que representa ).2231
¡Gracias a @histocrat por 13 bytes!
fuente
Julia,
132122bytesEsta es una función lambda que acepta un número entero y devuelve una matriz o -1. Para llamarlo, asígnelo a una variable.
Sin golf:
Guardado 10 bytes gracias a Glen O!
fuente
foldl
lugar dereduce
(hacen lo mismo, perofoldl
tiene un orden definido y es un byte más corto). Use una comparación directa con una estructura vacía en lugar deisempty
(no estoy 100% seguro de qué tipox
es, pero si es un conjunto, por ejemplo, usex==[]
). Y use(q=join(p))
y luego soloq
en el filtro para guardar dos bytes más.x
es una matriz, entonces, en lugar defirst(x)
, simplemente usex[]
.==[]
y me estaba dando errores, pero lo intenté nuevamente ahora y está funcionando. Debo haber estropeado algo antes. ¯ \ _ (ツ) _ / ¯ La única sugerencia que no pude usar es deshacerme de élfirst
; en este caso tengo que usarlofirst
porquex
es un iterador / colección / algo que no se hagetindex
definido.Brachylog , 10 bytes
Pruébalo en línea!
Inicialmente, esperaba que tener que generar en
-1
lugar de permitir que fallara tendría un costo de byte bastante grande, pero dado que la salida en el caso de éxito no se puede concatenar, solo cuesta los dos bytes necesarios para escribir_1
(si si los quitáramos, dejaría la salida sin restricciones por defecto0
, y si además cambiamos el∨
a∧
, el predicado fallaría en su lugar), porque necesitamos romper la unificación con la salida implícita de cualquier manera. (Si la concatenación era la salida para el éxito pero-1
todavía era la salida para el fracaso, tendríamosḋpc.↔|∧_1
oḋpc.↔.∨_1
. En el caso más corto, donde la salida se concatena y el predicado puede fallar, todo es solo cinco bytes:ḋpc.↔
. Aunque no generar los factores reales le da más sensación de problema de decisión ...)fuente
Haskell, 122 bytes
Ejemplo de uso:
f 39
->[3,13]
.El obvio enfoque de la fuerza bruta. Iterando sobre todas las permutaciones de los factores primos y verificando si hay palíndromos. Elige el primero. Si no hay ninguno, la lista está vacía y los anexos
[-1]
saltan.fuente
Perl 6 , 100 bytes
Uso:
Aproximadamente la mitad (53 bytes) se utiliza con el código de factorización prima.
Si hubiera un
prime-factorize
método, todo podría ser significativamente más corto.fuente
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Jalea , 16 bytes
Más tiempo de lo que esperaba, tanto en el recuento de bytes como en el tiempo que tardó en escribir.
Pruébalo en línea!
Explicación:
fuente
Japt
-F-1
, 9 bytesIntentalo
fuente
Japt, 18 bytes
Casi tan corto como CJam ...
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6),
256244208187 bytesGuardado 36 bytes gracias a @Neil
Define una función anónima; anteponer, por ejemplo,
F=
para usarlo. En realidad, es bastante rápido en la entrada de 2352, solo tarda ~ 150 milisegundos en terminar en mi computadora.fuente
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 caracteres, 338 bytes
G sería la función de encontrar las permutaciones yf es la función de este ejercicio; prueba:
fuente