Skip to content

Instantly share code, notes, and snippets.

@gouf
Created July 25, 2024 15:31
Show Gist options
  • Save gouf/e4b1e7f4de46440073af16de985c9584 to your computer and use it in GitHub Desktop.
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/
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