Inspirasi
Pertanyaan ini terinspirasi oleh kartu Throne Room dan King's Court dari permainan kartu deck-building yang populer, Dominion .
Sebagai bagian dari giliran seseorang, seseorang memainkan serangkaian tindakan. Dua tindakan khusus ini menyebabkan tindakan yang dimainkan berikutnya mengulangi dua atau tiga kali *. Tindakan "umum" lainnya menyebabkan efek game tertentu, tetapi kami tidak akan tertarik dengan rinciannya, cukup memberi label dengan huruf.
Kasus yang menarik adalah ketika Ruang Singgasana atau Pengadilan Raja mempengaruhi Ruang Singgasana lain dari Pengadilan Raja, menyebabkan efek penggandaan atau tiga kali lipat itu sendiri menjadi dua kali lipat atau tiga kali lipat. Rantai panjang Ruang Singgasana, Pengadilan Raja, dan aksi berlipat ganda dapat membingungkan para pemain Dominion yang berpengalaman sekalipun.
Tujuan Anda adalah menulis kode yang menyelesaikan rantai ini dengan benar, menggunakan sesedikit mungkin byte. Saya akan menjelaskan persyaratan program sebelum menjelaskan bagaimana rantai diselesaikan dalam aturan Dominion.
* Secara teknis, Anda memilih tindakan yang terpengaruh sebagai bagian dari penyelesaian Throne Room atau King's Court, tetapi pandangan ini lebih bersih untuk tantangan ini.
Persyaratan Program
Tulis program atau nama fungsinya . Itu harus mengambil dalam rantai tindakan yang dimainkan (STDIN atau fungsi input), dan output atau mencetak rantai tindakan yang dihasilkan dari efek penggandaan dan tiga kali lipat. Bytes paling sedikit menang.
Memasukkan
String yang mewakili urutan aksi yang dimainkan. Tindakan umum diwakili oleh huruf kapital A
melalui Z
. Ruang singgasana aksi ganda yang diwakili oleh karakter 2
, dan aksi tiga kali lipat King's Court oleh 3
,
Jumlah karakter (tindakan) akan antara 1 dan 30, inklusif. Anda mungkin memiliki input yang diakhiri di baris baru jika diinginkan.
Input contoh: WA23G3GA
Keluaran
Sederetan huruf kapital A
untuk Z
. Ini harus menjadi urutan tindakan umum yang dihasilkan dari menyelesaikan efek penggandaan dan tiga kali lipat, dalam urutan daripada yang terjadi.
Anda mungkin memiliki output di baris baru jika Anda mau. Seharusnya tidak ada karakter tambahan.
Contoh output: WAGGGGGGAAA
.
Cara menggandakan dan tiga kali lipat bekerja di Dominion
Di sini, saya akan membahas bagaimana rantai Kamar Tahta ( 2
's) dan Pengadilan Raja ( 3
' s) bekerja sesuai aturan Dominion.
Setelah Anda memainkan 2
, tindakan selanjutnya yang harus diselesaikan terjadi dua kali. Jadi, jika Anda pertama kali bermain 2
, maka A
, Anda mendapatkan A
terjadi dua kali.
2A -> AA
Demikian pula,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Perhatikan dalam contoh terakhir bahwa final 2
tidak memiliki dua kali lipat, sehingga tidak berpengaruh.
Hal yang menarik terjadi ketika efek dua kali lipat atau tiga kali lipat sendiri berlipat atau tiga kali lipat. Sebagai contoh,
22AB -> AABB
Pertama, kamu bermain 2
. Kemudian, Anda memainkan yang lain 2
, yang dua kali lipat dari sebelumnya 2
. Akibatnya, dua tindakan selanjutnya menjadi dua kali lipat. Pertama, dua salinan A
tekad. Kemudian, salinan B
tekad.
Catatan yang A
tidak empat kali lipat: setelah salinan pertama dari 2
tindakan pada yang pertama A
, salinan berikutnya bertindak pada tindakan yang tidak terselesaikan berikutnya, yaitu B
. Tanpa itu B
, kita punya
22A -> AA
di mana salinan kedua 2
sedang menunggu tindakan berikutnya untuk menggandakan, tetapi tidak ada tindakan datang.
Akhirnya, mari kita lihat contoh yang kompleks.
223BCDE -> BBBCCCDDE
Seperti sebelumnya, yang pertama 2
menyebabkan yang kedua 2
menjadi dua kali lipat. Jadi, dua tindakan selanjutnya akan digandakan. Salinan pertama 2
menggandakan tindakan berikutnya 3
, yang harus diselesaikan sepenuhnya sebelum menyelesaikan salinan berikutnya 2
. Salinan 3
tiga kali lipat pertama B
, dan salinan kedua lipat tiga C
. Sekarang, salinan kedua yang masih menunggu akan 2
menggandakan aksi selanjutnya yang masih belum terselesaikan, yaitu D
. Setelah ini, tidak ada efek pengganda atau tiga kali lipat yang tersisa, dan tindakan terakhir E
terjadi begitu saja.
Uji kasus
Ini diberikan sebagai (input,output)
.
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1
di bawah tumpukan untuk memperlakukan tindakan yang tidak dikalikan sama dengan yang dikalikan. Bisakah Anda menjelaskan lebih lanjut tentang bagaimana Anda menyulap berbagai tumpukan? Secara khusus, apa yang \ lakukan untuk "membawa tumpukan rep ke atas"?Javascript -
162152 byteDiperkecil:
Diperluas:
Saya menduga bahasa golf berbasis stack akan mematikan yang satu ini, karena pada dasarnya ini adalah latihan dalam penumpukan fungsi. : P
Output Sampel
sumber
2/3
kasus bersama?x
secara langsung tanpa terlebih dahulu menyalinnya ke variabel yangb
dicakup dalam lambda bagian dalam, tetapi Firefox tidak mengevaluasi kondisi loop dengan benar. Secara khusus,x
menjadi negatif dan browser hang. Coba ganti, b = x; b--;
dengan; x--;
dan jalankan inputA2A323AB2CD2D2E3ABC
. Jika ada yang membaca ini bisa mencari tahu mengapa, ...C,
115111 byteMenggunakan input / output standar.
Disimpan 4 dengan menggunakan
memset
dan membuat tumpukan pergi ke arah lain.Tidak disatukan
sumber
Python (84)
S
adalah tumpukan pengganda (atas jika depan). Ini diinisialisasi dengan cukup1
untuk menangani tindakan yang tidak disalahgunakan.Bergantung pada apakah tindakan saat
c
ini generik atau tidak, kami menambahkan hasil yang dikalikan ke outputR
atau ke tumpukan penggandaS
.Semuanya direpresentasikan sebagai string daripada daftar karakter. Karena string tidak dapat diubah, sayangnya kami tidak dapat menggunakan
pop
atau menetapkan elemen pada mereka.sumber