İlham
Bu soru, popüler güverte binası kart oyunu Dominion'dan Throne Room ve King's Court kartlarından esinlenmiştir .

Sırasının bir parçası olarak, kişi bir dizi eylem oynar. Bu iki özel eylem, bir sonraki oynatılan eylemin iki veya üç kez tekrarlanmasını sağlar *. Diğer "genel" eylemler belirli oyun efektlerine neden olur, ancak ayrıntılarla ilgilenmeyeceğiz, sadece harflerle etiketleyeceğiz.
İlginç durum, bir Taht Odası veya Kral Mahkemesi'nin, Kral Mahkemesi'nin başka bir Taht Odası'nı etkilemesi ve bunun iki katına veya üç katına çıkmasının etkisinin iki katına veya üç katına çıkmasıdır. Taht Odaları, Kral Mahkemeleri ve çoğaltılmış eylemlerin uzun zincirleri, deneyimli Dominion oyuncularını bile karıştırabilir.
Amacınız, mümkün olduğunca az bayt kullanarak bu zincirleri doğru bir şekilde çözen kod yazmaktır. Zincirlerin Dominion kurallarında nasıl çözüldüğünü açıklamadan önce program gereksinimlerini açıklayacağım.
* Teknik olarak, Taht Odası veya Kral Mahkemesi'nin çözümünün bir parçası olarak etkilenen eylemi seçersiniz, ancak bu görüş bu meydan okuma için daha temizdir.
Program Gereksinimleri
Bir program veya adlandırılmış işlev yazın . Oynanan eylemler zincirini (STDIN veya fonksiyon girişi) almalı ve ortaya çıkan eylem zincirini ikiye katlama ve üçleme etkilerinden çıktı almalı veya yazdırmalıdır. En az bayt kazanır.
Giriş
Oynanan eylemlerin sırasını temsil eden bir dize. Genel eylemler Aaracılığıyla büyük harfler ile temsil edilir Z. Taht Odası karakteri ile temsil edilir özel katlama eylem 2ve üç kat eylem tarafından Kral Mahkemesi 3,
Karakter sayısı (eylemler) 1 ile 30 arasında (dahil) olacaktır. İsterseniz giriş satırını yeni satırda görebilirsiniz.
Örnek girdi: WA23G3GA
Çıktı
Büyük harflerle ve bir dizi Aiçin Z. Bu, ikiye katlama ve üçe katlama etkilerinin gerçekleştiklerinden sırayla çözülmesinden kaynaklanan genel eylem dizisi olmalıdır.
İsterseniz çıktının yeni satırda bitmesini sağlayabilirsiniz. Aksi takdirde ek karakter olmamalıdır.
Örnek çıkışı: WAGGGGGGAAA.
Dominion'da iki kat ve üç kat nasıl çalışır
Burada, Taht Odaları 2ve Kral Mahkemelerinin zincirlerinin 3Dominion kurallarına göre nasıl çalışacağını inceleyeceğim.
A oynadıktan sonra 2, çözülecek bir sonraki eylem iki kez gerçekleşir. İlk oynamak Yani, eğer 2, o zaman A, sen olsun Aiki kez oluyor.
2A -> AA
Benzer şekilde,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Son örnekte, finalin 2iki katına çıkacak bir şey olmadığını, bu yüzden bir etkisi olmadığını unutmayın.
İlginç olan şey, ikiye katlama veya üçe katlama etkileri kendileri iki veya üçe katlandığında olur. Örneğin,
22AB -> AABB
İlk önce siz oynuyorsunuz 2. Sonra, bir 2öncekinden iki katına çıkan bir tane oynarsınız 2. Sonuç olarak, sonraki iki eylem iki katına çıkar. İlk olarak, çözümün iki kopyası A. Sonra, Bçözüm kopyaları .
Not Ailk kopyasını sonra: dört katına değildir 2ilk on eylemleri A, sonraki kopyasıdır sonraki çözülmemiş eylem, hareket eden B. Olmadan B, biz olurdu
22A -> AA
Burada ikinci kopyası bir 2sonraki işlemin iki katına çıkmasını bekliyor, ancak herhangi bir işlem yapılmıyor.
Son olarak, karmaşık bir örneğe bakalım.
223BCDE -> BBBCCCDDE
Daha önce olduğu gibi, birincisi 2ikincisinin 2ikiye katlanmasına neden olur . Böylece, sonraki iki eylem ikiye katlanacak. İlk kopyası , sonraki kopyasını çözmeden önce tamamen çözülmesi gereken bir 2sonraki işlemi iki katına çıkarır . İlk kopya üçe , ikinci kopya üçe . Şimdi, hala bekleyen ikinci kopyası , bir sonraki hala çözülmemiş eylemi ikiye katlıyor . Bundan sonra iki katına çıkma veya üçe katlama etkisi kalmaz ve son eylem basitçe gerçekleşir.323BC2DE
Test senaryoları
Bunlar olarak verilmiştir (input,output).
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1Çoğaltılmamış eylemleri çoğaltılmış eylemlerle aynı şekilde işlemek için yığının altına itme hilenizi seviyorum . Çeşitli yığınları nasıl dengeleyeceğiniz hakkında daha fazla bilgi verebilir misiniz? Özellikle, \ "rep yığınını en üste getirmek" ne yapar?