Existe uma boa maneira de realizar uma multiplicação longa para dois números inteiros sem ter que fazer nada além de contar, que ocasionalmente é compartilhado na Internet. Você escreve os dígitos de cada número como um monte de linhas inclinadas, com os dois números em um ângulo de 90 graus. Então você pode simplesmente contar as interseções nas colunas separadas que surgirem. Um diagrama provavelmente esclarecerá isso. Aqui está um exemplo para calcular 21 * 32
:
Se você pesquisar no Google por "multiplicação visual / gráfica longa", encontrará muito mais exemplos.
Neste desafio, você deve gerar esses diagramas usando a arte ASCII. Para o mesmo exemplo, a saída seria assim:
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
Provavelmente, é mais fácil descobrir as regras de construção para isso a partir de alguns exemplos (veja abaixo), mas aqui alguns detalhes:
- Os segmentos de interseção são
X
, os segmentos sem interseção das linhas são/
ou\
. - Deve haver exatamente um segmento após as interseções mais externas.
- Deve haver exatamente um segmento entre interseções pertencentes a dígitos diferentes. Se houver zero dígitos, isso resultará em consecutivos
/
ou\
segmentos. - Você deve oferecer suporte a qualquer entrada positiva (pelo menos até algum limite razoável, como 2 16 ou 2 32 ), e qualquer dígito de
0
até9
. No entanto, você pode supor que não existem0
s iniciais nem finais . - Você não deve imprimir espaços em branco iniciais estranhos ou linhas vazias iniciais ou finais.
- Você pode imprimir o espaço em branco à direita, mas não deve exceder a caixa delimitadora alinhada ao eixo do diagrama.
- Opcionalmente, você pode imprimir uma única nova linha à direita.
- Você pode escolher em qual ordem os dois números de entrada. No entanto, você deve suportar números arbitrários para qualquer orientação, para não poder escolher algo como "O número maior é fornecido primeiro".
- Se você estiver usando a entrada como uma sequência, poderá usar qualquer separador sem dígito entre os dois números.
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Este é o código golf, a resposta mais curta (em bytes) vence.
Exemplos
1*1
\ /
X
/ \
2*61
\ /
\ X /
X X /
/ X X /
/ X X /
/ X X /
/ X X
/ X \ /
/ \ X
X \
/ \
45*1
\ /
\ X
\ X \
\ X \
\ X \
X \
\ / \
\ X
\ X \
\ X \
X \
/ \
21001*209
\ /
X /
/ X
/ / \
\ / / \ /
X / X /
\ / X / X /
\ X / \ / / X /
X X \ / / / X /
/ X \ X / / / X /
/ \ \ / X / / / X /
\ X / X / / / X /
X X / X / / / X /
/ X X / X / / / X
/ X X / X / / / \
/ X X / X / /
/ X X / X /
/ X X / X
/ X X / \
/ X X
/ X \
/ \