カウント以外の何もすることなく、2つの整数の長い乗算を実行する良い方法があります。これは時々インターネット上で共有されます。各数字の数字は、2本の数字が90度の角度になった斜めの線の束として書きます。次に、発生した個別の列の交差点を数えるだけです。これはおそらく図で明らかになります。以下は計算の例です21 * 32
:
「ビジュアル/グラフィックの長い乗算」を検索すると、さらに多くの例が見つかります。
この課題では、ASCIIアートを使用してこれらの図を生成します。同じ例の場合、出力は次のようになります。
\ /
X /
\ / X /
\ X / X
X X / \ /
/ X X X /
/ X \ / X
/ \ X / \
X X
/ X \
/ \
いくつかの例(以下を参照)からこれらの構成規則を理解するのがおそらく最も簡単ですが、ここでいくつかの詳細を示します。
- 交差するセグメントは
X
、ラインの非交差セグメント/
または\
。 - 最も外側の交差点の後に、ちょうど1つのセグメントがあるはずです。
- 異なる桁に属する交差点の間に正確に1つのセグメントが存在する必要があります。ゼロ桁がある場合、これらは連続
/
または\
セグメントになります。 - 正の入力(少なくとも2 16や2 32などの合理的な制限まで)、およびから
0
までの数字をサポートする必要があります9
。ただし、先頭または末尾が存在しないと仮定することもできます0
のsます。 - 余分な先頭の空白や先頭または末尾の空行を印刷しないでください。
- 末尾の空白を印刷できますが、ダイアグラムの軸に合わせた境界ボックスを超えてはなりません。
- オプションで、単一の末尾の改行を印刷できます。
- 2つの入力番号を取得する順序を選択できます。ただし、どちらの方向でも任意の数字をサポートする必要があるため、「大きい数字が最初に与えられる」ようなものは選択できません。
- 入力を文字列として取得している場合、2つの数字の間に数字以外の区切り文字を使用できます。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。
これはコードゴルフで、最短の回答(バイト単位)が勝ちです。
例
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 \
/ \