Hay una buena manera de realizar una multiplicación larga para dos enteros sin tener que hacer nada más que contar, que ocasionalmente se comparte en Internet. Escribe los dígitos de cada número como un grupo de líneas inclinadas, con los dos números en un ángulo de 90 grados. Luego, simplemente puede contar las intersecciones en las columnas separadas que surgen. Un diagrama probablemente aclarará esto. Aquí hay un ejemplo para calcular 21 * 32
:
Si buscas en Google "multiplicación larga visual / gráfica" encontrarás muchos más ejemplos.
En este desafío, debe generar estos diagramas utilizando el arte ASCII. Para el mismo ejemplo, la salida se vería así:
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
Probablemente sea más fácil descubrir las reglas de construcción para estos a partir de algunos ejemplos (ver más abajo), pero aquí algunos detalles:
- Los segmentos que se intersectan son
X
, los segmentos no intersectantes de las líneas son/
o\
. - Debe haber exactamente un segmento después de las intersecciones más externas.
- Debe haber exactamente un segmento entre las intersecciones que pertenecen a diferentes dígitos. Si hay cero dígitos, estos resultarán en segmentos consecutivos
/
o\
. - Debe admitir cualquier entrada positiva (al menos hasta un límite razonable como 2 16 o 2 32 ), y cualquier dígito desde
0
hasta9
. Sin embargo, puede suponer que no hay0
s ni iniciales ni finales . - No debe imprimir espacios en blanco iniciales extraños ni líneas vacías iniciales o finales.
- Puede imprimir espacios en blanco al final, pero no debe exceder el cuadro delimitador alineado con el eje del diagrama.
- Opcionalmente, puede imprimir una nueva línea final.
- Puede elegir en qué orden tomar los dos números de entrada. Sin embargo, debe admitir números arbitrarios para cualquier orientación, por lo que no puede elegir algo como "El número más grande se da primero".
- Si está tomando la entrada como una cadena, puede usar cualquier separador sin dígitos entre los dos números.
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
Este es el código de golf, gana la respuesta más corta (en bytes).
Ejemplos
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 \
/ \