diff --git a/C#/STPWithClass/Program.cs b/C#/STPWithClass/Program.cs index a3d7e65..4670b78 100644 --- a/C#/STPWithClass/Program.cs +++ b/C#/STPWithClass/Program.cs @@ -22,7 +22,7 @@ static void Main(string[] args) case "show": for (int i = 0; i < items.Count; i++) { - Console.WriteLine($"{i}:{items[i].GetIntroTxt()}円"); + Console.WriteLine($"{i}:{items[i].GetIntroTxt()}"); } break; case "buy": diff --git a/Python/STP_advance/main.py b/Python/STP_advance/main.py new file mode 100644 index 0000000..31feb49 --- /dev/null +++ b/Python/STP_advance/main.py @@ -0,0 +1,101 @@ +class Item: + def __init__(self,name,value): + self.name=name + self.value=value + self.count=0 + + def Buy(self): + self.count+=1 + + def GetAmountOfMoney(self): + return self.value*self.count + + def GetIntroTxt(self): + return f"{self.name}:{self.value}円" + +class Cart: + def __init__(self): + self.items=[] + self.item_names=[] + + def GetSum(self): + total=0 + for item in self.items: + total+=item.GetAmountOfMoney() + return total + + def AddItem(self,cmds): + if not cmds[2].isdecimal(): + return "3つ目には価格を入れてください" + if cmds[1] in self.item_names: + return "既にその名前のアイテムが存在します" + name=cmds[1] + value=int(cmds[2]) + newItem=Item(name,value) + self.item_names.append(name) + self.items.append(newItem) + return f"{value}円の{name}を登録しました" + + def CheckOut(self): + for item in self.items: + print(item.GetIntroTxt()+f"*{item.count}") + item.count=0 + return f"合計金額:{self.GetSum()}円" + + def Show(self): + if len(self.items)==0: + return "まだ何も登録していません" + ret="" + for i,item in enumerate(self.items): + ret+= f"{i}:{item.GetIntroTxt()}\n" + return ret + + def Buy(self,cmd): + targetitem=self.SearchItem(cmd[1]) + if targetitem==-1: + return "アイテムが見つかりませんでした" + targetitem.Buy() + return f"{targetitem.name}を一個購入しました" + + def SearchItem(self,cmd): + for item in self.items: + if item.name==cmd: + return item + if cmd.isdecimal(): + index=int(cmd) + if 0<=index") + cmds=cmd.split(" ") + if cmds[0]=="exit": + break + elif cmds[0]=="help": + print_help() + elif cmds[0]=="add": + print(mycart.AddItem(cmds)) + elif cmds[0]=="show": + print(mycart.Show()) + elif cmds[0]=="buy": + print(mycart.Buy(cmds)) + elif cmds[0]=="checkout": + print(mycart.CheckOut()) + else: + print("有効なコマンドを指定してください") + print("コマンド一覧はhelpで確認できます") \ No newline at end of file diff --git a/Python/STP_testcasemaker/.gitignore b/Python/STP_testcasemaker/.gitignore new file mode 100644 index 0000000..256d9e5 --- /dev/null +++ b/Python/STP_testcasemaker/.gitignore @@ -0,0 +1,3 @@ +testcase/* +answer/* +submission* \ No newline at end of file diff --git a/Python/STP_testcasemaker/how_to_make_taestcase.md b/Python/STP_testcasemaker/how_to_make_taestcase.md new file mode 100644 index 0000000..c7725dd --- /dev/null +++ b/Python/STP_testcasemaker/how_to_make_taestcase.md @@ -0,0 +1,68 @@ +# テストケースの生成方法及びテスターの使用法 + +## 要約 +- 入力は1000行 +- 最初はadd,最後二つはcheckout->exit +- add,show,checkoutがそれぞれおおよそ1割、buyがおおよそ7割 +- show,checkoutはそれぞれで連続はしない(show->checkout及びその逆はありうる) +- 入出力に使用される文字は英数字のみ +- テストケース生成してからテスターを使用すること +- 出力の行頭が#の時はコメントとして無視する +- 出力の形式は以下に記載 + +## 出力の形式 +出力が必要な命令はshowとcheckoutのみである。 +行頭に#を入れるとデバッグ用のメッセージとして扱われその行は無視される。 +### show +``` +形式: +{id}:{name} {value}yen + +例: +0:apple 500yen +1:banana 300yen +2:cucumber 200yen +: +: +``` + +- id: addされた順番(0から) +- name: 商品の名前 +- value: 価格 + +nameとvalueの間にスペースを入れ、商品ごとに改行するのを忘れずに。 + +### checkout +``` +形式: +{id}:{name} {value}yen*{count} +: +: +total:{total}yen + +例: +0:apple 500yen*0 +1:banana 300yen*1 +2:cucumber 200yen*2 +: +: +total:123456yen +``` + +- id: addされた順番(0から) +- name: 商品の名前 +- value: 価格 +- total: 合計金額 + +showに加え、各商品の現在購入している数を出力していき、最後にその合計金額を出力する。 + + +## コマンドの種類と生成方法 +- add +- buy +- show +- checkout + +1から10の乱数を生成し、1の場合add,2の場合show,3の場合checkout,4以上の場合buyを生成する。 +ただし、show,checkoutについては前の行と同じ場合それ以外が選択されるまで再抽選される。同様に998行目でcheckoutが選択された際も再抽選される。 +また1行目は必ずaddが生成される。 \ No newline at end of file diff --git a/Python/STP_testcasemaker/testcasemaker.py b/Python/STP_testcasemaker/testcasemaker.py new file mode 100644 index 0000000..0e4dc48 --- /dev/null +++ b/Python/STP_testcasemaker/testcasemaker.py @@ -0,0 +1,163 @@ +import os +import random + +class Item: + def __init__(self,name,value): + self.name=name + self.value=value + self.count=0 + + def Buy(self): + self.count+=1 + + def GetAmountOfMoney(self): + return self.value*self.count + + def GetIntroTxt(self): + return f"{self.name} {self.value}yen" + +class Cart: + def __len__(self): + return len(self.items) + def __init__(self): + self.items=[] + self.item_names=[] + + def GetSum(self): + total=0 + for item in self.items: + total+=item.GetAmountOfMoney() + return total + + def AddItem(self,cmds): + if not cmds[2].isdecimal(): + return "include the price in third argument" + if cmds[1] in self.item_names: + return "item with that name already exists" + name=cmds[1] + value=int(cmds[2]) + newItem=Item(name,value) + self.item_names.append(name) + self.items.append(newItem) + return f"added!:{name} {value}" + + def CheckOut(self): + ret="" + for i,item in enumerate(self.items): + ret+=f"{i}:{item.GetIntroTxt()}*{item.count}\n" + ret+=f"total:{self.GetSum()}yen" + for item in self.items: + item.count=0 + return ret + + def Show(self): + if len(self.items)==0: + return "item list is empty" + ret="" + for i,item in enumerate(self.items): + ret+= f"{i}:{item.GetIntroTxt()}\n" + return ret + + def Buy(self,cmd): + targetitem=self.SearchItem(cmd[1]) + if targetitem==-1: + return "item not found" + targetitem.Buy() + return f"bought one {targetitem.name}" + + def SearchItem(self,cmd): + for item in self.items: + if item.name==cmd: + return item + if cmd.isdecimal(): + index=int(cmd) + if 0<=index1 and out[0]!="#"] + inp=f2.readlines() + finp=[out[:-1] for out in inp if len(out)>1] + + sys.stdout=sys.__stdout__ + + print(len(fans),len(finp)) + + if len(fans)!=len(finp): + judge.append("WA") + continue + for fan,fin in zip(fans,finp): + if fan!=fin: + judge.append("WA") + break + else: + judge.append("AC") + + +sys.stdout=sys.__stdout__ +print(judge) + + + diff --git a/Python/STP_with_class/main.py b/Python/STP_with_class/main.py new file mode 100644 index 0000000..16b4fab --- /dev/null +++ b/Python/STP_with_class/main.py @@ -0,0 +1,52 @@ +class Item: + def __init__(self,name,value): + self.name=name + self.value=value + self.count=0 + + def Buy(self): + self.count+=1 + + def GetAmountOfMoney(self): + return self.value*self.count + + def GetIntroTxt(self): + return f"{self.name}:{self.value}円" + +def GetSum(): + total=0 + for item in items: + total+=item.GetAmountOfMoney() + return total + +def AddItem(cmds): + name=cmds[1] + value=int(cmds[2]) + newItem=Item(name,value) + items.append(newItem) + print(f"{value}円の{name}を登録しました") + +def CheckOut(): + for item in items: + print(item.GetIntroTxt()+f"*{item.count}") + item.count=0 + print(f"合計金額:{GetSum()}円") + +items=[] + +while True: + cmd=input("STP>") + cmds=cmd.split(" ") + if cmds[0]=="exit": + break + elif cmds[0]=="add": + AddItem(cmds) + elif cmds[0]=="show": + for i,item in enumerate(items): + print(f"{i}:{item.GetIntroTxt()}") + elif cmds[0]=="buy": + targetindex=int(cmds[1]) + print(f"{items[targetindex].name}を一個購入しました") + items[targetindex].Buy() + elif "checkout": + CheckOut() \ No newline at end of file diff --git a/Python/STP_without_class/main.py b/Python/STP_without_class/main.py index 05bc48c..b02c3da 100644 --- a/Python/STP_without_class/main.py +++ b/Python/STP_without_class/main.py @@ -13,18 +13,18 @@ item_names.append(name) item_values.append(value) item_counts.append(0) - print('{}円の{}を登録しました'.format(value, name)) + print(f'{value}円の{name}を登録しました') if cmds[0] == 'show': for i in range(len(item_names)): - print('{}:{}:{}円'.format(i, item_names[i], item_values[i])) + print(f'{i}:{item_names[i]}:{item_values[i]}円') if cmds[0] == 'buy': target_index = int(cmds[1]) item_counts[target_index] += 1 - print('{}を購入しました'.format(item_names[target_index])) + print(f'{item_names[target_index]}を購入しました') if cmds[0] == 'checkout': - sum = 0 + total = 0 for i in range(len(item_names)): - sum += item_values[i] * item_counts[i] - print('{} {}円×{}'.format(item_names[i], item_values[i], item_counts[i])) + total += item_values[i] * item_counts[i] + print(f'{item_names[i]} {item_values[i]}円×{item_counts[i]}') item_counts[i] = 0 - print('合計金額:{}円'.format(sum)) + print(f'合計金額:{total}円')