1

入力

プログラムへの入力は、開始スタックに表示される順序で指定された CD のリストになります (入力で最初に発生する CD がスタックの一番上にあります)。この後に空白行が続き、次に同じ CD のリストがゴールに表示される順序で表示されます。(空白の行と目標リストが続く CD のスタック)

出力

あなたのプログラムは、指定された順序でスタックをソートするために、Johnny がスタックから引き出す一連の CD を出力する必要があります。繰り返しますが、この一連の動きはできるだけ短くする必要があります

  • たとえば、スタックに CD A、B、および C がこの順序である場合 (A が一番上)、最初に B を取り出すことを選択できます。そうすると、スタックの順序が B、A、および C に変更されます。

サンプル入力 1

Eamon McGrath - Peace Maker
Joel Plaskett Emergency - Ashtray Rock
Jimmy Buffett - The Best of Jimmy Buffett
Rural Alberta Advantage - Hometowns
Chuck Mangione - Feels So Good

Rural Alberta Advantage - Hometowns                           
Joel Plaskett Emergency - Ashtray Rock
Eamon McGrath - Peace Maker
Chuck Mangione - Feels So Good
Jimmy Buffett - The Best of Jimmy Buffett

サンプル入力 1 の出力

Chuck Mangione - Feels So Good
Eamon McGrath - Peace Maker
Joel Plaskett Emergency - Ashtray Rock
Rural Alberta Advantage - Hometowns

これが私のコードです:

import random
lst=[]

while True:
     try: 
          strline = input()
          if len(strline)>0:
               lst.append(strline)
          if strline == "END":
               lst.pop()
               break
     except:
          break


#print(len(lst))  #this will print size 10  for sample input #1
x=len(lst)//2
stacklist=lst[:x]  #print(lst[:x])  the stack of CDs that is not ordered
goal=lst[x:]       #print(lst[x:])  this will print the goal

index_lst=random.randrange(len(lst)-1)
index_stacklist=random.randrange(1,(len(lst)//2))

steps=[]
while stacklist != goal:
     stacklist.insert(0,stacklist.pop(index_stacklist)) #pick a CD and put it on the top
     steps.append(stacklist.pop(index_stacklist)) #append the move to a list

print(steps) # print the steps out

なぜこれが範囲外になるのか混乱しており、最小ステップでスタックリストを目標リストにソートする方法がよくわかりません。入力に従ってアルファベット順ではなく、CD を優先してソートされるためです。

4

0 に答える 0