「絶対左折禁止」の迷路を解く(Ruby)

ブログにスターを頂いて、上のサイトを知りました。オリジナルの様々な迷路が出題されている、すばらしくおもしろそうなブログです。皆さんも御覧になってはいかがでしょうか? …とは別にステマでも何でもないのですが、そこで「絶対左折禁止」という迷路が…

与えられた迷路の最短経路を求める(Go言語)

以前 Ruby で解いたのの Go言語版です。Go言語のお勉強に移植してみました。まずは実行結果。 $ go build solve_maze.go $ time ./solve_maze ************************** *S* *$$$$ * *$* *$ *$ ************* * *$*$$$* $ ************ * *$$$ * $$$$$$$ *…

ある再帰曲線を描く(Ruby)

フィボナッチのうさぎ―数学探険旅行作者: キースボール,Keith Ball,佐藤かおり,佐藤宏樹出版社/メーカー: 青土社発売日: 2006/12/01メディア: 単行本 クリック: 3回この商品を含むブログ (9件) を見るこの本で言及されている再帰曲線を Ruby で描いてみまし…

急がば回れ(Ruby)

アルゴリズム・パズルです。 問題: 上のような規則があります。縦が 5cm、横が 6cm の長方形の場合、A から B までの最長経路は何 cm でしょうか。 Ruby で解いてみました。 q50.rb W, H = 6, 5 def yoko?(y) @yoko[y].inject(:+) < 2 end def tate?(x) @ta…

反転で作る互い違い(Ruby)

アルゴリズム・パズルです。 問題: 表が白で裏が黒の 16 枚のカードがあります。まず、これらを白と黒が 8 枚ずつ連続して見えるように円形に並べます。 そして、連続した 3 枚のカードを裏返していくことにします。適当な位置でこのように反転していくとき…

Go言語で汎用両端キューの実装

Go でキューの実装は、上記事で append を使って簡単にしています。なるほどと思いました。 ふつうはこれで充分ですよね。スタックは2本のキューで実装できるので、これも簡単です。しかし、任意の型を入れられるキュー、しかもメモリを効率よく使うキューが…

Go言語でじゃんけんゲーム

Go

Go言語のお勉強にいつものじゃんけんゲームを作ってみました。こんなのでも悩みましたよ…。 janken.go(Gist) package main import "fmt" import "math/rand" import "time" type Player struct { name string point byte hand byte } func show_hand(hand …

Go言語をとりあえず使ってみる

Go

Go 1.9 で。使ってみると遊びなら C言語を使うくらいなら Go の方がいいという感じ。 Go 結構いいな。「見た目派」の自分としては、ソースの見た目がすっきりしているし。:= のおかげで型をあんまり明示的に書かなくても済むのが Rubyist にはいいっぽい。 …

Go言語を Linux Mint(Ubuntu)にインストール

基本的には上のサイトどおりにやればよい。Linux Mint 18.3 で確認。 バージョン 1.9 を apt でインストールします。 $ sudo add-apt-repository ppa:gophers/archive $ sudo apt-get update $ sudo apt-get install golang-1.9-go あとは上サイトにも書いて…

Object#method の奇妙なること(Ruby)

Object#method はメソッドをオブジェクト化してくれるのですよね。だから、こんな奇妙なブロックなしの世界が…。 [1] pry(main)> putout = method(:p) => #<Method: Object(Kernel)#p> [2] pry(main)> a = [1, 5, 4, -2, 10, 3] => [1, 5, 4, -2, 10, 3] [3] pry(main)> a.each(&putout</method:>…

Linux で tty(仮想コンソール)が黒い画面のままで起動しない

Linux Mint 18.3 Cinnamon 64 bit を使っていて端末エミュレータもふつうに使えるのですが、[Ctrl] + [Alt] + [F1] ~ [F6] で立ち上がる筈の tty(仮想コンソール)が、黒い画面のままでどうしようもありません。ここから 、[Ctrl] + [Alt] + [F8] で X Wind…

すべての組み合わせについて配列を n 個に分割する(Ruby)

Enumerable#divide(n) です。遊びで作ってみました。 配列を n 個に分割する、すべての組み合わせをブロックに渡します。ブロックが与えられなければ Enumerator を返します。 [*2..6].divide(3) {|i| p i} #=> #[[2], [3], [4, 5, 6]] #[[2], [3, 4], [5, 6…

Gem 'oekaki' にタートルグラフィックスを追加

前回のエントリで作った Turtle クラスを Gem 'oekaki' に同梱しました。これでバージョンは 0.1.5 になります。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura 使い方はほぼ同じです。インスタンスの…

タートルグラフィックスで再帰曲線をいろいろ描いてみる(Ruby)

Ruby で簡単なタートルグラフィックスを実装して、いろいろ再帰曲線を描いてみました。描画は自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura タートルグラフィッ…

『プロを目指す人のための Ruby 入門』を読んでみた

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)作者: 伊藤淳一出版社/メーカー: 技術評論社発売日: 2017/11/25メディア: 大型本この商品を含むブログを見る 評判がよいので読んでみました。…

無駄に複雑な関数型 FizzBuzz(Ruby)

trans = ->(i) { if i % 15 == 0 "FizzBuzz" elsif i % 3 == 0 "Fizz" elsif i % 5 == 0 "Buzz" else i.to_s end } fizzbuzz = ->(n) { generate = ->(i, ar) { return ar if i > n generate[i + 1, ar + [trans[i]]] } generate[1, []] } p fizzbuzz[50] 何…

ふたたび Ruby で 8 queen(関数型プログラミングっぽく)

ここで Ruby で「8 クイーン問題」を解いてみましたが、関数型プログラミングのお勉強に Common Lisp のコード例を移植してみました。参考にしたのはこのサイトです。 実行するとこんな感じです。 ---------- No.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 require 'oekaki' circles = [] check = lambda do |x, y, r| return false if x < r or y < r or x > 500 - r or…

「シェルピンスキーのギャスケット」を描いてみる(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アドレスで…