更新日時で差をつけろ

むしろ差をつけられている

6/23

日付変わっちゃった…^^;
でも幸せならOKです!

なんだかんだでAOJ-ICPC 2ACです。あんまり進まなかった。
ICPC Ranking | Aizu Online Judge
これがまだ解けてない。
何がダメなんだろう。サンプルは通るけどWAが出る。

解けたのはコレ。解説みたから解いたとは言わないかもしれないけれど。
思いつかない… sei0o.hateblo.jp

夜はyukicoder。ABCより難しいと思うの私だけ?
1完しかできなかった、DP解けそうだったんだけどなあ。 yukicoder contest 167 - yukicoder

明日は8:00から昼まで勉強して、その後yukicoderの解説見て実装してみます。
ABC4完するよ!!
部活の新歓あるけど流石に出られるはず。

有意義な土日にします。

AOJ-ICPC 200点: 竹の花

わからないので解説見ました。
ACM-ICPC 2016 国内予選 C: 竹の花 · うさぎ小屋
わかりやすい。

loop do
  m, n = gets.split.map(&:to_i)
  break if m == 0

  nxt = m
  used = []
  n.times do |i|
    a = nxt
    while a <= 7368791
      used[a] = true
      a += nxt
    end

    loop do
      nxt += 1
      break unless used[nxt]
    end
  end

  puts nxt
end


こう書くとm=2, n=500000のケースが間に合いません。上の方が速いしシンプル。

loop do
  m, n = gets.split.map(&:to_i)
  break if m == 0

  nxt = m
  years = []
  n.times do |i|
    years << nxt

    loop do
      nxt += 1
      f = false
      years.each do |r|
        f = true if nxt % r == 0 # それよりも短い周期で割り切れたら追加しない
      end
      break unless f
    end
  end

  m.upto(7368791) do |i|
    found = false
    years.each do |y|
      if i % y == 0
        found = true
        break
      end
    end

    unless found
      puts i
      break
    end
  end
end

6/22

この1週間 忙しいアンド楽しい だったので、勉強(特に予習)が out of 眼中 でした。

木曜は学校が早くに終わるので、昼食を摂って部屋に戻りました。そこから40分ぐらいTwitter触ってしまいました。反省。
その後16:10ぐらいまでAOJ-ICPC埋めしてました。
200点を2ACと、150点を1ACです。とりあえず500位ランクイン目指します。
Pablo Squarson's Headache | Aizu Online Judge
Airport Codes | Aizu Online Judge
sei0o.hateblo.jp

その後梅田に移動しました。移動時間は英語課題の薄い本()を消化しようと思いましたがなんだか全然頭に内容が入ってこなかったので諦めてぼーっとしたりAOJ見たりしてました。
17:30からはinochi学生フォーラムのグループ面接でした。目つきがキリッとしてる人って威圧感すごくない? やはり友人強い。中学校が違うとやっぱり中身も変わるよね(それはそう)。私は自己アピールに情報関係の技術がどうこう…と言っておきました。
他のメンバーの様に責任感や協調性は考えもしませんでした。やっぱり資格が一番わかり易いんだよなぁ

その後18:00からヨドバシカメラ(梅田)のイタリアンで、ある本の著者の方と某競プロerとピザとかライスコロッケとか食べ(させてもらい)ました。なかなかボリューム感があった。
情報処理安全確保支援士の講習のお話とか、競プロ部(!?)の話とか聞かせてもらいました。
(PCK出てみたいけれど実力がまだ)ないです。 5000兆円ネタが通じるとわかると安心しますね。

その後は写真とったりヨドバシカメラでうろうろしてワイワイ盛り上がってたらいつの間にか20:45。
明石への新快速を逃して、寮の点呼に遅れてしまいました。これで3回目。どうしようもねぇ…申し訳ない…
最寄り駅から寮まで走って頭ガンガンしてます。体力がない。かといって運動する気にはなりません。瞑想は習慣にしたいんだけどなぁ〜〜〜

明日は呼び出しを食らって学生相談室に行きます。こわい。でもコレが終わったら
✝休日✝

…がんばるぞ!!

(あっそうそう、ウニは初AJしました。わーい!)

AOJ-ICPC 200点: 迷図と命ず(Amazing Mazes)

幅優先探索ですね。

lines[y][x]は左上(番兵含め)を(0, 0)として、[ (x, y)の四角の右側に壁があるか, 下側に壁があるか ] という形です。少し入力の処理に手間がかかりました。番兵の使い方がわかってきたぞ

探索のキューをuniqするのを忘れてて、MLEを何度か出してしまいました…
uniqしなくても、探索の前に「訪問済みであれば飛ばす」という処理を入れればうまく動きます。

loop do
  w, h = gets.split.map(&:to_i)
  break if w == 0
  lines = [[[false, true]] * (w+1)] # 番兵
  (2 * h - 1).times do |i|
    y = i / 2 + 1
    if i % 2 == 0
      lines[y] = [[true, false]] # 壁があればtrue
      gets.split.map(&:to_i).each do |ch|
        lines[y] << [false, false] if ch == 0
        lines[y] << [true, false]  if ch == 1
      end
      lines[y] << [true, false] # 右端(番兵)
    else
      gets.split.map(&:to_i).each.with_index(1) do |ch, ci|
        lines[y][ci][1] = true if ch == 1
      end
    end
  end
  lines[-1].each do |c|
    c[1] = true # 一番下の行のマス全てに、下側に壁があるとする
  end

  d = []
  queue = [[1, 1]]
  d[1] = []
  d[1][1] = 0
  visited = []
  while queue.size > 0
    cx, cy = queue.shift
    visited[cy] ||= []
    visited[cy][cx] = true # 訪問済み
    break if cx == w && cy == h

    if !lines[cy-1][cx][1] && !(visited[cy-1] && visited[cy-1][cx]) # 上
      queue << [cx, cy-1]
      d[cy-1] ||= []
      d[cy-1][cx] = d[cy][cx] + 1
    end
    if !lines[cy][cx][1] && !(visited[cy+1] && visited[cy+1][cx]) # 下
      queue << [cx, cy+1]
      d[cy+1] ||= []
      d[cy+1][cx] = d[cy][cx] + 1
    end
    if !lines[cy][cx][0] && !(visited[cy] && visited[cy][cx+1]) # 右
      queue << [cx+1, cy]
      d[cy][cx+1] = d[cy][cx] + 1
    end
    if !lines[cy][cx-1][0] && !(visited[cy] && visited[cy][cx-1]) # 左
      queue << [cx-1, cy]
      d[cy][cx-1] = d[cy][cx] + 1
    end

    queue.uniq!
  end

  puts (d[h] && d[h][w]) ? (d[h][w] + 1) : 0
end

6/21

3日目です。3日坊主の称号はいただきました。

JOI Lv5埋めをやめてAOJ-ICPCの緑色(150, 200)を埋めることにしました。
この難易度はAOJ-ICPCが言うには、

プログラミングを始めてからプログラミングコンテストの問題にある程度慣れたレベルの人たちが解けるレベル,
あるいは,コンテスト以外のプログラミングに慣れている人がいきなりスタートしても(標準入出力の扱いなどを除けば)難なくこなせるレベルの問題が並ぶ.
問題としては,簡潔なシミュレーションや探索の問題から構成される. このレベルで必要となるアルゴリズムは初歩的なものに留まる. 具体的には,素因数分解、スタック/キュー,簡単な全探索など. 実装量は多くとも1KB~2KB程度で済むことが多いはず.

だそうです。
あぅぅ…Rubyもう3年やってるのに 難なく こなせてない…(涙)
今日は150を4ACです。200を触った方が身になるかもしれない。明日は200やってみよ。 ちなみに、この様子を見ていたイキリオタク友人に「最近競プロ勢になりかけてないか?」と言われました。違うんだよなぁ

TypeScriptもちょっと書きました。tslint(Atom)の扱いがよくわからないし無効化しました…
本音としては GoとElixir も触りたい。うーん、どうしよう…

明日は inochi 学生フォーラムの選考(面接)のあと、歳が1つ上のしゅごい人に会います。楽しみだな〜

(おい、勉強しろよ!!)

6/20

あっ…今日も書いてる…意外…3日坊主かな?

昨日の問題 JOI国のお散歩事情 | Aizu Online Judge
これを解こうとしてそれなりにテストケース0pass/5から3pass/5に増えました。だがWA。
流石に放課後ずっと悩んでわからない + 急に解けなくなった一旦JOI Lv5埋めはやめます(根気がない、だが時間もない)。
TypeScriptとCreateJSでいろいろしたいし。

何もわかりません。あ〜〜〜〜〜〜〜
そういえばついこの前、頭が働いていないときや機嫌が悪いときに全角チルダを連結して使う癖が私にはあると気づきました〜〜〜〜〜は〜〜〜〜〜〜〜

とある方(こんな文章に名前だしちゃ失礼だよね)が1年で1000ACを達成したそうで。はえ〜すっごい… 無論どのような問題を解かれたかにもよります。

明日はある会社の方とSkypeでお話です。緊張して夜しか眠れません。

日記を紙から移してみる

昨年の6月に ん!?いつの間にか1年経ってた!!
…昨年の6月にLサイズのロルバーンにつけはじめた日記が6/16ぐらいに1周年を迎えました。毎日つけたわけではないので、多分180日分あれば良い方。どうにもこうにもLAMY Safariが好きで書き続けたのですが、一覧性がなくて不便です。見返したところで気分が沈むだけで、見返す予定はないのですが。

更新日時で差を付けたいので、3日に1回ぐらい適当に日記をかくことにしました(書くとはいってない)。面倒になって数ヶ月したら辞めていそうですが、始めないことには続きません。 1年前とやってることがほとんど変わっていなくてなんだかアレです。

本題

JOI難易度表の5を解きたい人生でした。解けなかった。 sei0o.hateblo.jp sei0o.hateblo.jp

結局TypeScript書いてません。

部屋では裸足にクロックスで過ごしています。足の臭さを解消しようとリセッシュを足裏に噴射してみました。だが効果なし。このままだとクラスの足クサになってしまう。

maimai MURASAKi PLUS のnora2r曲「GO BACK 2 YOUR RAVE」好き。maimaiほとんどやらないけどね。
最近はToneSphereが再興してる。UFD難しいな〜〜

ElixirもGoもTypeScriptも競プロもpicoCTFもやりたくて逆に何もできてない気がして怖いです。こんなふうに考えるから学生相談室に目を付けられたのかな…

随分と支離滅裂ですが、普段の日記もこうだったので。文章力は後々養えればと思います(やっぱりオフラインの日記の方が機密性が高くて自分の考えを書くには適してるかも)。