Ruby で同値(必要十分)関係

Ruby で「p と q が同値」あるいは「必要十分」、つまり の関係を表すにはどうしたらよいでしょうか。これはp == qのことでも、p.equal?(q) のことでもありません。ではなくて、 p が T ならば q も T、p が F ならば q も F ということです。T とか F は何…

AOJ 0141 Spiral Pattern (Ruby)

問題。 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0141&lang=ja「ぐるぐる模様」を出力します。簡単そうでかなりむずかしかったので、印象に残っています。 6番目の「ぐるぐる模様」 ###### # # # ## # # # # # # # # #### コード。 result…

AOJ 0192 Multistory Parking Lot (Ruby)

僕は競技プログラミングは大したことがないけれど、印象に残っている解答を載せてみようと思います。これは Aizu Online Judge (AOJ)の問題。 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0192&lang=ja コード。 class Car num = 1 define_…

AtCoder ABC128C (関数型Ruby?)

https://atcoder.jp/contests/abc128/tasks/abc128_cきれいに Ruby らしく解けたので、メモ。 n, m = gets.split.map(&:to_i) cond = m.times.map { k, *ss = gets.split.map(&:to_i) ss.inject(0) {|acc, s| acc | 1 << (s - 1)} }.zip(gets.split.map(&:to…

金貨と銅貨と空箱の「うそつき問題」(Ruby)

rsc.hatenablog.comまたまた rsc さんのブログから問題を拝借して、Ruby で解いてみました。 問題 コピペさせてもらいます。 A~Eの五つの箱があり、これらの箱は、金貨の入った箱、銅貨の入った箱、空箱の3種類の場合がある。 また、それぞれの箱にはラベル…

Rubyでファイルのツリー構造を出力する

qiita.com これを見て Ruby でもやってみたくなりました。 実行例 <kaki-utils> ├<lib> │ └<kaki> │ ├<utils> │ │ ├add_methods.rb │ │ ├all.rb │ │ ├check_fname_overlapping.rb │ │ ├es.rb │ │ ├imgsuffix.rb │ │ ├nest_loop.rb │ │ ├po.rb │ │ ├rec_decimal.rb │ │ ├retry.rb │ │ └safe_</utils></kaki></lib></kaki-utils>…

Julia でじゃんけんゲームを書いてみる

いつものじゃんけんゲームを Julia のお勉強として書いてみました。Julia のバージョンは 1.0.4 です。 janken.jl using Printf mutable struct Person name::String wincount::Int hand::Int end function judge(player1::Person, player2::Person) show_ha…

Julia で 8 queens 問題

obelisk.hatenablog.com ここで Go と Ruby でやっていることを、Julia でやってみました。結果はこんな感じ。 $ time julia eight_queens.jl -------------- n = 1 @....... ....@... .......@ .....@.. ..@..... ......@. .@...... ...@.... -------------…

Linux Mint に Julia をインストールする

julialang.org Linux Mint 19.3 に Julia をインストールしてみます。インストールはここを参考にしました。まず、Snap をインストールします。 $ sudo apt update $ sudo apt install snapdJulia をインストールします。 $ sudo snap install julia --class…

Ruby は「痒いところに手が届く」か

qiita.comいや、Python すばらしいですね。どこまで Ruby でできるか、試してみました。なお、使った Ruby のバージョンは 2.7.0 です。 3値以上の比較 1 == 2 == 3 # -> False 1 < 2 < 3 < 4 # -> True いやー、これは Ruby ではできないですね。なお、Ruby…

古い Ruby の define_method

AtCoder の過去問をやっていて、手元では通るコードがことごとく RE になる理由が全然わからなかった。いろいろ考えてみたが、コードはどう考えても正しい気がする。 ふと、自分は横着して何も考えずに Ruby 2.7.0 を使っていたが、AtCoder の Ruby は 2.3.3…

ブレゼンハムのアルゴリズム(Ruby)

ja.wikipedia.org「ブレゼンハムのアルゴリズム」とは画面に線分を描くアルゴリズムです。コードはここの Java 版を移植させていただきました。Ruby コードです。描画に Cairo を使っています。 require "cairo" class Draw W = 400 Side = 10 def initializ…

Linux の find コマンドの GUI化(Ruby)

こんな感じ。結果はターミナルに表示されます。GUI としては Gtk2 を使っています。Linux Mint 19.3, Ruby 2.6.0 で動作確認。コードは以下。Gist です。 findコマンドのGUI化 · GitHub

Ruby で簡単な Gray-Scott

qiita.comここの Python 版を Ruby に移植しただけです。計算に Gem 'numo-narray' を使っています。画像化には Gem 'gdk_pixbuf2', 'rmagick' を使いました。できたものはこんな感じ。 Ruby コード。Ruby 2.6.0, Linux Mint 19.2 で動作確認。 gray_scott.r…

文字列を一文字づつ飛ばし文字にするのこと(Ruby)

まず、「esehara」という文字列がある。この文字列を「eeaa」といったように、一文字ずつ飛ばし文字にするにはどうしたらいいか http://bugrammer.hateblo.jp/entry/2016/10/24/175704 あるブログでこんなのを見て考えてみた。コード例。 def one_jump(str) …

GTK+ で落書き 18(Ruby)

どうでもよいのですが、遊んでみました。 種がそれっぽく描けない…。oekaki_sample24.rb require 'oekaki' include Math rs = 64 * (270 - 45) rd = 64 * 90 Oekaki.app do draw do clear red = color(0xffff, 0, 0) green = color(0, 0xffff, 0) black = co…

Ruby の dup と clone

Ruby でプロトタイプベースの OOP っぽいのをやるとき、ちょっと疑問に思ったので。dup でオブジェクトをコピーすると、特異メソッドはコピーされません。なのでこれではプロトタイプベースの OOP には向きません。 $ pry [1] pry(main)> a = Object.new => #<Object:0x000055900f87b7f8></object:0x000055900f87b7f8>…

推理判断のプレゼント交換の問題

rsc.hatenablog.comrsc さんのブログから問題を拝借しました。# 問題: A~Eの5人がプレゼント交換をした。5人とも自分以外の人から1つずつプレゼントを受け取ったが、プレゼントを渡した相手からプレゼントを受け取った人はいなかったという。さらに…

これだったら Ruby も関数型言語?

anopara.net わたしは初級者プログラマですが、ここでの話は納得、というか、Ruby プログラマなら常識みたいな話でもあると思います。Ruby はふつうに書いて関数型プログラミングのエッセンスを抽出しているといわれることもありますが、Ruby が関数型プログ…

Ruby でマンデルブロ集合を描画

qiita.comQiita 記事を見てやってみたくなりました。ほとんどパクリです。Numo::NArray を使っています。 実行結果。 コード。 mandelbrot_narray.rb require 'numo/narray' require 'gdk_pixbuf2' include Numo MaxCalc = 5000 #最大計算回数(数字が大きい…

チャーチ数の簡単な計算(Ruby)

Wikipedia の OCaml の項目を読んでいたら、OCaml ではチャーチ数の計算がきれいに書けることを知った。 let zero f x = x let succ n f x = f (n f x) let one = succ zero let two = succ (succ zero) let add n1 n2 f x = n1 f (n2 f x) let to_int n = n…

「Ruby初心者向けのプログラミング問題」を解いてみる

blog.jnito.comやってみました。 カレンダー作成問題 ここで似たようなことをやっているので省略。(ただし、Date クラスは使っていません。) カラオケマシン問題 class KaraokeMachine Key = %w(C C# D D# E F F# G G# A A# B) def initialize(melody) @sc…

Gem 'Ruby2D' でテトリス

Ruby でゲーム制作を意識したグラフィック・ライブラリ 'Ruby2D' でテトリスを作ってみました。完全にオリジナルの実装です。ソースは以下。 Ruby2D を使ったテトリス · GitHub 'Ruby2D' については以下で紹介しています。 obelisk.hatenablog.com ゲームは…

ハッシュによる美しいメモ化(Ruby)

qiita.com元ネタはこれです。 Ruby のハッシュにはこのようなデフォルトの与え方があります。 h = Hash.new {|hash, key| hash[key] = default} これを利用して、こんな風にフィボナッチ数列をメモ化で計算できます。 fib = Hash.new do |hash, n| hash[n] =…

ブログ「hp12c」の一問題(Ruby)

またまた Ruby ブログ「hp12c」からの問題(?)です。 melborne.github.io さて、データ data = <

線分の交点(Ruby)

4点 があるとき、線分 と の交点を求めるメソッド。 require 'matrix' def cross(x1, y1, x2, y2, x3, y3, x4, y4) a = Matrix[[x2 - x1, x3 - x4], [y2 - y1, y3 - y4]] .lup.solve([x3 - x1, y3 - y1]) rescue nil return nil unless a s, t = a[0], a[1] …

Ruby のローカル変数登録について

以下の Ruby コードを見てほしい。 if false a = 1 end p a #=>nil if true nil else b = 1 end p b #=>nil c = 1 if false p c #=>nil while false d = 1 end p d #=>nil いずれも nil を出力し、「undefined local variable or method」の NameError は出…

二次元配列の行(あるいは列)を入れ替える(Ruby)

Julia では簡単とあったので(よく知らない)、Ruby で考えてみた。まず二次元配列を作る。 $ pry [1] pry(main)> ary = (1..100).each_slice(10).to_a => [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 2…

Ruby と rcairo でベジェ曲線を描いてみる

ベジェ曲線(Wikipedia)は滑らかな曲線を描くために使われるものです。いくつかの「制御点」を指定して描きます。計算はそんなにむずかしくなくて、上の Wikipedia の記事で充分わかりますし、ネット上にわかりやすい記事がたくさんあるので検索してみて下…

Gem 'Ruby2D' でライフゲーム

いつもの得意技(?)のライフゲームです。Ruby 用のグラフィック・ライブラリ 'Ruby2D' を使っています。コード。 lifegame_for_Ruby2D.rb require 'ruby2d' include Ruby2D::DSL class LifeGame CellWidth = 10 Margin = 20 Space = 2 SideWidth = 35 W = …