Netlik için yeni satırlar eklendi:
(a(:^)*(!()):#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>(0)(!()){:^}(1)(){:^}(2)(:*){:^}(
3)(::**){:^}(4)(:*:*){:^}(5)(::*:**){:^}(6)(:*::**){:^}(7)(::*::***){:^}(8)(:*:*:*){:^}(9)(
::**::**){:^}R^^S):^
Kendime, tipik olarak bir Düşük Yük cevabı gibi, yığının tepesinden ziyade STDIN'den okuması gereken kısıtlamayı verdim. Ayrıca, kodun çoğunu oluşturan uygun, ondalık girdi kullandım.
Açıklama:
Programı bir sarmalayıcıya sarıyorum: (a(:^)*
ve ):^
. Bu, sarma sarmalayıcısının içindeki tüm kodun, programın kaynak kodunu yığının altında olacağı anlamına gelir.
Basamakları normal bir Kilise rakamına dönüştürmek için, 10 ile çarpmak ve bu rakamı eklemek için her basamağı kodla değiştirme tekniğini kullanıyorum:
0 -> (::*:**:*)*
1 -> (::*:**:*)*(:)~*(*)*
2 -> (::*:**:*)*(::)~*(**)*
3 -> (::*:**:*)*(:::)~*(***)*
Burada çok fazla tekrar var, bu yüzden onu yığının en üstünden bir Kilise rakamı alacak ve "rakam dizesini" oluşturmak için kullanacağız bir alt programa paketleyelim:
:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*
Hızlı bir şekilde erişilebilir olması için bunu yeni bir ortama koydum:
#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>
Şimdi için yedek kod oluşturabilirim R
. R
STDIN'den bir dizeyi Betaload koduyla değiştirmek için bir arama tablosu oluşturmak üzere yığının üst öğelerini kullanır. Şöyle çalışır:
()
(0)(code for 0)
(1)(code for 1)
(2)(code for 2)
...
R
Bununla birlikte, kod segmentlerini oluşturmak için az önce yaptığımız alt programı kullanabiliriz:
(0)(!()){:^}
(1)(){:^}
(2)(:*){:^}
(3)(::**){:^}
...
Ne zaman R
çalıştırılır, bu yapı bir kilise rakamı yukarı alt programların bir dizi girdi değiştirecek. Bu alt program yürütüldüğünde, yığındaki bir sonraki öğede (daha önce yerleştirilmiş olan 0) Kilise numarasını oluşturur. Bu R^
, yığındaki en yüksek değerin Kilise sayısı olacağı anlamına gelir . Daha sonra ^
cevabı almak için kilisenin rakamını yığındaki son elemana (programın kaynak kodu) uygulamak için bir kez daha.
Eğlenceli gerçek: Birkaç aydır bu başvuru için MD aldım. Bir soruyu yanlış anladıktan sonra sakladım (artık bulamıyorum). Buraya göndermek için Geri Dönüşüm Kutusu'ndan kazmak zorunda kaldım.