エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Ruby

いかにして表計算の列名をつくるか・補遺

先日Rubyで書いたものをRuby以外のメジャーどころの言語でも実装してみます。 桁上がりで1文字戻す Ruby 再掲。 def column_names(n) result = '' begin result = (n % 26 + 65).chr + result n = n / 26 - 1 end while n >= 0 result end C++ #include <string> st</string>…

いかにして表計算の列名をつくるか

「列名って、なに?」これです。このA, B, ..., Z, AA, AB, ... という文字列です。仕事でちょっとゴルフネタ的ななにかになったので、記録しておきます。 みんな大好き、直積 列名は最初は1桁の A〜Z の26個、次に2桁の AA〜ZZ の676個、次に3桁の AAA〜ZZZ…

グラフの木分解〜グラフ理論とわたし

グラフを木分解します。…。木分解。わたしもひと月前まで聞いたこともありませんでした。 木分解とは。おおざっぱに言うと、グラフからルールに従って部分グラフの集合を取り出し、その部分グラフを木構造のノードとする木を作ること。くわしいことはここと…

Filtering, then Mapping

Haskell evenTen = map (\n -> n * 10) . filter even Prelude> evenTen [1,2,3,4,5,6,7,8,9,10] [20,40,60,80,100] Ruby def evenTen(a) a.select{|n| n % 2 == 0}.map{|n| n * 10} end irb(main):004:0> evenTen [1,2,3,4,5,6,7,8,9,10] => [20, 40, 60, 8…

パーサ、なんどでも、なんどでも

昨日のエントリの続き。サブクラスを定義する。 calc.tt grammar Arithmetic rule additive multitive r:( op:[+-] multitive )* <Additive> end rule multitive primary r:( op:[*/%] primary )* <Multitive> end rule primary '(' additive ')' <Parenthesized> / number end rule number '-'? </parenthesized></multitive></additive>…

パーサ、なんどでも

http://treetop.rubyforge.org/index.html https://github.com/nathansobo/treetop calc.tt grammar Arithmetic rule additive multitive r:( op:[+-] multitive )* { def to_i r.elements.reduce(multitive.to_i) do |s, e| s.send(e.op.text_value, e.mult…

N個の要素に分割する・Ruby篇

昨日やったことをRubyでも。 実は(ry こんな感じで実装してみた。もうちょとすっきりするんぢゃないだろうか、というモヤモヤした感じが残る。 あと。これはString特化の実装。配列のばあいは別の方法が必要。 コードはGitHubにも置いてあります。 class Str…

組み合わせ(combination)と部分列(subsequence)

備忘録。 Combination - Wikipedia Subsequence - Wikipedia C++で vector以外でキチンと動作するか、まだ確かめてないです。 combination #ifndef COMBINATION_H #define COMBINATION_H #include <vector> #include <iterator> template<typename iterator_t> void combination(iterator_t begin, i</typename></iterator></vector>…

手探りでおぼえるmruby その1:クラスを定義する、メソッドを定義する

mrubyをためしています。びっくりするぐらい情報が少ないので、ためしたことおぼえたことをまとめる意味で、ブログに書きつつmrubyの核心に這いよっていきたいと思います。 しかしなんですね。あの名を知ってからおよそ四半世紀、「這いよる混沌」の名をこん…

今日になって組み込み向けRuby「mruby」を知る

すっかり出遅れました。このようなものの開発が進んでたんですね、「mruby」。 6年ほど前。青臭い文章がいささか鼻につくんですが、そのへんはスルーして頂いて。6年ほど前、こんな文章を書いていました。 現在の組み込みソフトウェア、C++でちまちま作って…

MapでSummary

リストを項目ごとに集計するときのデータオブジェクトの使い方 - 虎塚 えーと。リンク先の内容に付加するような情報はほとんどないんですが。 ただちょっと。気になるところがあって。自分なりに自分の使える言語で書き下してみた。 C++98 あれ?C++11のひと…

「40 - 32 / 2 = 4!」

Twitterでフォローしてくださった@rbtnnさんのブログ「http://b-rabbit-alice.blogspot.com/」を拝読していたら、面白いものを見つけてしまいました。 http://b-rabbit-alice.blogspot.com/2011/07/40-32-2-41000.html こういうの大好き(笑)。自分なりにど…

再帰でyieldする

Rubyを手足のように使う方々には常識っぽい内容のような気がしますが、今回はじめてちゃんと調べて学んだので備忘のために記録。参照情報: メソッド呼び出し(super・ブロック付き・yield) (Ruby 1.8.7) class Enumerable::Enumerator (Ruby 1.8.7) 使ったRu…

リハビリがてらにlis.pyをlis.rbに書き直してみた

すっかりプログラミングにご無沙汰してしまっていました。あっというまに腕がなまりました。気の利いたコードがすっとでてこない。けっこう恐怖です。そんなわけでリハビリ中です。 最近見つけた記事。 ((Pythonで) 書く (Lisp) インタプリタ) これを他言語…

CotEditorからSimplenoteへテキストを送る

ネット上にテキストを保存してくれるSimplenoteというサービスがあります。iPhoneアプリケーションもあるので、わたしの場合iPhone上では標準のメモの代わりに利用しています。 さらにそのSimplenoteのテキストをバックアップしてくれるサービスSimplenote B…

行頭に引用記号をつける

引用記号に限らずですが。 例は、lsコマンドで一覧したディレクトリの内容に引用記号(>)をつける例です。 ls | ghc -e 'getContents >>= mapM_ putStrLn.map ((++) "> ").lines' 未来の自分のために解説。 getContentsで標準入力から文字列を取得 linesで文…

合計を計算

ペーストボード(クリップボード)にあるテキストの中の数値を合計してみます。プロンプトから入力します。いわゆるワンライナー? $ pbpaste | grep -Eo [0-9]+ | ruby -e 'sum = 0.0; ARGF.each{ |x| sum += x.to_f }; puts sum' もっとスマートな解法がある…

RubyでもFizzBuzz

Rubyでも書いてみた。こんな感じか? (1..100).map{|x| if x%15==0 then 'FizzBuzz' elsif x%5==0 then 'Buzz' elsif x%3==0 then 'Fizz' else x end }.each {|x|puts x} Rubyが、構文を変えたLisp(構文を変えた関数型言語)と言われることがあるのが分かる気…

selectを知った

今日になって、Rubyの配列やハッシュにselectというメソッドがあるのを知った。 Rubyを使い始めて何年目。Enumerableの存在は知っていたものの、きちんと調べたことがなかったなぁ。始めて使ったselectは、こんな感じ。 Info = Struct.new(:id, :name) infos…