Faça-os somar 10.000

26

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 .AB[1..9999]A+B<10000

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.A+B=10000AB

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:A=923

192392739238

Mas estes são inválidos :

09231092394273

Dado e , existem duas soluções possíveis:A=923B=72

9238+762=100009273+727=10000

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 .

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]]
Arnauld
fonte
4
Não é um desafio simples se eu não conseguir digitar e ter certeza de que funciona enquanto estiver no meu carro. ; p
Quintec 28/09/18
16
@ Quintec Eu recomendaria não digitar nada enquanto estiver no seu carro. : p
Arnauld 28/09
1
@ Arnauld Ele não disse que é o motorista. ;-) (nota séria: 4 off-topic comentários até agora, o meu 3-comment desvantagem para esses fins está apitando ruidosamente: P.)
Erik o Outgolfer
1
Quando as soluções de geléia levam mais de 20 bytes, é um desafio difícil!
Regis Portalez 29/09/18
output a list of all possible solutionsOh chatice. Seria difícil para a minha língua rúnica. Provavelmente eu poderia escrever um programa que pudesse gerar uma solução!
Draco18s 29/09/18

Respostas:

8

R , 96 bytes

function(a,b)(w<-grep(gsub("",".?",a?b),1:1e4?9999:0)?r<-1e4-w)[w+a<2&r+b<2]
"?"=paste
"+"=adist

Experimente online!

Explicação (ungolfed)

function(a,b){
    # Regex inserting ".*": (998,3) => ".?9.?9.?8.? .?3.?"
  regex <- gsub("",".?",paste(a,b)) 
    # Positions matching in the whole vector of strings that add to 10K ("1 9999", "2 9998", "3 9997", "4 9996", ...)
  w <- grep(regex,paste(1:1e4,9999:0)) 
    # 10K minus these matching positions
  r <- 1e4-w 
    # Form position-string vector of ('pos1 10K-pos1', 'pos2 10K-pos2', ...)
  paste(w,r)[
  # Filter only those positions where the edit distance between the matched numbers and the originals are less than 2
    adist(w,a)<2 & adist(r,b)<2 
  ]
}

Nós atribuímos ?a paste. Isso nos permite fazer algo bacana: a<-b?c<-dfaz atribuições embutidas na pastechamada, 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 10que duas inserções podem ocorrer, como 9100 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 +.

J.Doe
fonte
Obrigado por verificar! Agora filtro as correspondências em que há mais de uma inserção por número.
precisa saber é
7

Pitão, 28 27 25 24 22 20 bytes

fq^;4sT*FmvsmXLkdThl

Experimente 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.

fq^;4sT*FmvsmXLkdThldQ   Implicit: Q=eval(input()), T=10
                         Trailing d, Q inferred
         m           Q   Map each input string, as d, using:
                   ld      Take the length of d
            m     h        Map 0 to the above (inclusive), as k, using:
             X  d            Insert into d...
               k             ... at position k...
              L  T           ... each number [0-9]
           s               Flatten the result
          v                Convert each back to an integer
       *F                Take the cartesian product of the result
                         (this generates all possible pairs of mutated numbers)
f                        Keep the pairs, as T, where...
     sT                  ... the sum of the pair...
 q                       ... is equal to...
  ^;4                    ... 10,000 (; == 10 here, so this is 10^4)

Editar 4: salvou outros 2 bytes, graças ao Sr. Xcoder - vetoriza vpor padrão e Lusa mpor baixo, de modo que o mapeamento acima do alcance é implícito, tornando o Udesnecessário também

Edit 3: Introduzido ao uso global do ;operador para manter o acesso a 10 e salvar 2 bytes, graças a FryAmTheEggman e issacg:

fq^T4sT*FmvMsmXLkdUThl

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:

fq10000+FT*FmvMsmXLk`dUThl`
Sok
fonte
1
@KevinCruijssen, de fato, 10 normalmente é 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 acontece T, portanto não pode ser usada. Isto significa que 10 ^ 4seria ^10 4, que é 5 bytes de comprimento, de forma que nenhum menor infelizmente
Sok
1
@ Ok Ah ok. Portanto, o Tin UTainda é 10, para o [0,10)intervalo. Mas pelo f...To Ttornou-se uma variável de iteração para o filtro. Obrigado pela explicação, isso faz sentido! E T4^, antes, salvá-lo em uma variável e usar essa variável no filtro é (pelo menos) 5 bytes, é claro.
Kevin Cruijssen 28/09
2
Você pode substituir 10000por ^;4.
FryAmTheEggman 28/09
2
;sempre tem o valor da variável de iteração no contexto global, neste caso 10. Assim ^;4é o que você está procurando.
Isaacg 29/09/19
1
20 bytes: fq^;4sT*FmvsmXLkdThl. ( Pyth surra Jelly oO Hooray? )
Mr. Xcoder
4

Perl 6 , 64 bytes

->\a{grep {all (a Z~$_)X~~/^(.*)(.*)$0.?$1$/},(^1e4 Z(1e4...1))}

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!

->\a{grep {all ~<<a Z∈.map:{.comb.combinations(.comb-1..*)>>.join}},(^1e4 Z(1e4...1))}

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:

->\a{  # Anonymous code block that takes an argument a
     grep ... ,(^1e4 Z(1e4...1))    # Filter from all pairs that add to 10000
         {      ~<<a     # Stringify the contents of a
                     .map:{      # Map the pair to
                           .comb  # The digits of the number
                           .combinations(.comb-1..*)  # The combinations of the digits
                           >>.join  # Each combination joined
                           # Note that combinations preserve order
                           # "123" -> (12,13,123)
                          }
          all       Z   # Zip that each element of a is an element of the combination
         }
}
Brincadeira
fonte
Apenas curioso: você não pode usar o fato de que os pares podem ser escritos como em (i,1e4-i)vez de iterar sobre todos (i,j)e filtrá-los?
Eric Duminil 28/09
3

R , 179 161 150 144 bytes

function(a,b,w=g(a),r=rep(g(b),e=1e4))paste(w,r)[w+r==1e4]
g=function(x,n=sum(x|1)){for(i in 0:n)for(j in 0:9)F=c(F,append(x,j,i)%*%10^(n:0));F}

Experimente online!

35 bytes salvos por @JayCe e @Giuseppe.

Explicação

A função auxiliar g obtém todas as inserções possíveis.

g <- function(x,            # Input vector of digits
              n=sum(x|1)    # Length of x
              ) {
  for(i in 0:n)             # i is the insertion point
    for(j in 0:9)           # j is a digit from 0 to 9
      # Dot product of vector of digits with insert and 10^(n:0) performs the
      # conversion to integer (and gets rid of the leading 0s)
      F=c(F,append(x,j,i)%*%10^(n:0))  # F is a non-reserved built-in alias to FALSE (numerically 0)
  F
}

Função principal.

f <- 
function(a,                 # Input vectors of digits
         b,
         w=g(a),            # Get all possible insertions for a
         r=rep(g(b),e=1e4)  # Insertions for b replicated 1e4 times each
         )
  paste(w,r)[w+r==1e4]      # paste and w+r recycle w to match length of r
                            # Lots of duplication!

Percebi depois que essa é essencialmente a mesma lógica que a resposta de Pyth .

ngm
fonte
@JayCe Salva mais de 10 bytes! A desduplicação é permitida fora do código de desafio.
NGM
vamos matar mais alguns bytes - não precisa para exterior, rep é suficiente
Jayce
Acho que estamos perto de enfiar um garfo neste!
NGM
3

Ruby , 93 91 bytes

->a,b{(1..r=10000).map{|x|/^(.*)(.*:)\1.?\2(.*)(.*):\3.?\4$/=~[a,x,b,y=r-x]*?:&&[x,y]}-[p]}

Experimente online!

Tente todos os números até 10000 e use o regex para verificar se os números correspondem.

GB
fonte
2

Gelatina , 30 bytes

DµJṬ€k€jþ9Ż¤;9R¤;€$ḌF)ŒpS=ȷ4ƊƇ

Experimente online!

Meio desajeitado porque Jelly não tem inserção.

Explicação

                                   Given [a, b].
Dµ                   )             Get [digits(a), digits(b)] then map:
  JṬ€k€jþ9Ż¤;9R¤;€$ḌF                Generate all the insertions.
                      Œp           Cartesian product: get all pairs.
                        S=ȷ4ƊƇ     Filter for: sum equal to ȷ4 (10000).

                       Given e.g. [6,3,5]:
J                      Get [1,2,3].
 Ṭ€                    Get [[1], [0,1], [0,0,1]].
   k€                  Split input with these: gets us
                         [[6],[3,5]] , [[6,3],[5]] , [[6,3,5],[]]
     jþ9Ż¤             Join table-wise with [0..9]
                         → [[[6,0,3,5], [6,3,0,5], [6,3,5,0]],
                            [[6,1,3,5], [6,3,1,6], [6,3,5,1]], …]
          ;9R¤;€$      Append the prefixings of the input by [1..9].
                           [[1,6,3,5], [2,6,3,5], [3,6,3,5]]…
                 ḌF    Undigits all, and flatten.
Lynn
fonte
2

PHP, 162 159 bytes

lindo exemplo para uma função de gerador!

function f($n){for($n+=.1;$n>=1;$n/=10)for($d=-1;$d++<9;)yield strtr($n,".",$d)/10|0;}foreach(f($argv[1])as$x)foreach(f($argv[2])as$y)$x+$y-1e4||print"$x+$y\n";

recebe entrada de argumentos de linha de comando; imprime duplicados. Corra com -nr '<code>ou experimente online .

Titus
fonte
2

Pitão, 18 bytes

fqsT^;4*FsMvXLRRTT

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 da Xfunção. Nesse caso, a Xfunçã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 varia 0 ... 9, então todos os dígitos inseridos são possíveis e é colocado pelo L. O intervalo é dado por T, que é definido implicitamente como 10, que é tratado implicitamente como [0 ... 9]. A posição varia acima 0 ... 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 segundo Re fornecido pelo segundo T.

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 valor 10aqui, como Testá sendo usado como variável de filtro e ;sempre como o valor da variável que está sendo usada.

isaacg
fonte
2

Japt , 30 29 25 23 bytes

Recebe a entrada como uma matriz de seqüências de caracteres, gera uma matriz de matrizes de seqüências de caracteres.

£L²ôs f_à øX
rï k@L²aXx

Tente


Explicação

£L²ôs f_à øX
£                :Map each X
 L               :  100
  ²              :  Squared
   ô             :  Range [0,L²]
    s            :  Convert each to a string
      f_         :  Remove elements that return false
        à        :    All combinations of current element
          øX     :    Contains X?
rï k@L²aXx
r                :Reduce by
 ï               : Cartesian product
   k@            :Remove each X that returns true (not 0)
     L²          :  100 squared
      a          :  Absolute difference with
        Xx       :   X reduced by addition
Shaggy
fonte
2

Javascript (Nó) - 183 136 123 bytes

123 bytes graças a Shaggy

a=>b=>(o={},g=(s,h)=>[...s+0].map((y,x)=>{for(y=10;y--;)h(s.slice(0,x)+y+s.slice(x))}))(a,x=>g(b,y=>1e4-x-y?0:o[+x]=+y))&&o

136 bytes graças a Arnauld

e=(h,c,i=h.length+1,j)=>{for(;i--;)for(j=10;j--;)c(h.slice(0,i)+j+h.slice(i))}
f=(a,b,c=[])=>e(a,n=>e(b,m=>1E4-n-m||c.push([+n,+m])))||c

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.

String.prototype.e=function(c){let h=this,L=h.length,i,j;for(i=0;i<=L;i++)for(j=0;j<=9;j++)c(h.slice(0,i)+j+h.slice(i,L));}
f=(a,b,c=[])=>a.e(n=>b.e(m=>1E4-n-m?c:c.push([+n,+m])))?c:c

Experimente online!

Ungolfed

String.prototype.e=function(c) {
  let h=this,L=h.length,i,j;
  for(i=0;i<=L;i++)
    for(j=0;j<=9;j++)
      c(h.slice(0,i)+j+h.slice(i,L));
}
f=(a, b, c=[]) =>
  a.e(n =>
    b.e(m =>
      1E4-n-m ? c : c.push([+n,+m])
    )
  ) ? c : c
Adormecido
fonte
Aqui estão algumas vitórias rápidas . Este é basicamente o mesmo código sem as declarações de golfe-hostis '( String.prototype, function, let, this) e com algumas outras otimizações.
Arnauld
A partir daí, você pode salvar mais 4 bytes usando um loop em map()vez do externo for. Nota: a única razão pela qual usamos jcomo o primeiro parâmetro da função de retorno de chamada é que queremos que ela seja definida neste escopo.
Arnauld
@ Arnauld obrigado Eu realmente aprecio isso, você é um homem lendário. Poste sua resposta, não quero aceitar a sua, apenas faço por diversão.
Asleepace
1
Não vou responder meu próprio desafio e esse código é apenas uma modificação sua, portanto, fique à vontade para usá-lo. Não se preocupe!
Arnauld
Derrubou as sugestões de @ Arnauld até 123 bytes
Shaggy
1

Gelatina , 23 bytes

œcL’$$€ċ"⁹o⁼"Ạ
ȷ4ḶṚĖDçƇ

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).

œcL’$$€ċ"⁹o⁼"Ạ - Link 1, is piar valid?: pairToCheck, originalInputPair
      €        - for each list of digits in pairToCheck: e.g. [9,2,3]
     $         -   last two links as a monad:
    $          -     last two links as a monad:
  L            -       length                                 3
   ’           -       decremented                            2
œc             -     choices of that many items               [[9,2],[9,3],[2,3]]
         ⁹     - chain's right argument (originalInputPair)
        "      - zip with: (i.e. apply the following f(x,y) *respectively* across the results above and the originalInputPair)
       ċ       -   count occurrences
            "  - zip with (this time with an implicit right argument of originalInputPair)
           ⁼   -   equal (non-vectorising version)
          o    - locgical OR (vectorising version) i.e. we now have: [OR(isOneDigitLonger(item1),isEqual(item1)), OR(isOneDigitLonger(item2),isEqual(item2))]
             Ạ - all?

ȷ4ḶṚĖDçƇ - Main Link: list (pair) of lists of digits
ȷ4       - literal 10^4 -> 10000
  Ḷ      - lowered range -> [0,1,2,...,9998,9999]
   Ṛ     - reversed -> [9999,9998,...,2,1,0]
    Ė    - enumerate -> [[1,9999],[2,9998],...,[9998,2],[9999,1],[10000,0]] (N.B. last is redundant, but this does not matter)
     D   - to decimals -> [[[1],[9,9,9,9]],[[2],[9,9,9,8]],...,[[9,9,9,8],[2]],[[9,9,9,9],[1]],[[1,0,0,0,0],[0]]]
       Ƈ - filter keep those for which this is truthy:
      ç  -   call last link as a dyad (with a right argument of the pair of lists of digits)
Jonathan Allan
fonte
1

Stax , 24 bytes

⌐çΘ♠╖øû°-h∟ñµ%üw▲∞Ç╫[½π=

Execute e depure

Esse programa aceita suas duas entradas como uma matriz de seqüências de caracteres, assim.

["934", "654"]
recursivo
fonte
1

Carvão , 33 bytes

ΦE×χφI⟦ι⁻×χφι⟧⌊Eι№E⊕LλΦλ⁻ξρ§⟦θη⟧μ

Experimente online! Link é a versão detalhada do código. Explicação:

   χ                                10
    φ                               1000
  ×                                 Multiply
 E                                  Map over implicit range
       ι    ι                       Current value
        ⁻×χφ                        Subtract from 10000
      ⟦      ⟧                      Pair of values
     I                              Cast to string
Φ                                   Filter
                ι                   Current pair
               E                    Map
                     λ              Current value
                    L               Length
                   ⊕                Increment
                  E                 Map over implicit range
                       λ            Current value
                      Φ             Filter over characters
                         ξ          Range value
                          ρ         Character index
                        ⁻           Subtract
                            ⟦θη⟧    Original inputs as a list
                                μ   Index of current value
                           §        Get input at that index
                 №                  Count matching values
              ⌊                     Minimum
                                    Implicitly print each pair double-spaced

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.

Neil
fonte
1

Python 3, 165 160 153 125 117 bytes

  • Economizou 5 bytes graças à sugestão de remover @JackBrounstein set do valor de retorno, pois a saída pode conter duplicatas.
  • Salve 7 substituindo range(len(s))porrange(5) .
  • Economizou 23 bytes graças à sugestão de @Eric Duminil para substituir itertools por compreensões de lista aninhadas (e remover um espaço).
  • Economizei 8 graças à sugestão de @Jo King de substituir a compreensão da lista aninhada por um único operador de loop e módulo.

Usando itertoolse uma função auxiliar simples. Aceita seqüências de caracteres como entrada, retorna um conjunto de entradas como saída.

c=lambda s:[int(s[:i%5]+str(i//5)+s[i%5:])for i in range(50)]
lambda a,b:{(i,j)for i in c(a)for j in c(b)if i+j==1e4}
user2699
fonte
1
Como a saída pode incluir duplicatas, você não precisa chamar seta última linha para -5 bytes.
Jack Brounstein 28/09
@JackBrounstein, Obrigado. Eu perdi essa parte das regras.
user2699
@EricDuminil, Obrigado. Eu não sabia sobre compreensão de cenários, é um truque legal.
user2699
1
117 bytes
Jo King
1
@JoKing Clever. Depois de todas essas sugestões, a solução quase não se parece com o que eu comecei.
user2699
1

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, Ccria 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.

C=->n{(0..49).map{|i|([n[0...i%5],i/5,n[i%5..-1]]*'').to_i}}
->(a,b){C[a].product(C[b]).select{|i,j|i+j==1e4}}

Experimente online!

Eric Duminil
fonte
1

05AB1E (herdado) , 36 bytes

0ìε.œʒg3‹}εU9ÝεXDgiìësý}}}˜}`âʒOT4mQ

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:

0ì                            # Prepend a 0 before each of the input numbers
  ε                        }  # Map each to:
                            #  Take all possible partitions
     ʒg3‹}                    #  Only keep those of length 1 or 2
          ε              }    #  Map each partition to:
           U                  #   Pop and store the partition in variable `X`
            9Ý                #   List in the range [0, 9]
              ε         }     #   Map each of those digits to:
               X              #    Get the variable `X`
                Dgi           #    If it's a single number (length == 1):
                   ì          #     Prepend `X` before this digit
                  ë           #    Else (length == 2):
                   sý         #     Join both numbers in `X` with the current digit
                  }           #    Close the if-else
                          ˜   #   Flatten the list of lists
`                             # Now push both lists to the stack
 â                            # Create all possible pairs (cartesian product)
  ʒ                           # Filter this list of pairs by:
   O                          #  Take the sum of the two numbers
    T4m                       #  Push 10000 (10^4)
       Q                      #  And check if they are equal
Kevin Cruijssen
fonte
0

Gelatina , 25 bytes

LŻœṖ€z⁶ZjþØDVẎṢḊ)p/S⁼ȷ4ƊƇ

Experimente online!

Não é a solução Jelly mais curta aqui, mas talvez alguém possa jogar isso? Estou perplexo

dylnan
fonte