Você precisará gerar o menor primo com n
dígitos, e ele conterá apenas os dígitos especificados na lista k
.
Exemplos:
Entrada:
4
1 2
Para isso, você deve gerar o menor primo com 4
dígitos, e esse primo deve conter apenas os dígitos 1
e 2
.
Saída:
2111
Entrada:
10
0 4 7
Saída:
4000000007
Entrada:
6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5
Saída:
115151
Você pode garantir que a entrada sempre esteja no formato especificado e poderá fazer qualquer coisa se receber uma entrada inválida (como a entrada sendo um dígito único n
, sem k
).
Se não existir essa solução para uma entrada, seu programa poderá fazer o seguinte:
- Impressão
banana
- Lançar um erro
- Corra para sempre
- Algo mais
Como esse é o código-golfe , tente apontar para o código mais curto.
A entrada pode estar em qualquer formato que você especificar. Por exemplo, se você deseja que sua entrada seja como qualquer uma das seguintes, tudo bem.
4
[1, 2]
[1,2]4
1,2
4
4 12
Você pode escrever um programa ou uma função e ele deve retornar o valor correto ou imprimi-lo.
Espaço em branco é permitido em qualquer lugar.
Este desafio inspirado na A036229 .
Respostas:
Braquilog (2), 8 bytes
Experimente online!
Problemas muito lentos com muitos dígitos possíveis ou que contêm um 0 no conjunto de dígitos possíveis ( funciona nesse caso; é só que é muito mais lento que o TIO expira, a menos que o problema seja muito simples). Como de costume no Brachylog, essa é uma função, não um programa completo.
A entrada é obtida no formato
[ndigits,[list of digits]]
, por exemplo[10,[[0,4,7]]]
.Explicação
Visto do ponto de vista puramente declarativo, isso diz "encontre um número primo, com o número especificado de dígitos, onde todos os dígitos são um dos dígitos fornecidos". Para encontrar o menor número, usamos sugestões de ordem de avaliação para garantir que a ordem em que testamos os números seja do menor para o maior; nesse caso,
ᵐ
toma decisões perto do início da lista menos propensas a alterações do que decisões perto do fim (essa é sua ordem natural, que é a mesma que ordem lexicográfica e, portanto, numérica em números inteiros) e, portanto,{o∋}ᵐ
tem duas ordens de avaliação dicas, "varie primeiro os últimos dígitos" (daᵐ
ordem natural da) como a dica mais importante e "verifique os dígitos menores antes dos dígitos maiores" (dao
anterior à∋
, que funciona como uma dica nesse contexto) como o desempate.{o∋}ᵐ
pode ser escrito como o equivalenteoᵐ∋ᵐ
para salvar um byte.fonte
Pacote Bash + bsd-games, 28 bytes
Entrada fornecida na linha de comando como n seguida por k como uma lista de dígitos não delimitada.
Experimente online.
fonte
Python 2 , 66 bytes
Experimente online!
Toma entrada como
f(3,{'9','3','8'})
.O Python não possui built-ins para números primos; portanto, a função os gera usando o Teorema de Wilson para verificar cada valor potencial, por
k
sua vez, por ser primo.A desigualdade encadeada
10**~-n<p%k*k<s>=set(`k`)
combina três condiçõesk
:10**~-n<k
:k
contém pelo menosn
dígitos. Não precisamos verificar exatamente, pois se alcançarmos mais dígitos, não deve ter havido soluçãop%k>0
:k
é primo, através da condição do teorema de Wilson comp=(n-1)!^2
. Comop%k
é 0 ou 1, isso pode ser combinado com a condição anterior como10**~-n<p%k*k
s>=set(`k`)
: Todos os dígitosk
estão no conjuntos
. Isso pode ser resolvido porque o Python 2 considera os conjuntos como maiores que os números.Se a corrente
k
não atender a tudo isso, a função retornarák+1
, adicionando 1 à saída resultante. Como a saída termina comTrue
que é igual1
ek
começa em1
, a saída ék
. Esse rastreamento paralelo dek
batidas produzindok
diretamente com sucesso.fonte
JavaScript (ES7), 100 bytes
Recebe a entrada como número de dígitos
n
e sequência de dígitos permitidoss
na sintaxe de currying(n)(s)
. Retornaundefined
se nenhuma solução for encontrada.Funciona rapidamente para até 6 dígitos, pode funcionar para 7 e definitivamente muito lento - e com muita memória - além disso.
Teste
Mostrar snippet de código
fonte
n=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
Gelatina , 12 bytes
Toma um conjunto e um número inteiro como argumentos da linha de comando. Imprime 0 se não houver solução.
Experimente online!
Como funciona
fonte
Pyke,
1816 bytesExperimente aqui!
É executado para sempre se nenhum valor encontrado
fonte
Mathematica, 64 bytes
Função pura em que o primeiro argumento é a lista (classificada) de dígitos permitidos e o segundo argumento é o comprimento permitido.
Tuples@##
calcula todas as listas dos dígitos permitidos com o comprimento permitido, então encontramos oFirstCase
que corresponde ax:{f_,___}
tal que o primeiro dígitof
não é0
e o número inteiroy=FromDigits@x
é primo e o substitui pory
.fonte
/;
teste para selecionar uma tupla, mas também:>
converter para o formato de saída desejado. (Vejo na documentação que isso é permitido, mas somente depois de ler esta resposta!) Você deve especificar que sua função exige que os dígitos permitidos sejam classificados: fornece a resposta errada em3331
vez de3313
ser chamada com[{3,1},4]
.Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&
?0
e@@#&
parecem redundantes.Braquilog , 15 bytes
Experimente online!
Isso é bastante lento.
Explicação
fonte
JavaScript (ES6), 86 bytes
Recebe entrada através da sintaxe de currying, por exemplo,
(4)('12')
Para ser executado no modo estrito (para otimização da chamada de cauda [TCO] ). Se seu ambiente não suportar TCO, isso resultará em um erro de estouro de pilha para números primos maiores que a pilha de ambientes.
Para entradas inválidas, ele será executado para sempre.
Nota:
chrome://flags/#enable-javascript-harmony
e ativar esse sinalizador para executar o snippet acima com suporte ao TCO.fonte
F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
MATL, 17 bytes
Esta função aceita duas entradas, um número inteiro especificando o número de dígitos e uma matriz de caracteres indicando os valores possíveis. No caso de sem primos, um erro é mostrado.
Experimente Online!
Explicação
fonte
Pitão -
1312 bytesConjunto de Teste .
fonte
Sábio, 62 bytes
Recebe a entrada do formulário:
f( 4 , {'1','2'} )
fonte
Perl 6 , 43 bytes
É executado para sempre, se não houver solução.
fonte
05AB1E , 17 bytes
Experimente online!
fonte
05AB1E ,
221918 bytes (-1 @Riley)Experimente online!
fonte
,
do final.Perl5, 77 bytes
Execute assim:
fonte
Ruby,
7776 bytesFormato de entrada: um número e uma sequência.
Exemplo:
fonte
Perl 6 , 68 bytes
Tente
Retorna
Nil
se esse prime não puder ser encontrado.Expandido:
fonte
Python 2 + primefac ,
9185 bytesExperimente online
Entrada é como
4,{'1','2'}
.fonte
1,{'1'}
não é uma entrada válida (porque 1 não é primo), para que você possa fazer o que quiser lá.PHP, 82 bytes
Pega um número e uma sequência de dígitos nos argumentos da linha de comando. Corra com
-nr
.demolir
fonte
Java 7,
139141 bytes+2 bytes suportando números acima de 32 bits (alterado
int
paralong
)Formato de entrada: um número inteiro (ie
4
) e uma String (ie"12"
)Explicação:
Código do teste:
Experimente aqui.
NOTA: O segundo caso de teste está desativado porque fica em loop por um período muito longo.
Saída:
fonte