Skip to content

Instantly share code, notes, and snippets.

@gouf
Created September 22, 2024 00:26
Show Gist options
  • Save gouf/74b7de7896f31a7940e63b9a6eb8f87d to your computer and use it in GitHub Desktop.
Save gouf/74b7de7896f31a7940e63b9a6eb8f87d to your computer and use it in GitHub Desktop.
別解; Paiza 問題集「クラスの作成」 : https://paiza.jp/works/mondai/class_primer/class_primer__make_class
class Employee
attr_reader :record_id, :employee_number, :name
def initialize(record_id, employee_number, name)
@record_id = record_id.to_i
@employee_number = employee_number.to_i
@name = name.to_s
end
end
class Employees
def initialize
@employees = []
end
def make(record_id, employee_number, name)
@employees << Employee.new(record_id, employee_number, name)
end
def get_num(record_id)
@employees.find { |employee| employee.record_id.eql?(record_id.to_i) }&.employee_number
end
def get_name(record_id)
@employees.find { |employee| employee.record_id.eql?(record_id.to_i) }&.name
end
end
employees = Employees.new
# 入力例1
# input =
# <<~INPUT.lines.map(&:strip).join("\n")
# make 1 nana
# getnum 1
# getname 1
# INPUT
# 入力例2
input =
<<~INPUT.lines.map(&:strip).join("\n")
make 2742 mako
getnum 1
make 2782 taisei
getname 2
make 31 megumi
getname 1
getname 3
INPUT
count = 1
count_of_make = []
input.lines.each do |line|
method_name, _employee_number, _name = line.split
if method_name.eql?('make')
count_of_make << count
count += 1
end
end
printable_results = []
input.lines.each do |line|
# 取り得る値:
# make employee_number name
# getnum record_id
# getname record_id
method_name, employee_number, name = line.split
record_id = employee_number # あとの処理でどちらかの意味に変わる
if method_name.eql?('make')
record_id = count_of_make.shift
employees.make(record_id, employee_number, name)
elsif method_name.eql?('getnum')
printable_results << employees.get_num(record_id)
elsif method_name.eql?('getname')
printable_results << employees.get_name(record_id)
end
end
puts printable_results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment