Bazı arka plan
Sayma çubukları , birçok Asya kültüründen matematikçiler tarafından 2000 yılı aşkın bir süredir herhangi bir tam sayı veya kesiri temsil etmek için kullanılan küçük çubuklardır (3-14 cm uzunluğunda). (Bu meydan okumada imzasız tamsayılara odaklanacağız) Çubuk rakamları adı verilen yazılı bir versiyon da vardı.
Şöyle çalışır:
(Herhangi bir noktada kafanız karışırsa, her basamağın ascii temsilini ve altta eklediğim bazı örnekleri inceleyin)
Çubuk rakamları, 1-9 için rakamlar ve 0 için boş olan gerçek bir konumsal sayısal sistemdir. Rakamlar yatay ve dikey çizgilerden oluşur; daha fazla satır, basamak o kadar yüksek olur. Beşi geçtikten sonra, aşağıdaki satır sayısına 5 eklemek için üstüne yatay bir çizgi koyarsınız. Bir dikey çizgi 1, iki dikey çizgi 2, beş dikey çizgi 5, bir yatay çizgi üstte bir dikey çizgi 6, yatay bir çizgi üstte dört dikey çizgi 9'dur (en yüksek basamak).
Dikey 3 basamaklı:
|||
|||
|||
|||
|||
Bununla birlikte, okuma çubuğu sayılarını kolaylaştırmak için, her bir alternatif basamak için farklı gösterimler kullandılar. İkinci gösterim yatay ve dikey çizgilerin rolünü değiştirir. böylece 3, üç yatay çizgi ve 8 x üç yatay çizgi ile üstte dikey bir çizgiyle temsil edilir.
Yatay 8 basamaklı:
|
|
__|__
_____
_____
Daha önce de belirtildiği gibi hangi notasyonu kullanmanın kolay olduğunu bilerek, dönüşümlü olarak kullanılır ve Sun Tzu "biri dikey, on yataydır" yazdı. Yani en sağdaki rakam dikeydir ve biz oradan sırayla geçeriz.
Meydan okuma
Bu çubuklar negatif sayıları ve kesirleri temsil etmek için kullanıldı ( wikipedia makalesinde açıklandığı gibi . Bu zorluğun amacı için sadece pozitif tamsayılara odaklanacağız. Amaç basit:
Herhangi bir şekilde bir tamsayı değeri girdi olarak alan ve bu tamsayının çubuk sayısal gösterimini STDOUT'a yazdıran bir işlev veya tam program yazın (daha iyi sonuç verirse bir dosyaya da yazabilirsiniz). Bayt cinsinden en kısa kod kazanır.
Her rakam 5x5 ascii karakteriyle temsil edilecek ve 5 boşluklu iki kolla ayrılacaktır. Her basamak için kullanacağınız tam gösterim aşağıdaki gibidir:
space between two digits (two colums):
0 digit, both vertical and horizontal (five columns):
1 digit, vertical:
|
|
|
|
|
2 digit, vertical:
| |
| |
| |
| |
| |
3 digit, vertical:
|||
|||
|||
|||
|||
4 digit, vertical:
|| ||
|| ||
|| ||
|| ||
|| ||
5 digit, vertical:
|||||
|||||
|||||
|||||
|||||
6 digit, vertical:
_____
|
|
|
|
7 digit, vertical:
_____
| |
| |
| |
| |
8 digit, vertical:
_____
|||
|||
|||
|||
9 digit, vertical:
_____
|| ||
|| ||
|| ||
|| ||
1 digit, horizontal:
_____
2 digit, horizontal:
_____
_____
3 digit, horizontal:
_____
_____
_____
4 digit, horizontal:
_____
_____
_____
_____
5 digit, horizontal:
_____
_____
_____
_____
_____
6 digit, horizontal:
|
|
|
|
__|__
7 digit, horizontal:
|
|
|
__|__
_____
8 digit, horizontal:
|
|
__|__
_____
_____
9 digit, horizontal:
|
__|__
_____
_____
_____
Rakamlar yan yana yazdırılacaktır. Son basamağın sınırlayıcı kutusunun ötesindeki sondaki boşluklara izin verilmez. Son basamak (lar) ın sınırlayıcı kutusunu tamamlamak için arka boşluklar gereklidir. Çıktıyı tek bir satırsonu ile sonlandırmalısınız. İlk rakamın sınırlayıcı kutusuna ait olmayan boşluklar da yasaktır.
Standart boşluklar geçerlidir.
Örnek çıktı
İle başlayan satırlar >
girdi olarak yorumlanmalıdır.
>12
| |
| |
| |
| |
_____ | |
>8037
| _____
| | |
__|__ _____ | |
_____ _____ | |
_____ _____ | |
>950
_____ _____
|| || _____
|| || _____
|| || _____
|| || _____