Números permutapalindrômicos
Dado um número inteiro Ncomo entrada, Nimprima o número permutapalindrômico.
Um número permutapalindrômico é um número inteiro estritamente positivo, de modo que exista pelo menos uma permutação de seus dígitos que resulte em um palíndromo (isto é, um número que é seu próprio reverso).
Por exemplo, 117é um número permutapalindrômico, pois seus dígitos podem ser permutados 171, o que é um palíndromo.
Consideramos que números como 10não são números permutapalindrômicos, mesmo sendo 01 = 1um palíndromo. Nós impomos que a permutação palindrômica não deve ter um zero inicial (como tal, 0ela própria não é permutapalindrômica).
Números que já são palíndromos também são permutapalindrômicos, pois permutar nada é válido.
Npode ser 0 ou 1. Indique qual dos dois a sua resposta usa.
A entrada pode ser acessada STDIN, como argumento de função, ou qualquer coisa semelhante no idioma de sua escolha. A saída pode ser gravada STDOUT, retornada de uma função ou qualquer coisa semelhante no idioma de sua escolha.
A entrada e a saída devem estar na base decimal.
Os seguintes casos de teste são indexados 1. Seu programa deve ser capaz de passar em qualquer um dos casos de teste apresentados aqui em no máximo 1 minuto.
Isso é código-golfe , então a resposta mais curta em bytes vence.
É completamente impossível não passar o último testcase em um minuto ...
OEIS A084050 (contém casos adicionais, como 10) #
Qual é o maior insumo?
— Adám 17/08/16
@ Adám Seu programa deve, teoricamente, funcionar para qualquer número, não importa o tamanho.
— Fatalize 17/08/16
@ Adám Este é um limite bastante arbitrário que depende do idioma usado. Digamos que, teoricamente, ele funcione para o maior número inteiro que seu idioma pode representar por padrão (portanto, todos os números inteiros se bignums forem o padrão em seu idioma).
05AB1E , 15 14 13 bytes
Guardou um byte graças a Emigna ! Código:
Usa a codificação CP-1252 . Experimente online! .
µNœvyJÂïQ}O__½para 14.
— Emigna 17/08/16
@Emigna Thanks! Eu não pensei nisso.
Braquilog, 19 bytes
Demora cerca de 17 segundos para N = 270.
Predicado principal:
Predicado 1:
Braquilog , 21 20 bytes
1 byte graças a Fatalize.
Você criou o desafio para o Brachylog?
270 leva cerca de meio minuto aqui.
Predicado 0 (predicado principal)
Predicado 1 (predicado auxiliar)
Experimente aqui ou execute um Conjunto de Testes
1100 é um número permutapalindrômico redondo.
@ Adám Não é redondo, contém pelo menos dois dígitos diferentes de zero.
@Neil: +2 bytes - você realmente deveria contar o f=quando você se referir a ele mais tarde
@ charlie Desculpe, eu sempre esqueço de fazer isso.
Essencialmente - uma função que verifica a associação no conjunto permutapalindromic e um loop while incrementa até encontrar o enésimo membro.
Simples o suficiente. Basicamente, usa um whileloop para criar repetidamente matrizes contendo números permutapalindrômicos [1,Q)até o intervalo até que Qseja grande o suficiente para que a matriz contenha um Inputnúmero de itens. Em seguida, ele gera o último elemento nessa matriz.
Experimente Online! (Ideona)
Baseado em 0
Dyalog APL , 51 bytes
Um indexado.
{ uma função em que ⍵ representa o argumento
⍵⊃{ use o argumento para escolher o resultado da função
⍵/⍨{ filtrar o argumento com o resultado da função
(⍵≤9)∨ o argumento é menor ou igual a 9, OR
(1<≢c~'0')∧ permanece mais de um dígito quando os zeros são removidos E
1≥+/ 0 ou 1 é a soma de
2| as estranhezas de
+⌿ da coluna somas de
c∘.=∪ca tabela de comparação de c e os elementos únicos de c , onde c ...
←⍕⍵ é a representação em cadeia do argumento
}¨⍵ aplicado a cada um dos argumentos
}⍳5×⍵ aplicado a {1, 2, 3, ..., 5 vezes o argumento}
} [fim da função]
Conclui todos os casos de teste instantaneamente no TryAPL
Você pode provar isso a(n) <= 5n?
A segunda solução gera resultados incorretos.
A primeira solução também gera resultados incorretos.
@LeakyNun Quais estão incorretas? E se 5 × não for suficiente, há espaço para 9 × ...
@LeakyNun Certo, incluo 100 etc. que não são permitidos.
Javascript (usando biblioteca externa - Enumerable) (142 bytes)
Link para lib: https://github.com/mvegh1/Enumerable/
Explicação do código: _.Sequence cria um enumerável para uma contagem de "n" elementos, com base no predicado de assinatura ("i" declaração , "uma" matriz acumulada ). Converta a iteração atual em uma string e crie um enumerável de todas as permutações dela. Teste se alguma das permutações satisfaz o teste de não começar com "0" e que a reversão da permutação é igual à permutação. Retorne o último elemento na sequência porque essa é a saída desejada conforme OP
1 indexado. Dependendo do seu sistema, o último caso de teste pode exceder a profundidade de recursão permitida.
Não calcula permutações. Em vez disso, usa o fato de que duas strings são permutações se forem iguais quando ordenadas. Para testar se um número é permutapalindrômico, verifica se seus dígitos classificados são iguais aos dígitos classificados de qualquer palíndromo até um limite.
Isso não considera permutações e usa a seguinte caracterização:
Um número é permutapalindrômico exatamente quando
No máximo, um de seus dígitos aparece um número ímpar de vezes e
Não possui o formato d00 ... 00 com um ou mais zeros.
Isso ocorre porque um palíndromo deve emparelhar dígitos do início e do fim, exceto por um possível dígito central. A exceção vem do requisito de que o dígito inicial seja diferente de zero e, portanto, algum dígito diferente de zero deve aparecer duas vezes, a menos que o número seja de um dígito.