読者です 読者をやめる 読者になる 読者になる

Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

リサージュ図形

松江市 中学生Ruby教室でも使われたR2Dを使って、リサージュ図形をアニメーションしてみました。 R2Dを使うと手軽に視覚化できるので楽しいですね。 以下は、をを0度から30度刻みで360度までアニメーションするスクリプトです。学生時代に行ったオシロスコー…

コーディングを支える技術

今まで自分なりにプログラミングについて学んできたつもりでしたが、知識は少しずつ増えるものの体系化されていないと感じていました。本書は、 複数の言語を比較することから学ぶ 歴史から学ぶ という点に力をおいて解説されています。 前者は今まで自分で…

ターミナルウィンドウに雪を降らせよう!を調べてみました

「ターミナルウィンドウに雪を降らせよう! - Macの手書き説明書」で紹介されているワンライナーがどんな風に動いているのか調べてみました。 ワンライナーだと難しく感じますが、以下のように書き直すと案外分かりやすくなりますね。エスケープシーケンスの…

arduino_ir_remoteを試してみました

以前から、いつかやってみたいと思っていた、「橋本商会 » ArduinoとRubyで赤外線リモコンをgemにした」に取り組んでみました。 テレビやブルーレイレコーダーは稼働中でしたので、CDプレイヤーを使用しました。MacBookのコマンドラインから、CDプレイヤーの…

rbenvでのバージョンアップ

以前、同じようなことを書いているのですが、 pryで日本語が入力できない ことに気づいたので、以下のように書き直しました。rbenvを使っているのですが、Rubyのバージョンを上げるときに、いつも忘れていることが多いので、メモを残しておきます。 バージョ…

「このお店とこのお店は同じ店?」を解いてみました

CodeIQの「このお店とこのお店は同じ店?」を解いてみました。 驚いたことに、CodeIQ Blogに解答を掲載して頂いてます。 エンジニア夏祭り2013「このお店とこのお店は同じ店?!」解答編 - CodeIQ Blog solv.rb # -*- coding: utf-8 -*- require 'levenshtei…

「星間飛行ルートを作ろう!」を解いてみました

CodeIQの「星間飛行ルートを作ろう! by The Essence of Programming」を解いてみました。 結果は、 でした。 なんとか正解できてほっとしています。 deep星にたどり着いたら、次はdeeper星まで。そしてdeepest星までという感じで、つぎはぎで作ってるので、…

【ベイズ】Naive Bayes(単純ベイズ)による文書分類のサンプルプログラム【Ruby】

「[を] 【ベイズ】Naive Bayes(単純ベイズ)による文書分類のサンプルプログラム【Perl】」で紹介されている数式を理解するのはなかなか難しいので、Perlで書かれたプログラムを1行1行理解しながらRubyに書き換えてみました。 mkdat4nb.rb #!/usr/bin/env r…

アッカーマンの呪い

CodeIQの「アッカーマンの呪い」に挑戦してみました。本日、フィードバックをもらったのですが、未だにA(4, 1)の求め方が理解できずにいます。 以下に、自分が作成したRubyスクリプトと実行例を載せていますが、A(4, 1)は stack level too deep (SystemStack…

LAN内の全てのホストのIPアドレスとMacアドレスを取得する(Windows版)

仕事では、Windowsを使っているので、「橋本商会 » LAN内の全てのホストのIPアドレスとMacアドレスを取得する」をWindowsでも動くようにしました。 変更したのは、 pingのオプションの変更 arpのオプションの変更 Macアドレスの区切りを':'から'-'に変更 で…

Unicodeで遊ぶ

Unicodeには、Ⓐ、ⓐなどといったマル付きの英文字があるみたいなので、英文字列を入力するとマル付き文字に変換する簡単なスクリプトを作ってみました。 maru.rb # -*- coding: utf-8 -*- class String def toMaru self.chars.map{|ch| case ch when /[A-Z]/ …

rbenvで2.0.0p0から2.0.0p195へバージョンアップ

以下は、pryやirbで日本語を扱う際、問題があったので、こちらを御覧ください。rbenvを使っているのですが、Rubyのバージョンを上げるときに、いつも忘れていることが多いので、メモを残しておきます。 バージョンアップ前 $ ruby -v ruby 2.0.0p0 (2013-02-…

「トグルスイッチを切り換えよう!」を解いてみました

CodeIQの「トグルスイッチを切り換えよう! by The Essence of Programming」を解いてみました。 結果は、 でした。正解できてほっとしています。 solv.rb # -*- coding: utf-8 -*- LEN = 10 states = [] # グレイコードを求める def gray(v) return (v ^ (v…

「キュラゲの最小包含円を求めよう」を解いてみました

CodeIQの「【計算幾何学】キュラゲの最小包含円を求めよう」を解いてみました。 solv.rb # -*- coding: utf-8 -*- CONVRGV = 1.0e-9 LOOPMAX = 100 def solvcircle(pt_x, pt_y) mvrate, maxdist = 0.5, 0.0 xsv, ysv = 0.0, 0.0 cx, cy = 0.0, 0.0 cvgflg = …

「《ピッグデータ》に負けないで!」解けず…

CodeIQの「挑戦者求む!【ウチに来ない?】《ピッグデータ》に負けないで! by The Essence of Programming」に挑戦していたのですが、結局、解けずに時間切れでした…。 小さいデータでは解けるのに、大きい(ピッグ)データになると、実行時間がかかりすぎる…

「リンゴ列をもっと短く!」をGvizで描く

予てからGvizを使って、ビジュアル化をやってみたいと思っていたのですが、なかなか取り組めずにいました。何か良い題材はないかと思っていたのですが、先日、解いた「リンゴ列をもっと短く!」のハフマン木を実際に見てみたいと思い取り組んでみました。 ap…

「リンゴ列をもっと短く!」のやり直し

CodeIQで id:hyuki さんが出題された「リンゴ列をもっと短く!」を解いてみたのですが、 でした…。ちょっと自信があったつもり(?)だったので、結果を見て残念なのですが、復習が肝心と思い、朝から何がまずかったのか考えてみました。 まず、致命的なミスは…

sayコマンドを使って英語の勉強

Macのsayコマンドは英語の勉強に使えると@shinji_kono先生からtwitterで教えていただいたので、 @maehrm 英語の勉強にも使えます。width and height を正しく発音しよう。2013-04-09 16:50:01 via Echofon to @maehrm ちょっと工夫して、「無料英語学習メル…

RaspberryPiからツィート

RaspberryPiにつなげたWebカメラで撮影した映像を添えてtwitter上でtweetしてみました。 準備 fswebcamをインストールします。 gemファイル twitter をインストールします。 # pacman -S fswebcam # gem install twitter testtweet.rb # -*- coding: utf-8 -…

rbenvでRuby 2.0.0のインストール

Ruby 2.0.0-p0がリリースされたので、早速、rbenv上にインストールしてみました。 cd ~/.rbenv/plugins/ruby-build/ git pull rbenv install -l | grep 2.0.0 2.0.0-dev 2.0.0-p0 2.0.0-preview1 2.0.0-preview2 2.0.0-rc1 2.0.0-rc2 rbx-2.0.0-dev rbx-2.0.…

プログラミング言語Ruby

下のツィートの日付を見ると、2012年5月13日には手元に届いていた本書ですが、積読状態もあったりして読み終えるのに時間がかかってしまいました。 ネットで買った『プログラミング言語Ruby』が届きました。2012-05-13 16:32:46 via Twitter for Mac 本書は…

Problem 214(その2)

昨日に引き続き、Project EulerのProblem 214(日本語)です。 いろいろと調べてみると、以下のページを見つけました。 Problem 214 - 落書き、時々落学 効率よくオイラーのφ関数が計算できるようです。実際、自分でもトレースしてみましたが計算できています…

Problem 214

Project EulerのProblem 214(日本語)です。 久しぶりにProject Eulerを解いてみました。といっても、今日から解きはじめたわけではなくて、昨年末くらいから考えては諦め、諦めては考えというのを繰り返していました。1/19にエラトステネスの篩について書い…

「グループを作ろう!」のやり直し

CodeIQで id:hyuki さんが出題された「グループを作ろう!」を解いてみたのですが、 でしたので、復習してみました。間違いの原因は、両辺のニックネームが既出だった場合が条件として漏れていたことでした。以下のプログラムで模範解答と同じ結果を得ること…

エラトステネスの篩

今まで、Project Eulerの問題で素数を扱うときは、Prime.eachを多用してきたのですが、40000000までの素数を扱う問題で、これを列挙するだけでも、かなり時間を要することに気づきました。 そこで、定番のエラトステネスの篩を作って、Prime.eachと速度比較…

ステガノグラフィって面白い

「第1回 百聞は一見に如かず〜文字列処理+画像処理=? ─小飼弾からの挑戦:エンジニアのスキルを試すコードパズル ─この問題,あなたは解けますか?|gihyo.jp … 技術評論社」を解いてみました。といっても、解説編を参考にしてです。 steganography.rb 実…

ImageMagick, RMagickのインストール

以前、Mac OS X上にImageMagick, RMagick環境を構築していたのですが、 Ruby 1.8 時代のこと port で管理していた時代のこと rvm を使っていた時代のこと なので、現在の環境 Ruby 1.9 Homebrew rbenv にインストールしてみました。 ImageMagickのインストー…

フィボナッチでRubyのバージョン毎にベンチマーク

「フィボナッチで各種言語をベンチマーク - satosystemsの日記」を見て、Rubyの各バージョン(1.8.7, 1.9.3, 2.0.0dev)での速度の違いを測ってみました。 fib.rb def fib(n) return n if (n < 2) return fib(n - 2) + fib(n - 1) end puts fib(38) 1.8.7 $ ru…

rbenvでのgem管理

pryを使ってみようとしたら、「pryコマンドはありません。1.9.3-p125には存在するけど…」と言われます。 $ pry rbenv: pry: command not found The `pry' command exists in these Ruby versions: 1.9.3-p125 pryを探してみると、確かに、1.9.3-p125以下にあ…

RSRubyのインストール

以前からR言語の存在は知っていたのですが、たぶん統計関係の処理をする言語なので、自分には関係ない、興味が持てない言語だと思っていました。ところが、ふとしたこと(↓) みなさんこの問題楽しいですよ!(ステマというわけではない)。 RT @naoya_t: この…

Problem 111

Project EulerのProblem 111(日本語)です。 resolveメソッドで、10桁の整数で、ある数字(d)を、cnt回含むような、すべての数字を生成し、それが素数かどうかを判定しています。 最初、M(n, d)の解釈を、「一番多く素数が存在する」という風に勘違いしてしま…

Problem 231

Project EulerのProblem 231(日本語)です。 より、以下のように計算できることを利用しています。 分母-分子 以下のように作ってみましたが非常に実行時間がかかります。また同じような処理が繰り返され、汚いソースになってます。もっと効率良く解く方法が…

Problem 115

Project EulerのProblem 115(日本語)です。 昨日解いたProblem 114と同じような問題でした。resolvメソッドの引数を増やしたり、2次元Hashにしたりしたのですが、不要でした…。 115.rb

Problem 114

Project EulerのProblem 114(日本語)です。 再帰とメモ化の威力はすごいですね。 114.rb

Problem 105

Project EulerのProblem 105(日本語)です。 すべての可能な部分集合の対の組み合わせについて両方のルール(i.とii.)を満たしているか調べています。 105.rb

Problem 137

Project EulerのProblem 137(日本語)です。 が のように表せるところまではできたのですが、そこから先へ進めませんでした。 Problem 137 - もうカツ丼でいいよな を参考にさせていただいたのですが、この問題でもペル方程式が姿を表わすんですね。非常に興…

Problem 243

Project EulerのProblem 243(日本語)です。 以前、Problem 69を解いたときに、「オイラーのφ関数 - Wikipedia」について学んでいたので、これを使えばいいとは思ったのですが、ただ素直に使うだけでは実行時間がかかりすぎました。 もう一歩、自分で考えつけ…

Problem 110

Project EulerのProblem 110(日本語)です。 参考サイトのPythonスクリプトを単純にRubyに置き換えただけで、まだまだ理解は足りません…。 110.rb 参考サイト Project Euler Problem 110 - San_SS!

Problem 135

Project EulerのProblem 135(日本語)です。 とおくと、 divideメソッドで、nを2数の積に分解し、解の個数をチェックしています。 135.rb

Problem 138

Project EulerのProblem 138(日本語)です。 ピタゴラス数、ペル方程式を用いて解きました。 から、 138.rb 関連 Problem 75 - Maeの(Mae向きな)日記 Problem 94 - Maeの(Mae向きな)日記 Problem 100 - Maeの(Mae向きな)日記

Problem 134

Project EulerのProblem 134(日本語)です。 最初、力技で解こうとしましたが、時間の壁に跳ね返されて途中で実行を止めてしまいました。いろいろ調べてみると「拡張ユークリッド互除法」を使うと良いようですね。以下のサイトを参考にしました。 拡張ユーク…

Problem 131

Project EulerのProblem 131(日本語)です。 「Problem 131 - 落書き、時々落学」を参考にしました。 131.rb

Problem 132

Project EulerのProblem 132(日本語)です。 「Project Euler Problem 132 - San_SS!」を参考にしました。考え方を見ると、なるほどなぁと思いますが、なかなか自分では考えつきません…。 Problem 188のModMath.powを利用しました。 132.rb

Problem 188

Project EulerのProblem 188(日本語)です。ミラー-ラビン素数判定法 - Wikipediaで紹介されているModMath.powは、baseのpower乗に対するmodのモジュロを計算してくれます。これを利用すると簡単に解くことができます。 Pythonには、pow(x,y[,z])があるようで…

Problem 174

Project EulerのProblem 174(日本語)です。 昨日のProblem 173と同じような問題でした。 $h[t]は、t枚のタイルで作れるlaminaeの個数が格納されています。例えば、$h[32]は2となります。 174.rb

Problem 173

Project EulerのProblem 173(日本語)です。 久しぶりなので、簡単な問題を選んで取り組んでみました。 173.rb

Problem 117

Project EulerのProblem 117(日本語)です。 117.rb

Problem 116

Project EulerのProblem 116(日本語)です。 116.rb

Problem 108

Project EulerのProblem 108(日本語)です。 式を変形すると、 となるので、の約数の個数を求めて重複を除いた個数で判定しています。 108.rb

Problem 98

Project EulerのProblem 98(日本語)です。 問題を選ぶときは、解いた方が多い問題から解いているので、問題番号が2桁の問題ですが、今になってしまいました。難しいのかと思いきや、そんなに難しくはありませんでした。皆さん、解けそうだと思うので、実装す…