注意
AtCoderのabc261_C - NewFolder(1)のネタバレあり。
ACしたコード
n = gets.to_i
# puts n
s = readlines
# puts s
count = {}
s.each do |b|
if count[b]==nil then
count[b]=1
else
count[b]+=1
end
if count[b]>=2 then
str="#{b.chomp}(#{count[b]-1})"
puts str
else
puts b
end
end
実行結果
入力例 1:
5
newfile
newfile
newfolder
newfile
newfolder
実行結果 1:
newfile
newfile(1)
newfolder
newfile(2)
newfolder(1)
出力例 1:
newfile
newfile(1)
newfolder
newfile(2)
newfolder(1)
入力例 2:
11
a
a
a
a
a
a
a
a
a
a
a
実行結果 2:
a
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
a(9)
a(10)
出力例 2:
a
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
a(9)
a(10)
ACするまでの道のり
・ハッシュの基本的な使い方を写経してみた。
hash1 = {"Ruby" =>0, "Pyson" =>0}
p hash1["Ruby"]
p hash1["Pyson"]
hash1["Ruby"]+=1
p hash1["Ruby"]
実行結果
0
0
1
・同じ文字列があればカウントするという問題なのでカウントできるようにしてみた。
hash={} #ハッシュの初期化
a.each do |b|
if hash[b]==nil then
hash[b]=1
else
hash[b]+=1
end
p "#{b}の値は#{hash[b]}"
end
実行結果
"Rubyの値は1"
"Pysonの値は1"
"Rubyの値は2"
"PHPの値は1"
"Rubyの値は3"
"Pysonの値は2"
・Rubyの条件分岐でthenを使うのが気になったから調べてみた。
・ACしたコードの条件分岐にchomp関数を使っていなかったので改行が入っていてACできなかった事に気づいた記事
・chomp man
・ACしたコードのputsをpと書いていたので実行結果にダブルクォーテーションが付いていてACにならなかったのでputsとpの違いについてopenAIに聞いてみた。
Q.pをputsに変更したらダブルクォーテーションがなくなる理由を教えてください。
A.pメソッドは、引数として渡されたオブジェクトを可読性の高い形式で出力するために使用されます。pメソッドに文字列を渡すと、文字列がダブルクォーテーションで囲まれて出力されます。一方、putsメソッドは、渡されたオブジェクトの文字列表現を単に出力するため、ダブルクォーテーションを含む文字列でも、ダブルクォーテーションは取り除かれます。
したがって、pメソッドをputsメソッドに置き換えることで、出力結果からダブルクォーテーションが自動的に取り除かれることになります。
Q.pはデバック用ですか?
A.
はい、pメソッドは主にデバッグ目的で使用されることが多いメソッドです。pメソッドを使うことで、デバッグ中に変数の値や式の評価結果を出力し、コードの挙動を理解することができます。pメソッドは、引数として渡されたオブジェクトを出力するだけでなく、そのオブジェクトのクラス名やメソッドなどの情報も出力するため、デバッグに役立ちます。
一方で、pメソッドはデバッグ以外の用途でも使用することができます。例えば、配列やハッシュなどの複雑なデータ構造を出力する場合にも便利です。しかし、実際のプログラムで使用する際には、出力される情報が不要な場合や、出力される情報が読みにくい場合もあるため、適宜pメソッドとputsメソッドを使い分けることが望ましいです。