コンソールでライフゲーム(Ruby)

Ruby の Gem でコンソールをウィンドウのように使える 'curses' というのがあります。これを使ってみたくて、ライフゲームを書いてみました。Linux Mint 18.2, Ruby 2.3.3 で確認しています。(追記:Window 8.1, Ruby 2.2.2 [i386-mingw32] でも確認しまし…

2枚のカードの間には?(Ruby)

前回のエントリの問題を教えられたサイトに、さらに次のような問題がありました。 1から7の数字を書いたカードが2枚ずつ計14枚ある。そしてこれを1列に並べ,2枚の1の間にはカードが1枚,2枚の2の間にはカードが2枚はさまれていて,同様に,3の間には3枚,4の…

2つのバケツ問題(Ruby)

反復深化/アルゴリズム講座 おもしろそうな問題を見つけました。 8リットルと5リットルのふたつのバケツを使って1リットルの水を最短手順で川からくみあげて下さい。 http://www.ic-net.or.jp/home/takaken/pz/index3.html Ruby で解いてみました。それぞれ…

飛車と角の利き(Ruby)

問題: 飛車と角を将棋盤(9×9)の上にひとつづつおきます。このとき、飛車か角によって(相手の)駒が取られる位置を、飛車と角の「利き」ということにします。 飛車の「利き」の上に角があるとき、その先の飛車の「利き」は(角にさえぎられて)ありません…

Linux Mint(Ubuntu)で Radiko を録音する

インターネットでラジオが聴ける「Radiko」というサービスはよく知られていますが、その放送を録音するには色いろなやり方があるようです。さて、自分の使っている Linux ではどうやればできるのかなと調べてみたら、意外と簡単でした。Linux Mint 18.2 で確…

Ruby で png 画像を自力生成(その2)

前回 png 画像を生成してみた続き。 こんなの。 コードはこんな感じ(画像データの生成部分のみ)。前回エントリを参照。 width, height = 400, 400 raw_data = [] height.times do |h| ob = [] width.times {|w| ob << [0, 0, ((w - width / 2) ** 2 + (h -…

Ruby で png 画像を自力生成できるらしいですよ

このところ脳みそが腐って全然プログラミングとかできないのだが、Ruby 愛はちっとも減じていないので、他人のブログをパクってエントリを書きます。「パクって」はいい言葉じゃないですね。とにかく唐突に「png ruby」でぐぐってみましたら、Ruby コミッタ…

paiza オンラインハッカソン vol.6 をやってみた

これも挑戦。使用言語は Ruby。どれも超簡単なので簡潔に。 六村リオ 問題。結果。コード。 operations = [] gets.to_i.times {operations << gets.split.map(&:to_i)} water = coffee = 0.0 operations.each do |op, q| case op when 1 then water += q whe…

paiza オンラインハッカソン vol.5 をやってみた

使用言語は Ruby です。画像クリックで詳細が出ます。 手紙の暗号を解読 簡単。コード。 st = gets result = "" 0.step(st.length - 1, 2) {|i| result += st[i]} puts result 会社の入社試験 超簡単。こんな入社試験、ある筈がないですね。コード。 num = g…

paiza オンラインハッカソン vol.4 をやってみた

またまた挑戦してみました(ヒマ人^^;)。使用言語は Ruby です。画像クリックで詳細が出ます。 ミッション1 こりゃ簡単すぎるだろう。コード。 data = [] gets.to_i.times {data << gets.to_i} puts data.inject(&:+) ミッション2 これも超簡単。コード。 d…

paiza オンラインハッカソン vol.2 をやってみた

またまた Ruby でやってみました。 とりあえず何の工夫もないもの 誰でもすぐに考えそうな方法でやってみました。つまりは総当り。 全然ダメですね。詳しい結果はこちら。コード。 height, width = gets.split.map(&:to_i) @window = [] height.times {@wind…

絵文字フィボナッチ

どんな言語かわからないですよね。 🐱 = [] 🍇, 🍉 = 0, 1 while 🍉 < 1000 🍇, 🍉 = 🍉, 🍇 + 🍉 🐱 << 🍇 end p 🐱 #=>[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987] Ruby です😄 おわかりでしょうがフィボナッチ😆

Unicode の全絵文字

# * 0 1 2 3 4 5 6 7 8 9 © ® ‼ ⁉ ™ ℹ ↔ ↕ ↖ ↗ ↘ ↙ ↩ ↪ ⌚ ⌛ ⌨ ⏏ ⏩ ⏪ ⏫ ⏬ ⏭ ⏮ ⏯ ⏰ ⏱ ⏲ ⏳ ⏸ ⏹ ⏺ Ⓜ ▪ ▫ ▶ ◀ ◼ ◽ ◾ ☀ ☁ ☂ ☃ ☄ ☎ ☑ ☔ ☕ ☘ ☝ ☠ ☢ ☣ ☦ ☪ ☮ ☯ ☸ ☹ ☺ ♀ ♂ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♠ ♣ ♥ ♦ ♨ ♻ ♿ ⚒ ⚓ ⚔ ⚕ ⚖ ⚗ ⚙ ⚛ ⚜ ⚠ ⚡ ⚪ ⚫ ⚰ ⚱ ⚽ ⚾ ⛄ ⛅ ⛈ ⛎ ⛏ ⛑ ⛓ ⛔ ⛩…

Ruby FFI でエラトステネスの篩

これまで Ruby と C言語で「エラトステネスの篩」を書いたので、Ruby FFI で融合させてみました。Ruby FFI で簡単に Ruby から C言語の関数を呼ぶことができます。Linux Mint 18.2, Ruby 2.3.3 で確認しました。Ruby FFI を使うには libffi が必要ですが、Li…

最長共通部分列(Ruby)

文字列の「部分列」とは、文字列から任意の文字を取り除いたものをいう。文字列 X と Y があって、文字列 Z が X と Y 両方の部分列になっている場合、Z を X, Y の「共通部分列」という。共通部分列の最長のものが、「最長共通部分列」である。たとえば文字…

Ruby で迷路作成(コンソール版)

ここでグラフィカルな迷路を生成してみたのですが、やっぱりコンソール版も欲しいよねということで作りました。 こんな感じ。****************************************** * * * * * * **** * * * ***** * ***** * *** ******* **** * * * * * * * * * *****…

Swift のクロージャと Ruby の lambda

ここで Swift におけるクロージャの使い方が説明されています。こちらで同じ内容のコードを再掲するとこんな感じでしょうか。Swift 4.0。 func f(_ a: Int, _ b: Int, _ closure: (Int, Int) -> Int) -> Int { return closure(a, b) } print(f(1, 2, {a, b i…

Swift でエラトステネスの篩

こんな感じ。 eratosthenes.swift func eratosthenes(_ n: Int) -> [Int] { var ar = Array(0...n) for i in 2...Int(sqrt(Double(n))) { if ar[i] == 0 {continue} for j in 2...(n / i) {ar[i * j] = 0} } return ar.filter {$0 != 0} } print(eratosthene…

Linux Mint(Ubuntu)で Swift 4.0 を使う

Linux ユーザーですが Swift が使いたい。これまで Swift は 3.1-dev を使っていたのですが、折角 4.0 があるので使ってみることにしました。ちょっとハマったところがあったので記しておきます。なお、面倒なので暗号鍵を使ったデジタル署名版ではありませ…

Swift で 8queen 問題を解く

以前 Ruby で「エイト・クイーン」問題を解きましたが、それを Swift に移植してみました。「エイト・クイーン」というのは チェスの盤上に、8個のクイーンを配置する。このとき、どの駒も他の駒に取られるような位置においてはいけない。 https://ja.wikipe…

Swift でクイックソート

extension Array where Element == Int { func qsort() -> [Int] { if self.isEmpty {return []} var xs = self let pivot = xs.removeFirst() let left = xs.filter({$0 < pivot}) let right = xs.filter({$0 > pivot}) return left.qsort() + Array(arrayL…

RubyGem 'oekaki' でアナログ時計を作ってみた

グラフィック機能のデモの定番である時計です。Gem 'oekaki' についてはこちら。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura oekaki_sample16.rb require 'oekaki' Oekaki.app title: :clock do pal…

paiza オンラインハッカソン vol.1 をやってみた

前回のエントリでやったのがおもしろかったので、最初からやってみた。いつもながら Ruby です。 結果。 まあ悪くないのだけれど…。いや、これは苦しみました。最初はソートしてバイナリサーチというアルゴリズムを考えていたのだけれど、バグに悩まされて挫…

paiza Online Hackathon をやってみた

もうとっくに応募は締め切られているけれど、とにかく Ruby でやってみました。 結果。 やったね!コードです。 need = gets.to_i company = gets.to_i number, cost = [], [] company.times {|i| number[i], cost[i] = gets.split.map(&:to_i)} h = {} comp…

GTK+ で落書き 13(Ruby)

自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura require 'oekaki' Width, Height = 500, 400 ColorMax = 65536 R = 20 class Star def initialize(ob) @x, @y = r…

斜方投射の数値計算と描画(Ruby)

4次のルンゲ−クッタ法の練習としてやってみました。斜方投射(斜め上にものを投げるということです)じゃ全然威力を発揮しないのですが、とりあえず動くかどうかだけ確かめました。描画は gnuplot でやっています。 runge_kutta_sample1.rb require 'numo/gn…

「なぜ関数プログラミングは重要か」解読(Ruby)

なぜ関数プログラミングは重要か Rubyを使って「なぜ関数プログラミングは重要か」を読み解く(改定)─ 前編 ─ 但し後編の予定なし メモです。 melborne 氏のブログを参考に lambda のみで実装。 関数合成に関してはここを参考にしたが、これではうまくない…

Linux Mint には Ruby がデフォルトで入っている

Linux Mint 18.2 で確認。 $ ruby -v ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu] Ubuntu 17.04 にはまだデフォルトでは入っていないようだ。

Ruby の型注釈のオレオレ記法

Ruby が型を明示的に書かないのはすごくラクだし気に入っているのだけれど、複雑な処理をするメソッドなどでは型注釈があった方がわかりやすい場合もあります。なので、コメントで型注釈をする仕方を自分で決めてみました。 ●引数(self も含む) -> メソッ…

Ruby で循環小数を扱う

以前にも同様の試みをしたのですが(参照)、コードを始めから書き直しました。以前のは何か自分でもよくわからない、面倒なことをしているので。作ったのは Rational#to_rec_decimal と String#to_r で、前者は Rational(分数)を(String で表される)循…