Arka fon
Bu zorluk, aşağıdaki diyagramı yayınlayan bu web sitesinden esinlenmiştir :
Bu diyagram bize 250'nin altındaki en uzun Romen Rakamı ifadesinin 188 rakamı olduğunu ve 9 rakamı ifade etmesini gerektirir.
Meydan okuma
En Roma rakamları ifade etmek için kullanılan standart semboller aşağıdaki gibidir: { I
, V
, X
, L
, C
, D
, M
}, karakterlerin nümerik değerlerdir M
= 1000, D
= 500, C
= 100, L
= 50, X
= 10, V
= 5, I
1 =.
Bu meydan okumada, hedefiniz, pozitif bir tamsayı n verildiğinde , standart sembollerin n'i birleştirerek oluşturulabilecek geçerli Romen Rakamı temsillerinin sayısını hesaplamaktır .
O zaman, programınız bu hesaplamanın sonucunu çıkarmalıdır!
Girdi : Pozitif bir tamsayı n .
Çıktı : n uzunluğundaki geçerli romen rakamı ifadelerinin sayısı .
Romen Rakam İfadeleri için Kurallar
Romen Rakamları başlangıçta sadece "katkı maddesi" eşleşmesine sahipti, yani rakamlar her zaman azalan sırada yazılmıştır ve tüm sayıların değerlerinin toplamı sayının değeridir.
Daha sonra, çıkarıcı eşleştirme, daha küçük olanı daha büyük olandan çıkarmak için daha büyük bir rakamın önüne daha büyük bir rakam yerleştirme kullanımı, Roma Rakamı ifadelerini kısaltmak için yaygın hale geldi. Çıkartıcı çiftleri aşağıdaki geçersiz ifade gibi zincirli olamaz: IXL
.
Aşağıdakiler, toplayıcı ve çıkarıcı eşleştirme için günümüz kurallarıdır.
- Çıkarma çiftinin kısmen önde gelen rakamı olarak yalnızca bir I, X ve C kullanılabilir.
- Çıkarma çiftinde sadece V veya X'den önce yerleştirilebilirim.
- X sadece bir çıkarma çiftinde L veya C'den önce yerleştirilebilir.
- C sadece bir çıkarma çiftinde D veya M'den önce yerleştirilebilir.
- Çıkarma çiftleri dışında, sayılar azalan sırada olmalıdır (yani, her çıkarıcı çiftin baştaki sayısını bırakırsanız, sayılar azalan sırada olacaktır).
- M, C ve X daha küçük mezheplerle eşitlenemez veya aşılamaz.
- D, L ve V'nin her biri yalnızca bir kez görünebilir.
- Sadece M 4 veya daha fazla kez tekrarlanabilir.
Diğer Notlar
Biz kullanarak olmayacak çubuk notasyonu; bunun yerine, herhangi bir sayıyı ifade etmek için daha fazla M ekleyeceğiz .
Bunlar sadece bizim romen rakamları için izleyeceğini kurallar. Bu, bizim gibi garip ifadelerin
IVI
de sistemimizde geçerli sayılacağı anlamına gelir .Ayrıca , n uzunluğunda ifadeleri olan sayıların sayısını saymadığımızı da unutmayın , çünkü bazı sayılar birden fazla ifadeye sahiptir. Bunun yerine, yalnızca geçerli ifadelerin sayısını sayıyoruz.
Test Durumları
1
→ 7
2
→ 31
3
→ 105
Yukarıdakileri elle kontrol ettim, bu yüzden lütfen test senaryolarını iki kez kontrol ettiğinizden emin olun ve mümkünse daha fazlasını ekleyin!
Kazanma Kriterleri
Bu bir kod-golf meydan okuma, bu yüzden eğlenin! Sadece 1'den 9'a kadar en az girdi işleyebilen çözümleri kabul edeceğim. Artık bonus!
Düzenle
Yorumcular tarafından istendiği gibi, aşağıda veya bu macun bağlantısında n = 3 için saydığım 105 kombinasyon
III IVI IXI IXV IXX VII XII XIV XIX XVI XXI XXV XXX XLI XLV XLX XCI XCV XCX XCL XCC LII LIV LIX LVI LXI LXV LXX CII CIV CIX CVI CXI CXV CXX CXL CXC CLI CLV CLX CCI CCV CCV CDL CCD CD CMI CMV CMX CML CMC CMD CMM DII DIV DIX DVI DXI DXV DXX DXL DXC DLI DLV DLX DCI DCV DCX DCL DCC MII MIV MIX MVI MXI MXV MXX MXL MXC MLI MLV MLX MCI MCV MCX MCL MCC MCD MCM MDC MDL MDV MDL MMX MML MMC MMD MMM
Düzenleme 2:
Sonuçlarınızı kontrol etmek için Jonathan Allan'ın izniyle aşağıdaki golf dışı kodu kullanın .
Düzenleme 3:
Bu meydan okumadaki tüm hatalar için özür dilerim. Bir dahaki sefere daha iyi bir iş yaptığımdan emin olacağım!