simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

京都旅日記 3日目

今日からはタスクが無くなったので自由に観光できるぞ!

最初は伏見稲荷大社

ということで、まずは伏見稲荷大社に向かいました。画像でよく見る千本鳥居を見てみたかったので。

f:id:simanman:20150319111543j:plain

平日にもかかわらず観光客で大変賑わってました

f:id:simanman:20150319113537j:plain

千本鳥居の入り口!

f:id:simanman:20150319113609j:plain

うひょー

f:id:simanman:20150319113859j:plain

まさに絶景。大きい鳥居が連なるところと小さい鳥居が連なるところがあったのですが、この上の写真の小さい鳥居が連なっているところは本当にすごかったです。この後山頂付近まで登ったのですが、あいにく天気が雨だったため景色はほとんど見えませんでした。

f:id:simanman:20150319120557j:plain

残念。

その後、麓まで下りて近くの茶店で「稲荷うどん」と「稲荷ずし」を注文しました。

f:id:simanman:20150319133842j:plain

うまうま

宇治へ向かう

次はお菓子と平等院鳳凰堂を求めて宇治へ向かいました。

f:id:simanman:20150319143933j:plain

駅に下りてから見えるのは宇治茶の看板だったり、旗だったり、チラシだったり。まさに「お茶の町」って感じでしたね。

早速近くの茶店に入って、抹茶と草団子を注文しました。

f:id:simanman:20150319145648j:plain

団子が思ったより甘かったのですが、それを抹茶と一緒に食すことにより丁度いい甘さになり、とても良い茶菓子でした。抹茶単体でも普段飲んでいるお茶とは違って渋みが無いというか、ほんのり苦さはあるけどスーって飲めて後味がすごいサッパリしてて美味しかったです。

そして平等院鳳凰堂に向かいました。

平等院鳳凰堂

f:id:simanman:20150319153121j:plain

平等院鳳凰堂ってあと10円玉に描かれている絵のイメージが強かったのですが、入って驚いたのは庭がすごい手入れされてて綺麗だったことです。

ちょっと歩くと、有名な鳳凰堂にたどり着きます

f:id:simanman:20150320003210j:plain

こういつも見てる絵柄の実物をみると、ちょっと感動しますね「おー本当に一緒だー」って感じで(実際に10円玉に描かれている絵と見比べながら1人で感動してました)

この後は博物館で年表とか歴史とか国宝を見たり、実際に鳳凰堂の中に入って、中の阿弥陀像を見たりとかしてました。

京都タワー

この辺りで時間も夕刻近くになってたので、京都駅に戻りました。そこで、最初来た時に目がついた京都タワーに行ってきました。

f:id:simanman:20150319182212j:plain

最初は「なんか小さいタワーだな」と思っていたのですが、登ってみると以外や131mあるらしくて結講高く感じました。望遠鏡が無料だったので、そこから京都の街並みを一望することが出来ます。

圓徳院へ

既に日も落ちて真っ暗だったのですが、ライトアップイベントが行われている圓徳院が京都駅から近かったので歩いて行きました(歩くと遠かった...)

f:id:simanman:20150319195823j:plain

こういった庭を見たのは初めてなのですが、砂の模様がとても綺麗でこういった模様を考えた人はスゴイなと。過去に「枯山水」というボードゲームをやって、こういった庭園を見たいと思って来てみたのですが、想像以上に綺麗だったので庭園めぐりもいいかもしれません。

晩飯は京料理

帰りはバスで京都駅に戻り、この辺りで20:30ぐらいだったのですが、京都駅近のレストラン街で京料理の店に入りました。

f:id:simanman:20150319205638j:plain

ついでに日本酒も頼んで京料理を満喫しました。結構量があってお腹一杯

明日も観光頑張るぞい!

京都旅日記 2日目

今日はsamurAI codingの決勝当日。

2日目の朝

朝8:30に起きて、ホテルの朝食が9:30までだったのでお風呂入って朝食。バイキング形式で和洋折衷な取り方をしてしまった。朝食を終えたら11:30ぐらいまで昼寝して、そのあと会場の京都大学に向かいました。

会場の京都大学に向かう

途中の鴨川
f:id:simanman:20150318130716j:plain

鴨がいた!
f:id:simanman:20150318131645j:plain

一応渡れるっぽい
f:id:simanman:20150318132754j:plain

渡ってみた
f:id:simanman:20150318132908j:plain

河川敷にはお昼から寝てる人ととか、のんびりしてる人とから、ランナーとか自転車乗っている人とか様々な人がいました。
あと、鴨川の水綺麗だった。

京都大学に到着

f:id:simanman:20150318145631j:plain

会場に着くと既に参加者の人達が集まっていました。今回、チーム戦OKだったのですが、大体の参加者は1人でしたね。下は高校生から上は40代まですごい幅広い年齢層でした。

SamurAI Coding決勝戦

決勝戦が始まって、予選ラウンドの初戦からいきなり登場だったのですが、なんとか1位を取れて予選を突破しました。(1戦だけだったので本当に運が良かった)

そして、決勝リーグでは3戦行われて3位、4位、2位のトータルで3位だったのですが、1位のTaiyoさんが1位、1位、1位の圧倒的勝利!予選からの強さをそのまま決勝でも発揮できるとは本当にスゴイです。

3位の副賞として2万円を頂きましたお土産代に使おうと思います!

懇談会

そして懇談会ではお寿司とお酒とその他色々な料理が出されていて、とてもよかった。

sushi
f:id:simanman:20150318190434j:plain

参加者の話を聞いていると大体の人がモンテカルロ法を使用していたました。一口にモンテカルロといっても参加者毎にプレイアウトの方法や、細かいパラメータの調整が違っていてその辺りの知見を得られたのは大きいなと思います。(次はルールベースじゃなくてモンテカルロでやろうな!)

これで今回の京都も目的は達成したので、残りは京都観光するぞ!

京都旅日記 1日目

今日から京都に来ています。

沖縄から京都まで色々あって疲れた。。。

17:40の便で京都へ

搭乗するまで、暇だったので那覇空港内の店でうどん食べたけど完全にハズレだった。(ネギの味が強すぎてうどんの味がしない)

19:30ぐらいに関西空港到着

f:id:simanman:20150317194110j:plain

初めて来たけどデカイ

関西空港から特急はるかに乗って京都駅へ

21:30京都駅着

京都タワー
f:id:simanman:20150317213632j:plain

飯屋探して京都駅周辺をちょっと歩いてみたけど、駅周辺以外は何もない感じだった。ご飯は結局、駅近くの居酒屋に入って🍺と🍣を食べました。

f:id:simanman:20150317221536j:plain

sushi

23:30ホテル着

無事到着。疲れたー。

おまけ

「ちょっとお金足りないかもなー」と思って、空港に行く前に銀行でお金をおろしたんですけど、沖縄だと[二千円札優先]みたいなボタンがあって、試しに押してみたら全部二千円札出てきました。。。。

f:id:simanman:20150317235620j:plain

いやっまさか全部2千円札で出てくるとはちょっと予想外デース

今年の目標(2015)

去年立てた目標は全く達成できなかったので、今年こそは達成したいと思います。

詰み本の消化

今年はまず「積み本」の消化を目標にしたいかなと思います。自分はその分野にちょっと興味を持つと
すぐ専門書を購入して、積んでしまう癖があるみたいで、今の詰み本の数は軽く数えただけでも30冊は
余裕で超えている気がします。

アルゴリズムの勉強

これは競技プログラミング関係の話なのですが、どうも他の競技プログラミング勢と比べるとアルゴリズムに対する理解力が
まだないのかなと感じているので、その辺りを強化していきたいと思います。

他にもやりたいことはあるのですが、今はこの2つに集中するということで。

今年を振り返って(2014)

今年を振り返ってみようかなと思います。

今年自分はこんな記事を書いていました。


今年の目標(2014) - simanmanのブログ

topcoder Algorithm部門のレート1500以上(未達成)
topcoder Marathon部門のレート2000以上(未達成)
・モバイルアプリを1つ作る(作ってない)
・新しい言語に挑戦(挑戦してない)

何も達成できていないですね。
「じゃあ今年自分は一体何をやっていたんだろう」と思って振り返ってみました。

発表関連

・沖縄Ruby会議
OSS Okinawa2014

ハッカソン関連

・24コンテスト参加
・オレンジソン

競技プログラミング関連

・PlatinumRift優勝

Ruby関係

・RubyKaja2014に選ばれました!(Okinawa.rb代表として)


こうして見ると割りと活動していたのかなと思います。社会人1年目で色々なことがあり、すごく長く感じた1年でした。
来年はどうなるかわかりませんが、実りのある1年にしたいと思います。

Rubyで全ての約数を出すメソッドを作った

「How Many Divisors?」
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_D

AOJの問題を解いてて「約数の配列だして、upper_boundとlower_boundをとれば終わりやな」と思ったのですが、Rubyに今の要素全部無かったので、作りました。

require 'prime'

class Array
  def upper_bound(x)
    bsearch_index { |v| v > x }
  end

  def lower_bound(x)
    bsearch_index { |v| v >= x }
  end
end

class Integer
  def divisor_list
    return [] if self <= 0
    return [1] if self == 1

    prime_division.map.with_index { |(base, k), i|
      s = i.zero? ? 0 : 1
      (s..k).map { |n| base ** n }
    }.inject { |res, e| res + res.flat_map { |t| e.map { |v| t * v } } }.sort
  end
end

a, b, c = gets.split.map(&:to_i)
list = c.divisor_list

x = list.upper_bound(b) || list.size
y = list.lower_bound(a) || list.size

puts x - y

Array#bsearch_index を使うことで簡単に実装出来た。

Rubyの文字列連結の速度比較

Rubyで文字列連結のメソッドの動作速度を比較してみました。

require 'benchmark'

Benchmark.bm do |x|
  NUM = 10000
  word = "Hello"

  x.report(:add) do
    str = ""

    NUM.times { str += word }
  end

  x.report(:concat) do
    str = ""

    NUM.times { str.concat(word) }
  end

  x.report(:shift) do
    str = ""

    NUM.times { str << word }
  end
end
       user     system      total        real
add  0.050000   0.050000   0.100000 (  0.098366)
concat  0.000000   0.000000   0.000000 (  0.001402)
shift  0.000000   0.000000   0.000000 (  0.001213)

結果としては「+=」が飛び抜けて遅かったです。理由としては連結の際に新しい文字列インスタンスを生成しているからだと思われます。「concat」や「<<」は高速に動作しますが、元のオブジェクトを破壊するので注意が必要です。