Ruby

Ruby で簡単な Gray-Scott

qiita.comここの Python 版を Ruby に移植しただけです。計算に Gem 'numo-narray' を使っています。画像化には Gem 'gdk_pixbuf2', 'rmagick' を使いました。できたものはこんな感じ。 Ruby コード。Ruby 2.6.0, Linux Mint 19.2 で動作確認。 gray_scott.r…

文字列を一文字づつ飛ばし文字にするのこと(Ruby)

まず、「esehara」という文字列がある。この文字列を「eeaa」といったように、一文字ずつ飛ばし文字にするにはどうしたらいいか http://bugrammer.hateblo.jp/entry/2016/10/24/175704 あるブログでこんなのを見て考えてみた。コード例。 def one_jump(str) …

GTK+ で落書き 18(Ruby)

どうでもよいのですが、遊んでみました。 種がそれっぽく描けない…。oekaki_sample24.rb require 'oekaki' include Math rs = 64 * (270 - 45) rd = 64 * 90 Oekaki.app do draw do clear red = color(0xffff, 0, 0) green = color(0, 0xffff, 0) black = co…

Ruby の dup と clone

Ruby でプロトタイプベースの OOP っぽいのをやるとき、ちょっと疑問に思ったので。dup でオブジェクトをコピーすると、特異メソッドはコピーされません。なのでこれではプロトタイプベースの OOP には向きません。 $ pry [1] pry(main)> a = Object.new => #<Object:0x000055900f87b7f8></object:0x000055900f87b7f8>…

推理判断のプレゼント交換の問題

rsc.hatenablog.comrsc さんのブログから問題を拝借しました。# 問題: A~Eの5人がプレゼント交換をした。5人とも自分以外の人から1つずつプレゼントを受け取ったが、プレゼントを渡した相手からプレゼントを受け取った人はいなかったという。さらに…

これだったら Ruby も関数型言語?

anopara.net わたしは初級者プログラマですが、ここでの話は納得、というか、Ruby プログラマなら常識みたいな話でもあると思います。Ruby はふつうに書いて関数型プログラミングのエッセンスを抽出しているといわれることもありますが、Ruby が関数型プログ…

Ruby でマンデルブロ集合を描画

qiita.comQiita 記事を見てやってみたくなりました。ほとんどパクリです。Numo::NArray を使っています。 実行結果。 コード。 mandelbrot_narray.rb require 'numo/narray' require 'gdk_pixbuf2' include Numo MaxCalc = 5000 #最大計算回数(数字が大きい…

チャーチ数の簡単な計算(Ruby)

Wikipedia の OCaml の項目を読んでいたら、OCaml ではチャーチ数の計算がきれいに書けることを知った。 let zero f x = x let succ n f x = f (n f x) let one = succ zero let two = succ (succ zero) let add n1 n2 f x = n1 f (n2 f x) let to_int n = n…

「Ruby初心者向けのプログラミング問題」を解いてみる

blog.jnito.comやってみました。 カレンダー作成問題 ここで似たようなことをやっているので省略。(ただし、Date クラスは使っていません。) カラオケマシン問題 class KaraokeMachine Key = %w(C C# D D# E F F# G G# A A# B) def initialize(melody) @sc…

Gem 'Ruby2D' でテトリス

Ruby でゲーム制作を意識したグラフィック・ライブラリ 'Ruby2D' でテトリスを作ってみました。完全にオリジナルの実装です。ソースは以下。 Ruby2D を使ったテトリス · GitHub 'Ruby2D' については以下で紹介しています。 obelisk.hatenablog.com ゲームは…

ハッシュによる美しいメモ化(Ruby)

qiita.com元ネタはこれです。 Ruby のハッシュにはこのようなデフォルトの与え方があります。 h = Hash.new {|hash, key| hash[key] = default} これを利用して、こんな風にフィボナッチ数列をメモ化で計算できます。 fib = Hash.new do |hash, n| hash[n] =…

ブログ「hp12c」の一問題(Ruby)

またまた Ruby ブログ「hp12c」からの問題(?)です。 melborne.github.io さて、データ data = <

線分の交点(Ruby)

4点 があるとき、線分 と の交点を求めるメソッド。 require 'matrix' def cross(x1, y1, x2, y2, x3, y3, x4, y4) a = Matrix[[x2 - x1, x3 - x4], [y2 - y1, y3 - y4]] .lup.solve([x3 - x1, y3 - y1]) rescue nil return nil unless a s, t = a[0], a[1] …

Ruby のローカル変数登録について

以下の Ruby コードを見てほしい。 if false a = 1 end p a #=>nil if true nil else b = 1 end p b #=>nil c = 1 if false p c #=>nil while false d = 1 end p d #=>nil いずれも nil を出力し、「undefined local variable or method」の NameError は出…

二次元配列の行(あるいは列)を入れ替える(Ruby)

Julia では簡単とあったので(よく知らない)、Ruby で考えてみた。まず二次元配列を作る。 $ pry [1] pry(main)> ary = (1..100).each_slice(10).to_a => [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 2…

Ruby と rcairo でベジェ曲線を描いてみる

ベジェ曲線(Wikipedia)は滑らかな曲線を描くために使われるものです。いくつかの「制御点」を指定して描きます。計算はそんなにむずかしくなくて、上の Wikipedia の記事で充分わかりますし、ネット上にわかりやすい記事がたくさんあるので検索してみて下…

Gem 'Ruby2D' でライフゲーム

いつもの得意技(?)のライフゲームです。Ruby 用のグラフィック・ライブラリ 'Ruby2D' を使っています。コード。 lifegame_for_Ruby2D.rb require 'ruby2d' include Ruby2D::DSL class LifeGame CellWidth = 10 Margin = 20 Space = 2 SideWidth = 35 W = …

Gem 'Ruby 2D' で遊ぶ(1)

Ruby でグラフィック表示のできる Gem 'Ruby 2D' で遊んでみました。アニメーションをしています。三角が丸たちの上にあります。色は半透明になっています。 コード。 ruby2d_sample2.rb require 'ruby2d' Width = 500 C = 15 R = 20 L = 150 set width: Wid…

Gem 'Ruby 2D' でお絵かきしてみる

これまで Ruby でのグラフィック描画には自作の Gem 'oekaki' を使ってきましたが、高機能で簡単に使える Gem 'Ruby 2D' がリリースされたのでちょっと使ってみました。 www.ruby2d.com インストール Window, Mac, Linux で使えるようですが、Windows は Min…

線分への垂線の足を求める(Ruby)

点 P から線分 AB への垂線の足 H を求めます。Ruby の標準添付ライブラリ 'Matrix' を使います。コード。 require 'matrix' def perpendicular_foot(a, b, p) s = Rational((p - a).dot(b - a), (b - a).dot(b - a)) [h = a + (b - a) * s, s, (h - p).norm…

男女平等な席替え(Ruby)

アルゴリズム・パズルです。 男女15人ずつ、計30人のクラスがあります。 横 6、縦 5 の長方形に配置された机に30人が座るとき、どの生徒の席でも前後左右のいずれかに異性の席があるように座るそのしかたは、全部で何とおりになるでしょうか。 ただし、座り…

四則演算のパーサー(Ruby)

ある問題を解いていて、四則演算のパーサーってどんな風に書くのだろうと思って考えてみました。いわゆる「逆ポーランド記法」にパースできればあとは簡単なので、その方針で考えたのですが、自力ではちょっと荷が重かったですね。ということで検索してみた…

Ruby で二分探索木

勉強のために Ruby で二分探索木を書いてみました。 二分探索木の Ruby 実装 · GitHub なお、以下のコードは説明のためなので、Gist のコードを多少簡略化しています。 木(Tree)のクラスと要素(Node)のクラスを定義します。Node は Struct クラスを使っ…

Ruby の素敵なワンライナーコマンド「rb」

ふらふらと yhara.jp を見ていたら、sedやawkが覚えられないRubyistのための「rbコマンド」という記事があって大変におもしろかったです。Ruby には -n や -p といったワンライナー用のオプションがあるのですが、自分はこれが覚えられない。sed も awk も覚…

隣り合わないのがマナー?(Ruby)

アルゴリズム・パズルです。 電車の中に 6人がけのロングシートが向かい合いになって、計12の席があるとします。 すべて空いている状態からすべてが埋まるまで、両隣が空いている空席があるときはそちらから座るというルールで、全部で何通りの席の埋まり方…

Linux Mint 19(Ubuntu 18.10)に Bundler で Ruby/Tk を入れる

Ruby 2.6.0 では以下の方法では tk はインストールできないようです。対策はいまのところわかりません。 なお、Bundler を使わず gem install でインストールするのは成功するので、tk の問題なのではなく、Bundler の問題なのかも知れません。(2019/1/26)…

4つの数で 10 を作る(Ruby)

テンパズル - Wikipedia 1桁の4つの数と四則演算で、10 を作るコードを Ruby で書いてみました。括弧は使ってもよいことにします。実行例。 $ ruby make_ten.rb [2, 7, 3, 9] で 10 を作る (2 + 3) * (9 - 7) (7 + 9) - (2 * 3) 9 + (7 - (2 * 3)) 9 - ((2 *…

Ruby で ANSIエスケープシーケンスを扱う

Ruby を使っているとき、Linux でのターミナル表示の処理の仕方をすぐ忘れてしまうので、簡単なライブラリを作った。 以下はこんな画面を作るコード。 require_relative 'es' res = ES.reset print ES.clear puts ES.color(:style, :blink) + ES.color(:gree…

クロスワードパズルを作成せよ!(Ruby)

アルゴリズム・パズルです。 クロスワードを作る場合、空白と黒マスについて次のルールがあります。 黒マスは縦横に連続しない。 黒マスによって盤面が分断されてはいけない。 黒マスルール - Wikipedia これを「黒マスルール」といいます。 さて、縦 5、横 …

浮動小数点演算の謎

30年前の名著「数値計算の常識」を読んでたらBASICで0.01を10000回足したら100.003になるとか書いてあった。まあ昔のPCなんてそんなものかなと思いながら、Visual Studio 2017で試してみたら同じ結果だったw pic.twitter.com/HBwJhlhZjc— mはげ (@Tw_Mhage…