Atingimos recentemente o limite de 10.000 perguntas sobre PPCG. Viva! Vamos comemorar isso com um simples desafio.
Entrada
Dois números inteiros e , ambos em , de modo que .
Tarefa
Sua tarefa é adicionar um único dígito a um desses números inteiros ou um único dígito aos dois, de modo que . Ao adicionar um dígito a e , ele não precisa necessariamente ser o mesmo dígito.
O novo dígito pode ser adicionado no início, no final ou em qualquer lugar no meio do número inteiro original. No entanto, você não pode adicionar um zero à esquerda.
Exemplo:
Para , as seguintes transformações são válidas:
Mas estes são inválidos :
Dado e , existem duas soluções possíveis:
Saída
Você deve imprimir ou imprimir uma lista de todas as soluções possíveis.
Para o exemplo acima, a saída esperada seria [[9238,762],[9273,727]]
.
Regras
- A E / S pode ser processada em qualquer formato razoável e inequívoco. Você pode usar seqüências de caracteres, listas de dígitos etc. em vez de números inteiros.
- A entrada é garantida para ter pelo menos uma solução.
- Você tem permissão para não deduplicar a saída. No entanto, seria apreciado se o código de teste o deduplicasse com algum pós-processamento, por exemplo, na seção de rodapé do TIO.
- Este é um desafio do código-golfe .
Casos de teste
Input --> Output
934, 654 --> [[9346,654]]
737, 628 --> [[7372,2628]]
9122, 88 --> [[9122,878]]
923, 72 --> [[9238,762],[9273,727]]
998, 3 --> [[9968,32],[9987,13]]
900, 10 --> [[9900,100],[9090,910]] NB: solutions such as [9000,1000] are NOT valid
(more than one digit added to 10)
363, 632 --> [[3673,6327],[3638,6362]]
288, 711 --> [[2881,7119],[2882,7118],[2883,7117],[2884,7116],[2885,7115],[2886,7114],
[2887,7113],[2888,7112],[2889,7111]]
365, 635 --> [[365,9635],[1365,8635],[2365,7635],[3365,6635],[4365,5635],[5365,4635],
[6365,3635],[7365,2635],[8365,1635],[9365,635],[3065,6935],[3165,6835],
[3265,6735],[3465,6535],[3565,6435],[3665,6335],[3765,6235],[3865,6135],
[3965,6035],[3605,6395],[3615,6385],[3625,6375],[3635,6365],[3645,6355],
[3655,6345],[3675,6325],[3685,6315],[3695,6305],[3650,6350]]
output a list of all possible solutions
Oh chatice. Seria difícil para a minha língua rúnica. Provavelmente eu poderia escrever um programa que pudesse gerar uma solução!Respostas:
Haskell ,
99 97 8281 bytes-16 bytes graças ao Delfad0r (tomando as entradas como uma lista, usando o abuso que não precisamos deduplicar -> n sempre pode estar em [0,4] e usando uma combinação inteligente de formato de entrada e
ap
)!Experimente online!
fonte
R , 96 bytes
Experimente online!
Explicação (ungolfed)
Nós atribuímos
?
apaste
. Isso nos permite fazer algo bacana:a<-b?c<-d
faz atribuições embutidas napaste
chamada, o que não poderíamos fazer com nenhum outro operador?
, pois ele tem uma precedência menor do que<-
.Agora, como o @JoKing gentilmente apontou, pode haver casos em
900 10
que duas inserções podem ocorrer, como9100 8100
. Portanto, filtramos as correspondências nas quais o número de caracteres em qualquer número aumentou mais de 1. A maneira mais rápida de fazer isso é com a distância de edição de Levenshtein àadist
qual nos ligamos+
.fonte
Pitão,
282725242220 bytesExperimente on-line aqui ou verifique todos os casos de teste aqui - o conjunto de testes deduplica o resultado anexando a
{
.Entrada é como uma lista de seqüências de caracteres.
Editar 4: salvou outros 2 bytes, graças ao Sr. Xcoder - vetoriza
v
por padrão eL
usam
por baixo, de modo que o mapeamento acima do alcance é implícito, tornando oU
desnecessário tambémEdit 3: Introduzido ao uso global do
;
operador para manter o acesso a 10 e salvar 2 bytes, graças a FryAmTheEggman e issacg:Edit 2: esqueci que o operador de soma existe, que vergonha ...
Editar 1: a versão anterior aceitou uma lista de números inteiros como entrada, executando conversões de cadeia manualmente, por 27 bytes:
fonte
T
, mas nos blocos de funções as variáveis são repropostas para agir como variáveis de iteração - no bloco de filtro, a variável de iteração simplesmente aconteceT
, portanto não pode ser usada. Isto significa que10 ^ 4
seria^10 4
, que é 5 bytes de comprimento, de forma que nenhum menor infelizmenteT
inUT
ainda é 10, para o[0,10)
intervalo. Mas pelof...T
oT
tornou-se uma variável de iteração para o filtro. Obrigado pela explicação, isso faz sentido! ET4^
, antes, salvá-lo em uma variável e usar essa variável no filtro é (pelo menos) 5 bytes, é claro.10000
por^;4
.;
sempre tem o valor da variável de iteração no contexto global, neste caso 10. Assim^;4
é o que você está procurando.fq^;4sT*FmvsmXLkdThl
. ( Pyth surra Jelly oO Hooray? )Perl 6 , 64 bytes
Experimente online!
Esta é uma porta da resposta do GB usando uma expressão regular para verificar se os números são válidos. Obrigado ao nwellnhof por portá-lo.
Resposta antiga,
127 110, 88 bytes-22 bytes graças ao nwellnhof!
Experimente online!
Bloco de código anônimo que recebe uma lista de dois números e retorna uma lista de pares de números.
Em vez de se preocupar em inserir os dígitos, esta solução verifica todas as combinações de números que somam 10000 e filtra se os números fornecidos fazem parte do par.
Explicação:
fonte
(i,1e4-i)
vez de iterar sobre todos(i,j)
e filtrá-los?R ,
179 161 150144 bytesExperimente online!
35 bytes salvos por @JayCe e @Giuseppe.
Explicação
A função auxiliar g obtém todas as inserções possíveis.
Função principal.
Percebi depois que essa é essencialmente a mesma lógica que a resposta de Pyth .
fonte
F
e%*%
Ruby ,
9391 bytesExperimente online!
Tente todos os números até 10000 e use o regex para verificar se os números correspondem.
fonte
Gelatina , 30 bytes
Experimente online!
Meio desajeitado porque Jelly não tem inserção.
Explicação
fonte
PHP,
162159 byteslindo exemplo para uma função de gerador!
recebe entrada de argumentos de linha de comando; imprime duplicados. Corra com
-nr '<code>
ou experimente online .fonte
Pitão, 18 bytes
Demonstração , suíte de testes ( suíte de testes é deduplicada com líder
{
).A entrada está na forma de uma lista de duas cadeias.
XLRRTT
: L e R executam mapas aninhados. Como existem três deles, executaremos um mapa triplamente aninhado daX
função. Nesse caso, aX
função inserirá um caractere em uma posição designada em uma string.A string é a entrada, que é implícita e colocada pela primeira
R
. O caractere varia0 ... 9
, então todos os dígitos inseridos são possíveis e é colocado peloL
. O intervalo é dado porT
, que é definido implicitamente como10
, que é tratado implicitamente como[0 ... 9]
. A posição varia acima0 ... 9
, o que é suficiente, porque inserir um número após a 10ª posição nunca será útil. Resultados duplicados são bons. O intervalo é colocado pelo segundoR
e fornecido pelo segundoT
.v
: Seqüências de caracteres aninhadas em ints.sM
: Achatar o segundo nível de listas, deixando uma lista de todos os números possíveis após a inserção de dígitos, para cada um dos números de entrada.*F
: Pegue o produto cartesiano das duas listas de números possíveis.fqsT^;4
: Filtre os pares cujo produto é10000
.;
pega o valor10
aqui, comoT
está sendo usado como variável de filtro e;
sempre como o valor da variável que está sendo usada.fonte
Japt ,
30292523 bytesRecebe a entrada como uma matriz de seqüências de caracteres, gera uma matriz de matrizes de seqüências de caracteres.
Tente
Explicação
fonte
Javascript (Nó) -
183136123 bytes123 bytes graças a Shaggy
136 bytes graças a Arnauld
Código antigo
Não tenho orgulho disso, mas achei que eu iria enviar de qualquer maneira. Cria uma função de protótipo de string semelhante ao mapa que ocupa a maior parte dos bytes. A função apenas itera através de ambas as permutações e localiza quando 1000-ab é 0. Toma entrada como seqüências de caracteres.
Experimente online!
Ungolfed
fonte
String.prototype
,function
,let
,this
) e com algumas outras otimizações.map()
vez do externofor
. Nota: a única razão pela qual usamosj
como o primeiro parâmetro da função de retorno de chamada é que queremos que ela seja definida neste escopo.Gelatina , 23 bytes
Um link monádico que aceita uma lista de listas de dígitos
(por exemplo, para o exemplo de 923 e 72, a entrada é
[[9,2,3],[7,2]]
)Experimente online! (rodapé faz com que E / S seja um par de dois números inteiros e uma lista [formatada] de pares de números inteiros fora)
Ou veja a suíte de testes .
Quão?
Verifica todos os pares de "números" (listas de dígitos) que somam 10000 para validade, formando todas as maneiras de escolher n-1 dígitos desses "números" mantendo a ordem; e mantém aqueles que são válidos (onde a validade também permite que o "número" em teste seja igual ao "número" original).
fonte
Stax , 24 bytes
Execute e depure
Esse programa aceita suas duas entradas como uma matriz de seqüências de caracteres, assim.
fonte
Carvão , 33 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Caso você não entenda isso, ele percorre todos os pares de valores adicionados a 10000 (como cadeias) e conta quantas vezes cada entrada corresponde ao resultado da exclusão de até 1 caractere do respectivo valor. Se a contagem mínima for diferente de zero, as duas entradas corresponderão e esta é uma solução possível.
fonte
Python 3,
165 160 153 125117 bytesset
do valor de retorno, pois a saída pode conter duplicatas.range(len(s))
porrange(5)
.itertools
por compreensões de lista aninhadas (e remover um espaço).UsandoAceita seqüências de caracteres como entrada, retorna um conjunto de entradas como saída.itertools
e uma função auxiliar simples.fonte
set
a última linha para -5 bytes.Ruby , 110 bytes
Aceita strings como entrada, retorna uma matriz de matriz de números inteiros.
Baseado na versão python . Para um número inteiro,
C
cria uma matriz de números que pode ser criada adicionando um dígito.O lambda itera sobre todos os pares possíveis e seleciona aquele cuja soma é 10000.
Experimente online!
fonte
05AB1E (herdado) , 36 bytes
Sem dúvida, pode ser jogado golfe substancialmente. Especialmente inserindo os dígitos, incluindo um à esquerda / à direita.
Experimente on-line ou verifique todos os casos de teste (
ê
no rodapé é Uniquify & Sort).Explicação:
fonte
Gelatina , 25 bytes
Experimente online!
Não é a solução Jelly mais curta aqui, mas talvez alguém possa jogar isso? Estou perplexo
fonte