ズンドコキヨシ(Ruby)

Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた—…

選択ソート(C言語、Go言語)

選択ソートは決められた範囲の中から最小値(もしくは最大値)を選んでいくという、わかりやすいソートです。C言語版。 selection_sort.c #include <stdio.h> void selection_sort(int ar[], int len) { int i, j, min, tmp; for (i = 0; i < len - 1; i++) { min = i</stdio.h>…

高速な素数の判定(Ruby)

素数は約数を 2個(1 とそれ自身)もつ自然数ですね。ですから、自然数 n が素数かどうかを判定するには、n がそれ自身より小さい自然数(1 を除く)で割ることができるかどうかを確かめればよいわけです。このとき、割る数は を超える必要がないことは明ら…

ひとつのサイコロの配置の数

ひとつのサイコロを特定の方向から見たばあい、その「見かけ」は全部で何とおりあるのでしょうか。 Ruby で解いてみました。コード。 table = {E: [3, 2, 6, 1, 5, 4], N: [5, 1, 3, 4, 6, 2], S: [2, 6, 3, 4, 1, 5], W: [4, 2, 1, 6, 5, 3], R: [1, 4, 2, …

Ruby で Proc とブロックの相互変換について

Ruby で Proc オブジェクトとブロックは似ていますが、まったく同じものではありません。むしろ、表裏一体の関係にあるというべきでしょう。その証拠に、「&」を使ってブロックから Proc へ、また Proc からブロックへとお互いに変換することができます。 ま…

カードゲーム「ブラックジャック」を Ruby で実装する

Qiita を見ていたら「初心者はブラックジャックを実装してみるといいよ」とかいう記事があったので、おもしろそうだと Ruby で実装してみました。とりあえず実行例を見て下さい。 $ ruby blackjack.rb カードをシャッフルします コイン: 10000 点 ベットは?…

クロージャを使ったカウンター

新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 - Qiita を見ていたら、クロージャを使っておもしろい仕方でカウンターが作れることを知った。元のコードは JavaScript のようであるが、Ruby だとこんな感じ。 $ pry [1] pry(…

「モンティ・ホール問題」をシミュレートする(Ruby)

rubyでモンティホール問題に挑戦 - Qiita ここでいわゆる「モンティ・ホール問題」を Ruby でシミュレートしているのを目にして、自分なりにやってみたくなりました。「モンティ・ホール問題」とはこういうものです。 三つの扉があり、その向こうのひとつに…

格子点の列挙(Ruby)

格子点の列挙 - みずぴー日記 ここの問題で遊んでみました。問題を再掲しておきます。 二次元平面上の格子点(X,Y座標がともに整数の点)を、原点から近い順に列挙してください。 同じ距離の点はどういう順番でも構いませんが、可能であればX軸に一番近い第一…

モジュール内の特定のメソッドだけ include する(Ruby)

Ruby のモジュールは include でメソッドを Mix-in できますが、定義したすべてのメソッドが include されてしまって、特定のものだけ include するわけにはいきません。そのくらいできそうなので何か簡単なやり方があるのかもしれません。とにかく、考えて…

RubyPico でライフゲーム

RubyPico には clearprint という独自のメソッドがあるので、文字でアニメーションのようなことができます。なので、いわゆる「コンウェイのライフゲーム」を実装してみました。またライフゲームかって言わない。こんな感じです。iPad mini の画面です。 コ…

RubyPico でカレンダーを表示させてみた

obelisk.hatenablog.com ここでの Ruby スクリプトを移植してみました。 入力はこんな感じ。 出力。 コードはこちらです。もともと(遊びで)Date クラスを使わずにコーディングしていたので、Date クラスのない mruby でも動いてちょうどよかったな。 obeli…

いわゆる「コンウェイのライフゲーム」をエディタ付きで実装してみた(Ruby)

これまで コンウェイのライフゲームを Ruby で実装してみた - Camera Obscura ライフゲームの CoffeeScript 版 - Camera Obscura コンソールでライフゲーム(Ruby) - Camera Obscura などで「ライフゲーム」を実装してきましたが、フィールド・エディタが欲…

パスカルの三角形(Haskell)

「パスカルの三角形」というのはこういうやつですね。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 この出力を目標に、Haskell で書いてみます。以前に Ruby で書いてみました。そのコードを再掲しましょう。 pascal…

和暦 (明治 大正 昭和 平成) と西暦の変換をおこなう(Ruby)

簡単な遊びのプログラムが作りたかったのでやってみました。Date クラスは使っていません。こんな感じです。コマンドライン引数を指定します。 #西暦から和暦 $ ruby gengou.rb 2018 平成30年 $ ruby gengou.rb 1945 昭和20年 $ ruby gengou.rb 1912 明治45…

Ruby でイケてないコードを→「いいね」→「スゲーいいね」にリファクタリング?

qiita.com 自分が「Ruby + リファクタリング」でぐぐると上のサイトがいちばん最初にヒットする。内容は題名どおり。添削者はすごい上級者プログラマらしい。添削された人には気の毒なのだけれど、勝手に引用してみる。まず「イケてない」コード。(ごめんな…

Go言語と Ruby で 8 queens 問題

Go で「8 queens 問題」を解いてみました。実際は n queens が解けます。すべての解を出力します。num = 8 の場合、解は 92通りあります。こんな感じ。 ------------------ n = 1 @....... ....@... .......@ .....@.. ..@..... ......@. .@...... ...@.... …

「あなたのセッションは10秒以上続きませんでした」

Linux Mint 18.3 を起動しようとしたところ、以下のような表示が出て立ち上がらない。 あなたのセッションは10秒以上続きませんでした。もしあなた自身がログアウトしていない場合、インストールに問題があるか、ディスクの空き容量が足りないかもしれません…

Ruby でカレンダーを出力してみた

特定の年と月を指定して、カレンダーを出力するプログラムを書いてみました。標準添付ライブラリの Date クラスを使ってはつまらないので、自力で計算しました。 calender.rb month_table = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #うるう年…

素因数分解(Ruby)

素因数分解は結局素数で順に割っていくしかないのだけれど、素数をわざわざ求めてというのは却って大変ですね。うまいやり方としては、2 および 3 以上の奇数で割るという方法があります。これは多少のムダは出るけど、全部の数で割るより効率的ですね。さら…

L-system で描いた再帰曲線の例

obelisk.hatenablog.com 前回のエントリで Ruby で実装してみた L-system を使って、実際に再帰曲線を描いてみます。Gem 'kaki-lsystem' が必要です。 C曲線。 コード。 require 'kaki/lsystem' l = Lsystem.new(600, 500, "C curve") l.move(-130, 100) l.p…

再帰曲線を描く言語「L-system」を Ruby で実装した

L-system って何でしょうか。Wikipedia にはこうあります。 L-system(エルシステム、Lindenmayer system)は形式文法の一種で、植物の成長プロセスを初めとした様々な自然物の構造を記述・表現できるアルゴリズムである。自然物の他にも、反復関数系(Itera…

ヒープソート(C言語、Go言語)

(追記)ヒープを作るのに、何だかふつうとはちがう(オリジナルの?)アルゴリズムを採用してしまったようですね。これでもちゃんと動作しますが、ふつうの方法よりも多少効率が悪いようです。最後にふつうの実装も載せます。 ヒープソートですが、まず「(…

バブルソート(C言語、Go言語)

バブルソートはわかりやすいソートです。隣どうしを比較して、前の方が値が大きければ値を交換します。それを繰り返し行うことでソートします。ただ、わかりやすく実装も簡単ですが、効率はよくありません。ソートのアルゴリズムとしてはまず使わないのでは…

ジュリア集合を描いてみる(Ruby)

ジュリア集合(Julia set)を Ruby で描いてみました。 描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura コード。 julia_set.rb require 'oekaki' Width, …

『Cプログラミング診断室』を読んだ

改訂新版 Cプログラミング診断室作者: 藤原博文出版社/メーカー: 技術評論社発売日: 2003/07/12メディア: 単行本(ソフトカバー)購入: 6人 クリック: 219回この商品を含むブログ (59件) を見るたまたま BOOK OFF にあったので買って読んでみました。かなり…

「最短ヌクレオチド連鎖問題」が解けない

高校生のとき、友人にこんな問題を出されました。適当に再構成してみます。 タンパク質を構成するアミノ酸は 20種類あるよね。DNA または RNA はそのアミノ酸の設計図で、いわゆる「コドン」を指定している。コドンというのはヌクレオチドの塩基3個から成る…

クイックソート(C言語、Go言語)

クイックソートを C言語と Go言語で実装してみました。クイックソートは、配列の中からひとつ任意にサンプルを取ってきます。これを「ピボット」といいます。あとは、配列からピボットを除いたものを、その値がピボットより大きいか小さいかで二つの配列に分…

マージソート(C言語、Go言語)

マージソートを C と Go で実装してみました。このソートは二つの配列をマージ(統合)する作業がキモです。それぞれソートされた二つの配列を、統合してひとつのソートされた配列を作るわけですね。これができればあとは簡単です。C言語。 merge_sort.c #in…

挿入ソート(C言語、Go言語)

C言語で挿入ソートです。挿入ソートは遅いけれどわかりやすい。カードで考えると、(ソート済の)並んだカードの正しい位置に、残ったカードをそれぞれ一枚ずつ挿入していく(なのでそれもソート済になっている)というやり方で全体をソートします。 inserti…