ToDo:
http://d.hatena.ne.jp/rinset/20060320/1142839025
これすげー便利だなーと思ったけどインターフェースが欲しいので追加。
template tostr(T) { char[] tostr(T t) { return ToString!(T)(t); } } template p(T) { void p(T t) { writefln(tostr(t)); } }
今なら bogoyaml もっと面白おかしく実装できるなあ。
(05:38)
(17:59)
記憶喪失な僕でも10個くらいすぐに出るだろう。
下の方はやる気ひかえめというか。
(18:18)
とかで起動できるように。
if (*p == ':' && p[1] == '/') { /* scheme found */
って感じで '/' の判定を追加。
(18:36)
というネタを考えたけど実現できそうにない。 予想を確定事項に変換する。
before
警察と仲いいからできるんですかねぇ
after
警察と癒着してますからね。 # 常識だと思ってたけど…
----------- 微妙に気が効いてそうで微妙なシグネチャ
(22:09)
http://www.madin.jp/diary/?date=20060602#p01
via http://www.hyuki.com/t/200606.html#i20060604001205
なんにせよ情報を消す機構を作ること自体になんか違和感を感じるのであった。
いわゆるお前には関係ないという状態。
(16:09)
匿名の意見に価値が無い、は間違ってる。 ってのはいつも思ってる通りなんだけど。 けど、非匿名の方が価値がある場合もあるなと思った。
技術的な間違いとかをコメントしてもらう場合は、 ホントどっちでもいい。 むしろ匿名の方が律義な返事しなくていいとかで ラクなくらいだったりとかもありうる。
ただ、意見みたいなものの場合は、 相手がどういうバックグラウンドかわかると 理解やらなんやらが進みやすい、 ってのは一定正しいんだよなと今さら思った。
バックグラウンド無しの発言は無価値だ、 っていうのに反発しすぎて 非匿名の価値みたいなのを過少評価してたかなーとかいう話。
(18:18)
Command_AddCommand(cmd, (int)"BAKURETSU_KYUKYOKU_KEN", U, DL, DR, UL, UR, D, -1); Command_AddCommand(cmd, (int)"TENHA_HUJINZAN", DR, L, DL, D, DR, R, L, D, DL, -1); Command_AddCommand(cmd, (int)"ACCEL_RUSH", L, R, DR, D, DL, UR, -1); Command_AddCommand(cmd, (int)"BREAK_SPIRAL", L, DL, D, DR, R, UR, D, -1); Command_AddCommand(cmd, (int)"BLOODY_FLASH", DR, L, DL, D, DR, R, L, R, -1); Command_AddCommand(cmd, (int)"RAISING_STORM", DR, L, DL, D, DR, R, DL, -1); Command_AddCommand(cmd, (int)"HO_O_KYAKU", D, DL, L, DL, R, -1); Command_AddCommand(cmd, (int)"HAO_SYOKO_KEN", R, L, DL, D, DR, R, -1); Command_AddCommand(cmd, (int)"SHINKU_HADO", D, DR, R, D, DR, R, -1); Command_AddCommand(cmd, (int)"YOGA_FRAME", L, DL, D, DR, R, -1); Command_AddCommand(cmd, (int)"SYORYU_KEN", R, D, DR, -1); Command_AddCommand(cmd, (int)"HADO_KEN", D, DR, R, -1); Command_AddCommand(cmd, (int)"TATSUMAKI", D, DL, L, -1); Command_AddCommand(cmd, (int)"TETU_ZAN_KO", L, R, N, R, -1); Command_AddCommand(cmd, (int)"YAKUHO", R, N, R, N, R, -1); Command_AddCommand(cmd, (int)"RIMON", R, N, R, -1);
(09:34)
http://d.hatena.ne.jp/Ozy/20060604#p1
ちょっと見て短くなりそうに思ったのにならんかった。
i@u ~/test> ./a.out 1999999999 1 2000000000
なんだよなぁ。 test data の妙。
(16:29)
Haskell の何がダメって printf デバッグのしかたが わからないことじゃないかとこないだ考えた。 do の中なら簡単だけど、 関数の中でこの時値どうなってるのー、 っていうのの調べかたがさっぱりわからない。
というか調べられるのか。無理じゃないのか。
僕は printf デバッグが好きで好きでしょうがなくて というか頭弱いからか printf を埋めないと プログラムを理解することができない。
どっかの人におこられそうだけど if の後には基本的に { 書きたくて、 それは後から if の中に入ってるかチェックするために printf を埋めたいという、それだけのためで、 そしてそれに価値があるというか。 if の中と外がとても簡単な条件ならそりゃ { 省略するけど、 基本的にはあった方がいいというか。
途中で全然違う話になっている。
(06:01)
うますぎるのでレシピメモ。 忘れるわけない気もするが。 99で買った豆腐、 99で買ったキムチ、 99で買ったごま油、 うまいたれ。
適当にかける。キムチ多め。食する。おわり。
(06:02)
http://d.hatena.ne.jp/mr_konn/20060605/1149520643
これを書いちゃう konn さんすげーと思いつつも
c _ 0 = 1 c n r = (n-r+1) * (c n (r-1)) `div` r
普通に書けよとは思った。
(06:33)
http://haskell.g.hatena.ne.jp/nobsun/20060606/p1
を見て。
昨日のをちょっとつめると
c _ 0=1 c n r=div((n-r+1)*c n(r-1))r
で 36byte か。
c n r=div(product[n-r+1..n])$product[1..r]
は 42 byte でちょっと長い。
(07:30)
(00:09)
(00:10)
http://slashdot.jp/article.pl?sid=06/06/08/0250230
子供の頃に妄想した気がする。 学校の試験がげーむだったらどうなるだろう…とか。
いつも喋ってることだけどプログラミングも 料理マンガみたく対決させて欲しいよな。
おーっとあらし君物理エンジンのODEを解凍しはじめたー! 課題はコンパイラなのにどう使うんだ!? おおーっとそして出ました水魚のポーズ!!!
みたいな。 ゲームセンターあらしはすごいマンガだったなぁ。 復刻版の後ろの方についてた作者の回想に 「こんなもんありえるわけないですよね」 みたいなこと書いてたのは少し残念だったけど。
一方車田正美は本気だった。
http://www5e.biglobe.ne.jp/~saint/goroku.htm
(13:22)
気がついたら割とたくさんある。
i@u ~> /bin/ls -1 arch/hyperestraier-* arch/hyperestraier-0.3.13.tar.gz arch/hyperestraier-0.5.0.tar.gz arch/hyperestraier-0.5.1.tar.gz arch/hyperestraier-0.5.2.tar.gz arch/hyperestraier-0.5.3.tar.gz arch/hyperestraier-0.5.7.tar.gz arch/hyperestraier-0.9.0.tar.gz arch/hyperestraier-0.9.1.tar.gz arch/hyperestraier-0.9.2.tar.gz arch/hyperestraier-1.0.0.tar.gz arch/hyperestraier-1.0.1.tar.gz arch/hyperestraier-1.0.2.tar.gz arch/hyperestraier-1.0.3.tar.gz arch/hyperestraier-1.0.6.tar.gz arch/hyperestraier-1.1.0-experimental.tar.gz arch/hyperestraier-1.1.6.tar.gz arch/hyperestraier-1.2.0-experimental.tar.gz arch/hyperestraier-1.2.1.tar.gz arch/hyperestraier-1.2.2.tar.gz arch/hyperestraier-1.2.3.tar.gz
しょっちゅう消すせいか、案外すくない。
i@u ~> /bin/ls -1 arch/gcc-* arch/gcc-1.42.tar.gz arch/gcc-core-4.0.3.tar.bz2 arch/gcc-g++-3.4.0.tar.bz2 arch/gcc-g++-4.0.0.tar.bz2 arch/gcc-g++-4.0.2.tar.bz2 arch/gcc-g++-4.0.3.tar.bz2 arch/gcc-java-3.4.0.tar.bz2 arch/gcc-java-4.0.2.tar.bz2 arch/gcc-java-4.0.3.tar.bz2 arch/gcc-objc-4.0.2.tar.bz2
(08:04)
http://www.kmonos.net/alang/etc/ecmascript.php
の例をかたっぱしから実行。
匿名関数を () で囲ってほげれない、のかな。
i@u ~/test/js> cat ki10.ds var x = ( function(a, b) { return (a==0 ? b : arguments.callee(b%a, a)); } )( 60, 84 ); println( x ); i@u ~/test/js> ds ki10.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files Error: (1) : Error: cannot assign to function (a,b) { return b ? arguments.callee(b % a, a); } i@u ~/test/js> cat ki11.ds var f = function(a, b) { return (a==0 ? b : arguments.callee(b%a, a)); } var x = f( 60, 84 ); println( x ); i@u ~/test/js> ds ki11.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files 12
closure が無いのかね。
i@u ~/test/js> cat ki12.ds function map( arr, f ) { var newArr = new Array(arr.length); for( var i=0; i<arr.length; ++i ) newArr[i] = f( arr[i] ); return newArr; } function mem_fn( mf ) { println('OUTSIDE: ' + mf); return function(obj) { println('INSIDE: ' + mf); var args = new Array(arguments.length-1); for( var i=1; i<arguments.length; ++i ) args[i-1] = arguments[i]; return mf.apply( obj, args ); }; } x = map( ['hoge', 'fuga', 'hagyo'], mem_fn( String.prototype.toUpperCase ) ); map( x, println ); i@u ~/test/js> ds ki12.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files OUTSIDE: function toUpperCase() { [native code] } INSIDE: undefined Error: Undefined undefined.apply is undefined and has no Call method
関数に name メソッドが無いかしら。
i@u ~/test/js> cat ki14.ds function Point() { this.x = 0; this.y = 0; this.distanceFromOrigin = function() { return Math.sqrt( this.x*this.x + this.y*this.y ); } } var pt = new Point(); pt.x = 5; pt.y = -12; println( pt.distanceFromOrigin() ); println( pt.constructor ); println( pt.constructor.name ); i@u ~/test/js> ds ki14.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files 13 function Point() { } undefined
こっちは closure ぽく動くな。
i@u ~/test/js> cat ki16.ds function Point() { var x = 0; var y = 0; this.getX = function() { return x; } this.getY = function() { return y; } this.set = function(i_x, i_y) { x=i_x; y=i_y; } } var pt = new Point(); pt.set(100, 200); println( pt.getX() + ' ' + pt.getY() ); i@u ~/test/js> ds ki16.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files 100 200
scope chain の話、の部分も当然だめ。 closure 系悲しす。
MS 拡張らしいが動く。
i@u ~/test/js> cat ki24.ds // written for JScript.NET function Point() { this.x = 0.0; this.y = 0.0; } function Point.prototype.distanceFromOrigin() { return this.x*this.x + this.y*this.y; } println( (new Point()).distanceFromOrigin() ); i@u ~/test/js> ds ki24.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files 0
arity もあるみたい。
i@u ~/test/js> cat ki25.ds // written for Rhino function add(x, y) { return x + y; } println( add.arity ); i@u ~/test/js> ds ki25.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files 2
__proto__ はない。
i@u ~/test/js> cat ki26.ds // written for Rhino var objA = { f: function(){print("objA")} } var objB = { f: function(){print("objB")} } var objC = new Object(); var objD = new Object(); var objE = new Object(); objD.__proto__ = objE.__proto__ = objC; objC.__proto__ = objA; // Cのプロトタイプ変更 objD.f(); objE.f(); objC.__proto__ = objB; // Cのプロトタイプ変更 objD.f(); objE.f(); i@u ~/test/js> ds ki26.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files Error: Object [object Object].f is undefined and has no Call method
a.caller も無いみたいね。
// written for MocaScript function f1() { f2(); } function f2() { f3(); } function f3() { f4(); } function f4() { f5(); } function f5() { g(); } function g() { for(var a=arguments; a; a=a.caller) // 呼び出し元を順にたどる if( a.callee == f1 ) // 呼び出され関数がf1なら…? println("g was called inside f1"); } f1(); i@u ~/test/js> ds ki27.ds Digital Mars DMDScript 1.10 www.digitalmars.com Compiled by Digital Mars DMD D compiler Copyright (c) 1999-2006 by Digital Mars written by Walter Bright 1 source files
(09:00)
import dmdscript.script; void* Dglobal_hello(Dobject pthis, CallContext *cc, Dobject othis, Value* ret, Value[] arglist) { writef("hello\n"); return null; } int main() { static char[] TEXT_hello = "hello"; static NativeFunctionData nfd[] = [ { &TEXT_hello, &Dglobal_hello }, ]; Program p = new Program(); DnativeFunction.init(p.callcontext.global, nfd, DontEnum); p.compile(`test1`, `println('hello1'); hello();`, null); p.execute(null); return 0; }
compile するごとに別の状態になるので、 Web なんかで使ってる JS 的な、 状態持たせてちょっとずつ走らせるとかできんぽい。
うーん、使えない…
(09:42)
僕はモナドの章の引用が ディアスポラだったのでうっかり衝動買いしてしまった。
世間的にはふつけるの方が人気なのかしら。 とりあえず、ある程度はわかっていたであろう僕には わかりやすいなぁ。 1年前の僕ならちょいキツかったかもだけど。
(23:19)
Windows のパーティションの切り方はよくわからない。
こんな感じかなぁ。
Linux いるのかなぁ? coLinux でいい気がする。
つかデスクトップをメインにしてもいいという話もあるのだが。
とりあえず testgl_net 走らせてみて考えるとか。
(05:15)
さくらのクローン環境が欲しい。 Presario に FreeBSD つっこむか。
(06:20)
http://haskell.g.hatena.ne.jp/nobsun/20060611/p3
を見て思った。
main = putStrLn ("hamaji" ++ at ++ "nii" ++ dot ++ "ac" ++ dot ++ "jp") where at = "@" dot = "."
(21:36)
http://www.complexification.net/
via http://d.hatena.ne.jp/MDA/20060612/1150046311
かっこいいなぁ
漠然とこういうのに対する憧れがあるんだが 何していいかいまひとつピンと来ないんだよなぁ。
(02:51)
インストールできなかった。
どうすっかな。
(07:18)
i@u ~/test/hs> cat beki.hs len2 x y = (^^) x 2 + (^^) y 2 i@u ~/test/hs> ghci beki.hs ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.4.1, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base-1.0 ... linking ... done. Compiling Main ( beki.hs, interpreted ) Ok, modules loaded: Main. *Main> len2 3 4 25.0
今さら何を言ってるという感なんだろうな。
(08:12)
lib*-devel が入っていない lib* なんていらない。
i@u ~> rpm -qa | egrep '^lib' G devel | sort | perl -pe 's/devel-//' > devel i@u ~> rpm -qa | egrep '^lib' G -v devel | sort | perl -pe 's/devel-//' > libs i@u ~> diff libs devel | perl -pe 's/< //' G lib | perl -pe 's/-.*/-devel/' > devs i@u ~> for i in `cat devs`; do ~ 1:50 echo $i; sudo apt-get install $i done
(01:52)
http://slashdot.jp/article.pl?sid=06/06/12/2111252
サーバURLはntp.nict.jpとなっている。" (つづく...)
それURLなんか。
(10:45)
ほめてもらたーと思いつつ。
なんというか、書いてる最中とか 書き終わった後は何がキモだったか覚えてるけど、 memo/hatena 書いてる最中は忘れてる現象。
ぷろぐらむの語彙が貧弱な僕こそ 適当に名前をつけてキモを把握しておいた方がいいんでないかとか、 いややっぱデザパタ重要なんじゃないかとか。 だいたい自分のできたことすら把握してないから 人と話す時困るんだ。
マッチング能力は、 暗黙テンプレート引数>明示テンプレート引数>static if の : 、 なんだけど、 C++ だと 暗黙のテンプレート引数でマッチさせたものは関数なので、 そこから型を取り出すことが(たぶん)できない。 その関数を実際に呼んでしまってクラス返せばできるけどね。 でも D は typeof あるから取り出せるぜへへん、っていう話か。
static if はええとなんで弱いんだっけ。 思い出せんのだからメモをすべきだ。
ええと…
is ((T, U) : ???) って感じで書きたかったのは覚えている。
思い出した。
is (T (U, V) : U function(V)) と書きたかったんだ。 つかこれできたら暗黙テンプレートと同じマッチ能力あるじゃん。
つか2変数以上の部分特殊化ができない、 って書いてくれてるじゃん。
暗黙テンプレート引数>明示テンプレート引数=static if の :
だなたぶん。
やっとノウハウとして蓄積できた気がした…
D in depth Wiki とか作って C++ と違うテクニックを集積するとか。
誰が見るんだ、って勢いの Wiki を。
集積したテクニックはたぶんよく使えそうなものは もっと簡単な文法を Walter さんが導入しちゃうんだろうけど、 まぁ言語の進化ってのはそういうものだろう。
とりあえず /template/ みたいなノリで ひどい状態の /d/ をなんとかしよう。
(01:20)
前から思ってるけど、 いろいろタイムリーな気がするので bind が書きたい。
しかし現実逃避はよくない。良いんだけど。
過度の現実逃避はあなたの社会生活を害する恐れがあります。
(01:43)
をおされに書く方法が無ければやる気が起きないと気付く。
なんとかして再帰的な定義に持ち込めないか…
void (T t, ...) と void (T t) のオーバロードが できればなんとかできそうだけどできない。
つかそれがなんとかできても tail みたいなのが実装できんか。
argNum は実装できそうだなぁ。
TODO: 現実逃避をやめる。
(03:36)
なんかみんなやってるけど オサレな関数とか作るのもういいから、 だって別に他の関数型言語でもいいしな、 モナドとか型やろうぜーとか言ったら
http://haskell.g.hatena.ne.jp/mr_konn/20060613/1150213544
やった。
いやすげーなあああああ
(けど実は簡単な)IOモナド
というフレーズが実にクルものが。
IO はやっぱ IO って名前でいい気がします。 あと do の外でモナド外せたらマズくね、とか。
次はぜひ型をお願いします。
(07:13)
auto dubl = convolution(&concatMap, &replicate);
とは書けない気はする。 うぬぬ生意気な。
けど本当にできないのかな。 なんかほげほげできそうな。
メモ template opCall
(12:51)
int func(char, bool, char[], int[char[]]); alias functor!(typeof(&func)) f; static assert(is (f.rettype == int)); static assert(is (f.argtypes == TL!(char, bool, char[], int[char[]])));
ふむ。割にあっさりできた。
(18:48)
ごめんなさい再帰的にほげほげはこりゃ無理だと思って諦めました。
オサレじゃなくてもすぐできたから、 あっさりできた、と書いたとか。
具体的にはこんな感じの rettype と argtype ができれば自明な実装。
http://shinh.skr.jp/tmp/signature.d
(16:27)
だなんて言ってるヤツが失望してほげほげなのさ、 とシニカルに言うのが流行りらしいから、 関数型言語が銀の弾丸だと言ってるヤツはほげほげなのさ、 と言うことにしようか。
(15:10)
結局、リクエストは UTF-8 で来てるので、 それを EUC になおさず処理しちまうのが一番良い。
そんで
http://kawa.at.webry.info/200511/article_9.html
紅茶は text/plain だからうまくいってるのかなぁ。 よくわからん。
(22:39)
template <class T> struct S { private: static T m(); public: enum { t = sizeof(m()) }; };
についてヒマな時追ってみる。
(01:41)
がどうとか言ってる子はキモい子です! って話があったんだけど、 みんなどういう理由でそんな子になってしまったんだろうか… あと妙に同世代が多い気がするんだよな。 少し上の人は I hate C++! がデファクトに なりきっているというか。
世界で2番目に誤解された言語 C++ 。とかどうだろう。
いや、別に誤解はされてないな…
まぁそんなこんなで最近見てる人の経歴を適当に見てみる。
http://d.hatena.ne.jp/Cryolite/
同世代の模様。
奥さんがいらっしゃるってことは少し上かしら。 しかし最近はそういう判断は外れる歳になっている。
http://d.hatena.ne.jp/syd_syd/
大学院生さんらしい。 いかにも言語好きーな人なのでわかりやすいかな。
http://d.hatena.ne.jp/y-hamigaki/
今気付いたけど cppll でよく見る人だったよ!
http://d.hatena.ne.jp/mb2sync/
あーそういや Boost.Typeof 見てみないとなーと思ったんだった。 http://d.hatena.ne.jp/mb2sync/20050422#p1 はあとで見る系。
結局世代とかよくわからんかったけど なんでもいいや。
(03:07)
http://www.accu-usa.org/2000-05-Main.html
あれーユーザ定義型はーと思ったら REGISTER_TYPEOF とかあるな…
しんどいけどマジメに追ってみよう…
#include <iostream> #include <list> #include <boost/typeof/typeof.hpp> using namespace std; using namespace boost; struct C { C() { cout << "hello world!" << endl; } }; int ifunc() { return 0; } list<int>::iterator itefunc() { static list<int> l; return l.begin(); } C cfunc() { return C(); } int main() { BOOST_AUTO(i, ifunc()); BOOST_AUTO(ite, itefunc()); BOOST_AUTO(c, cfunc()); }
ああうん。すごいな。
(03:36)
int main() { BOOST_TYPEOF(cfunc()) c = cfunc(); c = *(new BOOST_TYPEOF(cfunc())); }
_ が、 cl.exe だと、
int main() { boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(cfunc()))>::type c = cfunc(); c = *(new boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(cfunc()))>::type); }
_ こうなる。 GCC だと __typeof__ になる。
_ インスタンス化するたびにカウントアップする template とか作れば、 まぁこれで作れるかなぁ。
_ で、インスタンス化するたびにカウントアップねえ…
#include <iostream> #include <list> #include <boost/typeof/typeof.hpp> using namespace std; using namespace boost; struct C { C() { cout << "hello world!" << endl; } }; struct D {}; C cfunc() { return C(); } C cfunc2() { return C(); } D dfunc() { return D(); } int main() { BOOST_TYPEOF(cfunc()) c = cfunc(); c = *(new BOOST_TYPEOF(cfunc())); cout << sizeof(*boost::type_of::encode_start(cfunc())) << endl; cout << sizeof(*boost::type_of::encode_start(cfunc2())) << endl; cout << sizeof(*boost::type_of::encode_start(dfunc())) << endl; }
_ が、 5 5 6 と出力する。明らかにカウンタがある。
_ http://boost-sandbox.cvs.sourceforge.net/*checkout*/boost-sandbox/boost-sandbox/boost/typeof/msvc/typeof_impl.hpp?revision=1.5
_ どう見てもカウンタみたいです。 実装がよくわからんがな。
_ あとまぁ msvc/ 以外の実装は不明チックな。 compliant implementation もよくわからんけど、 要するに BOOST_PP マンセーってことですか。
_ んー。なんか昔見たことある気が超するんだよなぁ。
_ (04:26)
最初聞いた時は冗談レベルに思ったけど、 もっと評価されていいよなぁという気がした。
このへんとかも面白げである。
http://www.tohoho-web.com/html/server.htm
(05:32)
と言われて少し違う気がしたんだけど。
なんというかじゃすとふぉーふぁんのうはうというか。 グッドでもバッドでもなくて、 ホビーノウハウというか。
コード短縮もホビーノウハウ。
(23:19)
b,l,s[99];main(m,n,i,w,x,y,z){ for(;;){ for(;n=getchar(n)-10;l+=8)s[n]++; if(l==24&&s['E']==s['N']==s['D']==1)break; z=85; x=55; for(;;){ s[m=n=99]=9999; w = 0; for(y=i=x;i<=z;i++){ if(s[i]) { if(!w)w=i; y = i; if(s[i]<s[m]){ if(s[i]<s[n]){m=n;n=i;} else m=i; } } } x=w; z=y; if(m==99)break; b+=(s[m]+=s[n]); s[n]=0; } printf("%d %d %.1f\n",l,b,1.*l/b); b=l=0; } }
適当にCで書いてその場しのぎの高速化しても通らなかった。 なんかCで通ってる人いるんだけどなぁ。 まぁC++の方が短くなりそうな気すらする。
(02:53)
#include<cstdio> #include<set> int m,n,b,l,i,k[99];main(){ std::multiset<int>s; for(;;){ for(;n=getchar()-10;l+=8)k[n]++; if(l==24&&k['E']==k['N']==k['D']==1)break; for(i=55;i<=85;i++){if(k[i])s.insert(k[i]);} for(;s.size()>1;){ std::multiset<int>::iterator i=s.begin(); m = *i; s.erase(i++); n = *i; s.erase(i); b+=(m+=n); s.insert(m); } printf("%d %d %.1f\n",l,b,1.*l/b); b=l=0; } }
おやこれでもTLE。ダメじゃん!
(03:09)
*m,*n,*i,s[99];main(b,l){ for(;m=n=memset(s,0,396);printf("%d %d %.1f\n",l,b,1.*l/b)){ for(l=0;b=getchar()-10;l+=8){ s[b]++; if(b-l==60)return; } for(b=0;m-s-1;){ b+=*m+=*n; *n=0; m=n=s+1; *m=99; for(i=s+86;*i-99;) *--i&&*i<*m?*i<*n?m=n,n=i:(m=i):0; } b=b?b:l/8; } }
250Byte。さっさとアルゴリズムいじれと
(04:53)
がホントかどうかチェックしよう。
昨日は gopku.rb
s = '' `cpp #{ARGV[0]}`.split(/\n/).each do |l| next if l =~ /^#/ s += l.sub(/^ */, '').chomp end File.open('out', 'w') do |o| o.print s end p s.size system("xclip < out")
PKU に Submit するために C のコードをコメント除去・空白削除して コピーバッファにつっこむ。
今日は prod.rb
|000>+|001>+|010>+|100>+|111> が 4項で書けないことを 証明したいらしいんで反例探しで 簡単なケースだけチェック。 まぁ結果見つからんかった。
def get(s, i) s & (1 << i) != 0 ? 1 : 0 end def st(s, t) if (t == 0) s.to_s else ['0+1','0-1'][s] end end def state_str(s, t) r = '' for i in 0...12 r += '(' + st(get(s, i), get(t, i % 3)) + ')' end r end def addterms(as, *ts) r = [] ts.each do |t| as.each do |a| b = t.dup e = a.dup if e =~ /^-/ e.sub!(/^-/, '') if b =~ /^-/ b.sub!(/^-/, '') else b = '-' + b end end r.push(b+e) end end r end def addminus(t, m) if m == 1 if t =~ /^-/ t.sub(/^-/, '') else '-' + t end else t end end for m in 0...16 p m for t in 0...8 for s in 0...4096 st = Hash.new(0) for i in 0...4 a = [] minus = get(m, i) if get(t, 0) == 0 a.push(addminus(get(s, i*3).to_s, minus)) else if get(s, i*3) == 0 a.push(addminus('0', minus)) a.push(addminus('1', minus)) else a.push(addminus('0', minus)) a.push(addminus('-1', minus)) end end if get(t, 1) == 0 a = addterms(a, get(s, i*3+1).to_s) else if get(s, i*3+1) == 0 a = addterms(a, '0', '1') else a = addterms(a, '0', '-1') end end if get(t, 2) == 0 a = addterms(a, get(s, i*3+2).to_s) else if get(s, i*3+2) == 0 a = addterms(a, '0', '1') else a = addterms(a, '0', '-1') end end a.each do |at| e = at.dup if e =~ /^-/ e.sub!(/^-/, '') st[e] -= 1 else st[e] += 1 end end end if st.key?('000') && st.key?('111') && st.key?('001') && st.key?('010') && st.key?('100') && st.size == 5 p state_str(s, t) p st end end end end
(21:35)
http://www.amazon.co.jp/exec/obidos/ASIN/4198607028/503-4855349-7085504
科学だけが本当に唯一、真理にアクセスできる方法なのだろうか…知性の本質を求めて 「プラトン的世界」=「精神の空間」へ決然として踏み入った天才ジョセフソンの封印さ れた科学的研究の足跡を辿る―。サイコキネス・テレパシー・遠隔透視から音楽の起源 に至るまで、未解明現象の謎に量子で迫る“禁断の研究”30年間の成果―。
すげーーー
(06:49)
なんか重力調節のゲームと六角形のヤツ。
見た目に重力の方が面白そうだったのでそっちをやる。 まぁ面白い。 ABボタンだけで2次元空間を移動する ゲームにちゃんとなってるのはたいしたもんかなぁ。 まぁ実際面白いんだけど、わりと退屈で、 カタルシスとかあんま無い。 まぁなるほどちゃんとできてるねぇ、という感じで、 あーそれ以上でもそれ以下でもなくて、 企画通り、試みとしては面白いっていうのはわかるし、 こういうことできる任天堂すげーとは思うんだけど、 ゲームの本質はココにアリ、みたいなのはまぁ違うだろうと。
そんで六角形の方は面白くないパズルだった。 まぁこれはまぁ微妙とかを越えて普通に面白くない。 パズルゲームってまぁルールは無数に考えられて、 深みにはそれほどの差は無いんだろうけど、 こう、だからこそ、わかりやすいカタルシスが 必要なんだろうなぁと。 テトリスは何を目指すかが十分わかりやすいし、 ぷよぷよは連鎖で爽快☆みたいな感じだし、 パネポンはまぁアクション連鎖とか見るからに楽しいし、 あとメテオスとかもなんかこう気持ち良さみたいなのは あるんだろうたぶんみたいな。 そういうのが無い以上、六角形のはパズルゲームとして ルールが妥当かどうかとか判断する次元にすら達せないというか。
ケータイとかのゲームとしてなら いい気がするんだけれども、 ゲーム機のゲームとしてはやはりこう物足りない系な。
あーでもなんか、今時のゲームの演出に慣れたウチらは 昔の薄味ではほげほげできんのですよ、みたいな、 ええと聖学では逆だった気もするけど、 どうでもいいや。 つまりそういう状態になってるとすれば 僕の方に問題があるとも考えられるし、 まぁ実際昔熱中したゲームウォッチとか 今じゃ絶対できんし、 結論はまぁよくある話だけど、 まぁ眠いなぁと。
あとなぜかアゴが痛い。なぜ?
(13:40)
i@u ~/wrk/bf> ghci sbf.hs ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.4.1, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base-1.0 ... linking ... done. Compiling Main ( sbf.hs, interpreted ) Ok, modules loaded: Main. *Main> test sexpr "(a b (c (d) e) f)" Loading package parsec-1.0 ... linking ... done. [a,b,[c,[d],e],f]
動いたわー
import Text.ParserCombinators.Parsec import qualified Text.ParserCombinators.Parsec.Token as P import Text.ParserCombinators.Parsec.Language import Text.ParserCombinators.Parsec.Expr sbfStyle = emptyDef { commentStart = "" , commentEnd = "" , commentLine = ";" , nestedComments = False , identStart = identLetter sbfStyle , identLetter = alphaNum <|> oneOf "_':!#$%&*+./<=>?@\\^|-~" , opStart = oneOf "" , opLetter = oneOf "" , reservedOpNames = [] , reservedNames = [] , caseSensitive = True } lexer = P.makeTokenParser(sbfStyle) whiteSpace = P.whiteSpace lexer lexeme = P.lexeme lexer symbol = P.symbol lexer natural = P.natural lexer parens = P.parens lexer semi = P.semi lexer identifier = P.identifier lexer reserved = P.reserved lexer reservedOp = P.reservedOp lexer data Sexpr = IntConst Integer | Ident String | Expr [Sexpr] instance Show Sexpr where show (IntConst i) = show i show (Ident i) = i show (Expr e) = show e expr = many sexpr >>= return . Expr sexpr = parens (expr >>= return) <|> (identifier >>= return . Ident) test p s = case parse p "" s of Left err -> print err Right n -> print n
(19:17)
http://d.hatena.ne.jp/ytqwerty/20060628#p2
(00:13)
(00:26)
http://www.e-net.or.jp/user/kasagi/mizu/index.htm
via http://d.hatena.ne.jp/studiokingyo/20060626#p1
効くメカニズムが全然不明。 まぁニセ科学ぽい。
まぁせいぜい漢方じゃないかな…
あと高い。
(00:41)
イギリスはユーロじゃないらしい。
んじゃユーロ使う機会はしばらくなさげなので、 持ってるユーロを直接換金する方向で。
54ポンドくらいらしい。 まぁ1週間だしどうせクレジットカードあるから足りるんじゃね…
(18:08)
http://rko.jp/sherlock_holmes-hakushaku_reijou_yuukai_jiken/town-6.html
合言葉はアメノマチ
(19:22)
(let (x (getchar)) (while x (putchar x) (putchar (+= x 3)) (putchar x) (putchar 10) (= x (getchar)) ))
くらいは動いた。
(08:54)
前 | 2006年 6月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
_ YT [おじゃまします。Debug.TraceあたりIOの付いてないとこでも使えるっぽいです。]
_ shinh [おおあるかなーと思ってたんですがそのくらいはあるのですね。ご紹介ありがとうございます。ちょっとぐぐってみると参照透過..]