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

Python の Turtle でヒルベルト曲線

タートルグラフィックスは再帰的な図形を描くのに適しています。Python では組み込みで簡単にタートルグラフィックスが利用できるので(参照)、ヒルベルト曲線を描いてみました。5次のヒルベルト曲線です。 コードは以下です。驚くほど簡単ですね。 from tu…

Windows と Linux のデュアルブート時に時計がずれるのを修正する

Windows と Linux では時間の取り扱い方がちがうので、デュアルブートしている場合は時刻がずれる場合があります。具体的にいうと Linux は UTC(協定世界時)を採用しており、Windows のシステムでは localtime を採用しているからです。どちらを修正するこ…

GTK+でヒルベルト曲線(Ruby)

前記事の Ruby/GTK+ 用のモジュールを使って、ヒルベルト曲線を描いてみました。Ruby/Tk 版(参照)と殆ど同じです。 require './mygtk' class Draw def initialize(n, slot) @lgth = Width / 2 ** n @y = (Width - @lgth * (2 ** n - 1)) / 2 #見栄えを整え…

GTK+でお絵かきしてみた(Ruby)

(後記:2018/9/22) Gem の使い方のリファレンスを作りました。 Gem 'oekaki' リファレンス Ruby だけだと遊びで線を引く程度のことも簡単でないので、Ruby で GTK+ を使ってシンプルにお絵かきするだけのモジュールを書いてみました。できるのは、点を打つ…

gnuplot で陰関数の表示(Ruby)

Python の matplotlib の plot_implicit による陰関数の描画がどうも信用ならないので、gnuplot でやってみることを考えた。しかし gnuplot 自体には陰関数を直接描画する機能はないので、工夫が必要となる。gnuplot で陰関数を描く 基本的には上サイトでや…

Python で陰関数のグラフの表示

ここを参考にしました。関数は id:mathnb さんの出題されたものです(参照)。コードはこんな感じ。plot_implicit というのが陰関数の表示なのでしょうね。 from sympy import * x, y = symbols("x y") f = x ** 6 + 3 * x ** 4 * y ** 2 + 6 * x ** 4 * y -…

2抜きを許したストラックアウトの抜き方(Ruby)

1 2 3 4 5 6 7 8 9 ストラックアウトといって 3×3 のボードに玉をぶつけて数字を抜いていく遊びがありますね。その抜き方は何通りあるでしょうといえば、9!(9の階乗)通りとすぐ求められてつまらないので、2抜きを許します。つまり、ひとつの玉で同時に、隣…

Python に連立方程式を解かせる

定点を通る球の接平面 - オベリスク備忘録 上では手計算で解いたのですが、Python で機械的に解けるようなので。Sympy というライブラリを使っています。おお、すごい。これ、ライブラリはどうやっているのかな。 ※参考 Pythonを使って一瞬で連立方程式を解…

スニーカーの靴紐の通し方についての問題(Ruby)

問題: スニーカーに靴紐を通すのに、左右に6個づつ、計12個の穴があるとします。色いろな通し方がありますが、左右の穴に交互に紐を通していった場合、紐が交差してできる点の数の最大値はいくらになるでしょうか。なお、一番上の穴から通し始めて、最後も…

野良 Gem 'Utils'

RubyGems.org には上げていませんが、Bundler を使って GitHub からインストールできる Gem(野良Gem)です。Gemfile に gem "utils", github: 'obelisk68/utils'を追加して、$ bundle install でインストールされます。詳細は下。 GitHub - obelisk68/utils…

Ruby のメタプログラミングでカウンターを作る

Ruby はインクリメントやデクリメントがないのですが、遊びでカウンターを作ってみました。メタプログラミングを使って、呼び出されるたびに step(デフォルトは 1)だけ増える数を与えるメソッドを生成します。「メソッド」というのが工夫したところです。…

YコンビネータとZコンビネータ(Ruby)

qiita.comこの記事がおもしろかったので色いろぐぐっていたら、すばらしくわかりやすいサイトがあった。d.hatena.ne.jpわかりやすいので、いっぱいブクマがついております。以下これを参考にして、メモしておきます。 まずラムダ式であるが、 f(x) = x * 2と…

いわゆる「ビュフォンの針」の同心円バージョンについて

いつも拝読している「完全無欠で荒唐無稽な夢」というブログがあるのですが、そのコメント欄にこんなことが書いてありました。 こんにちは ^^ またお願いなんですが…^^; ビュフォンの針:平行線の間隔の半分の長さの針が平行線と交わる確率が1/πというもので…

Ruby の「ふしぎに気まぐれな構文」と言われるものについて

Tiny Prolog in Ruby (Extra Lesson)空白に注意してコードを読んでみて下さい。 irb(main):001:0> def a; 1; end => :a irb(main):002:0> b = 2; c = 3 => 3 irb(main):003:0> a +b +c ArgumentError: wrong number of arguments (1 for 0) from (irb):1:in …

Shift_JIS のファイルを読み込んで UTF-8 で処理(Ruby)

Linux ではエンコーディングはふつう UTF-8 を使いますが、Windows は Shift_JIS なので、Windows 用に Shift_JIS で作成したファイルを、Linux の Ruby でふつうに UTF-8 で処理する。例。 text = File.open("hoge.txt", "r:Shift_JIS") {|io| io.read.enco…

cairo と Ruby で遊んでみる(2)

水平投射です。 require 'bundler/setup' require 'cairo' require './gifanime' include Math W = 600; H = 300 V0 = 10.0; A = 0.75; G = 5.0 v = lambda {|n| - A ** n * sqrt(2 * G * H)} t = lambda do |n| if n.zero? sqrt(2 * H / G) else ar = [1] n…

Swift でたらい回し関数

以前 Ruby と Python と C でいわゆる「たらい回し関数」のベンチマークをやってみましたが(参照)、Swift 3.0 でもやってみました。コードは以下。無様ですがお許しを。 import Glibc func tak(_ x: Int,_ y: Int,_ z: Int) -> Int { if x <= y { return y…

Swift によるオブジェクト指向ジャンケン・プログラム

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング作者: 小森裕介,アクロクエストテクノロジー株式会社出版社/メーカー: 技術評論社発売日: 2004/12/01メディア: 単行本購入: 10人 クリック: 217回この商品を含む…

Linux Mint(Ubuntu)で Swift を使ってみる(その2)

swift.orgLinux でも Swift が使えるようになったので、まずは Docker を使って Linux Mint 17.2 に導入してみたのですが(参照)、Docker なんぞを使うと却って面倒なので、お手軽にやってみました。上の公式サイトに書いてあるとおりにやっただけです。正…

nil による NoMethodError を回避する(Ruby)

Ruby のメソッドで例外に nil を返すものは多く、NoMethodError が出て処理が止まることがあります。面倒なので回避するメソッド Object#nil_trans を書きました。self が nil 以外のときは self をそのまま返し、nil のときは引数(デフォルトは空文字列)…

Ruby で Generator の実装

Python に Generator というのがあります。Ruby では Enumerator でほぼ同じことができますが、引数の与え方がいまひとつよくわかりません。でというわけでもないのですが、勉強のために頑張って Fiber で実装してみました。Generator#args で引数を与えます…

Python の内包表記と Ruby の each_with_object

kiito.hatenablog.comこの記事は勉強になりました。Python の内包表記で def create_url_table(urls) return {url: get_title(url) for url in urls if 'google' not in url} と書くのを、Ruby の each_with_object を使うと def create_url_table(urls) url…

HTML5の markタグ

aaaaa強調するbbbbb aaaaa<mark>強調する</mark>bbbbb

cairo と Ruby で遊んでみる

cairo は二次元画像を描くためのライブラリです。これと Ruby でちょっと GIFアニメを作って遊んでみました。 cairo は Linux ならたぶん最初から入っているようです。Linux Mint 17.2 には既に入っていたので、それを使いました。 Ruby で cairo を使うには…

Rubyは末尾呼び出し最適化をサポートしている

Ruby でこれはスタックオーバーフローします。 def add(n, a = 0) return a if n.zero? add(n - 1, n + a) end puts add(10000) #=>a.rb:2:in `add': stack level too deep (SystemStackError) 例えばこう対策します。 obelisk.hatenablog.com 上のとおり以…

構造体を継承する(Ruby)

アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで作者: Tom Stuart,笹田耕一,笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型本この商品を含むブログ (9件) を見る上の本を読んでいたところ…

外部イテレータで素数生成(Ruby)

標準添付ライブラリに Prime がありますが、自分でやってみました。めっちゃ素朴な実装です(数が大きくなると急速に遅くなります)。 gen_primes = Enumerator.new do |y, i = 2| loop do catch do |jp| 2.upto(i - 1) {|j| throw(jp) if (i % j).zero?} y <…

Linux Mint(Ubuntu)で Swift を使ってみる

Swift ってよさそうな言語だけれど、Apple のみかと思っていたら、一応 Ubuntu でも動くのですね。インストールは以下のサイトを参考にしました。 gihyo.jpDocker を使ってやってみました。Linux Mint 17.2 で動作確認。 $ sudo docker pull swiftdocker/swi…

Scheme(Gauche)でフィボナッチ数列

こんな感じでしょうか。 (define (sub a b co n) (if (= co n) a (begin (print a) (sub (+ a b) a (+ co 1) n)))) (define (fibonatti n) (print (sub 1 1 1 n))) (fibonatti 10) Scheme って while 文も for 文もないのですね。繰り返しは do 文でやるか、…

Linux Mint(Ubuntu)でScheme(Gauche)を使う

先日 Scheme 処理系はとして Guile を入れてみたのですが、どうも Gauche の方がメジャーみたいですね。ということで入れてみました。 $ sudo apt-get install gaucheついでに $ sudo apt-get install rlwrapをしておくといいかも知れない。$ rlwrap gosh で…