Arka fon
Dört yaşındaki çocuğumun hahamından aldığı bir oyuna dayanarak.
"Amaç", harfleri belirli bir sırada "bulmak" tır aecdb. Size, örneğin bir kart yığını verilir daceb. Yığında, döngüsel olarak da olsa, verilen sırayla arama yapabilirsiniz. İhtiyacınız olan bir mektupla karşılaştığınızda, bunu yığının dışına çıkarırsınız.
Amaç
Bir sipariş ve bir yığın verildiğinde (birbirinin kopyasız permütasyonları), oyunu oynarken gördüğünüz üst yığın harflerinin sırasını (tümü yazdırılabilir ASCII'dir) bulun.
Adım adım örnek
aecdbYığın verildiğinde siparişi bulmamız gerekiyor daceb:
Yığının Üst d: Biz (arıyoruz Ne a), biz dizisine eklemek için: dve yığını almak döndürmek: acebd.
Yığının üstü a: Evet! bu yüzden diziye ekleriz: dave yığından: kaldırırız cebd.
Yığının Üst c: Biz (arıyoruz Ne e), biz dizisine eklemek için: dacve yığını almak döndürmek: ebdc.
Yığının üstü e: Evet! bu yüzden diziye ekleriz: daceve yığından: kaldırırız bdc.
Yığının Üst b: Biz (arıyoruz Ne c), biz dizisine eklemek için: dacebve yığını almak döndürmek: dcb.
Yığının Üst d: Biz (arıyoruz Ne c), biz dizisine eklemek için: dacebdve yığını almak döndürmek: cbd.
Yığının üstü c: Evet! bu yüzden diziye ekleriz: dacebdcve yığından: kaldırırız bd.
Yığının Üst b: Biz (arıyoruz Ne d), biz dizisine eklemek için: dacebdcbve yığını almak döndürmek: db.
Yığının üstü d: Evet! bu yüzden diziye ekleriz: dacebdcbdve yığından: kaldırırız b.
Yığının üstü b: Evet! bu yüzden diziye ekleriz: dacebdcbdbve yığından: kaldırırız .
Ve işimiz bitti. Sonuç dacebdcbdb.
Referans uygulaması
def letters(target, stack):
string = ''
while stack:
string += stack[0]
if stack[0] == target[0]:
stack.pop(0)
target = target[1:]
else:
stack.append(stack.pop(0))
return string
print letters('aecdb', list('daceb'))
Test senaryoları
try, yrt→yrtyry
1234, 4321→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ, RUAHYKCLQZXEMPBWGDIOTVJNSF→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?, ?→?
a, a →a a
abcd, abcd→abcd
99özellikle?