Ruby

クロージャを使ったカウンター

新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 - Qiita を見ていたら、クロージャを使っておもしろい仕方でカウンターが作れることを知った。元のコードは JavaScript のようであるが、Ruby だとこんな感じ。 $ pry [1] pry(…

「モンティ・ホール問題」をシミュレートする(Ruby)

rubyでモンティホール問題に挑戦 - Qiita ここでいわゆる「モンティ・ホール問題」を Ruby でシミュレートしているのを目にして、自分なりにやってみたくなりました。「モンティ・ホール問題」とはこういうものです。 三つの扉があり、その向こうのひとつに…

格子点の列挙(Ruby)

格子点の列挙 - みずぴー日記 ここの問題で遊んでみました。問題を再掲しておきます。 二次元平面上の格子点(X,Y座標がともに整数の点)を、原点から近い順に列挙してください。 同じ距離の点はどういう順番でも構いませんが、可能であればX軸に一番近い第一…

モジュール内の特定のメソッドだけ include する(Ruby)

Ruby のモジュールは include でメソッドを Mix-in できますが、定義したすべてのメソッドが include されてしまって、特定のものだけ include するわけにはいきません。そのくらいできそうなので何か簡単なやり方があるのかもしれません。とにかく、考えて…

いわゆる「コンウェイのライフゲーム」をエディタ付きで実装してみた(Ruby)

これまで コンウェイのライフゲームを Ruby で実装してみた - Camera Obscura ライフゲームの CoffeeScript 版 - Camera Obscura コンソールでライフゲーム(Ruby) - Camera Obscura などで「ライフゲーム」を実装してきましたが、フィールド・エディタが欲…

和暦 (明治 大正 昭和 平成) と西暦の変換をおこなう(Ruby)

簡単な遊びのプログラムが作りたかったのでやってみました。Date クラスは使っていません。こんな感じです。コマンドライン引数を指定します。 #西暦から和暦 $ ruby gengou.rb 2018 平成30年 $ ruby gengou.rb 1945 昭和20年 $ ruby gengou.rb 1912 明治45…

Ruby でイケてないコードを→「いいね」→「スゲーいいね」にリファクタリング?

qiita.com 自分が「Ruby + リファクタリング」でぐぐると上のサイトがいちばん最初にヒットする。内容は題名どおり。添削者はすごい上級者プログラマらしい。添削された人には気の毒なのだけれど、勝手に引用してみる。まず「イケてない」コード。(ごめんな…

Ruby でカレンダーを出力してみた

特定の年と月を指定して、カレンダーを出力するプログラムを書いてみました。標準添付ライブラリの Date クラスを使ってはつまらないので、自力で計算しました。 calender.rb month_table = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #うるう年…

素因数分解(Ruby)

素因数分解は結局素数で順に割っていくしかないのだけれど、素数をわざわざ求めてというのは却って大変ですね。うまいやり方としては、2 および 3 以上の奇数で割るという方法があります。これは多少のムダは出るけど、全部の数で割るより効率的ですね。さら…

L-system で描いた再帰曲線の例

obelisk.hatenablog.com 前回のエントリで Ruby で実装してみた L-system を使って、実際に再帰曲線を描いてみます。Gem 'kaki-lsystem' が必要です。 C曲線。 コード。 require 'kaki/lsystem' l = Lsystem.new(600, 500, "C curve") l.move(-130, 100) l.p…

再帰曲線を描く言語「L-system」を Ruby で実装した

L-system って何でしょうか。Wikipedia にはこうあります。 L-system(エルシステム、Lindenmayer system)は形式文法の一種で、植物の成長プロセスを初めとした様々な自然物の構造を記述・表現できるアルゴリズムである。自然物の他にも、反復関数系(Itera…

ジュリア集合を描いてみる(Ruby)

ジュリア集合(Julia set)を Ruby で描いてみました。 描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura コード。 julia_set.rb require 'oekaki' Width, …

あみだくじの横線(Ruby)

アルゴリズム・パズルです。 問題: 1 ~ 7 の数字を並べてあみだくじを作ることを考えます。引く横線の数を 10本とするとき、下に得られる数字の並びは何とおりになるでしょうか。ただし、下に得られる数字の並びが 10本より少ない横線のあみだくじで既に得…

公平に分けられたケーキ(Ruby)

アルゴリズム・パズルです。 問題: 16cm × 12cm の長方形のケーキがあります。二人で交互にケーキを切るのですが、ケーキを切った人が小さい方のケーキを取り、交代して残りをさらに切るというようにします。(ただし切り方は、辺に平行に直線的に切り、し…

GTK+ でカラーパレットを作る(Ruby)

いつも色がうまく選べないので、自分用に GTK+ を使って色を試すことのできるコマンドを作ってみました。Gem 'thor', 'gtk2' が必要です。コード。 color_p require 'thor' require 'gtk2' class MyWindow < Gtk::Window def initialize super("color palett…

スパイログラフを描いてみる(Ruby)

スピログラフ デラックス 【日本正規品】出版社/メーカー: ビバリー発売日: 2016/06/11メディア: おもちゃ&ホビーこの商品を含むブログを見る「スパイログラフ」というのは商品名で、数学的には「内トロコイド」というものになります。2つの円を組み合わせ…

意味不明なコード(Ruby)

笹田さんがツイートしておられた。# よくわからないプログラムdef foo a return true if a else return falseend— _ko1 (@_ko1) 2018年2月27日ホント意味不明。これ実行できるのかと思って試してみた。 $ pry [1] pry(main)> def foo a [1] pry(main)* retur…

横着なそろばん(Ruby)

アルゴリズム・パズルです。 問題: そろばんで例えば「8 + 9」をこの順に計算すると、「8 を入れる」のに玉を 4つ動かし、「9 を足す」のに玉を 2つ動かすので、全部で 6回玉を動かすことになります。また、逆に「9 + 8」の順に計算すると、全部で玉を 8回…

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

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

ある再帰曲線を描く(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 枚のカードを裏返していくことにします。適当な位置でこのように反転していくとき…

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

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

Array#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 ※追記 Gem化しまし…

『プロを目指す人のための 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 で関数型プログラミングっぽく書…