並べ替えの繰り返し(Ruby)

アルゴリズム・パズルです。問題。 1~9 のカードを横一列に適当に並べ替えます。そこからスタートして、左端のカードの数字の枚数だけ、左からカードを取って逆順にし、また置き直します。例えば [4, 5, 6, 7, 8, 9, 1, 2, 3] だったら [7, 6, 5, 4, 8, 9, 1…

Ruby でファイル転送のコマンドを作る

ローカルネットワーク内に何台か PC があるので、Ruby でファイル転送を行うことを考えました。SSH でやってもよいのですが、一台の PC に Linux をマルチブートしているので、面倒なので Ruby でやります。セキュリティは何も考えていないので、当り前です…

7セグメントコードの反転(Ruby)

デジタル表示で 0~9 の数字を表示させることを考えます。数字はディスプレイの 7つの場所の on, off で表示することになります。このとき、二つの数字を連続して表示するとして、7つの場所の on, off の切り替わりが出来るだけ少なくなるような順番を考えま…

Ruby のブロックはクロージャである

Ruby の Proc(あるいは lambda) がクロージャであることは周知ですよね。クロージャの例は JavaScript の関数で、他にもクロージャをサポートしている言語はいまやふつうです。クロージャは、中の変数の値を保持します。例えば Ruby で x = 0 f = proc {x …

はてなブログの記事タイトルにはてなブックマークの「users」を表示させる

はてなブログは設定ではてなブックマークの被リンク数を表示させることができますよね。 こういうやつです。しかしながら、昔からある「○○users」という表示を、タイトルに付けることも(やろうと思えば)できます。まあこのブログはめったにブクマされない…

スプライン曲線を描く(Ruby)

複数の点をなめらかにつなぐ「スプライン曲線」を描いてみました。全体的に下のサイトを参考にしました(ありがとうございます!) Ruby - 3次スプライン補間! - mk-mode BLOG gnuplot で出力してみるとこんな感じです。 spline_curve.rb require 'numo/gn…

コンソールでライフゲーム(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 Oek…

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…