『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…

あみだくじの横線(Ruby)

アルゴリズム・パズルです。 問題: 1 ~ 7 の数字を並べてあみだくじを作ることを考えます。引く横線の数を 10本とするとき、下に得られる数字の並びは何とおりになるでしょうか。ただし、下に得られる数字の並びが 10本より少ない横線のあみだくじで既に得…

公平に分けられたケーキ(Ruby)

アルゴリズム・パズルです。 問題: 16cm × 12cm の長方形のケーキがあります。二人で交互にケーキを切るのですが、ケーキを切った人が小さい方のケーキを取り、交代して残りをさらに切るというようにします。(ただし切り方は、辺に平行に直線的に切り、し…

GTK+ でカラーパレットを作る(Ruby)

いつも色がうまく選べないので、自分用に GTK+ を使って色を試すことのできるコマンドを作ってみました。Gem 'thor', 'gtk2' が必要です。コード。 color_p require 'thor' require 'gtk2' class MyWindow < Gtk::Window def initialize super("color palett…

スパイログラフを描いてみる(Ruby)

スピログラフ デラックス 【日本正規品】出版社/メーカー: ビバリー発売日: 2016/06/11メディア: おもちゃ&ホビーこの商品を含むブログを見る「スパイログラフ」というのは商品名で、数学的には「内トロコイド」というものになります。2つの円を組み合わせ…

意味不明なコード(Ruby)

笹田さんがツイートしておられた。# よくわからないプログラムdef foo a return true if a else return falseend— _ko1 (@_ko1) 2018年2月27日ホント意味不明。これ実行できるのかと思って試してみた。 $ pry [1] pry(main)> def foo a [1] pry(main)* retur…

Kindle の「天田士郎」本の Go と Swift 版を読んでみる

プログラミング経験者がGo言語を本格的に勉強する前に読むための本作者: 天田士郎発売日: 2017/03/10メディア: Kindle版この商品を含むブログを見るプログラミング経験者のためのSwift最速入門作者: 天田士郎発売日: 2017/05/26メディア: Kindle版この商品を…

横着なそろばん(Ruby)

アルゴリズム・パズルです。 問題: そろばんで例えば「8 + 9」をこの順に計算すると、「8 を入れる」のに玉を 4つ動かし、「9 を足す」のに玉を 2つ動かすので、全部で 6回玉を動かすことになります。また、逆に「9 + 8」の順に計算すると、全部で玉を 8回…

「絶対左折禁止」の迷路を解く(Ruby)

ブログにスターを頂いて、上のサイトを知りました。オリジナルの様々な迷路が出題されている、すばらしくおもしろそうなブログです。皆さんも御覧になってはいかがでしょうか? …とは別にステマでも何でもないのですが、そこで「絶対左折禁止」という迷路が…

与えられた迷路の最短経路を求める(Go言語)

以前 Ruby で解いたのの Go言語版です。Go言語のお勉強に移植してみました。まずは実行結果。 $ go build solve_maze.go $ time ./solve_maze ************************** *S* *$$$$ * *$* *$ *$ ************* * *$*$$$* $ ************ * *$$$ * $$$$$$$ *…

ある再帰曲線を描く(Ruby)

フィボナッチのうさぎ―数学探険旅行作者: キースボール,Keith Ball,佐藤かおり,佐藤宏樹出版社/メーカー: 青土社発売日: 2006/12/01メディア: 単行本 クリック: 3回この商品を含むブログ (9件) を見るこの本で言及されている再帰曲線を Ruby で描いてみまし…

急がば回れ(Ruby)

アルゴリズム・パズルです。 問題: 上のような規則があります。縦が 5cm、横が 6cm の長方形の場合、A から B までの最長経路は何 cm でしょうか。 Ruby で解いてみました。 q50.rb W, H = 6, 5 def yoko?(y) @yoko[y].inject(:+) < 2 end def tate?(x) @ta…

反転で作る互い違い(Ruby)

アルゴリズム・パズルです。 問題: 表が白で裏が黒の 16 枚のカードがあります。まず、これらを白と黒が 8 枚ずつ連続して見えるように円形に並べます。 そして、連続した 3 枚のカードを裏返していくことにします。適当な位置でこのように反転していくとき…

Go言語で汎用両端キューの実装

Go でキューの実装は、上記事で append を使って簡単にしています。なるほどと思いました。 ふつうはこれで充分ですよね。スタックは2本のキューで実装できるので、これも簡単です。しかし、任意の型を入れられるキュー、しかもメモリを効率よく使うキューが…

Go言語でじゃんけんゲーム

Go

Go言語のお勉強にいつものじゃんけんゲームを作ってみました。こんなのでも悩みましたよ…。 janken.go(Gist) package main import "fmt" import "math/rand" import "time" type Player struct { name string point byte hand byte } func show_hand(hand …

Go言語をとりあえず使ってみる

Go

Go 1.9 で。使ってみると遊びなら C言語を使うくらいなら Go の方がいいという感じ。 Go 結構いいな。「見た目派」の自分としては、ソースの見た目がすっきりしているし。:= のおかげで型をあんまり明示的に書かなくても済むのが Rubyist にはいいっぽい。 …

Go言語を Linux Mint(Ubuntu)にインストール

基本的には上のサイトどおりにやればよい。Linux Mint 18.3 で確認。 バージョン 1.9 を apt でインストールします。 $ sudo add-apt-repository ppa:gophers/archive $ sudo apt-get update $ sudo apt-get install golang-1.9-go あとは上サイトにも書いて…

Object#method の奇妙なること(Ruby)

Object#method はメソッドをオブジェクト化してくれるのですよね。だから、こんな奇妙なブロックなしの世界が…。 [1] pry(main)> putout = method(:p) => #<Method: Object(Kernel)#p> [2] pry(main)> a = [1, 5, 4, -2, 10, 3] => [1, 5, 4, -2, 10, 3] [3] pry(main)> a.each(&putout</method:>…

Linux で tty(仮想コンソール)が黒い画面のままで起動しない

Linux Mint 18.3 Cinnamon 64 bit を使っていて端末エミュレータもふつうに使えるのですが、[Ctrl] + [Alt] + [F1] ~ [F6] で立ち上がる筈の tty(仮想コンソール)が、黒い画面のままでどうしようもありません。ここから 、[Ctrl] + [Alt] + [F8] で X Wind…

すべての組み合わせについて配列を n 個に分割する(Ruby)

Array#divide(n) です。遊びで作ってみました。 配列を n 個に分割する、すべての組み合わせをブロックに渡します。ブロックが与えられなければ Enumerator を返します。 [*2..6].divide(3) {|i| p i} #=> #[[2], [3], [4, 5, 6]] #[[2], [3, 4], [5, 6]] #[…

Gem 'oekaki' にタートルグラフィックスを追加

前回のエントリで作った Turtle クラスを Gem 'oekaki' に同梱しました。これでバージョンは 0.1.5 になります。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura 使い方はほぼ同じです。インスタンスの…

タートルグラフィックスで再帰曲線をいろいろ描いてみる(Ruby)

Ruby で簡単なタートルグラフィックスを実装して、いろいろ再帰曲線を描いてみました。描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura ※追記 Gem化しまし…

『プロを目指す人のための Ruby 入門』を読んでみた

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)作者: 伊藤淳一出版社/メーカー: 技術評論社発売日: 2017/11/25メディア: 大型本この商品を含むブログを見る 評判がよいので読んでみました。…

無駄に複雑な関数型 FizzBuzz(Ruby)

trans = ->(i) { if i % 15 == 0 "FizzBuzz" elsif i % 3 == 0 "Fizz" elsif i % 5 == 0 "Buzz" else i.to_s end } fizzbuzz = ->(n) { generate = ->(i, ar) { return ar if i > n generate[i + 1, ar + [trans[i]]] } generate[1, []] } p fizzbuzz[50] 何…

ふたたび Ruby で 8 queen(関数型プログラミングっぽく)

ここで Ruby で「8 クイーン問題」を解いてみましたが、関数型プログラミングのお勉強に Common Lisp のコード例を移植してみました。参考にしたのはこのサイトです。 実行するとこんな感じです。 ---------- No.1 ...@.... .@...... ......@. ..@..... ....…

パスカルの三角形(Ruby)

パスカルの三角形とは、こんな感じのものです。 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 規則性がわかりますね。多項式 (a + b)n を展開すると、係数がこんな風に並びます。Ruby で関数型プログラミングっぽく書…