Mark My Mail yarışmasındaki yardımınız sayesinde , PPCG-Post tüm parsellerini oluşturulan barkodlarla damgaladı!
Şimdi, onları çözmenin zamanı geldi.
Bu meydan okumada, programınız, My My Mark (Mücadeleyi İşaretle) mücadelesinden oluşturulan bir barkod verildiğinde kodunu çözer ve şifreli tamsayıyı döndürür.
Ama dikkat et! Barkod baş aşağı olabilir ...
4 durumlu barkodlar
Kodlama zorluğunu kaçırmanız durumunda, ne tür bir barkoddan bahsettiğimizi bilmeniz gerekir. 4 durumlu bir barkod, her biri bir temel 4 tamsayısını temsil eden, dört olası durumu olan bir çubuk satırıdır:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
ASCII'de oluşturulan barkodlar, |
çubuğun bir bölümünü temsil etmek için pipe ( ) karakterini ve boş bir bölümü temsil etmek için bir boşluk ( ) kullanarak üç satır metin alacaktır . Her çubuk arasında tek bir boşluk olacaktır. Örnek bir barkod şöyle görünebilir:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Bir barkodu tekrar kodladığı tamsayıya dönüştürmek için, her bir çubuğu ilgili baz-4 rakamıyla eşleştirin, bunları birleştirin ve ondalık değerine dönüştürün.
Her barkod, ters çevrildiğinde farklı bir barkodu da göstereceğinden, oryantasyonun hesaplanabilmesi için bir start / stop dizisi uygularız. Bu zorluğun amacı için, Avustralya Post tarafından belirtilen start / stop dizisini kullanacağız: her barkod bir 1 0
diziyle başlar ve biter .
Meydan okuma
Göreviniz, bir ASCII 4 durumlu barkod verildiğinde, onu ayrıştırmak ve kodladığı tamsayıyı geri döndürmek - esasen Mark My Mail'in tersidir .
Ama bir şeyleri canlandırmak için bir av var - barkod baş aşağı verilebilir. Gerçek dünyada olduğu gibi , başlat / durdur dizisini kullanarak doğru yönlendirmeyi belirlemek için barkod okuyucusuna (programınız) bırakılacaktır .
Örnek:
Aşağıdaki barkod verildi:
| | | | | | | | | | | | | | | | | | | |
Biz açıkça basamak ilk ve son çiftleri olduğunu görebilirsiniz 0, 2
değil 1, 0
. Bu, barkodun baş aşağı olduğu anlamına gelir; bu nedenle doğru yönlendirmeyi elde etmek için 180 derece döndürmemiz gerekir (her bir çubuğu çevirmek değil):
| | | | | | | | | | | | | | | | | | | |
Şimdi kod çözmeye başlayabiliriz. Her çubuğu, verileri kodlamadıkları için start / stop sekanslarını görmezden gelen karşılık gelen base-4 rakamıyla eşleriz.
| | | | | | | | | | | | | | | | | | | | - - 2 1 0 3 0 2 3 - -
Bunu base-4 tamsayısına birleştirip 2103023
, daha sonra 9419
nihai sonucu elde etmek için ondalık temsiline dönüştürürüz .
kurallar
- Girdi her zaman, yukarıda belirtilen ASCII'de açıklanan, başlatılmış / durdurulan dizilimde geçerli olan 4-durumlu bir barkod olacaktır.
- Hangi formatı golf oynamaya uygun olursa olsun, sondaki boşlukları veya soyulmuş çizgileri ve sondaki yeni hattı isteyebilirsiniz.
- Doğru yönde olabilir veya olmayabilir - programınız başlat / durdur dizisini kullanarak baş aşağı okunup okunmayacağını belirlemelidir.
- Temel 4 tamsayısında baştaki sıfır basamakları kodlamaz.
- Girdiyi bir satır listesi veya yeni satırlı bir dize olarak alabilirsiniz.
- Çıktı, dilinizin standart tamsayı tabanında, barkod tarafından kodlanan verileri temsil eden bir tam sayı olmalıdır.
- Posta pulları küçük olduğundan ve bunlara çok az kod sığabileceğinden, kodunuzun mümkün olduğu kadar kısa olması gerekir: bu bir kod golf - yani en kısa program (bayt cinsinden) kazanır!
Test Kılıfları
| | | | | | | | | | | | | |
= 4096 (çevrilmiş)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 (çevrilmiş)
| | | | | | | | | | | | | | | | | | | |
= 9419 (çevrilmiş)
| | | | | | | | | | | | | | | | | | |
= 990 (çevrilmemiş)
| | | | | | | | | | | | | | | | | | |
= 12345 (çevrilmemiş)
[String]
, [{#Char}]
, [{Char}]
, [[Char]]
?, Verilen bu String
eşdeğerdir{#Char}