WUPC 2012 A,B / KUPC 2012 Practice A,B
例によって冒頭 2 問.慣れてる人はこれをどれだけ早く通せるかなんだろうなーと思いつつ 1 問あたり 30 分ぐらいかけて悩んでた.だんだん楽しくなくなってきた…….
WUPC 2012
A:招待状
mailm, maild = gets.chomp.split.map(&:to_i) contm, contd = gets.chomp.split.map(&:to_i) puts "#{(Time.local(2012, contm, contd)-Time.local(2012, mailm, maild)).divmod(24*60*60)[0].to_s}"
- 4 行目:日付どうしで引き算して日数出しておしまい.リファレンスサイトに影響されて divmod メソッド使っちゃったけどこれ別に余りは必要ないからただの割り算でよかったね.って今気づいた.あとわざわざ #{} を使って式展開せずに普通に整数値として出力すればよかった.新しいおもちゃを買った子どもじゃあるまい
B:パスワード
n = gets.to_i str = [] str2 = [] n.times do str << gets.chomp end str.permutation(2) {|a,b| str2 << a+b} puts str2.min
- 何だソートして先頭 2 個くっつけるだけじゃん→突然の死(テストケースで 2 個 WA 来てた)
- 個々の文字数が違うとかどうとかでそれだと上手くいかないらしい
- 9 行目:str の要素の順列それぞれを結合した文字列を str2 にプッシュ→(辞書順の)最小値を出力
- 力技でやったけど何とか通ったね
KUPC 2012 Practice
A : Wikipedia
def ack(m, n) if m == 0 return n + 1 elsif n == 0 return ack(m-1, 1) else return ack(m-1, ack(m, n-1)) end end x, y = gets.chomp.split.map(&:to_i) puts ack(x, y)
- アッカーマン関数のページ見たら再帰呼び出ししてたからさすがにメソッド作った.それっぽいの作ったのは初めて?
- undefined method `-' for nil:NilClass が出まくって超混乱してた.参加してなくてよかった.関数なのに return してないのは何か変な気分だと思って puts を return に直したら何故か通った.関数の返り値を puts で出力すればよかったってことに何で気づかなかったんだろう.甘い
- Ack(3, 45) で当然のごとく stack level too deep.提出したけど当然TLE.「これ本当に Ruby で実行できるのか?」と思い他人のコードを見たら何故か case 文使ってた.問題文読み直したら 0 ≦ m ≦ 3 とあったのでもう一度 Wikipedia で確認したらこの範囲では普通に四則演算で Ack(m, n) の解が書いてあった.思えば問題文をちゃんと読まないのは昔から変わってない.いい加減死にましょう
B : String Sorting
n, k = gets.chomp.split.map(&:to_i) card = gets.chomp.split.map(&:to_i) puts card.sort.reverse.join
- 最初はちょっと違う書き方してて出力がおかしかったらしく一瞬で WA 食らったけど join メソッドを知ってからは無双
- 他人のコード読んでみたらもっとすごかった.ワンライナーだった
gets;puts gets.split.sort.reverse.join
- まず入力.もはや変数すら置かない.次の文で「入力→空白文字で分割して配列作成→昇順ソート→ひっくり返す→全要素を結合」を出力.おしまい.やはり Ruby は最強だった.実際に使用しない値に変数用意するのも馬鹿馬鹿しいので 1 行目の書き方も見習おうと思った.2 行目は超 Ruby らしい書き方.メソッドの使い方に慣れていきたい
反省と感想
- 問題文はよく読みましょう.条件式も確認しましょう(受験生か)
- メソッドは返り値を用意する.メソッドを呼び出したら返り値が返ってくるからそれを puts で表示するようにする
- 出来るだけコードのファイルサイズを小さく出来るように? まだその段階ではないが
- コードの書き方はまだまだ愚直で下手くそだけどメソッドをいろいろ使えるようになるのはいいこと.今はそっちを最優先に
コメント
コメントを投稿