Os problemas primários palíndricos são bastante comuns, mas não é sobre isso que se trata. Nesse desafio, o número não precisa ser um palíndromo, seus principais fatores, sim.
Tarefa
Seu código deve receber um único número inteiro positivo como entrada. Em seguida, verifique se alguma das permutações dos fatores primos desse número inteiro é palíndrica quando concatenada. Nesse caso, imprima um deles (a lista de fatores, não a sequência concatenada). Senão, você deve produzir -1
.
Isso é código-golfe , então o código mais curto em bytes vence!
Casos de teste
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
fonte
fonte
-1
ser retornados? No Perl 6 eu estou pensando sobreNil
,Fail
ou outros valores indefinidos. A saída também pode ter algum valor posicional?1
, ou-1
?Respostas:
05AB1E , 7 bytes
Experimente online!
Explicação:
(o
.Δ
padrão é convenientemente -1, portanto, não é necessário trabalho extra)fonte
Pitão, 14 bytes
-2 bytes por @FryAmTheEggman
Explicação:
Obrigado @FryAmTheEggman por me lembrar
I
. Acho que não o usei antes.Suíte de teste
fonte
jk
é o mesmo ques`M
CJam - 17 bytes
Obrigado a Martin Büttner por me salvar 10 bytes!
Minha primeira vez escrevendo em CJam! Explicação:
fonte
W%
. Você também pode usar=
com um bloco para obter a primeira fatoração primordial palindrômica. Isso equivale a 18 bytes:Wrimfe!{s_W%=}=p];
... você pode salvar mais um terminando com um erro (desde que a saída do erro vá para STDERR):Wrimfe!{s_W%=}=p;
Ruby, 89 + 7 = 96
102 + 7 = 109+7 para a
-rprime
bandeira.Suspiro , alguns built-in Ruby têm nomes tão longos ... pelo menos isso torna o código bastante auto-explicativo.
O
flat_map
bit é porqueprime_division
retorna ex.[[2, 2], [3, 1]]
para entrada12
(que representa ).2231
Obrigado a @histocrat por 13 bytes!
fonte
Julia,
132122 bytesEssa é uma função lambda que aceita um número inteiro e retorna uma matriz ou -1. Para chamá-lo, atribua-o a uma variável.
Ungolfed:
Economizou 10 bytes graças a Glen O!
fonte
foldl
vez dereduce
(eles fazem a mesma coisa, masfoldl
definiram a ordem e são um byte mais curto). Use uma comparação direta com uma estrutura vazia em vez deisempty
(não tenho 100% de certeza de que tipox
é, mas se for um conjunto, por exemplo, usex==[]
). E use(q=join(p))
e depois apenasq
no filtro para salvar mais dois bytes.x
for uma matriz, em vez defirst(x)
apenas usarx[]
.==[]
e estava me dando erros, mas tentei novamente agora e está funcionando. Eu devo ter estragado alguma coisa antes. ¯ \ _ (ツ) _ / ¯ A única sugestão que eu não poderia usar é se livrarfirst
; neste caso, eu tenho que usarfirst
porquex
é um iterador / coleção / algo que não foigetindex
definido.Braquilog , 10 bytes
Experimente online!
Inicialmente, eu esperava que ter que produzir em
-1
vez de ter permissão para falhar teria um custo de bytes bastante grande, mas como a saída no caso de sucesso não pode ser concatenada, custa apenas os dois bytes necessários para escrever_1
(se se os removêssemos, deixaria a saída sem restrições por padrão e0
, se alterássemos adicionalmente∨
para∧
, o predicado falharia), porque precisamos quebrar a unificação com a saída implícita de qualquer maneira. (Se a concatenação fosse a saída para o sucesso, mas-1
ainda assim fosse a falha, teríamosḋpc.↔|∧_1
ouḋpc.↔.∨_1
. No menor caso, em que a saída é concatenada e o predicado pode falhar, a coisa toda é de apenas cinco bytes:ḋpc.↔
. Apesar de não apresentar os fatores reais, é mais uma sensação de problema de decisão ...)fonte
Haskell, 122 bytes
Exemplo de uso:
f 39
->[3,13]
.A abordagem óbvia da força bruta. Iterando todas as permutações dos fatores primos e verifique os palíndromos. Escolha o primeiro. Se não houver, a lista está vazia e o anexo é adicionado
[-1]
.fonte
Perl 6 , 100 bytes
Uso:
Cerca da metade (53 bytes) é utilizada com o código de fatoração principal.
Se houvesse um
prime-factorize
método, tudo poderia ser significativamente menor.fonte
$!=$_;({+$!/($!/=1+(2...$!%%*))}...{2>$!})
Gelatina , 16 bytes
Mais do que eu esperava, tanto na contagem de bytes quanto no tempo necessário para escrever.
Experimente online!
Explicação:
fonte
Japonês
-F-1
, 9 bytesTente
fonte
Japonês, 18 bytes
Quase tão curto quanto CJam ...
Experimente online!
Como funciona
fonte
JavaScript (ES6),
256244208187 bytesGuardado 36 bytes graças a @Neil
Define uma função anônima; precede, por exemplo,
F=
para usá-lo. Na verdade, é bastante rápido na entrada do 2352, levando apenas 150 milissegundos para terminar no meu computador.fonte
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 seria a função encontrar as permutações ef é a função deste exercício; teste:
fonte