Created
July 25, 2024 15:31
-
-
Save gouf/e4b1e7f4de46440073af16de985c9584 to your computer and use it in GitHub Desktop.
Paiza 問題集「STEP: 3 クラスのメンバの更新」 : https://paiza.jp/works/mondai/class_primer/class_primer__change_member/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Employee | |
attr_accessor :number, :name | |
attr_reader :id | |
def initialize(id:, number:, name:) | |
@id = id.to_i | |
@number = number.to_i | |
@name = name.to_s | |
end | |
end | |
class EmployeeRecorder | |
attr_reader :employees | |
def initialize | |
@employees = [] | |
end | |
def make(number, name) | |
@employees << Employee.new(id: @employees.size.succ, number:, name:) | |
nil | |
end | |
def getnum(index) | |
@employees.each.with_index(1) do |employee, i| | |
return employee.number if index.to_i.eql?(i) | |
end | |
end | |
def getname(index) | |
@employees.each.with_index(1) do |employee, i| | |
return employee.name if index.to_i.eql?(i) | |
end | |
end | |
def change_num(index, new_number) | |
@employees.map! do |employee| | |
employee.number = new_number.to_i if index.to_i.eql?(employee.id) | |
employee | |
end | |
nil | |
end | |
def change_name(index, new_name) | |
@employees.map! do |employee| | |
employee.name = new_name if index.to_i.eql?(employee.id.to_i) | |
employee | |
end | |
nil | |
end | |
end | |
class Solver | |
def solve! | |
@employee_recorder = EmployeeRecorder.new | |
input_data! | |
execution_histories.join("\n") | |
end | |
private | |
def input_data! | |
number_of_commands = gets.to_i | |
@execution_histories = | |
number_of_commands.times.map do | |
command, *args = gets.split | |
@employee_recorder.public_send(command, *args) | |
end | |
end | |
def execution_histories | |
@execution_histories.compact | |
end | |
end | |
solver = Solver.new | |
puts solver.solve! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment