Ruby

1時間以内に解けなければプログラマ失格?

blog.kazuhooku.comここで次のような問題を見つけました。 1,2,…,9の数をこの順序で、”+”、”-“、またはななにもせず結果が100となるあらゆる組合せを出力するプログラムを記述せよ。例えば、1 + 2 + 34 – 5 + 67 – 8 + 9 = 100となる。 1時間以内に解けなけ…

GTK+ とソケットを使ってチャット通信(Ruby)

Ruby/GTK2 の使い方が少しづつわかってきたので、ソケットを使ってチャット通信ソフトを作ってみました。上の例では Linux Mint 18.3 と Ubuntu Budgie を使って実行しています。まずはサーバ側を立ち上げます。これはふつうに $ ruby oshaberi.rb と実行す…

Gem 'oekaki' のリファレンスを作る

http://obelisk704.web.fc2.com/ruby/oekaki_document.html いまさらながら Gem 'oekaki' のリファレンスを書いたので、よろしければ使って下さい。

Ruby/SDL でテトリス

いやこれ、僕が作ったのではないのですよ。Gem 'rubysdl' のサンプルとして付属していたものを、多少改変しただけですが、きれいなコードで勉強になったのでここにメモしておきます。コードは Gist に上げておきました。 Ruby/SDL でテトリス · GitHub あと…

ランダムかつ重複しないように文字列を生成する(Ruby)

あることのために必要だったので、複数の文字列をランダムかつ重複しないように生成するメソッドを書いてみました。こんな感じです。 $ irb irb(main):001:0> require_relative "generate_random_strings" => true irb(main):002:0> Utils.generate_random_s…

Ruby/Rouge でコードをシンタックスハイライトした HTML と CSS を出力させる

Ruby コードを HTML化して、ついでにシンタックスハイライトもできるようにできないか、やってみました。 画像だとこんな感じです。全体はこういう風です。RubyGem 'rouge' というものを使いました。インストールはふつうに $ gem install rouge とかBundler…

Ruby で関数型プログラミングっぽく(コピペ) + Haskell 版

parrot.hatenadiary.jpここのブログ記事を読んで感銘を受けました。だからこれを読んでもらえればよいのですが、せっかくなのでコピペしておきます。元記事に感謝です。まずは問題。 ある数字にそれを逆に並べた数字を足すという計算を、 回文数(上から読ん…

Ruby/SDL を使ってみる

これまで Ruby で画面に線を引いたり円を描いたりするのに、自作の Gem 'oekaki' を使ってきましたが、その中では Gem 'gtk2' を使っていて、たかがお絵かきに GTK+ を使うのは大袈裟すぎるようにも思われたので、Ruby/SDL を使ってみることにしました。Linu…

交差せずに一筆書き(Ruby)

問題: 長方形状に横 5 個、縦 4 個の格子点が全部で 20個、等間隔に並んでいます。このすべての格子点を一筆書き(交差してはならない)で辿るとすると、その辿り方は全部で何とおりあるでしょうか。 ただし進む方向は上下左右のみで、また始点と終点が反対…

Ruby でファイル転送(改良版)

obelisk.hatenablog.comローカルエリア内に PC が散らばっているので以前ファイル転送のコマンドを作ったのですが、1つのファイルしか転送できないとか、バイナリファイルは転送できないなど使いにくいところがあったので、それらに対応してみました。本当は…

Ruby で簡単なレイトレーシング(メモ)

Rubyでレイトレーシングした - yhara.jp 上の画像はここの ray5.rb を実行したもの。なおこれは ppm 画像ファイルのデータを出力するコードであり、 $ ruby ray5.rb > rayimg.ppmみたいに実行するとよい。ppm 形式については http://ruby.kyoto-wu.ac.jp/~ko…

μSchemeR の Ruby による実装を読む(その4 - 再帰、純粋関数型言語の完成)

まずは if文を実装しましょう。書き方はこんな感じ。 [:if, [:>, 3, 2], 1, 0] まずは従来のメソッドを書き直します。(あとで :letrec も実装するので、それも書き加えています。) def special_form?(exp) lambda?(exp) or let?(exp) or letrec?(exp) or i…

Ruby/GTK+ でちょっと考えた

以前に Ruby の GUI で、ここの Ruby/Tk でやろうとしていることを Green Shoesでやろうとしてみた。 obelisk.hatenablog.com でもそれは元記事の意図とはちがっていて、「ボタンを押した時に、多重入れ子構造で内側に配置したウィジェットから外側に定義し…

μSchemeR の Ruby による実装を読む(その3 - クロージャ)

:lambda にクロージャを実装する前に、let文を実装します。 [:let, [[:x, 3], [:y, 2]], [:+, :x, :y]] は [[:lambda, [:x, :y], [:+, :x, :y]], 3, 2] と同等です。実装。単純です。:lambda に変換しているだけです。 def eval_let(exp, env) parameters, a…

μSchemeR の Ruby による実装を読む(その2 - 無名関数)

簡単な演算ができるようになったので、次に無名関数を実装してみます。具体的には、 [[:lambda, [:x, :y], [:+, :x, :y]], 3, 2] というような関数を評価することを考えます。これは Ruby でなら lambda do |x, y| x + y end.call(3, 2) みたいなものですね…

μSchemeR の Ruby による実装を読む(その1 - 簡単な演算)

つくって学ぶプログラミング言語 RubyによるScheme処理系の実装【電子書籍】渡辺昌寛達人出版会発行日: 2013-04-15対応フォーマット: PDF, EPUB詳細を見る言語処理系のお勉強をしようと思って調べてみたところ、上の文書を見つけました。Ruby で Scheme の一…

数字のループ(Ruby)

何となくやってみました。 $ pry [1] pry(main)> 5.times {|i| puts i} 0 1 2 3 4 => 5 [2] pry(main)> (1..5).each {|i| puts i} 1 2 3 4 5 => 1..5 [3] pry(main)> 1.upto(5) {|i| puts i} 1 2 3 4 5 => 1 [4] pry(main)> for i in 1..5 [4] pry(main)* pu…

OpenGL で 3D迷路(Ruby)

以前、平面の迷路の中を歩いてみるようなプログラムを作りましたが(参照)、今回は迷路も立体にしてみました。検索するとよくある、平面の迷路を立体視した「3D迷路」ではなく、迷路そのものが立体なのです。3D迷路を歩くとでも申しましょうか。デフォルト…

『Ruby でつくる Ruby』を読む

このところ Rails 本以外の Ruby 本があまり出ないので、Rubyist としてはつまらないところもあるのですが、出る本は『プロを目指す人のための Ruby 入門』(このブログでの感想)などのように、いい本があります。本書は Ruby コミッターでもある通称「まめ…

GTK+ で落書き 17(Ruby)

アニメーションです。ランダムに次々と長方形で塗りつぶしていきます。単純だけれど、なかなかポップだと思うのですが。 自作の RubyGem 'oekaki' を使っています。Ruby コードは以下。 oekaki_sample21.rb require 'oekaki' Width, Height = 500, 500 Oekak…

L-system で落書き(Ruby)

自作の Gem 'kaki-lsystem' を使っています。 再帰曲線を描く言語「L-system」を Ruby で実装した - Camera Obscura Ruby コード。 lsystem_sample5.rb require 'kaki/lsystem' l = Lsystem.new(500, 500) l.set("+") {right(50)} l.set("-") {left(50)} l.s…

GTK+ で落書き 16(Ruby)

引き続き Gem 'oekaki' のタートルグラフィックスの機能を使ってお絵かきです。これもよくある「木」です。 Ruby コード。 oekaki_sample20.rb require 'oekaki' Oekaki.app width: 400, height: 500 do draw do clear(color(0xf82c, 0xec45, 0xa7cd)) t = O…

GTK+ で落書き 15(Ruby)

GTK+ で落書きです。よくあるやつですね。 Ruby の自作の Gem 'oekaki' のタートルグラフィックスの機能を使っています。 oekaki | RubyGems.org | your community gem host Gem 'oekaki' にタートルグラフィックスを追加 - Camera Obscura コード。 oekaki_…

GTK+ で電卓(Ruby)

GUI で電卓なんて簡単にできるだろうと思ったら大間違いでした。Ruby コード。 dentaku.rb require 'gtk2' class Calculator def initialize(entry) @entry = entry clear end def input(n) a = ["AC", "C" , "√", "**", 7, 8, 9, "+", 4, 5, 6, "-", 1, 2, …

騎士の巡歴、あるいはナイト・ツアー(Ruby)

「騎士の巡歴」とは、チェスの「騎士(ナイト)」の駒を使って、チェス盤のマスを一度づつ移動していき、最終的にすべてのマスを訪れるというパズルです。「騎士」の駒は将棋の「桂馬」とよく似た動きをしますが、すべての方向に飛べるだけ桂馬とちがいます…

宣教師と人喰い人(Ruby)

次の有名な問題があります。 問題: 宣教師 3人と人喰い人 3人が、船で川を渡ろうとしています。船は 2人まで乗れますが、最低 1人いなければ動かせません。ここで、こちらの岸もあちらの岸も、また船の上でも、宣教師の数が人喰い人の数を下回ると喰われて…

フーリエ級数による簡単な温度分布(Ruby)

下部が高温熱源、両端が低温熱源の際の平衡状態の温度分布を図示してみました。微分方程式 を、境界条件 で解くと、 となります。これを図示すると という感じになります。 Ruby コード。表示には自作の Gem 'oekaki' を使っています。 oekaki_sample18.rb r…

ズンドコキヨシ(Ruby)

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた—…

高速な素数の判定(Ruby)

素数は約数を 2個(1 とそれ自身)もつ自然数ですね。ですから、自然数 n が素数かどうかを判定するには、n がそれ自身より小さい自然数(1 を除く)で割ることができるかどうかを確かめればよいわけです。このとき、割る数は を超える必要がないことは明ら…

ひとつのサイコロの配置の数

ひとつのサイコロを特定の方向から見たばあい、その「見かけ」は全部で何とおりあるのでしょうか。 Ruby で解いてみました。コード。 table = {E: [3, 2, 6, 1, 5, 4], N: [5, 1, 3, 4, 6, 2], S: [2, 6, 3, 4, 1, 5], W: [4, 2, 1, 6, 5, 3], R: [1, 4, 2, …