ASCIIアートで長い除算を視覚化するプログラムを作成します。入力は、選択した入力形式を使用して、分子と分母の2つの整数で構成されます。
例:
1234÷56:
22
----
56|1234
112
---
114
112
---
2
1002012÷12:
83501
-------
12|1002012
96
---
42
36
--
60
60
--
12
12
--
0÷35
0
-
35|0
ルール:
- プログラミング言語の除算演算子の使用は許可されています。
- 大きな整数のサポートの使用も許可されています。
- 一貫性のために:
- 商がゼロの場合、ダイビングボードの最後にゼロを1つ出力します。
- 余りがゼロの場合、印刷しないでください。
- 数字に先行ゼロを印刷しないでください。
- 末尾の余分な改行と右側の末尾のスペースは許可されます。
- 最小の文字数のソリューションが勝ちです。
制限:
- 0 <=分子<= 10 72 - 1
- 1 <=分母<= 9999999
これは、出力が80列を超えないことを意味します。
テストスイートとサンプル実装:
long-division.c(gist)を使用して、プログラムをテストできます。実際には、Cプログラムが内部にあるbashスクリプトです。テストスイートでプログラムを呼び出すためにそれを微調整します。参照実装を確認するには、下部のCコードをご覧ください。サンプルプログラムまたはテストスイートに問題がある場合はお知らせください。
$ ./long-division.c 10 7
1
--
7|10
7
--
3
$ ./long-division.c
PASS 1234 ÷ 56
PASS 1002012 ÷ 12
PASS 1 ÷ 1
--- snip ---
Score: 35 / 35
All tests passed!
編集:リクエストに応じて、テストスイートの入力と予想される出力をテキストファイルに入れます(gist)。サンプル使用法(bash):
cat input | while read nd; do
./program $nd |
sed 's/\s*$//' | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
done > output
diff -u expected output
奇妙なsedコマンドは、プログラム出力から末尾の改行とスペースを除外します。