Objetivo
Dada uma lista de entrada de 6
dígitos distintas, encontrar números 3 a
, b
e c
de tal modo que a × b = c
, com a
ter 2 dígitos, b
tendo um dígito e c
tendo de 3 dígitos. De uma maneira mais visual, seu programa deve organizar esses 6 dígitos nas caixas desta imagem:
Se existir mais de uma solução, você poderá gerar uma delas.
Entrada
6 dígitos distintos. Você pode aceitá-los de qualquer maneira razoável para o seu idioma.
Saída
Os números 3 a
, b
e c
. O formato de saída é relativamente livre, desde que os três números sejam separados e sempre sejam impressos na mesma ordem (mas não necessariamente na ordem a, b, c
).
Casos de teste
1, 2, 3, 4, 5, 6 -> 54,3,162
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364
Pontuação
O código mais curto em bytes vence.
0,1,2,3,4,5
resultado em13,4,052
; sem solução; ou algum comportamento está bom?Respostas:
Braquilog (2), 10 bytes
Experimente online!
Muito lento para ser executado em um período de tempo razoável (o intérprete Brachylog passa muito tempo fazendo multiplicações em cadeias vazias, números de 4 dígitos, números negativos etc. usando um solucionador de restrições muito lento). O link TIO usa uma entrada com apenas 3 dígitos (este programa pode manipular a entrada com qualquer número de dígitos). Essa é uma função cuja entrada é um número que contém todos os dígitos necessários (por exemplo
234567
) - a falta de duplicatas na entrada significa que você sempre pode colocar alguma0
no final para evitar um zero à esquerda - e cuja saída é uma lista no pedido[b, a, c]
(por exemplo[6, 57, 342]
).Explicação
Então, para onde foi o requisito dos grupos de 2, 1 e 3 dígitos? Bem, sabemos que existem 6 dígitos na entrada e os grupos estão em ordens ordenadas. Os únicos tamanhos possíveis que eles podem ter, portanto, são [1, 1, 4], [1, 2, 3] ou [2, 2, 2]. O primeiro caso é impossível (você não pode multiplicar dois números de 1 dígito para produzir um número de 4 dígitos, pois 9 × 9 é apenas 81), como é o último caso (você não pode multiplicar dois números de 2 dígitos para produza um número de 2 dígitos, pois mesmo 10 × 10 produz 100). Portanto, os valores de retorno
[b, a, c]
devem ter 1, 2 e 3 dígitos nessa ordem, assima
como 2 dígitos,b
1 dígito ec
3 dígitos, conforme solicitado.fonte
JavaScript (ES6),
9088 bytesRecebe a entrada como uma matriz de 6 dígitos. Retorna uma string descrevendo uma possível solução (como
'54*3==162'
) ou sai com um erro 'muita recursão' se (e somente se) não houver solução.Como funciona
Este é um algoritmo determinístico.
Os números primos
P=2
eQ=3779
foram escolhidos de forma a(k = k * P % Q) & 2
garantir que o retorno de chamada de classificação gere todas as 720 permutações possíveis da matriz de entrada ao longo do tempo. Mais precisamente, todas as permutações são cobertas após as classificações de 2798 - que devem estar dentro do limite de recursão de todos os navegadores.Injetamos cada permutação na expressão
01*2==345
mapeando os dígitos para as entradas correspondentes na matriz.Avaliamos essa expressão e fazemos chamadas recursivas até que seja verdadeira.
Teste
Mostrar snippet de código
fonte
-
vez de==
(e inverta o?:
) para salvar um byte.Braquilog , 17 bytes
Experimente online!
Explicação
fonte
05AB1E ,
1513 bytesEconomizou dois bytes graças a Emigna !
Usa a codificação CP-1252 . Experimente online!
Explicação:
fonte
213S
por,3L
pois o pedido não precisava estar de2,1,3
acordo com as especificações.£
vetoriza cumulativamente ... Se essa é a maneira correta de dizer isso.Bash + coreutils, 70
Não é uma maneira particularmente fácil de gerar todas as permutações. Em vez disso, gere permutações aleatoriamente e calcule até encontrarmos uma boa.
A saída está na forma
A*B-C
- ou seja, a expressão que será avaliada como zero quando tivermos a permutação correta.Experimente online .
fonte
CJam , 23 bytes
Experimente online!
fonte
Python 2 , 105 bytes
Experimente online!
Solução de 88 bytes com uma saída mais flexível
Experimente online!
onde a saída seria ['6', '5', '7', '3', '4', '2'] em vez de '6', '57', '342'
fonte
import
no topo ... balança a cabeçaf=
o item no cabeçalho. Não é grande coisa.PHP, 110 bytes
Chegará lá ... eventualmente ...
Ungolfed:
fonte
PHP, 77 bytes
Recebe a entrada como uma sequência.
fonte
ES6 (Javascript),
85,82, 79 bytesAceita uma matriz de dígitos (strings), retorna uma matriz de 3 elementos
[A,B,C]
=>C=A*B
Golfe
EDITAS:
d
ea
, e se livrando de==
(Obrigado @Arnauld!)Tente !
fonte
Pip , 18 bytes
17 bytes de código, +1 para
-S
sinalizador.Recebe a entrada como uma sequência de dígitos via argumento da linha de comando. A saída está na ordem c, b, a. Experimente online!
Esse código gera todas as soluções, se existirem várias. Se for necessário gerar apenas uma solução, adicione três bytes e envolva o programa
(...0)
.Explicação
fonte
Ruby, 60 bytes
Imprime todas as soluções como "a * b == c"
Exemplo:
fonte
Lote, 305 bytes
Aceita STDIN como uma string
[1-9]{6}
e gera todas as soluções emdd*d-ddd
formato. Lote não é muito bom em manipulação de cordas, portanto, gerar as permutações 720 é um pouco estranho.fonte