(備忘録)AtCoderをやって7

問題1(A問題)

2018 年 1 月某日、高木さんは書類を書いています。書類には、その日の日付を yyyy/mm/dd という形式で書き込む欄があります。例えば、2018 年 1 月 23 日は 2018/01/23 となります。

書類を書き終えたあと、高木さんは日付欄の先頭に誤って 2017 と書いてしまっていたことに気がつきました。高木さんが日付欄に書いた文字列 S を入力すると、S の先頭の 4 文字を 2018 に修正して出力するプログラムを書いてください。

atcoder.jp

自分の回答

これは簡単でしたね

s = gets.chomp.to_s
puts s.gsub("2017", "2018")

問題2 (A問題)

シカのAtCoDeerくんは二つの正整数 a,b を見つけました。 a と b をこの順につなげて読んだものが平方数かどうか判定してください。

atcoder.jp

自分の回答

数字をくっつけるのにjoinが思い出せず時間が掛かってしまいました 平方根を求めるのはrubyのsqrtメソッドが便利でした  Math.#sqrt (Ruby 3.1 リファレンスマニュアル)

sqrtで出てくる数値は小数点まで出てくるのでfloorメソッドで小数点以下を切り捨ててます。

i = gets.chomp.split.join.to_i
puts (Math.sqrt(i).floor)**2 == i ? "Yes" : "No"

問題3 (A問題)

あなたは、X 円を持ってケーキとドーナツを買いに出かけました。

あなたはまずケーキ屋で 1 個 A 円のケーキを 1 個買いました。 次に、ドーナツ屋で 1 個 B 円のドーナツをできるだけたくさん買いました。

これらの買い物のあと手元に残っている金額は何円ですか。

atcoder.jp

自分の回答

全体金額からケーキの購入分を引いて、残った金額でドーナツが何個買えるかを計算して、残額から買えるドーナツの個数x金額を引いているという愚直なパターンしか思い付かなかった

total_yen, cake_yen, donut_yen = 3.times.map{gets.to_i}
balance = total_yen - cake_yen 
donut_count = balance / donut_yen
puts (balance - (donut_yen * donut_count))

その他回答

単純に残った金額=剰余を求めれば良かった訳ですね

X, A, B = 3times.map{gets.to_i}
puts (X - A) % B