ToDo:
class C { void func() {} } template mem_fun(alias T) {} alias mem_fun!(C.func) hoge;
が通ることを使ってなんかできないか。 できない。
(22:24)
これを inference って言うのかなぁ。
class C {} class D : C {}
int main() { auto add = (int x, float y) { if (true) return new C(); else return new D(); }; writefln(typeid(typeof(add(1,2))));
の返り値の部分を適当にかえてあそぶ。結局、 int & float, C & D, C & null あたり全滅。実に D らしい。 null は void* なんだね。
あー。
(13:47)
(20:53)
なんか色々感心した。
(21:09)
(let (x (getchar)) (while x (putchar x) (putchar (+= x 3)) (putchar x) (putchar 10) (= x (getchar)) ))
くらいは動いた。
(08:54)
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)
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)
がホントかどうかチェックしよう。
昨日は 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)
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)
と言われて少し違う気がしたんだけど。
なんというかじゃすとふぉーふぁんのうはうというか。 グッドでもバッドでもなくて、 ホビーノウハウというか。
コード短縮もホビーノウハウ。
(23:19)
がどうとか言ってる子はキモい子です! って話があったんだけど、 みんなどういう理由でそんな子になってしまったんだろうか… あと妙に同世代が多い気がするんだよな。 少し上の人は 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)
前 | 2024年 11月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
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扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
_ niha [イギリスは自分が一番じゃないのイヤなので、一番じゃないEU関係はまだアレみたいですね。ユーロも国民投票一度あったけど..]
_ YT [部屋が綺麗になりそうなのがいいですね!(Clean調べてたらFFIが要望のほうにありました……つまり無いのか)]
_ shinh [へーなるほど。とりあえず適当にぐぐるに国民投票があったのはデンマークかものようです。まぁイギリスも世論調査で反対多数..]