リハビリ

SRM や Project Euler をぼちぼち再開。頭鈍ってるのを痛感する。

書籍とインデント

大きめのコードが本の中でページをまたがって載る場合、改ページによって中途半端なところでコードが分断されると次のページの先頭でインデントがどのレベルにあるかわからなくなる。これってインデントの深さが意味を持つ言語の場合は結構致命的だと思うん…

文字列処理の性能に関する考察

行数の数え方 - Days on the Moonたいへん興味深い結果。いろいろ気になったので、もう少し突っ込んで実験してみました。 実験 1Mバイトの文字列で2通り試してみました。(単位はミリ秒) (A)1000文字ごとに改行 (B)1文字ごとに改行 charAt 2167 2195 Array 16…

ISO-2022-JPを扱う際の注意

ISO-2022-JP(いわゆるJIS)で書かれたファイルから特定の文字列を検索する、というのはそれほど簡単な話ではありません。単純に部分一致するバイト列を探すだけではできないからです。ISO-2022-JPという文字コードは、エスケープシーケンスによって文字セット…

「string=文字列」になったのはいつなのか?

今でこそ当たり前のようにcharの列をstringと呼びますが、よく考えると変な文化だなぁと思います。stringという用語はどこが発祥なんでしょうか。だって紐だよ? 紐に文字とか書かないよね?"バイト列"を"byte string" と呼ぶのはギリギリ理解できるので、こ…

文字リテラルの型

C++

C と C++ で文字リテラルにつく型が異なります。 C では int, C++ では char になるようです。 $ cat clit.c #include <stdio.h> int main() { printf("%u\n", sizeof 'x'); return 0; } $ gcc clit.c && ./a.out 4 $ g++ clit.c && ./a.out 1このことについて考察し</stdio.h>…

リストと配列

Python のリストって、実装は配列ベースだろうとは思っていたのですが、今日 arrayモジュールというのを見つけて、実はリストは単純な配列とは違う賢いデータ構造だったりするのか! と一瞬期待に胸をときめかせてしまいました。で、実際どうなのかというと …

アイコン

微妙に似てる

TIGER TEAM

今日立ち読みした雑誌に特集されてた TIGER TEAM というアメリカのテレビ番組を見ました。 万全のセキュリティを備えた会社に3人のすーぱーはかーが侵入テストするという話。もちろん一般向けなので、技術的な話はあんまり出てこないです。 #1 車を盗む #2 …

Stack Stock Papers

http://mono.kmc.gr.jp/~yhara/d/?date=20080315#p05これ見たとき、それ基本的にはただのSBMでできるんじゃね?とか思ったんだけど、でもブラウザ内でPDF開けない環境だとブックマークレットからURL拾って登録とかやりづらかったりするなーなんて思ってたの…

Scribd の充実っぷりがすごい

大漁大漁♪ http://www.scribd.com/ 良質なドキュメントがめっさ充実してる!調子に乗っていろいろ収集してしまったが間違いなく読み切れない!しかしこれ、言語でフィルタリングできないのかね。フランス語やら中国語やら引っかかってもごめんなさいとしか……

GMailは文字コードを自前で判定している

実はGMailは Content-type の charset と違う文字コードでメール本文を書いあっても大体読める。自分が知らなかっただけで、そういうメーラーは結構あるのかもしれないけど。文字化けするはずのメールでも読めるというのはメリットである一方、GMail に送っ…

Pythonはじめました。

パイソンという名前を初めて聞いたとき、モンティ・パイソンよりコルト・パイソンを思い浮かべた人はどれくらいいるんだろうかとかそんなことはどうでもよくて、巷で大人気のPython君です。機会があったので触ってみることにしました。今までちょっとしたコ…

Queue

ただのQueueだと思って某コード読んでたら2時間ぐらいはまった。 まさかthreadライブラリの中で定義されてて、そんな動作するとは。面白いなー。

降順ソート

(reverse . sort) 的なことをしたい時は rSort :: (Ord a) => [a] -> [a] rSort = sortBy (flip compare) でいいんだろか。compare関数はPerl/Rubyでいう 一般化を考える sortBy (flip compare) が sortBy compare の逆順となるように、 一般に sortBy f の…

約数の個数が少ない件

Problem 159 素直にやると Σ(約数の個数)/2 ぐらいの時間かかって、でも良いアルゴリズム思いつかないしなぁと放置してたんですが、Cで力まかせにいくかーと思って書いたら1秒くらいで終わって拍子抜けした。約数の個数って、でかくなりうるイメージが漠然と…

ありがちなこと

FirefoxでタブをCommand+Wで消していると、80回に1回ぐらいの割合でCommand+Qを押してしまうorz

Fractionalな数列の謎仕様

mapするとリストの長さが変わるという、大変愉快な事態に遭遇しました。 Prelude> length $ [0,10..35] 4 Prelude> length $ map (/ 5) [0,10..35] 5なんじゃこりゃーと思っていろいろ試してみる。 Prelude> [0,10..35] [0,10,20,30] Prelude> [0,10..35] ::…

Ixの範囲は有限

Problem 169 をやってた時の話。HaskellのArrayって、よく知らんけど多分なんか複雑な木構造だと思うんですが、単純に連続したメモリ領域なんか確保しないんだろうし、思い切ってインデックスの範囲を ( (0,0), (10^25,84) ) くらい取ってDPしたら Negative …

浮動小数点演算と誤差

たとえば平方数の判定なんかは二分探索させていたのですが、フォーラム見てると、かなり大きな数に対してもわりとみんな普通に浮動小数点数で計算してる模様。 floorSqrt n = bsearch 0 n where bsearch l u | m^2 > n = bsearch l (m-1) | (m+1)^2 > n = m …

Eulerさん停止

こんなことばかりやってないで本業に精を出せという神様からのお達しに違いない。 なんだかんだで115問。ここから 300位->200位まで20問、200位->100位まで30問とか、遠すぎる…。100番まででよくわからん問題は78と88。78はO(n^2)のDPだとメモリが足らない。…

続 Project Euler

Project Euler 100問通過。パッと見で解法が浮かばなくなってきた。 数論っぽいネタを勉強するモチベーションになっている。良い効用である。これまでやったのだと連分数関係の話が結構面白かった。eやπも連分数展開すると規則性が出てくるというのは凄い。…

Project Euler

http://projecteuler.net/ 10問ぐらい解いたまま放置してたのですが、久しぶりにやってみました。以前見たときは日本人10人くらいだったのに、なんか今見たら140人とかになっててお茶吹いた。流行ってすげー。今日実験してみて分かったのが、C++でエラトステ…

生駒読書会#2

3/2. いろいろとフリーダムな読書会。テキストはThree Implementation Models for Scheme。畳に寝転がりながらメソッドとか最強じゃね?Schemeのマクロ定義の仕方とか完全に忘却していたし、行きの電車の中で初めてテキスト読むぐらいのアレでいろいろご迷惑…

Haskell Hackathon

気づいたら既に一週間経ってしまって、自分でもこれはひどいなーという感じです。 風邪で寝込んだり確定申告とかでドタバタしてました。ブログぐらいタイムリーに書きたいものです。 以下、思い出し思い出し… 3/1 大阪会場にて参加。OCamlでやってました。今…

function 〜 が式になるか文になるかはどうやって決まる?

引き続きKanasan.JSで出た話題。 ECMA仕様の文法を眺めてみて気づいたことを書いてみます。今まで「文を書ける文脈では文になり、式しか書けない文脈では式になる」とか勝手に思っていたのですが、ひどい誤解でした。 function が式か文かどうかは,その前が…

Kanasan.JS JavaScript 第5版読書会 #2 雑感

やはり能動的な目的(本を読む!)があるというのは良いもので、人の話聞いてるだけの勉強会よりずっと充実した一日に思えました。議論は絶えないしそれを眺めているだけでも楽しかった。サイ本は2年くらい前にざっと通読した程度ですが、当時はちゃんと分かっ…

フィードリーダーとの付き合いかた

掃除は年末に済ませておくのが正しいんでしょうけれど。 消化不良。 RSSフィードの購読数は年々増え続ける一方である。 消化速度が追っつかなくなってきた。 じっくり読むべきものを、じっくり読まない。 読むか切るか、ざっと見て1秒で判断するという作業を…

動的const宣言

こんなの作ったら def const(x) x.freeze end const char *a = "hoge"; ぽい感じで irb(main):004:0> const a = "hoge" => "hoge" irb(main):005:0> a[1] = "a" TypeError: can't modify frozen stringこういう風に書けるなぁ、と思った。 irb(main):006:0> …

ついカッとなって

ゴルフ. SRM380 Div1 Easy. struct LameKnight{ int maxCells(int h,int w){return h<3?++w/2?w-2;} }; 加減乗除と三項演算子がそれぞれ一個ずつ 1,2,3,4,4,4,5,6,7,... という数列を作る: (w ? (w-2)