nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

ruby

CodeIQ「『セカンド・イクエイション』問題」に参加しました。

タイトルのとおり、CodeIQの「『セカンド・イクエイション』問題」の掲載期間が終了したということで、わたしの提出コードをさらしておきたいと思います。使用言語はRuby。1回の提出で通った記憶があります(自動採点なので忘れがち)。 アルゴリズムについて…

CodeIQ「エース・ナンバー」問題に参加しました。

タイトルの通りCodeIQ「エース・ナンバー」問題の掲載期間が終わったとのことで、自分の提出コードをさらしておきます。使用言語はRuby 。自動採点ということもあり記憶があいまいですが、確か一発合格だったような気がします。 詳細についてはねむいので提…

CodeIQ「スロット・マシン」問題の提出コード晒し。

難易度高めだったという噂の問題。実際難しかったと思います。個人的には期待値がおそろしく苦手なので、余計に大変でした。ですがなんとか回答できたので、そのコードをここにさらしておきます。 使用言語はRuby。1回目の提出で無事合格でした。 今回は問題…

CodeIQ「カット・アンド・スクエア」に参加しました。

「カット・アンド・スクエア」問題 | CodeIQ 就職活動が落ち着いてきたとはいえ、まだばたばたはしているので、簡単にまとめておきます。正直なところ、いろいろ書かねばならないほどのことはしていませんし。あとは「8月序盤で就活落ち着いちゃまずいでしょ…

Rubyにおける多重ループの回避方法と自己流の美学を語る。

最近はプログラミングコンテスト的なものを利用してプログラミングを勉強しているのですが、その際多重ループを書くことが頻繁にもとめられます。 (1..3).each do |i| (1..3).each do |j| p [i, j] end end 上の例などは典型的ですが、個人的な美学からする…

「標準入力から1行ずつ受け取って、配列に格納する」という処理を短く書きたい。

プログラミング・コンテスト的なものを解いていると、「標準入力から一行ずつ受け取り、配列に格納する」という処理を書くことがしばしば求められます。こういうとき、わたしは以下のように書いてきましたし、ごく一般的な方法であるとも思います。 lines = …

「マージ」に関する個人的な誤解(超低レベル編)。

自分の恥をさらすと、ごくごく最近まで「マージ」を単に配列を前後に結合することだと思っていました……。 [1,2] + [3,4,5] => [1,2,3,4,5] このせいで「マージソート」なるものがさっぱり理解できず、ずいぶんと長い間学習を放棄していました……。個人的に再…

CodeIQの「フィズ・バズ・エクストリーム」に参加しました。

冷静に見返してみると、反省点が山盛りですね……。ふだんいかに何も考えていないかがわかります。 「フィズ・バズ・エクストリーム」とは 「フィズバズ・エクストリーム」とはリクルートキャリア社が運営する――って、この手のことは以前に何度も書いたので、…

Paolo Perrotta 『メタプログラミングRuby』を読んだ……といえるのかしら。

メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る Rubyプログラマの中で非常に評価が高い『メタ…

rubyでクイックソートを短く実装しましょう。

以前はユークリッドの互除法をわかりやすさを担保しつつ、できるだけ短く実装しました。 rubyでユークリッドの互除法を短く実装しよう。 - nekoTheShadow’s diary 今回は同じことをクイックソートでしてみようという記事になります。 そもそもクイックソート…

A*(A-star)を利用して(非効率に)9パズルを解いてみた。

9パズルとは? 9パズルとは縦に3枚、横に3枚、合計9枚のパネルが入る正方形の枠に、1から9までの数字が書かれた8枚のパネルが埋め込まれたパズルです。つまり枠内には一枚分の空白があり、その空白に隣り合ったパネルをスライドさせながら、ばらけていた数字…

Rubyでyo!langのインタプリタ作成(世界初かも)。

YO! yo!langとは yo!langはいわゆる「難解プログラミング言語」(esolang)のひとつです。yo YO Yo! Yo? YO! yo? yo! YO?の8つの命令しかないにもかかわらず、チューリング完全で、あらゆるプログラミング言語と同程度のことが可能になっています――と書くと勘…

藤沢周『オレンジ・アンド・タール』読了。

<今週のお題「最近おもしろかった本」>という企画を知ったので、便乗投稿してみたいと思います。 オレンジ・アンド・タール (光文社文庫)作者: 藤沢周出版社/メーカー: 光文社発売日: 2010/12/09メディア: 文庫購入: 2人 クリック: 15回この商品を含むブログ…

「バイナリ・カウント」提出コードと小反省会。

説明会つらい履歴書つらいエントリーシートつらいグループディスカッションつらい集団面接つらい個人面接つらいつらいつらいつらいつらいつらいいいいいいいいいいいいいいい (´・ω・`) 「バイナリ・カウント」とは 「バイナリ・カウント」問題 | CodeIQ 「…

rubyでユークリッドの互除法を短く実装しよう。

最近いろいろなアルゴリズムを短く短くすることにはまっています。今日はその一環でユークリッドの互除法を扱いました。 ユークリッドの互除法とは何か ユークリッドの互除法は最大公約数を探す定番アルゴリズムです。シンプルながら非常に強力で、しかも世…

「paizaオンラインハッカソン5 エン修羅」提出コード公開。

公開していいらしいと最近知ったので。 「paiza オンラインハッカソン」とは? そもそもpaizaとはギノ株式会社が運営している、プログラマやシステムエンジニア向けの転職サイトです。特徴としては「プログラミングスキルが図られる」ということ。実のところ…

rubyで[]や[]=を新しく定義するには。

たとえばインデックスが1から始まる配列(もどき)をあつかうクラスを作りたいとします。とりあえず名前はTableとでもしましょうか。 class Table # 引数はArray。Table.new([1,2,3,4]) def initialize(ary) @table = ary.dup end end このクラスにおいて、イ…

「コードトライアスロン」提出コードの振り返り&反省

就活がつらいです(´・ω・`)最近はとくにエントリーシート提出の締め切りが続いていて本当につらい(´・ω・`) だれか代わりに書いてくれないかしら。「エントリーシート代行会社」とかあればもうかりそう。最近は、塾通いや習い事で忙しい子供向けの「宿題代…

rubyで配列どうしの「差分」を求めよう。

注意:この記事は相当「おねむ」な状態で書いています。ただでさえ伝えづらい内容が余計にわけわからなくなっている可能性があります。ごめんね。 rubyのお勉強中、次のようなメソッドが必要になりました。 ary1 = [1,2,2,3] ary2 = [2,3,4] p ary1.diff(ary…

injectを使うときにはブロックの戻り値に気を付けましょう。

each_with_objectの便利さに開眼した。 - nekoTheShadow’s diary一昨日の記事で (0..2).inject({}) do |hash,num| hash[num] = num end はうまくいかないが、 (0..2).inject({}) do |hash,num| hash[num] = num hash end はうまくいく、という内容を書きまし…

each_with_objectの便利さに開眼した。

説明しづらくて申し訳ないのですが、rubyの勉強中に次のような処理をしたいとなりました。 hash = {} (0..2).each do |num| hash[num] = num end p hash #=> {0=>0, 1=>1, 2=>2} 何らかのオブジェクトをループでまわして、ハッシュに突っ込んでいくわけです…

rubyのwith_indexは便利。

mapは各要素に対してブロックを評価した結果の配列を返す、便利なメソッドですが、今日はその勉強中に、評価の対象としてレシーバのインデックスを利用したいとなりました。 nums = [1,2,3] multipled_nums = [] nums.each_with_index do |num,idx| multiple…

Hash.new{}を有効活用してみたい。

rubyのHashクラスのクラスメソッドnewは引数にブロックをとることができることはよく知られています。 hash = Hash.new do |hash,key| if key.even? val = "奇数" else # key.odd? val = "偶数" end hash[key] = val end p hash[1] #=> "偶数" p hash #=> {1…

Array.newの見知らぬ仕様。

rubyのお勉強中、次のような配列がほしいとなりました。 [[true, false, false, false], [false, false, false, false], [false, false, false, false], [false, false, false, false]] 正方形の左端だけがtrue、残りは全部falseというイメージ。簡単そうで…

配列内をswapしよう。

rubyでは数値の入れ替え的なことが簡単にできることが知られています。 つまりはこんな感じ。 x = 1 y = 2 x,y = y,x p x #=> 2 p y #=> 1 配列の場合も同じです。 ary = [0,1] ary[0], ary[1] = ary[1], ary[0] p ary #=> [1,0] たとえば変数宣言のとき、下…

rubyの不満をremoveしたい。

rubyは素敵なプログラミング言語だと思いますが、不満に感じないところがないかというと……個人的に一番どうにかならないかと思うのは、Arrayのクラスメソッドである delete delete_at delete_if の仕様ですね。めんどくさいので、仮にこの3種をdelete系と呼…

おととい修正ふたたび。

昨日は昨日から見ておとといの修正をしましたが、今日は今日から見ておとといの記事の修正をします。 よくよく確かめてから書かないからこういうことになるんだ。おとといのことですが、次のような記事を書き、 getthumbininfoで投稿者情報を取得してみよう…

一昨日の記事に対する修正。

rubyでPOST、そして「スナップショット検索API」。 - nekoTheShadow’s diary 一昨日書いた記事に次のようなコードを乗せました。 実はこれにはある種の欠陥がありました。上記コードにおいて、出力を整える部分で次のように書いたのですが…… puts res.scan(/…

getthumbininfoで投稿者情報を取得してみよう。

昨日、ニコニコ動画提供の「スナップショット検索API」で、動画投稿者に関する情報が取れないとか何とかと、ぶつくさ書いたのですが、あの後、インターネットサーフィンをしていると、別のapiで投稿者情報は取得できることが判明。 「getthumbinfo」というそ…

rubyでPOST、そして「スナップショット検索API」。

「rubyでPOSTってどうするんだろう」というのがふと頭に思い浮かびまして、書いてみました。 require "net/http" # urlにはpost先のurlを、dataにはpostしたいデータを入れる。 def httpPost(url,data) uri = URI.parse(url) http = Net::HTTP.start(uri.hos…