Ruby

AOL(問題集)4

AIZU ONLINE JUDGE: Programming Challenge 0031 Weight def measure(object, weight, result = []) return result.join(" ") if weight.zero? result.unshift(weight) if (object / weight).nonzero? measure(object % weight, weight / 2, result) end $<.…

暗黙の Proc化(Ruby)

[1] pry(main)> (1..4).map {|i| i + 3} => [4, 5, 6, 7] これと [2] pry(main)> (1..4).map(&->(i) {i + 3}) => [4, 5, 6, 7] は同じ。引数での & は Proc をブロックに変換するから。(正確にはさらにそれを暗黙に .call() している。) では、 [3] pry(ma…

AOL(問題集)3

AIZU ONLINE JUDGE: Programming Challenge 0021 Parallelism $<.readlines.drop(1).map {|a| a.split.map(&:to_r)}.each do |x1, y1, x2, y2, x3, y3, x4, y4| puts((x2 - x1) * (y4 - y3) == (x4 - x3) * (y2 - y1) ? "YES" : "NO") end 単純な問題なのに…

RMagick で LoadError

RMagick に関して次のエラーが出た。Ubuntu 18.10, Ruby 2.3.4。 /home/tomoki/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/rmagick-2.16.0/lib/rmagick_internal.rb:12:in `require': libMagickCore-6.Q16.so.3: cannot open shared object file: No s…

AOL(問題集)2

AIZU ONLINE JUDGE: Programming Challenge 0011 Drawing Lots given = $<.readlines lines = [*0..given.first.to_i] given.drop(2).map {|x| x.split(",").map(&:to_i)}.each do |a, b| lines[a], lines[b] = lines[b], lines[a] end puts lines.drop(1) 0…

AOL(問題集)1

AIZU ONLINE JUDGE: Programming Challenge 0000 QQ 9.times do |i| 9.times {|j| puts "#{x = i + 1}x#{y = j + 1}=#{x * y}"} end 0001 List of Top 3 Hills puts $<.readlines.map(&:to_i).sort {|a, b| b <=> a}.take(3) 0002 Digit Number $<.readlines…

「コマ大数学科」を Ruby で(3)

marginalia.hatenablog.com marginalia.hatenablog.com続きです。 引き続き 「コマ大数学科」に挑む このサイトから問題を拝借いたします(ありがとうございます!) 法政に挑戦(2009/12/8) 問題: 行列 を50個かけ合わせたとき、できる行列を求めてくだ…

「コマ大数学科」を Ruby で(2)

marginalia.hatenablog.com続きです。引き続き 「コマ大数学科」に挑む このサイトから問題を拝借いたします(ありがとうございます!) フラッグ(2008/9/11) 問題: 1m間隔で一列に13本並んだ旗をどこか1箇所の旗のところに集めたい。1度に1本の旗…

「コマ大数学科」を Ruby で(1)

izu-mix.comプログラミングで解けそうな問題だけ解いています。 #001 フィボナッチ数列 問題: 15段の階段を上るとき、1段上るか、2段上るか、2通りの方法を組み合わせて登ると、何通りの登り方があるか。 コード。 def fib(n) return 1 if n == 1 return 2 …

Ruby の callcc(継続)

Ruby 2.2 から非推奨になってしまった callcc(継続)ですが…。callcc は goto みたいなものです。 callcc {|cnt| ..} とあるとき、継続 cnt が call されると、callcc {|cnt| ..} の「後へ」処理が移ります。メソッド call に引数があった場合は、それが ca…

Python のリスト内包表記と Ruby の map

内包表記は Ruby は map でいけるんじゃね?という話。pythonの内包表記を少し詳しく の例を使ってみる。例えば Python で [i for i in range(10)] というのは (0...10).map(&:itself) とか。まあこれは Array.new(10, &:itself) とか 10.times.to_a とかも…

Ruby/SDL でゲームパッドを使う

ゲームパッドで四角が動き回ります。Aボタンでビームの発射、Bボタンで一時停止、selectボタンで終了。sdl_sample7.rb require 'sdl' Width, Height = 300, 300 SDL.init(SDL::INIT_VIDEO | SDL::INIT_JOYSTICK | SDL::INIT_AUDIO) screen = SDL::Screen.ope…

Ruby の新しい演算子候補 / 標準添付ライブラリ 'thwait'

*>って Ruby の新しい演算子として使えることない? 右側代入とか。同様に +> とか /> とかも使えそう。 ~> とかもいけそうだけれど、-> とまちがえやすそう。関係ないけれど、早く Guild 使ってみたいな。笹田さん、がんばって下さい。 Thread の話。いくつ…

Ruby の Module 覚え書き

module Example def a output "inner" end def output(st) puts st end end include Example output "outer" #=>"outer" a #=>"inner" include すればモジュール内のメソッドがふつうに使える。 module Example def a output "inner" end def output(st) put…

Ruby のクラスメソッド、特異クラスのインスタンス変数

Ruby Gold合格できました。感想と振り返り - 気軽に楽しくプログラムと遊ぶ ここでちょっとオッと思ったのでメモ。 class MyClass @v = 1 def foo @v #=>nil end class << self @v = 2 # 特異クラスへのメソッド定義はクラスメソッド定義 def foo @v #=>1 en…

Qiita のデザインパターンまとめがおもしろかった

qiita.comおもしろかったので自己流にメモしておく。 Template Method 日記を書いて、複数のフォーマットで出力することを考える。日記の内容は、タイトルと何行かの本文、フォーマットは HTML とプレーンテキスト。 class Diary def initialize(title, text…

Sinatra で Code Viewer を作る(Ruby)

code_viewer.rb require 'sinatra' require 'sinatra/reloader' require 'rouge' set :bind, '192.168.11.150' set :port, 16524 suffixes = {"rb" => "Ruby", "html" => "HTML", "css" => "CSS", "erb" => "ERB", "c" => "C", "cpp" => "Cpp", "py" => "Pyt…

rbenv でバージョンを上げたときの注意(Ruby)

Gem が一切インストールされていないことになるので、該当ディレクトリで $ rbenv exec gem install bundler $ bundle installを実行。全 Gem が再インストールされる。

Ubuntu に Ruby/SDL を入れる

Ruby/SDL GitHub インストール まずはライブラリを入れる。 $ sudo apt-get install libsdl2-2.0 libsdl-sge-dev Bundler で Gem 'rubysdl' を入れる。何か Gem の場所がわからない。 $ bundle exec gem which sdl /home/tomoki/.rbenv/versions/2.3.4/lib/r…

ネット上の Sinatra 掲示板サンプルコードを動かしてみる(Ruby)

スクリーンショット。 yharaさんの作られたサンプル。 https://github.com/yhara/sinatbbs Sqlite3 が必要なので入れる。 $ sudo apt-get install sqlite3 libsqlite3-devgit clone。 $ git clone git://github.com/yhara/sinatbbs.git 実行。「bundle exec…

AOJ (Introduction to Algorithms and Data Structures)

AIZU ONLINE JUDGE: Programming Challenge ALDS1_1_A #挿入ソート gets ar = gets.split.map(&:to_i) n = ar.size putout = ->{puts ar.join(" ")} putout.() 1.upto(n - 1) do |i| v = ar[i] j = i - 1 while j >= 0 and ar[j] > v ar[j + 1] = ar[j] j -=…

AOJ (Introduction to Programming)

AIZU ONLINE JUDGE: Programming ChallengeITP1_1_A puts "Hello World" ITP1_1_B x = gets.to_i puts x ** 3 ITP1_1_C a, b = gets.split.map(&:to_i) puts "#{a * b} #{2 * (a + b)}" ITP1_1_D n = gets.to_i puts "#{n / 3600}:#{(n % 3600) / 60}:#{n % …

最短ヌクレオチド連鎖問題

require 'bundler/setup' require 'kaki/utils/nest_loop' class Codon include Comparable def initialize(st) @cd = st end attr_reader :cd def <=>(a) x, y = @cd, a.cd l = r = 0 l = if x[1..2] == y[0..1] 2 elsif x[2] == y[0] 1 else 0 end r = if …

挿入ソートのベンチマーク(Ruby)

Rubyっぽく書いたのと教科書の擬似コードをそのまま書いたものとの比較。 require 'benchmark' class Array def insertion_sort1 ar = self (size - 1).times do |i| key = ar[i + 1] j = ar.index {|x| x >= key} next if j >= i + 1 ar = ar[0...j] + [key…

Ruby GTK 覚え書き

これは使えそう。STDIN を必要なファイルディスクリプタにすればよい。 require 'bundler/setup' require 'gtk2' w = Gtk::Window.new w.set_size_request(200, 50) w.set_resizable(false) b = Gtk::VBox.new w.add(b) entry = Gtk::Entry.new entry.set_ed…

Enumerator への追加は deep copy されるのか(Ruby)

どうもそうなのではないかと思って確かめてみたら、やはりそうだった。これは助かる。 $ pry [1] pry(main)> e = Enumerator.new do |y| [1] pry(main)* a = ["aiueo", "Ruby"] [1] pry(main)* y << a [1] pry(main)* a[0] = "oeuia" [1] pry(main)* y << a …

計算機プログラムの構造と解釈 第二版(第二章)

計算機プログラムの構造と解釈 第2版作者: ハロルドエイブルソン,ジュリーサスマン,ジェラルド・ジェイサスマン,Harold Abelson,Julie Sussman,Gerald Jay Sussman,和田英一出版社/メーカー: 翔泳社発売日: 2014/05/17メディア: 大型本この商品を含むブログ …

計算機プログラムの構造と解釈 第二版(第一章)

計算機プログラムの構造と解釈 第2版作者: ハロルドエイブルソン,ジュリーサスマン,ジェラルド・ジェイサスマン,Harold Abelson,Julie Sussman,Gerald Jay Sussman,和田英一出版社/メーカー: 翔泳社発売日: 2014/05/17メディア: 大型本この商品を含むブログ …

SDL

Simple DirectMedia Layer - HomepageGitHub - rubygame/ruby-sdl-ffi: Ruby-FFI binding to SDL multimedia libraries. (Still in alpha) GitHub - jacius/nice-ffi: Nice-FFI: Convenience layer atop Ruby-FFIこれちゃんと動く。 しろま日記 : Linux - Ub…

お絵かきサーバーsample

draw_server0.rb require 'bundler/setup' require 'gtk2' require 'socket' w = Gtk::Window.new w.set_size_request(400, 400) w.set_resizable(false) w.set_app_paintable(true) w.realize drawable = w.window gc = Gdk::GC.new(drawable) colormap = G…