Arantium Maestum

プログラミング、囲碁、読書の話題

2018-03-01から1ヶ月間の記事一覧

Lake Counting

蟻本&POJから水たまりを数える問題: 2386 -- Lake Counting ナイーブに書くなら: import itertools as it def solve(map_): lakes = {(i, j):set((i,j)) for i, row in enumerate(map_) for j, v in enumerate(row) if v == 'W'} def neighbors(i, j): n =…

Vim力を上げたい

vim

かれこれ10年ほどvimを使っている。 確か2008年に初めてPythonを触りはじめた時に、editorとしてvimが推奨されている記事を読んで使い始めたのだったと思う。 その頃はWindowsにvimをインストールして日本語化するだけで色々とめんどくさかった覚えがある。…

部分和問題

06/19/2018追記:コードを書き直した&AtCoderの類題を解いた プログラミングコンテストチャレンジブック、通称蟻本を読み始めてみる。 とりあえずPythonで解いていって、C++の勉強が進んである程度綺麗に書ける気がしてきたらC++でもやってみたい。 まずは部…

Thinking Functionally with Haskell勉強メモ: 第3章

数について。 Int, Integer, Float, Complexなど多くの数の型がある。すべてtype class Numに属している。 NumはEqとShowのsubclass。Ordは?と一瞬思ったが複素数は順序が定義されていない。 Haskellでユーザが0以上の整数として自然数を定義する場合: dat…

Effective C++勉強メモ: Item 8 例外を投げるデストラクタ

例外を投げるデストラクタはUndefined Behaviorになると考えるべき。 デストラクタから例外を投げる可能性のあるオブジェクトを要素に持つvectorが破棄されるときに、同時に複数のExceptionが発生してしまう状況があり得る、というのが非常に納得のいく例。 …

Thinking Functionally with Haskell勉強メモ: 第2章問題

Exercise C 単語の頭文字をすべて大文字化するmodernise関数 modernise :: String -> String modernise = unwords . map capitaliseWord . words capitaliseWord :: String -> String capitaliseWord "" = "" capitaliseWord (c:cs) = (toUpper c):cs Exerci…

Thinking Functionally with Haskell勉強メモ: 第2章

章のタイトルは「式、型、値」。いかにも静的型付き関数型プログラミングっぽい。 面白かった・気になった点: (+1)などのSectionが関数として使えるのは便利そう。(-1)が使えないという点で萎えるけど(関数ではなく単なる負の整数として扱われる) ラムダ…

Effective C++勉強メモ: Item 7 Polymorphic Base Classのdestructorはvirtual

なんのこっちゃ。というのはさすがに嘘だが結構頭の中でパースするのが大変な文ではある。 1. Base Classというのは継承を前提としたクラス。 2. Polymorphic Base Classとは、継承した子クラスをベースクラスのインタフェースを通して使用することを前提と…

Effective C++勉強メモ: Item 6 コンパイラのお節介にノーという方法

前回の項目から続いて、コンパイラが勝手に書いてくれるメンバ関数がお節介だったら?という話。 特にcopy assignmentなどはいらない、うっかりどこかでcopy assignするような処理を書いてしまったらちゃんと静的にエラーが検出されてほしい、というような時…

Shredding Paper

例によって競プロの記事から簡単面白そうな問題を解いてみる。 Shredding Company | Aizu Online Judge import itertools as it import heapq def solve(k, n): s = str(n) if k == n: return (n, [s]) a = it.product((0,1), repeat=len(s)-1) b = ([0]+[i+…

Effective C++勉強メモ: Item 4 オブジェクトはちゃんと初期化しよう

第4項目抜けてた・・・ C++だとオブジェクトが自動的に初期化されないことも多いよ、明示的に初期化しよう、というお話。 初期化されていない変数の値を読もうとするのは未定義な動作を踏むことになる。プラットフォームによってはランタイムエラーなのか?…

Thinking Functionally with Haskell勉強メモ: 第1章問題

Exercise A 右辺と左辺の等価性の「証明」 sum . map double = double .sum 分配法則 (distributative property)でc*a + c*b = c * (a + b) sum . map sum = sum . concat 結合法則 (associative property)で(a+b)+(c+d) = (a+b+c+d) sum . sort = sort 交換…

Effective C++勉強メモ: Item 5 コンパイラが作成してくれるメンバ関数

ここから第2章。Constructor/Destructor/Assignment関係の話題。 class Empty {}; クラス定義がこれだけでも、Empty型のオブジェクトが初期化されたりコピーされたり代入されたりする記述があれば Constructor Destructor Copy Constructor Copy Assignment…

Thinking Functionally with Haskell勉強メモ: 第1章

第1章は「関数型言語とは?」という問いへの著者なりの答えから始まる。 Richard Birdの「関数型プログラミング」定義は: 関数とその適用を重視するプログラミング(命令とその実行ではなくて) 簡明な数学的記法で問題を記述することができる 数学的な裏…

Effective C++勉強メモ: Item 3 constだ。constを使うんだ

constできるところは全部constで。というお話。 それなら変数全部デフォルトでconstだったらよかったのでは?と一瞬思ったがrust面に落ちかけているな。(どちらかというとC++がダークサイドか) この章の話題は主に二つ。 ポインタやイテレータのconst化に…

Thinking Functionally with Haskell勉強メモ: 序文

2月から少しずつRichard BirdのThinking Functionally with Haskellを読み進めている。 こちらも章ごとにメモを書いていきたい&章末の問題を解いていきたい。ちなみに章末の問題はすべて本にも模範解答が載っている。とりあえず今回は序文についてのメモ。 "…

PachiCockroach

最近ちょっと競技プログラミングに興味が出ている。理由としては四つあって、 C++の練習などにいいのではないか アルゴリズムとデータ構造をより身近にしたい 頭脳パズル的なものをもっとしたい 最近インタビューアとしてアルゴリズム関係の質問をする側に回…

Effective C++勉強メモ: Item 2 #defineは(あまり)使わないようにしよう

Effective C++の第2項目 Cの遺産である#defineを使いたくなるようなケースのほとんどでは、const、enum、inlineといったC++機能で代用できるし代用するべきだ、という主張。あるいは「プリプロセッサよりコンパイラに仕事をさせよう」。 そもそも私はCをあま…