simanのブログ

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

MM92 Lighting 参加録

Marathon Match 92の「Lighting」に参加していました。 問題 SxS のセル状空間に光源の強さがDのL個のライトをいい感じに設置して、なるべくたくさんの空間を照らしましょう。 すごいシンプルでした。美術館問題に似た問題だなと思いました。 方針 大きく分…

RubyのEnglish.rbソース読み

Rubyの標準ライブラリを読んでいく、前回は3年前に ostruct を読んだ RubyのOpenStructソース読み 今回は English.rb を読んでいく。 English.rbとは何か English.rbはRubyの特殊変数に対してわかりやすい別の名前を付与するライブラリである。Rubyの特殊変…

TCO 16 Round3参戦記録 - TerrainCrossing -

TCOMMの最終ラウンドが終わりました。https://community.topcoder.com/longcontest/?module=ViewProblemStatement&rd=16704&pm=14283 問題文 縦横長さが S あるフィールドがあります。フィールド上にはN個のアイテムとN個の目的地が存在しています。あなたは…

OnlineExam 参戦記録

Codeforcesで開催されていたマラソンマッチに参加してました。codeforces.com 問題文 オンラインの試験があります。問題は全部で5000問あり、各問題は「YES」または「NO」で解答を行います。採点については各問題ごとに正解不正解を判別し不正解の数が2000に…

NYC Lightning Round 参戦記録

診断人さんのツイートで気づいて参戦しましたhttps://community.topcoder.com/longcontest/?module=ViewProblemStatement&rd=16756&pm=14282 topcoder1日マラソン開催されるのであれば、すぐ寝る。されないのであれば、プログラミングして寝る。— nico_shin…

TCO 16 Round2参加記録 - StarTraveller -

TCO 16 Round2 が終了しました。https://community.topcoder.com/longcontest/?module=ViewProblemStatement&rd=16703&pm=14268 問題文 ある宇宙空間にN個の星とM個の宇宙船とK個のUFOが存在しています。宇宙船は星と星の間を移動する際にその星と星の間の距…

TCO 16 Round1参加記録 - CutTheRoots -

久々の日記です、今年もTCOの季節になりました。Round 1の問題は「CutTheRoots 」で、簡単に説明すると植木鉢の中にある植物を根っこをなるべく切り取らないように切り分けるかの問題でした。TopCoder 図としては下のような感じです。 最初は複数の植物がの…

現在開催中 or 今後開催予定のマラソンマッチ系コンテストについて

これは 「Competitive Programming (その2) Advent Calendar 2015 」の12日目の記事です。 www.adventar.org マラソンマッチとは、2週間から長いもので1ヶ月以上の期間をかけて行われるコンテストです。有名なところではTopcoderのMarathon Matchがありま…

「Code Festival A If you cannot solve this」参加記録

CodeFestivalの短縮王の事前公開問題があったのでそれをやっていました。anarchy golf - Code Festival A If you cannot solve this問題としては クラスメイトのテストの点が与えられる。 クラスの平均点の半分以下である点数を赤点と定義する。 s1が赤点な…

【コードゴルフ】シンプル・ライフゲーム 参加日記

ここ数日コードゴルフという競技で遊んでいました。codeiq.jp題材としてはライフゲームというゲームをいかに短く書くかの勝負で、今回Ruby部門で一番短くかけました。d.hatena.ne.jp今回書いたコードです。(136byte) n,h,w,*f=*$<;n.to_i.times{z=w=w.to_i;f…

MM89参加日記

初日 問題文公開、お題は「迷路が与えられるので、セルを修正してたくさん探索しような!」ですとりあえず、まず迷路の盤面から'U'を別の要素に置き換えてみるテスト。Uターンマスはその時点で探索失敗してしまうので(盤面の外側だと大丈夫だけど1pt) 邪魔…

PathDefense日記(Topcoderマラソンマッチ)

0日目 今日からTCO MM Round2の始まり始まりー、いつも対戦後に戦略とかをツイッターに流しているけど、 今回は日記を使ってコンテスト中の考えとかを雑にまとめてみるテスト。 1日目(2015/05/26) 5:00 起床 起きて問題文を読む。和訳が面倒だ...ひたすらGoo…

Rubyで配列の最大値と最小値を同時に取得

rubyでは配列の最大値と最小値を同時に取得出来るminmaxメソッドがあります。minmaxを使わないver array = [1,2,3,4,5] min = array.min max = array.max puts min puts max 1 5使うver array = [1,2,3,4,5] min, max = array.minmax puts min puts max 1 5…

京都旅日記 最終日

今日で最終日です。朝は荷物をまとめて、忘れ物がないかチェックしてホテルのチェックアウトを行いました。ちょっと荷物が増えてるのでトランクの中身がかなりギチギチになりました。。。 サイクリング 京都駅から関西空港までは特急はるかで向かうことにし…

京都旅日記 5日目

今日は嵐山を目指します。 地下鉄 → 嵐電 → 嵐山 1回乗り換えして向かいます。嵐電の中では太秦近くになると、暴れん坊将軍のBGMが流れて面白かった。到着 竹林 早速有名な竹林へと向かいました。今日は土曜日ということもあってめちゃめちゃ人が多かったで…

京都旅日記 4日目

4日目は日本三景の1つである天橋立に行ってみました。 特急はしだてで天橋立へ 行きは特急はしだて号の始発で向かいました。乗り換えなしで一直線で天橋立まで行くことが出来ます。電車に揺られること2時間、天橋立駅に着きました。道中山が多かったとうちゃ…

京都旅日記 3日目

今日からはタスクが無くなったので自由に観光できるぞ! 最初は伏見稲荷大社 ということで、まずは伏見稲荷大社に向かいました。画像でよく見る千本鳥居を見てみたかったので。平日にもかかわらず観光客で大変賑わってました千本鳥居の入り口!うひょーまさ…

京都旅日記 2日目

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

京都旅日記 1日目

今日から京都に来ています。沖縄から京都まで色々あって疲れた。。。 17:40の便で京都へ 搭乗するまで、暇だったので那覇空港内の店でうどん食べたけど完全にハズレだった。(ネギの味が強すぎてうどんの味がしない) 19:30ぐらいに関西空港到着 初めて来た…

今年の目標(2015)

去年立てた目標は全く達成できなかったので、今年こそは達成したいと思います。 詰み本の消化 今年はまず「積み本」の消化を目標にしたいかなと思います。自分はその分野にちょっと興味を持つと すぐ専門書を購入して、積んでしまう癖があるみたいで、今の詰…

今年を振り返って(2014)

今年を振り返ってみようかなと思います。今年自分はこんな記事を書いていました。今年の目標(2014) - simanmanのブログ 今年の目標(2014) - simanmanのブログ・topcoder Algorithm部門のレート1500以上(未達成) ・topcoder Marathon部門のレート2000以上(未…

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

「How Many Divisors?」 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_DAOJの問題を解いてて「約数の配列だして、upper_boundとlower_boundをとれば終わりやな」と思ったのですが、Rubyに今の要素全部無かったので、作りました。 requi…

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)…

rubyのDateクラスの謎

Dateクラスは最初から存在しているみたいなのですが、インスタンスメソッドが無いです。 p Date.instance_methods(false).count #=> 0 require 'date' p Date.instance_methods(false).count #=> 68 特に困るわけでは無いですが、すごい気になります。

OSC Okinawa 2014に参加 & LT発表してきました!

今年も沖縄でOSCが開催されたので、1人で行ってきました!今年は「去年に比べて、発表内容の理解が出来たかな」と思うと同時に「学ぶべきことがまだたくさんある」と感じたカンファレンスでした。 ・「業務アプリケーションにおけるこれからのWeb開発」 今年…

Rubyで長いメソッドチェーンを作るゲームをするgemを作った

まだ作成中だけど、gemの名前確保も含めてリリース「shiritori」 https://github.com/siman-man/shiritoriルールに関してもまだ細かいところは決めてないけど大まかにはこんな感じ ルール 1. 最初に適当なオブジェクトを入力 2. そのオブジェクトで使用でき…

oh_my_methodなるgemを作った

作ったというより名前を確保した。「oh_my_method」 https://github.com/siman-man/oh_my_methodgemの名前はoh_my_zshのパク...じゃなくてオマージュしました。日頃オープンクラスしては、使い道の分からないメソッドを作って遊んでいたので、「使い捨てなの…

Rubyで素数

Rubyで素数を扱いたいときには便利なprimeライブラリがあります。自分がよく使用しているのは数値が素数かどうかを判定するprime?メソッドです。 require 'prime' p 3.prime? #=> true p 10.prime? #=> false p 17.prime? #=> true 他にも素数列を簡単に習得…

RubyのIntegerにおけるsuccとnext

自分はRubyで数値をインクリメントするときはいつも「+=1」を使用しているのですが、succメソッドとnextメソッドもインクリメントに使用できるので、どれが一番速いのか調べてみました。 require 'benchmark' Benchmark.bm do |x| cnt = 100000000 fixnum = …

Rubyで日本語関数名&変数名

前からRubyは日本語の関数が書けるのは知っていたのですが、変数も日本語にできるんですね。 def 挨拶(名前) puts "こんにちは" + 名前 + "さん" end 挨拶("山田") こんにちは山田さんこれで何か面白いことできないかなーと思ったのですが、なかなか良いのが…

Rubyでユークリッドの互除法

アルゴリズムの勉強中なのですが、せっかくなのでRubyで書いたコードを残していこうかなと思っています。今回はユークリッドの互除法です。最大公約数を求める時に使います。Rubyには元からgcdメソッドがあるので、わざわざ再開発する必要はないのですが。。…

Shoesでログの出力

ShoesでGUIプログラミングしていると、デバッグの際に中の値を見たくなる時があるので、それを出力する方法です。出力にはinfoメソッドを使用します Shoes.app { radius = 40 oval( left: 10, top: 10, radius: radius) info("radius size = #{radius}") } …

沖縄Ruby会議01に参加してきた!

「沖縄Ruby会議01」に参加&LT発表してきました! http://regional.rubykaigi.org/okrk01/発表資料 「琉大図書館にRuby本を!」 http://www.slideshare.net/_siman/ruby-31905851 ※ 発表資料に関しては少し修正が入っています。 まさかのトラブル 今回、琉球…

Rubyの変数宣言で少しハマった話

よくRubyで多重代入とか使うんですが、この仕様は知らなかった... a = 1,2,3 [1, 2, 3]こうなって欲しい時はaの前に*をつけるので、ちょっと予想外でした *a = 1,2,3 [1, 2, 3]というのも x = 3, y = 4 このように宣言して x = [3, 4] y = 4となったのが事の…

RubyのFixnumの最大値と最小値

気になったので調べてみました。 Rubyではある値を越えた時にFixnumからBignumへと変わります。 p (2**0).class #=> 1 p (2**10).class #=> 1024 p (2**100).class #=> 1267650600228229401496703205376 p (2**1000).class #=> 略 Fixnum Fixnum Bignum Bign…

RubyのShoesで計算機

ShoesはRubyでGUIを作るためのツールです。前回のHello Worldに続き、今回は簡単な計算機を作ってみました。ソースコード https://github.com/siman-man/calculator/blob/master/calculator.rb完成品 ボタンの縦のサイズが自由に決められないのは少し残念で…

Rubyでワンライナーおみくじ

Rubyで今年の運勢を占いましょう ruby -e 'puts %w(大吉 中吉 小吉 吉 末吉 凶 大凶).sample' 中吉中吉でした

今年の目標(2014)

競技プログラミングを頑張る topcoderのrateを上げる。 ・アルゴリズム1500以上 ・マラソン2000以上 モバイルアプリに挑戦 何かアプリを1つ作る 新しい言語に挑戦 達人プログラマー的な 今年もいい年になりますように

去年を振り返って(2013)

2013年のうちに書いとくべきだったけど忘れてました。 競技プログラミングな年 2013年は競技プログラミングの年でした。 今までは趣味でアプリ開発とかしてましたけど、違った面白さがあったハマりました。今年のレーティングはアルゴリズムのほうが1128(緑)…

RubyでShoesを使ってGUIプログラミング - Hello World

RubyでGUIプログラミングしたいなと思い検索してみると、一番最初にShoesがヒットしたので少し触ってみました。ダウンロードはこちらから http://shoesrb.com/downloads.htmlとりあえず簡単なHello Worldを作ってみました。 Shoes.app do button "Click me!"…

RubyでHashのsortの返り値をHashにする

RubyのHashのsortは返り値がArrayになっています。 hash = { a: 30, b: 66, c: 45, d: 100, e: 80 } p hash.sort_by{|k,v| v } [[:a, 30], [:c, 45], [:b, 66], [:e, 80], [:d, 100]]ArrayではなくHashで受け取りたい場合は、この値をそのままHashに入れてあ…

Rubyのcompact

Array#compactメソッドは配列の要素からnilを取り除くメソッドです。compact!だと自身も変更します。 array = [ 1, nil, 3, nil, 5 ] p array p array.compact p array array.compact! p array [1, nil, 3, nil, 5] [1, 3, 5] [1, nil, 3, nil, 5] [1, 3, 5]…

2013年に買って良かったもの

27inchのディスプレイです。 アニメ観るのに非常に役に立ちました!

RailsでRubyのハッシュをJavascript側に渡す

忘れないようにメモ @sample = { a: 1, b: 2, c: 3 } var test = <%= @sample.to_json.html_safe %>; console.log(test); #=> Object {a: 1, b: 2, c: 3} console.log(test.a); #=> 1 参考サイト http://stackoverflow.com/questions/6272201/rails-hash-of-…

マラソン練習会( TCO2010 FILNAL )

今週土曜日、診断人さん主催で12時間マラソン練習会が行われました。今回使用した問題は「TCP2010 CollapsingMaze」 http://community.topcoder.com/longcontest/?module=ViewProblemStatement&rd=14411&pm=11140内容はざっくり説明すると 「コインがばらま…

「git勉強会 in Okinawa」参加録

こちらの方に行ってきました。「git勉強会 in Okinawa」 http://atnd.org/event/E0019796/0自分はGithubは使っていたのですが、「Githubを使った開発フロー」というワードに惹かれて参加してみました。 ・午前の部 午前の部はGit Handson その 1を進めながら…

Rubyでハッシュのデフォルト値を配列にする

RubyではHashのデフォルト値をHash.newの引数として渡すことで実現できますが、配列を渡すと同じ参照になってしまうのでうまくいきません。 list = Hash.new([]) list[:even] << 2 p list[:even] #=> [2] list[:odd] << 3 p list[:odd] #=> [2,3] [2] [2, 3]…

rubyで数値を日本語表記に変換するgem「yen」を作った

「Rubyで数値を日本語表記に変換」 http://simanman.hatenablog.com/entry/2013/03/15/224727半年前ぐらいに作ったメソッドにちょっと変更を加えてgemにしました。 使い方 gem install yenrequire 'yen' puts 10000.to_j #=> 1万 puts 10000.to_j(:all) #=> …

Rubyのオブジェクトの継承関係をtreeコマンドっぽく表示するgem「object_tree」を作った

gem「object_tree」作りました。 https://github.com/siman-man/object_treeRubyでクラス継承やら、モジュールのincludeなどをしたときに、ancestorsメソッドなどで継承関係を調べることができるのですが、これをtreeコマンドっぽくして視覚的に見やすくしま…

Rubyで文字列を1文字ずつ分割する。

Rubyでは文字列に対してcharsメソッドを使用すると1文字ずつ分割してくれてます。 p "hello".chars ["h", "e", "l", "l", "o"] 文字列が数字だと、他のメソッドと組み合わせることで「各位を足しあわせた合計値」なんて操作もできるようになります。 list = …