Jest to dobry sposób na wykonanie długiego mnożenia dla dwóch liczb całkowitych bez konieczności robienia niczego poza liczeniem, które od czasu do czasu są udostępniane w Internecie. Cyfry każdej liczby zapisujesz jako wiązkę ukośnych linii, z dwiema liczbami pod kątem 90 stopni. Następnie możesz po prostu policzyć skrzyżowania w oddzielnych kolumnach, które się pojawiają. Schemat prawdopodobnie to wyjaśni. Oto przykład obliczania 21 * 32:

Jeśli wyszukujesz w Google „wizualne / graficzne długie mnożenie”, znajdziesz o wiele więcej przykładów.
W tym wyzwaniu musisz wygenerować te diagramy przy użyciu grafiki ASCII. W tym samym przykładzie dane wyjściowe wyglądałyby tak:
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
Prawdopodobnie najłatwiej jest obliczyć reguły konstrukcyjne dla nich z kilku przykładów (patrz poniżej), ale tutaj kilka szczegółów:
- Przecinające się segmenty to
Xnie przecinające się segmenty linii to/lub\. - Powinien znajdować się dokładnie jeden segment za najbardziej zewnętrznymi skrzyżowaniami.
- Pomiędzy skrzyżowaniami należącymi do różnych cyfr powinien znajdować się dokładnie jeden segment. Jeśli są cyfry zerowe, będą to kolejne
/lub\segmenty. - Musisz wesprzeć wszelkie pozytywne dane wejściowe (przynajmniej do pewnego rozsądnego limitu, takiego jak 2 16 lub 2 32 ), oraz wszelkie cyfry od
0do9. Możesz jednak założyć, że nie ma ani początku, ani końca0. - Nie wolno drukować obcych początkowych białych znaków ani początkowych lub końcowych pustych linii.
- Można wydrukować końcowe białe znaki, ale nie mogą one przekraczać wyrównanego do osi obwiedni.
- Możesz opcjonalnie wydrukować jedną końcową linię nowego wiersza.
- Możesz wybrać, w jakiej kolejności wziąć dwie liczby wejściowe. Jednak musi obsługiwać dowolne liczby dla obu orientacji, więc nie można wybrać czegoś w rodzaju „Najpierw podawana jest większa liczba”.
- Jeśli bierzesz dane wejściowe jako ciąg, możesz użyć dowolnego niecyfrowego separatora między dwiema liczbami.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
To jest kod golfowy, wygrywa najkrótsza odpowiedź (w bajtach).
Przykłady
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 \
/ \