2018-01-01から1ヶ月間の記事一覧

パスカルの三角形(Ruby)

パスカルの三角形とは、こんな感じのものです。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 規則性がわかりますね。多項式 (a + b)n を展開すると、係数がこんな風に並びます。Ruby で関数型プログラミングっぽく書…

n進グレイコード(Ruby)

ゆえあって n進グレイコードへの変換式を作ることになった。 グレイコード - Wikipedia グレイコードについてはここにあるとおりである。2進グレイコードなら、ネットを検索すればたくさん出てくる。具体例は、Ruby のハッシュで表すとこんな感じだ。 {"0"=>…

その日は何曜日? (Ruby)

Ruby で日付から曜日を知るにはどうしたらよいか、遊びで考えてみました。 下のコードを実行すると、こんな感じ。 曜日を知りたい日付をコマンドライン引数にして実行します。 $ ruby what_day_of_the_week.rb 1989.1.8 1989-01-08 は 日曜日です。引数なし…

ソートの交換回数の最小化(Ruby)

アルゴリズム・パズルです。 問題: 例えば 1~3 の数字が任意に並んだ 3桁の数字を、各桁の入れ替えによってソートする場合、その入れ替えの数が最小になるようにソートしたとします。たとえば 231 なら 231→132→123 で 2回の入れ替えになります。これをすべ…

素数のマトリックス(Ruby)

アルゴリズム・パズルです。 問題: 1 1 3 2 3 3 7 9 7 3桁の異なる素数3つを選びます。これら(例えば 113, 233, 797)を上のように横に行列で並べたとき(行を入れ替えたものは別の行列とみなします)、行列を縦に見て得られる3つの数(ここでは 127, 139,…

グラスの水を半分に(Ruby)

アルゴリズム・パズルです。 問題: すべて大きさのちがう3つのグラス A, B, C があります。その容積は A = B + C, B > C(ただしすべて自然数)で、かつ B と C の値は互いに素とします。 まず、A のグラスに水をいっぱいに入れます。ここから水をどんどん…

Gosu + Chipmunk で遊ぶ(Ruby)

物理エンジン Chipmunk + Gosu でごく簡単なドミノ倒しみたいな動画を作ってみました。Ruby 2.3.3, Linux Mint 18.3 で確認しました。gosu_chipmunk_sample3.rb require 'gosu' require 'rmagick' require 'chipmunk' CV = CP::Vec2 Width, Height = 500, 20…

GTK+ で落書き 14(Ruby)

自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura oekaki_sample17.rb require 'oekaki' Width = 500 circles = [] #作った円の情報を保持しておく配列 check = ->(…

「シェルピンスキーのギャスケット」を描いてみる(Ruby)

「シェルピンスキーのギャスケット」を Ruby で描いてみました。 フラクタルな図形なので正確ではないですが、7次まで描いてみました。描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみ…

指定したディレクトリ以下から再帰的にファイルをランダムに取ってくる

と思ったけど簡単だった— JI@わんわんコンサル (@jaialkdanel) 2018年1月16日 へー、Ruby ではどうやるかなとちょっと考えてみた。 require 'find' def get_filenames_randomly(directory) Find.find(directory).select {|x| File.file?(x)}.shuffle.to_enum…

ハノイの塔をプログラミングで解く

ハノイの塔とは一種のパズルで、ルールは以下のようです。 3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。 最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。 円盤を一回に一枚ずつどれかの杭に移…

物理エンジン Chipmunk を Gosu で表示(Ruby)

2D物理エンジン「Chipmunk」を Ruby から使ってみました。表示には Gem 'gosu' を使っています。Linux Mint 18.3, Ruby 2.3.3 で確認しました。 gosu_chipmunk_sample2.rb (Gist) require 'gosu' require 'rmagick' require 'chipmunk' Width, Height = 600,…

美しい?IPアドレス(Ruby)

アルゴリズム・パズルです。問題。 IPアドレスは例えば 192.168.1.2 のように表せますね。これは2進数で32ビットの数字を、8ビットずつに区切ってさらに10進数で表した形式になっています。 ここで、0~9 のすべての数字が 1度ずつ現れたような IPアドレスで…

並べ替えの繰り返し(Ruby)

アルゴリズム・パズルです。問題。 1~9 のカードを横一列に適当に並べ替えます。そこからスタートして、左端のカードの数字の枚数だけ、左からカードを取って逆順にし、また置き直します。例えば [4, 5, 6, 7, 8, 9, 1, 2, 3] だったら [7, 6, 5, 4, 8, 9, 1…