鍋あり谷あり

テーマを決めずに適当に書いています。

プログラミング

遅いソート

http://bugrammer.hateblo.jp/entry/2014/08/16/014212 ( バブルソートよりも非効率なソートアルゴリズムを探して ―― ストゥージソートとスローソート ) を読んで。ちゃんと終わるけどもっと遅いソートがあるので書いてみた。たぶん名前がついていると思うん…

久々に 剰余なしで FizzBuzz

はるか昔に書いた http://d.hatena.ne.jp/Nabetani/20070510/p1 が、ruby 2.1.0 では動かないようなので、書きなおした。 def f(name,n) Fiber.new do loop do (n-1).times{ Fiber.yield "" } Fiber.yield name end end end def fb(sup, *x) s=x.map{|name,n…

記号の読み方

記号の読み方は本を読んでも書いてなかったりするし、会社や文化圏によっても違ったりするので結構困るんだけど、私はこう読んでるよ、という話は書くことができる。 !文脈がなければ「ビックリ」。単項演算子なら「ノット」とか #「シャープ」か「ハッシュ…

筑波の ruby の 23番

「Ruby プログラミング 50題」 http://klis.tsukuba.ac.jp/klib/index.php?plugin=attach&refer=KISL%2Ftop&openfile=ruby.pdf という素晴らしい資料を筑波大学が公開している。で。この 23番。 tango = ["knowledge", "information", "system" , "library",…

南無ドット

CodeIQ のナムドット問題( https://codeiq.jp/ace/yuki_hiroshi/q468 )に取り組んでみた。 規則性の発見に数時間を要したと思う。 規則性がわかれば実装はそんなにかからなかったと思う。 測ってないけど。で。 私が書いたのはこんな感じ。 maps = (0..( "01…

あなたは n 個の同じサイズのボールを持っています。

id:torazuka:20130626:balls の問題からヒントを得て。「あなたはn個の同じサイズのボールを持っています。(n-1)個は同じ重さで、1つだけが他より少し重いです。秤をm回かそれ以下の回数使って、少しだけ重いボールを見つけるには、どうすればよいでしょうか…

オフラインリアルタイムどう書くというイベントやっている

こちらは全然更新していなかったんだが、気が向いたのでこちらでも。去年の夏ぐらいから「オフラインリアルタイムどう書く」というイベントをやっている。次回は http://atnd.org/events/37587 。概要はリンク先のとおり 私が用意したお題について制限時間1…

プログラミング言語と日本の歌手

プログラミング言語のリリース年と、その年にデビューした歌手の対応表を作ってみた。当然その年にデビューした歌手はたくさんいるわけだが、そこから適当に選んだ。選び方についてのルールは適当だが、 私の知っている人。名前だけでも。 できればソロ。 歌…

バケツ問題1

数年前に某へなちょこで出した問題。水がいっぱい入ったバケツ一個と、空のバケツがいくつかあり、それぞれのバケツの容量は正確にわかっている。この状態から指定された容量を量りとる、最小手数の手順を求めよ。 ただし バケツからバケツに水を移す操作を…

お釣り最小

数年前に某へなちょこで出した問題。あなたは硬貨を何枚か持っており、ある金額を払いたい。 お釣りの金額が最小となるような硬貨の組み合わせと、その場合のおつりを計算せよ。 硬貨の価値はすべて正の整数、払いたい金額も正の整数で、オーバーフローは考…

三項演算子の優先順位

C/C++/Java などの本を見ると、必ず演算子の優先順位が書いてある。 演算子の優先順位は、どれもだいたい コンマ演算子 < 代入演算子 < ?:演算子 < それ以外全部 となっている。 が。 実際は優先順位が逆転するケースがある。 C++で a+=1 ? b+=2 : …

ペアプログラミングのペアを作る

問題。勉強会か何かで、言語を限定せずにペアプログラミングを行うことを考える。話を簡単にするため、参加人数は偶数。 使える言語は人によって異なる。例えば、 島地:ruby, C 佐伯:Java, C, pascal 原田:Java, perl, python, C 石田:Java, pascal とい…

Objective-C

ずっと、Object-C なのか Objective-C なのか覚えられなかったんだが、最近ようやく間違えなくなってきた。Objective-C。 Objective-C はC++とちがっていい言語だという意見をときどき目にし、耳にしていたので、きっと良い言語なんだろうなとぼんやり思いつ…

メタプログラミング

メタプログラミングrubyを読んでいる。 で。たぶん昔、gotoが混沌の源だった。 gotoがもたらす混沌は、構造化プログラミングによって治められた。次に、関数へのポインタとswitch〜caseが混沌の源となった。 この混沌は、オブジェクト指向によって治められた…

Perl

perlの意外な動作について気づいたことを。 文字列に対するビット演算 use strict; $a="33"; print( $a & "7","\n" ); #=> 3 print( $a + "7","\n" ); #=> 40 print( $a & "7","\n" ); #=> 1 最初の print と最後の print は全く同じ式なのに結果が異なる。 …

#include と #define を組み合わせる

d:id:tt_clown:20100904:1283587136 で話題になっていたので、ちょっと変だと思われがちな include の使い方をひとつ。 // corr.h MAP( SOME_ID_DOG, ANOTHER_ID_INU ) MAP( SOME_ID_CAT, ANOTHER_ID_NEKO ) MAP( SOME_ID_FOX, ANOTHER_ID_KITSUNE ) MAP( SO…

デフォルト引数の不思議な仕様

C++のデフォルト引数でもうちょっと気持ちの悪いことをしようと考えたんだが、先日の例を超えるものはできなかった。 foo operator+(foo,foo); の第二引数にデフォルト引数を入れたら面白いかと思ったら、コンパイルエラーだった。意外とまとも。というわけ…

デフォルト引数の不思議な世界

C++のデフォルト引数で、ちょっと変なことができることに気がついた。 ostream & f(int,ostream &){ return cout <<"f"; } template<typename anytype> ostream & f(anytype){ return cout << "t"; } void test() { f(0) << "\n"; // t ostream & f( int,ostream & = f(0) ); f</typename>…

私の知らないC言語

先日、また知らなかった仕様をひとつ知った。 #include <stdio.h> int main() { int a = {3}; printf( "%d\n", a ); return 0; } int a[]={3}; と同じように、int a={3}; と書いてもいいらしい。 何のために許しているのかは、全く知らない。 どんな歴史的経緯なのか</stdio.h>…

継続渡し

先日のタートルグラフィックス。 描画の経過が表示されるといいなと思い、考えてみた。 まず思いついたのは、javascript 1.7 の yield。これがあれば中断と継続が簡単にできるに違いないと思い、書いてみたら、実際に中断と継続が簡単に書けた。が。Firefox…

HTML Canvas で 再帰的タートルグラフィックス

勢いで書いてみた。 http://nabetani.sakura.ne.jp/turtle/ HTML Canvas なので、ソース付き。 インデントが変だったり、関数の処理内容に一貫性がなかったりするけど、お気になさらぬよう。 IE以外でご覧ください。

ruby で bool か否かを判定する

jijixi's diary - bool 経由で d:id:asipruby:20090515:1242341093 。 def bool?( x ) x==!!x end ってのはいかがでしょうか。if 文で書くなら if object==!!object # do something end ということで。速度的にどうなのかは知らないけれど、ゴルフ的にはいい…

剰余の計算

例の図は少々お待ちください。 ……という内容だけの日記もどうかと思ったので、お題を2つ。 お題1: aのb乗をdで割ったあまりを計算するプログラムを書け。 ただし、a, b, d はいずれも整数で、0≦a<1億、0≦b<1億、0

私の知らないC言語

先日、プリプロセッサの動作を誤解していたことに気がついた。 #define foo bar は、foo を bar にし、 foo(x) も同じように bar(x) にするが、 #define baz(x) hoge は、baz(0) を hoge にするものの、baz は baz のままにする。 という仕様を理解していな…

Javaの不思議な言語仕様

先日。Javaで int begin=getBegin(); int end=getEnd(); for( int i=begin ; i!=end ; ( begin

C++の予約語で山手線ゲーム

C++の予約語で山手線ゲームをした。 最後まで出てこなかったのは、 asm explicit friend register return の五つ。returnが出てないのはどうかしていると思った。

加算と減算

加算と減算を、所謂ビット操作のみで実現するというお題でプログラムを書いてみた。 int addbybitop( int a, int b ) { while( a&b ){ int c = a^b; b = (a&b)<<1; a = c; } return a|b; } int subbybitop( int a, int b ) { while( b ){ int c=b; b=(b&~a)<…

私の知っているC言語とC++

読む人いるのかなあなんて思いつつ。 BOOL と bool と 0 と 1 歴史的事情でしばしば typedef int BOOL なわけだけど、これを比較したいことがある。具体的に書くと: BOOL foo(); BOOL bar(); とかいう関数があって。 返戻値は大抵「真の場合はゼロ以外、偽…

私の知っているC++

某所の記事を読んでいくつか書いておこうと思いたち、気がついた順に。 static 変数やグローバル変数はゼロで初期化される C++の変数はたぶん4種類あって、グローバル変数、ファイルスコープのスタティック変数、関数スコープのスタティック変数、自動変数…

C++で2項演算子を増やす

ふと。C++は2項演算子を増やせるということに気がついた。単項演算子は関数呼び出しと大差ないのでべつに増やしたくはならないんだが、2項演算子は増やしたいと思うことも多い。内積と外積とか。そういう類で。使い方はこんな感じ: class int_max_type : pu…