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

-1pueden devolver otros valores distinguibles ? En Perl 6 que estoy pensandoNil,Failu 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
jkes lo mismo ques`MCJam - 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
-rprimebandera.Suspiro , algunos componentes de Ruby tienen nombres tan largos ... al menos eso hace que el código se explique por sí mismo.
El
flat_mapbit es porqueprime_divisiondevuelve 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
foldllugar dereduce(hacen lo mismo, perofoldltiene 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é tipoxes, pero si es un conjunto, por ejemplo, usex==[]). Y use(q=join(p))y luego soloqen el filtro para guardar dos bytes más.xes 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 usarlofirstporquexes un iterador / colección / algo que no se hagetindexdefinido.Brachylog , 10 bytes
Pruébalo en línea!
Inicialmente, esperaba que tener que generar en
-1lugar 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-1todavía era la salida para el fracaso, tendríamosḋpc.↔|∧_1oḋ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-factorizemé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