数学

不等式の一問題

また rscの日記さんのところからです。もとの問題はこちら。 ある塾のA組からC組までの3つの組には、合計105人の生徒が在籍しており、それぞれの組の生徒数に関して、次のア、イのことがわかっている。 ア B組の生徒数の3倍は、A組の生徒数の2倍より5人以上…

質問投稿サイトの問題を解く

また rscの日記さんのところにあった問題です。おもしろそうなので Ruby で解いてみました。元の問題はこれです。問題をコピペしておきます。 円卓の判断推理 問題 A~E の5人が円卓に等間隔で着席している。5人のうち女性は2人で、この2人の席は隣り合…

google の入社試験

rscの日記さんのところで知りました。 Googleの入社試験です。次の覆面算を解きなさい : IT速報 WWWDOT - GOOGLE = DOTCOM ただし、EとMは交換可能。Ruby で解いてみました。 def to_int(a, b, c, d ,e, f) a * 10 ** 5 + b * 10 ** 4 + c * 10 ** 3 + d * 1…

分数を循環小数に直すメソッドを作った(Ruby)

※注記 のちに全面的に書き直しました。 割り算をするとき、場合によっては割り切れず、小数部分が循環して無限に続くことがあります。これが「循環小数(recurring decimal)」です。これを扱うメソッドを作ってみました。 Rational クラスのインスタンス・…

プロジェクト・オイラーで遊ぶ(3)

ここの続きです。Ruby でやっています。 ※追記 本家サイトに登録すると、答えがチェックできるのですね。ここまではすべて正しいことを確認しました。答えは消しておきます。

プロジェクト・オイラーで遊ぶ(2)

ここの続きです。Ruby でやっています。

整数を2数の積に分ける/約数を求める

例えば 48 は、2 * 24, 3 * 16, 4 * 12, 6 * 8 に分けられますね。これを Ruby の Integer#divide2 メソッドとして実装しました。ペアを配列に格納して返します(そのようなペアがなければ、空の配列を返します)。引数に true を取れば、自明な 1 * 48 のよ…

プロジェクト・オイラーで遊ぶ(Ruby)

Project Euler - PukiWiki プロジェクト・オイラーというのは、数学の問題をプログラムで解いてみようというものです。全部解こうとか、そういう殊勝な決意ではないのですが、ちょっとだけ Ruby で遊んでみました。結果は保証の限りではありません。

質問の線形代数の行列の問題を Ruby で

質問の線形代数の行列の問題をPythonで解いてみた。 - rscの日記 rsc さんが Python でやっているのを、Ruby でやってみました。元の問題はこれです。自力では解けませんでした。組み合わせの数を劇的に減らすのがコツですね。 ans = [] target = [12, 20, 2…

n次対称群

クラス Group についてはひとつ前のエントリを見てください。 変数 od に次数を入れます。かなり時間がかかる。自分の環境だと、5次で 40秒くらい、6次で 2.8時間くらい。次数が大きくなったら、結合法則の確認をスキップした方がいいかも知れない。 od = 5 …

有限群の実装(Ruby)

クラス Group#initialize の set は定義された集合(配列)、op は定義された演算(Proc オブジェクト)。@ie は単位元、@order は位数、インスタンスメソッド inverse(a) は a の逆元を与えます。(結合法則の確認はひどく時間がかかる場合があるので、引数…

3次の置換(Ruby)

「"012"→num の置換」でひとつの元。perm3[num1, num2] は2つの元の積を表す。 #permutation(置換) perm3 = lambda do |num1, num2| n1 = num1.chars.map(&:to_i) n2 = num2.chars.map(&:to_i) n1.map {|i| n2[i]}.join end perm3["210", "012"] #=>"210" …

簡単なチューリング・マシン

「P≠NP」問題 現代数学の超難問 (ブルーバックス)作者: 野崎昭弘出版社/メーカー: 講談社発売日: 2015/09/18メディア: 新書この商品を含むブログ (1件) を見るの第二章のチューリング・マシンを、Ruby で実装してみました。コードは以下です。pg は動作規則…

ユークリッドの互除法を Ruby で

ユークリッドの互除法(Euclidean Algorithm)を使って、最大公約数を求めます。99400891 と 99221377 の最大公約数は 9973 です。プログラムは以下のとおり。再帰を使う典型的な問題でしょう。 def ea(m, n) return m if n == 0 ea(n, m % n) end puts ea(9…

n進数から 10進数へ(Ruby)

Ruby で 10進数を n進数に直すのは int.to_s で出来ます。しかし、その逆(n進数から 10進数へ)ができるかわからなかったので、メソッドを作ってみました。ただし、n は 2 から 10 までです。アルファベットを使って、36進数まで出来ないことはないですが、…

「なかなか収束しない級数の数値計算例」を自分もやってみた

id:Hyperion64 さんのブログの、 なかなか収束しない級数の数値計算例 - 完全無欠で荒唐無稽な夢 の記事が興味深かったので、ちょっと Ruby でやってみた。級数 の極限を求めようというのである。こういうコードでやってみた。Ruby は、任意の精度で 10 進表…

Ruby で素因数分解

素因数分解を Ruby でやってやろうかと思ったのだが、既に標準添付ライブラリに用意してありました… require 'prime' p Prime.prime_division(252) #=>[[2, 2], [3, 2], [7, 1]] 結果が配列で帰ってきます。これは という意味です。簡単だなあ。その他にも、…

或るゲームのくじの確率(その2)

ちょっと前に、Yahoo!知恵袋の問題で ゲームのくじの確率を計算して欲しいです・当たりは14%です... - Yahoo!知恵袋 というのを、Ruby で強引に解いた記事を書いた(参照)。確率は 8.06% くらいと求まったのだが、これは乱数を使った推定である。しかし、…

或るゲームのくじの確率

ゲームのくじの確率を計算して欲しいです・当たりは14%です... - Yahoo!知恵袋 Yahoo!知恵袋で上のような問題があった。最初は手計算でやろうと思ったが、非常に面倒な計算になるので挫折。で、Ruby で強引に計算してみた。結果は 8.06%ほどと出た。さて、…

フィボナッチ数列を Ruby で

rscの日記さんのところに、カエルのジャンプの問題を解くというのがあったので、僕も Ruby でやってみました。或る回答にもありますが、これは本質的にフィボナッチ数列の問題です。葉っぱが n 枚のときのカエルの渡り方を num(n) とすると、直前の葉っぱか…

エラトステネスの篩(C言語)

C言語でもやってみました(Ruby版)。 ※注意 この実装はまだ未熟なので、下の modify された実装を見て下さい。(2017/7/4) #include <stdio.h> int a[100000001] = {0}; void set_f(int i, int max) { int j; for ( j = 2; j <= (max / i); j++ ) a[i * j] = 2; ret</stdio.h>…

エラトステネスの篩(Ruby)

「エラトステネスの篩」で、素数を求めてみます。Ruby でやってみました。極めて素直にコードを書いてみました。難しいことは何もないと思います。もう少し Ruby らしく書くこともできるでしょう。 eratosthenes.rb def set_f(i, max) #素数でない数にフラグ…

JavaScript でヒルベルト曲線を描く

Ruby/Tk のプログラム(参照)を移植しました。次数: 1234 56 function main20150305() { var canvas = document.getElementById('myCanvas'); field = canvas.getContext('2d'); var n = fm.dim.value; //次数 field.clearRect(0, 0, 400, 400); var width…

Ruby/Tk でヒルベルト曲線を描く

Ruby/Tk でヒルベルト曲線(ペアノ曲線)を描いてみました。ここの C言語用のプログラムを移植しただけです。元記事の著者に感謝いたします。下は 5次のヒルベルト曲線です。7次くらいが限度だと思います。 # encoding: Shift_JIS require 'tk' class Draw W…

Perl で素数生成

意外と知られていないですが、n番目の素数を与える式は存在します。それを使って、素数を求めるプログラムを Perl で組んでみました。公式はここで与えられた式を使ってみました。1番目から9番目の素数を求めてみたのですが、以下のようになりました。非常に…