1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(Paiza)レベルアップ問題集解いてみた(クラス・構造体メニュー)

Last updated at Posted at 2021-04-24

#TL;DL
paizaの「問題集」をやっていたら、Pythonの解答サンプルが用意されていないものがおおく、また作成した解答も保存されないため、備忘として自分が作成したスクリプトを保存していく。

#静的メンバ
###STEP: 1 クラスの作成


class employee:
    members = []
    def __init__(self):
        pass
        
    def make(self, number, name):
        member = {
            'number':number
            ,'name':name
        }
        
        self.members.append(member)
    
    def getnum(self,number):
        return self.members[number-1]['number']
    
    def getname(self,number):
        return self.members[number-1]['name']
    

n = int(input())
empobj = employee()

for _ in range(n):
    inp = input().split()
    
    if inp[0] == 'make':
        empobj.make(inp[1],inp[2])
    elif inp[0] == 'getnum':
        print(empobj.getnum(int(inp[1])))
    elif inp[0] == 'getname':
        print(empobj.getname(int(inp[1])))

###STEP: 2 コンストラクタ

class employee:
    def __init__(self,number,name):
        self.number = number
        self.name = name
    
    def getnum(self):
        return self.number
        
    def getname(self):
        return self.name

members = [employee(0,'init')]
n = int(input())

for _ in range(n):
    array = input().split()
    
    if array[0] == 'make':
        members.append(employee(array[1], array[2]))
    elif array[0] == 'getnum':
        print(members[int(array[1])].getnum())
    elif array[0] == 'getname':
        print(members[int(array[1])].getname())

###STEP: 3 クラスのメンバの更新

class employee:
    def __init__(self,number,name):
        self.number = number
        self.name = name
        
    def getnum(self):
        return self.number
    
    def getname(self):
        return self.name
        
    def change_num(self,new_number):
        self.number = new_number
    
    def change_name(self,new_name):
        self.name = new_name

members = [employee(0,'init')]

n = int(input())

for _ in range(n):
    inputs = input().split()
    
    if inputs[0] == 'make':
        _number = int(inputs[1])
        _name = inputs[2]
        members.append(employee(_number,_name))
        
    elif inputs[0] == 'getnum':
        _number = int(inputs[1])
        _member = members[_number]
        print(_member.getnum())
        
    elif inputs[0] == 'getname':
        _number = int(inputs[1])
        _member = members[_number]
        print(_member.getname())
        
    elif inputs[0] == 'change_num':
        _number = int(inputs[1])
        _new_number = inputs[2]
        _member = members[_number]
        _member.change_num(_new_number)
    
    elif inputs[0] == 'change_name':
        _number = int(inputs[1])
        _new_name = inputs[2]
        _member = members[_number]
        _member.change_name(_new_name)

###STEP: 4 クラスの継承

class Minurs:
    def __init__(self):
        self.total = 0
        self.alcohol_ordered = False
    
    def order_food(self,price):
        self.total += price
    
    def order_softdrink(self,price):
        self.total += price
        
    def order_alcohol(self,price):
        pass
        
    def print_total(self):
        print(self.total)
        
class Adults(Minurs):
    def order_alcohol(self,price):
        self.total += price
        self.alcohol_ordered = True
  
    def order_food(self,price):
        if self.alcohol_ordered:
            self.total += price -200
        else:
            self.total += price

# Start
counts,orders = map(int, input().split())

customers = [] 
for _ in range(counts):
    old = int(input())
    if old < 20:
        customers.append(Minurs())
    else:
        customers.append(Adults())

for _ in range(orders):
    idx, order_ptn, price = input().split()
    idx = int(idx)
    price = int(price)
    
    cust = customers[idx - 1]
    if order_ptn == 'food':
        cust.order_food(price)
    elif order_ptn == 'softdrink':
        cust.order_softdrink(price)
    elif order_ptn == 'alcohol':
        cust.order_alcohol(price)

for customer in customers:
    customer.print_total()

###STEP: 5 デフォルト引数

class Minurs:
    def __init__(self):
        self.total = 0
        self.alcohol_ordered = False
    
    def calc_order(self,order_ptn,price=500):
        if order_ptn == 'alcohol' or order_ptn == '0':
            pass
        else:
            self.total += price
            
    def print_total(self):
        print(self.total)
        
class Adults(Minurs):
    def calc_order(self,order_ptn,price=500):
        if order_ptn == '0' or order_ptn == 'alcohol':
            self.total += price
            self.alcohol_ordered = True
        elif order_ptn == 'food' and self.alcohol_ordered == True:
            self.total += price -200
        else:
            self.total += price
            
# Start
counts,orders = map(int, input().split())

customers = [] 
for _ in range(counts):
    old = int(input())
    if old < 20:
        customers.append(Minurs())
    else:
        customers.append(Adults())

for _ in range(orders):
    recept = list(input().split())
    
    idx = int(recept[0])
    order_ptn = recept[1]
    
    cust = customers[idx - 1]
    
    if recept[1] == '0':
        cust.calc_order(order_ptn)
    else:
        price = int(recept[2])
        cust.calc_order(order_ptn, price)

for customer in customers:
    customer.print_total()

###Final: 静的メンバ

class Minurs:
    def __init__(self):
        self.total = 0
        self.alcohol_ordered = False

    def calc_order(self,order_ptn,price=500):
        if order_ptn == 'alcohol' or order_ptn == '0':
            pass
        else:
            self.total += price
        
    def print_total(self):
        print(self.total)


class Adults(Minurs):
    def calc_order(self,order_ptn,price=500):
        if order_ptn == '0' or order_ptn == 'alcohol':
            self.total += price
            self.alcohol_ordered = True
        elif order_ptn == 'food' and self.alcohol_ordered == True:
            self.total += price -200
        else:
            self.total += price

class Closed:
    static_closed = 0
        

# Start
counts,orders = map(int, input().split())

customers = [] 

for _ in range(counts):
    old = int(input())
    if old < 20:
        customers.append(Minurs())
    else:
        customers.append(Adults())

for _ in range(orders):
    recept = list(input().split())

    idx = int(recept[0])
    order_ptn = recept[1]

    cust = customers[idx - 1]

    if recept[1] == '0':
        cust.calc_order(order_ptn)
    elif recept[1] == 'A':
        cust.print_total()
        Closed.static_closed += 1
        
    else:
        price = int(recept[2])
        cust.calc_order(order_ptn, price)

print(Closed.static_closed)

#ロボットの暴走
###STEP: 1 出口のない迷路

branches,choices,start = map(int,input().split())

roots = [[0]]
for _ in range(branches):
    roots.append(input().split())

recent = roots[int(start)]
answer = recent[0]

for _ in range(choices):
    choice = int(input())
    recent = roots[int(recent[choice])]
    answer += recent[0]

print(answer)

###STEP: 2 RPG

class Hero:
    def __init__(self,l,h,a,d,s,c,f):
        self.level = l
        self.hp = h
        self.atk = a
        self.defe = d
        self.speed = s
        self.wise = c
        self.fortune = f
        
    def levelup(self,h,a,d,s,c,f):
        self.level += 1
        self.hp += int(h)
        self.atk += int(a)
        self.defe += int(d)
        self.speed += int(s)
        self.wise += int(c)
        self.fortune += int(f)
        
    def muscle_training(self,h, a):
        self.hp += int(h)
        self.atk += int(a)
        
    def running(self,d, s):
        self.defe += int(d)
        self.speed += int(s)
    
    def study(self,c):
        self.wise += int(c)
        
    def pray(self,f):
        self.fortune += int(f)
        
    def print_status(self):
        print(f'{self.level} {self.hp} {self.atk} {self.defe} {self.speed} {self.wise} {self.fortune}')
        
heros =[]
entry,events = map(int, input().split())

#勇者初期データ登録
for _ in range(entry):
    l,h,a,d,s,c,f = list(map(int,input().split()))
    heros.append(Hero(l,h,a,d,s,c,f))
    
#各種イベント
for _ in range(events):
    event = input().split()
    hero_number = int(event[0])
    event_name = event[1]
    
    hero = heros[hero_number-1]
    
    if event_name == 'levelup':
        hero.levelup(event[2],event[3],event[4],event[5],event[6],event[7])
    elif event_name == 'muscle_training':
        hero.muscle_training(event[2],event[3])
    elif event_name == 'running':
        hero.running(event[2],event[3])
    elif event_name == 'study':
        hero.study(event[2])
    elif event_name == 'pray':
        hero.pray(event[2])

for x in heros:
    x.print_status()

###STEP: 3 格闘ゲーム

###STEP: 4 スーパースーパースーパーカー

###Final: ロボットの暴走

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?