Prelude:
Test senaryoları hazırlamak istedim, bu yüzden onları kolay bir şey üzerinde deneyeceğim.
Meydan okuma:
Herhangi bir (dize) girişi (görünür ASCII aralığında) alın ve bir sayı olup olmadığını bulun ve değerlendirmek için kullanılabilecek bir şey çıkarın.
Kurallar:
- Bir sayı yalnızca karakterleri içerecektir
-0123456789,.
- Yanıtlar yalnızca -1000000000 ve 1000000000 (özel) arasındaki sayıları tanımak için gereklidir, ancak keyfi olarak büyük sayıları tanıyabilir.
- Tam bir program veya işlev yazabilirsiniz.
- Bir sayı varsa, onu ayırt etmek ve çıktıdaki açıklamayı belgelemek için kullanılabilecek her şeyi döndürün (ör.
My program outputs T if a number, F if not.
). - Giriş, ASCII aralığında herhangi bir miktarda karakter veya boş olacaktır (boşsa, sayı değilse çıktı olarak verdiğiniz her şeyi döndürür).
- Sayılar ondalık nokta içerebilir (ör.
3.14
). Eğer öyleyse, ondalık noktadan önce en az bir basamak ve ondan sonra en az bir basamak olmalıdır. - Sayıların başında veya sonunda sıfır olabilir (ör.
000001.00000
). - Bir sayının tamsayı kısmı okunabilirlik için virgülle üç basamaklı parçalara bölünebilir (ör.
1,000.23456
). Bu durumda onlar sol sağdan Her üç basamağı bölünmüş olmalıdır özellikleri (ör.1,234,567
,10,000.202
,123,234.00
,0,123.293
). - Negatif sayılar bir satır başı ile gösterilir
-
(ör.-1.23
).+
Pozitif bir sayıyı göstermeye yol açan bir karaktere izin verilmez ve hatalı çıktıyla sonuçlanmalıdır. - İstisnalar geçerli ve fark edilebilir çıktı olarak DEĞİLDİR (çıktıları standart çıkış akışına geçirebildikleri durumlar hariç (ör.
Exception on line N [...]
, Dize standart çıkış akışına konulursa bir sayı / sayı olmayan sayı için çıkış olarak eklenebilir).
Test senaryoları:
( My program outputs T if a number, F if not.
sürümü varsayarak )
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]
kod-golf , en az karakter kazanır.
-123
uygunsa, +456
ya iyi ya da kötü. Yoksa +
partinin dışında mı kalıyor?