或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

Ruby

Rubyで素数判定の繰り返しを効率化してみた話

はじめに とあるプログラミング問題に取り組んでる時、連続する数をそれぞれ素数か否かの判断を結構な回数繰り返す処理をRubyで書いていたのですが、もう少し処理速度が上がらんかなーと試行錯誤した結果、処理が効率化できたー。というお話です。 問題 実際…

Rubyで素因数分解を行う

素因数分解をC言語やJavaで行う場合、自力で小さい素数から順に割っていく方法なんかが取られるかと思いますが、Rubyでは標準モジュールに素因数分解の処理が用意されていたのでメモ。 Primeクラスのprime_divisionメソッド Rubyでは、このメソッド一発で素…

最大公約数、最小公倍数の求め方/ユーグリットの互除法

今回もアルゴリズムに関して学んだ知識のメモ。ユーグリットの互除法について調べてみました。 ユーグリットの互除法とは 最大公約数を求める手法です。 ユークリッドの互除法(ユークリッドのごじょほう、英: Euclidean Algorithm)は、2 つの自然数の最大…

エラトステネスのふるいを実装してみる

アルゴリズムに関する知識も自分の中にストックしておきたいということで、今回は「エラトステネスのふるい」について調査したものをメモ。 エラトステネスのふるいとは 素数の一覧を簡易的に求める手法です。 エラトステネスの篩 (エラトステネスのふるい、…

Rubyのinject/reduceメソッドに関するメモ

つい最近までRubyのinjectやらreduceが何してるか分からんかったので調査したことをメモ。 inject/reduceメソッド injectメソッドは、ブロックを使って繰り返し計算を行うのに使います。ブロックに順に「要素1、要素2」、「ブロックの前回の戻り値、要素3」…

Rubyで多重ループを抜ける方法

Rubyの大域脱出に関するメモ。ネストが深いループから何かの条件で一気に抜けたい場合、Rubyではcatch-throwを使うのが適切なようです。 書き方 以下が大域脱出のサンプル。如何にもサンプルの為のサンプルという感じですが、ネストしたループから抜けている…

Rubyのヒアドキュメントを使ってみる

Rubyのヒアドキュメントに関するメモ。文字列を扱うちょっとしたプログラムで結構使えます。 ヒアドキュメントとは 普通の文字列リテラルはデリミタ(", ', ` など)で囲まれた 文字列ですが、ヒアドキュメントは `リテラルです。 https://docs.ruby-lang.org/…

CodeIQ 「ロンリー・ルーク」問題の解答コード公開

久々の投稿になります。 今回はCodeIQの問題の解答コードを公開します。codeiq.jp 問題 今回の問題の概要です。 自然数 n, k に対し、縦横 n×n のマス目にチェスのルークの駒を k 個配置します。このとき、自身から見て上下方向・左右方向のいずれにも他の駒…

Rubyにはインクリメント演算子(++)が無い

Rubyを書いてて、いつも疑問に思ってた事項なので自分用にメモ。CやJava、またはPerl等のプログラム言語では、整数の値に1を加算する時にインクリメント演算子++を使用します。しかし、Rubyではインクリメント演算子を使うことは出来ません。 インクリメント…

Rubyで乱数生成

Rubyの乱数生成メモです。 rand関数 Rubyで乱数生成をするにはrandメソッドを使います。 10.times do puts rand(1000) end このプログラムは、0~999までの範囲の乱数を10回出力します。ただ、この乱数は擬似乱数と呼ばれるものであり、乱数生成に使われる種…

Rubyで書式付き出力を行う

Rubyの書式付き出力に関するメモ。 Rubyの書式付き出力 C言語なんかでもみるsprintfメソッドを使うやり方と、%演算子を使うやり方があります。先ずは%演算子を使う例を見てみます。プログラム (1..10).each do |n| puts "%03d" % n end 実行結果 001 002 003…

Rubyのsortメモ

Rubyのsortに関するメモです。 sortメソッド 配列をソートするには、sort(もしくはsort!)メソッドを使います。後ろにブロック処理を記述することで、比較方法を定義する事が出来ます。ここでは昇順でソートする方法と降順でソートする方法を記載します。 p […

Rubyでhashから値を取る方法のメモ

Rubyでhashを使ってて、Javaとかとは勝手が違っていたところで結構ハマッたので、調べた情報をメモ。 keyが文字列かシンボルか? Rubyのhashはkeyとして文字列はもちろん、シンボルをkeyとして使うことも出来ます。例として、文字列、シンボルそれぞれをkey…

RubyでStreamから渡された数値群をFixnumに変換する方法

CodeIQ、paiza等で出るプログラミングの問題では、標準入力から渡された数値データを処理する事が多いですが、標準入力経由だと基本文字列として受け取る為、計算に利用するにはプログラム内部で数値型に変換する必要があります。この変換処理をいちいち書く…

Rubyにおける「真」と「偽」の判定

Ruby及びその他の言語に於ける真と偽の扱いのメモ。 「真」と「偽」の扱い if文やwhile文での条件判定に使う「真」と「偽」の扱いはプログラム言語により様々だったりします。例えばC言語ではint型の0が「偽」であり、それ以外が「真」です。Java言語ではプ…

Rubyプログラムをプロファイラで計測する

今回は、Rubyのプロファイルを取得する機能についてのメモ。 プロファイラの実行 Rubyでは標準でプロファイルを取る機能が用意されています。ここでいうプロファイルとは、どの処理にどれ位時間が掛かってるかや、どの処理が何回呼ばれたかという分析結果で…

DATA変数と__END__トークンがテストに便利

今回は、ちょっとしたRubyプログラムのテストに便利なDATA変数の使い方のメモです。 DATA変数とは Rubyプログラムファイルに__END__トークンだけの行が含まれている場合、その次の行以降にアクセスする為のストリームとしてDATA変数が定義されます。この機能…

RubyのLoggerを使ってみる

どうも、パイソンです。今回はRubyのログ出力に関する簡単なメモです。 Loggerクラスの使い方 Rubyにはどうも標準でLoggerというログ出力用ライブラリが備わっているようです。 使い勝手としてはJavaのlog4jと似た風な感じかなーという印象。プログラム requ…

RubyのTimeクラスを使ってみた

どうも、パイソンです。今回はRubyのTimeクラスのメモです。 Timeクラス Rubyで現在時間を取るにはTimeクラスを使う。 使い方もRubyらしく結構シンプル。プログラム puts Time.new t = Time.new puts "今日は" + t.year.to_s + "年" + t.month.to_s + "月" +…

Rubyでベンチマークを取る

Rubyについて調べてると、そこかしこのサイトでRubyプログラムの処理速度を出しているところがあったんですが、どうすれば出せるかを理解してなかったので、ちゃんと調べた結果をメモしておきます。 Rubyでベンチマーク測定 なんとRubyでは、標準で処理速度…

sortとsort!の違い

どうも、パイソンです。今日は、Rubyでsortのやり方を調査した時の内容をメモしておきます。 sortとsort! ref.xaio.jp 「ruby sort」とググッたら出てきたリファレンスを眺めてると、並び替えをするメソッドにもsortと、sort!という2通りがある模様。はぁ、…

Rubyの文字列連結メモ

どうも、パイソンです。今日は、Rubyの文字列連結で少しハマった事をメモしておきます。 Rubyの文字列連結演算子 まずは、基本から。Rubyで文字列を連結する方法には、+演算子を使う方法と、演算子を使う方法があります。 #文字列連結テスト str1 = "ABC" + …

Rubyで小数の割り算を試してみる

どうも、パイソンです。今回は、勉強がてらRubyの小数の割り算について少しどのような仕様なのかというのを実験しましたので、ここにメモしておきます。 Rubyでの小数割り算 まずは、各項の型で挙動が変わるかの確認。プログラム puts 10 / 3 puts 10.0 / 3 …

Rubyで0.1を10回足しても1.0にはならない件

どうも、パイソンです。前回の記事で、小数の足し算について取り上げました。osishow3.hateblo.jpすると、Rubyでは小数の計算が正確にできるのかなー?という疑問が沸いてみたので、少し実験してみることにしました。 0.1を10回足すとどうなる? CやらJavaや…

「3.9+5.1=9.0」は間違い?Ruby先生に聞いてみる

どうも、パイソンです。 さて今日は少し前にネットで話題になってた問題と取り上げて見ようかと思います。 「3.9+5.1=9.0」は間違い? lineblog.meネットの話題というのは流行るのも廃るのも早いので、もうかなり昔の話題だという印象をもってましたが半年ぐ…

RubyでFizzBuzz問題を解く

どうも、パイソンです。ネットを探索してると、初歩的なプログラム問題としてFizzBuzz問題なるものが超有名であるとありました。いや、実際10年以上プログラマやってるが初めて聞いたぞ。。(;^_^Aということで、今回ブログのネタがてら少し調べて見ることに…

Rubyの勉強開始

どうも、パイソンです。先日からRubyを独学で勉強してます。ただググって自習するのも大分しんどいので、図書館でruby周りの本を片っ端から借りてきました。先ずはイロハのイ辺り、初歩中の初歩から勉強してます。そこで先ず最初に感心したのが、rubyにはプ…

初めてのRubyプログラム

Rubyはじめました。 今月の目標にも書いたとおり、Rubyを勉強してみることに。先ずはCodeIQとかでありがちな問題を解く用の簡単なプログラムを書いてみた。 メインプログラム 標準入力から2個の数値を受け取って、そっからcalcAnswerメソッドでなんやかんや…