LoginSignup
1
0

More than 1 year has passed since last update.

【At Corder】【初心者】ABC088B - Card Game for Two をRuby で解いてみた

Last updated at Posted at 2021-06-01

はじめに

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita

こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます:thinking:

わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください:baby:

問題文

N枚のカードがあり、i番目のカードにはa_iと番号が振られる。二人のプレイヤー(問題中はAliceとBob)がお互い数字が見えている状態で、交互にカードを選択する。選択するカードが無くなったとき、自分が持っているカードに書かれている数字の合計が得点となる。自分の点数が最大化するように最適な戦略を取った場合、先手(問題文中はAlice)は後手に対し、何点多く得点するか?

制約

Nは1以上100以下の整数

$a_i$は1以上100以下の整数

入力

N
a1 a2 a3 ... aN

出力

先手が後手よりも多く獲得した点数を出力

入力例

2
3 1

出力例

2

先手が3を選択、後手が1を選択する。点数は3と1なので、点差は3-1=2となる。

回答

N = gets
numbers = gets.split.map(&:to_i)
alicepoint = 0
bobpoint = 0

while numbers.any?

  alicepoint += numbers.max
  numbers.delete_at(numbers.index(numbers.max))

  if numbers.empty?
    break
  end

  bobpoint += numbers.max
  numbers.delete_at(numbers.index(numbers.max))

end

puts alicepoint - bobpoint

感想

最近は他の人の回答を回答を見る前に通るプログラムが書けるようになってきたぞ。まだまだメソッド等の使い方は覚えられていないので、調べながら出ないと厳しいな。
変数を頭文字大文字にしていたことで値を更新できず(alicepointとbobpointが頭文字大文字だった)🙄
大文字小文字をちゃんと識別しているのにちょっとびっくり。今後は注意だ!

参考文献

Rubyでnil判定をする方法

break

Ruby ビギナーのための CGI 入門 【第 5 回】 文字コードと排他処理 1 ページ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0