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

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

無題

言語そのものはそうなのだけど、gem名がチャラい。いやチャラいことそのものはいいんだけど「これしたい」の「これ」でぐぐっても引っかからない。nokogiri って文字列を見てそれが何するか初見でわかる? https://t.co/57RYrCz7Qi— Dan Kogai (@dankogai) 20…

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

Linux でディレクトリのバックアップ

rsync コマンドで簡単にディレクトリのバックアップが取れます。.bashrc に以下の alias を定義しました。home フォルダをバックアップします。 alias backup_mint='sudo rsync -au --delete /home/TA/ "/media/TA/Transcend/Linux Mint 18 backup/TA"' TA …

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…

クソコードを書きたい

このところ全然コードを書いていないのですが、プログラミングに関心がなくなったわけではありません。というか、しばらくは AIZU ONLINE JUDGE にかなり熱中していました。 http://d.hatena.ne.jp/obelisk2+marginalia/20180426/1524756813 http://d.hatena…

ズンドコキヨシ(Ruby)

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

選択ソート(C言語、Go言語)

選択ソートは決められた範囲の中から最小値(もしくは最大値)を選んでいくという、わかりやすいソートです。C言語版。 selection_sort.c #include <stdio.h> void selection_sort(int ar[], int len) { int i, j, min, tmp; for (i = 0; i < len - 1; i++) { min = i</stdio.h>…

高速な素数の判定(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, …

Ruby で Proc とブロックの相互変換について

Ruby で Proc オブジェクトとブロックは似ていますが、まったく同じものではありません。むしろ、表裏一体の関係にあるというべきでしょう。その証拠に、「&」を使ってブロックから Proc へ、また Proc からブロックへとお互いに変換することができます。 ま…

カードゲーム「ブラックジャック」を Ruby で実装する

Qiita を見ていたら「初心者はブラックジャックを実装してみるといいよ」とかいう記事があったので、おもしろそうだと Ruby で実装してみました。とりあえず実行例を見て下さい。 $ ruby blackjack.rb カードをシャッフルします コイン: 10000 点 ベットは?…

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

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

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

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

格子点の列挙(Ruby)

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

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

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

RubyPico でライフゲーム

RubyPico には clearprint という独自のメソッドがあるので、文字でアニメーションのようなことができます。なので、いわゆる「コンウェイのライフゲーム」を実装してみました。またライフゲームかって言わない。こんな感じです。iPad mini の画面です。 コ…

RubyPico でカレンダーを表示させてみた

obelisk.hatenablog.com ここでの Ruby スクリプトを移植してみました。 入力はこんな感じ。 出力。 コードはこちらです。もともと(遊びで)Date クラスを使わずにコーディングしていたので、Date クラスのない mruby でも動いてちょうどよかったな。 obeli…

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

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

パスカルの三角形(Haskell)

「パスカルの三角形」というのはこういうやつですね。 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 この出力を目標に、Haskell で書いてみます。以前に Ruby で書いてみました。そのコードを再掲しましょう。 pascal…

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

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