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
aecdb
Yığın verildiğinde siparişi bulmamız gerekiyor daceb
:
Yığının Üst d
: Biz (arıyoruz Ne a
), biz dizisine eklemek için: d
ve yığını almak döndürmek: acebd
.
Yığının üstü a
: Evet! bu yüzden diziye ekleriz: da
ve yığından: kaldırırız cebd
.
Yığının Üst c
: Biz (arıyoruz Ne e
), biz dizisine eklemek için: dac
ve yığını almak döndürmek: ebdc
.
Yığının üstü e
: Evet! bu yüzden diziye ekleriz: dace
ve yığından: kaldırırız bdc
.
Yığının Üst b
: Biz (arıyoruz Ne c
), biz dizisine eklemek için: daceb
ve yığını almak döndürmek: dcb
.
Yığının Üst d
: Biz (arıyoruz Ne c
), biz dizisine eklemek için: dacebd
ve yığını almak döndürmek: cbd
.
Yığının üstü c
: Evet! bu yüzden diziye ekleriz: dacebdc
ve yığından: kaldırırız bd
.
Yığının Üst b
: Biz (arıyoruz Ne d
), biz dizisine eklemek için: dacebdcb
ve yığını almak döndürmek: db
.
Yığının üstü d
: Evet! bu yüzden diziye ekleriz: dacebdcbd
ve yığından: kaldırırız b
.
Yığının üstü b
: Evet! bu yüzden diziye ekleriz: dacebdcbdb
ve 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?