鍋あり谷あり

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

プログラミング

私の知らないC++

今日はあんまり文章を書く時間がないので、ソースから: namespace Foo{ class baz{}; void f( baz ){ cout << "Foo::f" << endl; } } template< typename T > void f( T const & ){ cout << "global f" << endl; } void test() { Foo::baz x; f( x ); // Fo…

ほげふが

昔。五年ぐらい前かな。 windows用のテストプログラムか何かを書いていて。 関数名が2つぐらい必要になり、そのときは何となく foo bar という気分ではなかったので、hoge huga にした。fuga ではなく huga にしたのはなぜなのか憶えてない。 で。 関数名が…

私の知らないC/C++

このシリーズ久々のような。 というわけで、ソースコードから: struct orange; /* これは、何度も書いたことがある*/ typedef orange;/* C の場合は、typedef int orange と同義 */ typedef struct kiwi; extern struct grape; extern grape;/* C の場合は…

交点の問題#2

d:id:Nabetani:20071216:p1 の続き。むしろ。 ループがひとつの時が気になる。 N(≧3)本の線分をそれぞれの端点で接続してひとつのループを作る。 このとき、線分同士の交点数の最大値B(N)はいくつか。 奇数の場合は B(N)=C(N)=N(N-3)/2 で、解決。 偶数の場…

in-place merge sort

http://blog.livedoor.jp/dankogai/archives/50957658.html に 現代では一時メモリーを使わないin-place merge sortが開発されている と書いてある。そういえば、STLの stable_sort の計算量が O( N (log N)**2 )だったよなぁと思い、どうやったらそうなるの…

多重代入でひとつめを捨てる

def divmod(a,b) [a/b,a%b] end みたいな関数があって。 この例で言う、a/b が不要で a%b だけが要るとしよう。 まあ多重代入じゃなくて配列が返ってると思えば r=divmod(10,3)[1] なんだけど、 def foo(a,b) yield[a/b,a%b] end だと配列と思うのも難しく。…

憶えておくといい数

d:id:debedebe:20071021 を読んで。私自身は、真分数の小数表示が役に立つとはあんまり思ってない。小数の計算は人間がやるもんじゃないと思ってるからだと思う。 1〜20の自乗、1〜9の三乗は便利だと思う。憶えてないけど。 2の整数乗は、2**24=16777216まで…

ゼロで桁合わせ

昔見た、切ないソース。 使用言語は C++。 somestruct foo[] = { { 100, 1, 2, 20, 1 }, { 150, 2, 1, 25, 5 }, { 175, 1, 2, 15, 3 }, { 100, 2, 2, 05, 5 }, { 100, 1, 3, 15, 4 }, { 075, 3, 2, 10, 3 }, { 100, 1, 3, 10, 3 }, { 025, 4, 2, 05, 1 }, };…

一般項って何だろう

たとえばフィボナッチ。 一般項というと c を思い浮かべることが多いが、c は 誤差なしでの計算が困難 各項が整数であるという性質が見えにくい という欠点がある。その点ですぐれているのは実は a。 しかし a は再帰的定義なので何となく一般項っぽくない。…

ソースコードエディタ

この日記を読んでくださっている方の半分ぐらいはプログラマじゃないかと思っているんだが、どうだろう。 で。 ソースコードエディタの話。 私は、去年ぐらいからだったかな、ソースコードの編集にはプロポーショナルフォントを使うようになった。液晶画面で…

私の知っているjava - 浮動小数点から整数

数値計算の辺りにある不自然な挙動をもうちょっと。浮動小数から整数に変換する場合のアルゴリズムは、C/C++ と比べると java は非常にわかりやすいし、罠も少ない。と思う。何よりも、処理系依存とか言わないところがすばらしい。 で。こんなコード。

私の知っている java - しつこくシフト演算

先日書いたのと同じはなしなんだが、もうちょっと不幸そうな例を思いついたのでソースと実行結果を書いておく。 まずはソース: public class Test1 { static void test( int i ){ short x=0x4321; x<<=i; System.out.printf( "%d : %x\n", i, x); } public …

私の知っているjava -- シフト演算補足

先日の記事 id:Nabetani:20070529:p2 の補足を少々。 で。 public class Test1 { public static void main(String[] args) { byte i8=0x12; i8<<=8; System.out.printf( "8bit : %x\n", i8 ); short i16=0x1234; i16<<=16; System.out.printf( "16bit : %x\n…

私の知らないjava - シフト演算

以前、 id:Nabetani:20040407:p1 で、int を 32bit シフトすると元に戻ることと戻らないことがあるという話を書いた。 java ではどうなるんだろうということで試してみた。 public class Test1 { static final int ctI = 0x12345678<<32; static final long …

左辺値に条件演算続報

朝電車の中で、w-zero3[es]でちろっと書いた記事が、リンク元の記録を見る限り500以上のアクセスを集めてちょっとびっくりした。ブックマークやトラックバックもついてるし*1。 で。 ちょっと解説じみたことを。 (a

左辺値に条件演算

先日書いた (a

私の知らないjava

最近 java の本を読んでいる。 意外な仕様がいろいろあって面白い。 で。 最初に取り上げるのは、左辺値は変数か配列というルール。 int main() { int a=0, b=1; ( true ? a : b ) = 3; printf( "%d\n", a ); // 3 を出力 } まああんまりこんなことを書く人…

剰余なしについて

http://d.hatena.ne.jp/odz/20070509/1178729737 や http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20070509#p02 で、剰余なしの話をしているので、私もちょっと書いておく。 過剰にまじめに。剰余の実行コストを根拠に「願い下げだ」と言っているの…

FizzBuzz 剰余なしでもう一回

昨日の実装は、1〜100なら問題ないんだが、1〜百万とかだとメモリが大量に必要になるという欠点があった。 というわけで、メモリ要求が厳しくないものを作ってみた : require 'generator' def f(name,n) Generator.new{ |g| loop{ (['']*(n-1)+[name]).each{…

剰余なしで FizzBuzz

http://b.hatena.ne.jp/m-naze/20070509 剰余を使うような人は願い下げだ という意見があるようなので、こんなのを: (1..100).zip(['','','Fizz']*34,(['']*4<<'Buzz')*20).each{|i|/\d+$|\D+/=~i.to_s;puts$&} 86文字。 ゴルフ的には少なくともあと1文字減…

function

打鍵速度 @ val it: α → α = funで見た http://shohoji.net/labs/function/。 ムキになってやったら 0.531秒。まあまあか。 ムキにならなくても 0.6秒台はでる。 仕事でよく使っている言語は C++ なので、私なら「const_iterator」「namespace」辺りが速いか…

あなたならどうお書きになります1.0 - 場合の数

三番目の実装についてのみ、解説を書こうと思ったんだが、時間がないので今日はやめ。 年明けになるかな。それとは別に、場合の数を書いておこう。 複数人数のグループがない場合の、プレゼント交換の場合の数は以下の通りになる: 2:1 ≒ 2**0 3:2 ≒ 2**1 4:9…

あなたならどうお書きになります1.0 - 私の実装

実は。 娘の風邪でクリスマスパーティーは中止となり、今年はクリスマスパーティーのプレゼント交換はなくなった。とほほ。 それはともかく。あなたならどうお書きになります1.0( id:Nabetani:20061217 ) の締め切りなので書いておく。 実装の方針としては …

あなたならどうお書きになります1.0続報

先日の あなたならどうお書きになります1.0 が、はてなブックマークで 15ユーザーとなり、鍋あり谷あり史上2番目となった。 誰にも気づかれずにひっそりと締め切りを迎える可能性の方が高いと考えていたので大変驚いている。で。 http://d.hatena.ne.jp/Nabe…

あなたならどうお書きになります1.0

今年もうちでクリスマスパーティーをやる。 クリスマスパーティーにはプレゼント交換。 で、誰が誰にプレゼントを渡すのかを決めるわけだが、人間がサイコロなどで乱数をつくって決めるのは、実は難しい。そこで今日の出題。 クリスマスパーティーでプレゼン…

ちゃー-てふ

私はこんな風に呼んでいる、という話を書くのはすごく恥をかきそうでこわいんだが、書いてみる。 stl とか stdlib とか C++ 予約語辺りから。 char : ちゃー wchar_t : だぶるちゃーてぃー、わいどちゃーてぃー enum : いなむ asm : あすむ atoi : あとい、…

C++でコラッツ逆展開

しつこくコラッツ。 せっかく std::set があるので C++ でもコラッツ逆展開を書いてみた: typedef long long num_t; typedef pair< num_t, num_t > nums_t; num_t collatz( num_t n ) { num_t done = 3; set< nums_t > waits; waits.insert( nums_t(8,4) ); …

コラッツ逆展開

http://ll.jus.or.jp/2006/blog/doukaku2 の話。3回目。 g:haskell:id:jmk:20060712:1152721034 でやっていた逆展開を私もやってみる。 ただし、そのまんまやると h(100)の計算が終わらないようなので、終わるように工夫して: def collatz( n ) done=3 # 1,…

コラッツの続き

コメントありがとうございます>なかださん というわけで、||=を使ったりして、私の満足行くところまで短くなったプログラムを以下に: class Collatz include Enumerable def initialize( n ) @n=n @cache={1=>1} end def calc(n) @cache[n] ||= 1+calc( 0==…

コラッツ

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20060711#p02 経由で、 http://ll.jus.or.jp/2006/blog/doukaku2 class Collatz include Enumerable def initialize( n ) @n=n @cache={1=>1} end def calc(n) @cache[n]=_calc(n) unless @cache.inclu…