前奏曲:
テストケースの作成を訓練したかったので、簡単なもので試してみます。
チャレンジ:
任意の(文字列)入力(ASCIIの範囲内)を取得し、それが数値であるかどうかを推測し、評価に使用できるものを出力します。
ルール:
- 数字には文字のみが含まれます
-0123456789,.
- 回答は、-1000000000〜1000000000(排他的)の間の数字を認識するためにのみ必要ですが、任意の大きな数字を認識する場合があります。
- 完全なプログラムまたは関数を作成できます。
- 数値の場合、識別に使用できるものをすべて返し、説明に出力を文書化します(例:)
My program outputs T if a number, F if not.
。 - 入力は、ASCII範囲内の任意の量の文字または空です(空の場合、数値でない場合は出力するものを返します)。
- 数字には小数点を含めることができます(例:)
3.14
。その場合、小数点の前に少なくとも1桁、その後に少なくとも1桁の数字が必要です。 - 数値の先頭または末尾にゼロを付けることができます(例:)
000001.00000
。 - 数値の整数部分は、読みやすくするために、カンマ付きの3桁のチャンクに分割できます(例:)
1,000.23456
。この場合、それらは、右から左に3桁ごとに分割する必要があります(例:1,234,567
、10,000.202
、123,234.00
、0,123.293
)。 - 負の数は、先頭
-
(例-1.23
)で示されます。+
正の数を示すためのリードは許可されず、偽の出力になるはずです。 - 例外は、有効で識別可能な出力としてカウントされません(標準出力ストリームに出力を渡すことができる場合を除きます(
Exception on line N [...]
たとえば、文字列が標準出力ストリームに出力される場合、数値/非数値の出力として入力できます)。
テストケース:
(My program outputs T if a number, F if not.
バージョンを想定)
123 -> T [on integer]
-123 -> T [negative numbers need to be handled]
0 -> T [on zero]
123.456 -> T [on floating point]
123,456.789 -> T [on evenly divided by 3 digits with comas]
123456789 -> T [thousand separators are not required]
0000001.00000 -> T [on leading/trailing zeros]
00.00 -> T [on zero and leading/trailing zeros]
999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the maximum value]
-999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the minimum value]
-> F [on empty]
lolz -> F [on non-number value]
n4melyh4xor -> F [on non-number with digits]
1.2 -> F [on space-padded]
9.3 1.3 -> F [on anyhow separated multiple numbers]
1e5 -> F [no scientific notation]
50cl05e.buty3ts0f4r -> F [on input with letters obscuring the number]
1,2,3,4.5678 -> F [on badly readability-divided number]
1,234.5,678 -> F [on readability-divided floating point part]
.234 -> F [on no leading zero]
+1 -> F [no leading + sign]
1.234.3 -> F [only one decimal point]
12345,678 -> F [on separator stopping mid-way]
code-golf、最小の文字が勝者です。
-123
、どうですか+456
->良いか悪いか。それともれる+
パーティーから取り残さ?