Es gibt eine gute Möglichkeit, eine lange Multiplikation für zwei ganze Zahlen durchzuführen, ohne etwas anderes zu tun als zu zählen, was gelegentlich im Internet geteilt wird. Sie schreiben die Ziffern jeder Zahl als Bündel von schrägen Linien, wobei sich die beiden Zahlen in einem Winkel von 90 Grad befinden. Dann können Sie einfach die Schnittpunkte in den einzelnen Spalten zählen, die entstehen. Ein Diagramm wird dies wahrscheinlich verdeutlichen. Hier ist ein Beispiel für die Berechnung 21 * 32
:
Wenn Sie für "visuelle / grafische lange Multiplikation" googeln, finden Sie viel mehr Beispiele.
In dieser Herausforderung müssen Sie diese Diagramme mit ASCII-Grafik erstellen. Für dasselbe Beispiel würde die Ausgabe folgendermaßen aussehen:
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
Es ist wahrscheinlich am einfachsten, die Konstruktionsregeln für diese anhand einiger Beispiele herauszufinden (siehe unten), aber hier einige Details:
- Sich
X
überschneidende Segmente sind/
oder sich nicht überschneidende Segmente der Linien\
. - Nach den äußersten Kreuzungen sollte genau ein Segment vorhanden sein.
- Zwischen den Schnittpunkten, die zu verschiedenen Ziffern gehören, sollte genau ein Segment liegen. Wenn es Nullstellen gibt, führen diese zu aufeinanderfolgenden
/
oder\
Segmenten. - Sie müssen jede positive Eingabe (mindestens bis zu einer angemessenen Grenze wie 2 16 oder 2 32 ) und alle Ziffern von
0
bis unterstützen9
. Sie können jedoch davon ausgehen, dass es weder führende noch nachfolgende0
s gibt. - Sie dürfen keine überflüssigen führenden Leerzeichen oder führende oder nachfolgende Leerzeilen drucken.
- Sie können nachgestellte Leerzeichen drucken, diese dürfen jedoch das achsenausgerichtete Begrenzungsfeld des Diagramms nicht überschreiten.
- Sie können optional eine einzelne nachgestellte Zeile drucken.
- Sie können wählen, in welcher Reihenfolge Sie die beiden Eingabenummern nehmen. Sie müssen jedoch für beide Ausrichtungen beliebige Zahlen unterstützen, damit Sie nicht die Option "Die größere Zahl wird zuerst vergeben" auswählen können.
- Wenn Sie Eingaben als Zeichenfolge verwenden, können Sie ein beliebiges nicht-stelliges Trennzeichen zwischen den beiden Zahlen verwenden.
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Dies ist Code Golf, die kürzeste Antwort (in Bytes) gewinnt.
Beispiele
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 \
/ \