Arantium Maestum

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

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

Clojure/QuilでShepherding Random Numbersその3

最後。今までは「移動する円」がポイントだったが、今回は「移動する円の残す残像」が中心の映像になる。 inconvergent.net 前回と同様、左の円と連動して上下に動いていく円。今度は速度の線は描かず、そのかわり跡が残るようにした: Quil -L8sgTy8ZVQK2Q3…

Clojure/QuilでShepherding Random Numbersその2

続いてここから: inconvergent.net 過去の状態から次に移動する場所を決めていく。 まずは単純に、「現在地からあまり離れていない場所」を次の目的地に決定するパターン: Quil -L8sSIr9XEm-gow3mH4- 次に、「目的地」という概念を消して、上下方向の移動…

Clojure/QuilでShepherding Random Numbersその1

昔からすごく好きなジェネラティブ・アーティストのAnders Hoffのウェブサイトに、いくつかチュートリアル的な記事が載っている。 inconvergent.net ClojureとQuilで試していきたい。 まずは非常に簡単なボール一つが上下に動くもの: Quil -L8r5DqZjda9OSxY…

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

Exercise K 第一部 takePrefix pをリストxsに適用すると、xsの頭から連続してpを満たし続ける最も長いセグメントを返す。 takePrefix :: ([a] -> Bool) -> [a] -> [a] takePrefix nondec [1, 3, 7, 6, 8, 9] = [1, 3, 7] -- リストの先頭から上がり続ける最…

『What I wish I knew when I was 20』

Tina Seelig『What I wish I knew when I was 20』を読んだ。 二十代前半の頃に買って読んだ本。本棚を片付けているので、とりあえず処分する前に読み直した。作者はスタンフォード大の創造性関連のプログラムの教授とのこと。 印象としては「ざ・ポジティブ…

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

Exercise J Maximum Subsequence Sumが以下のように定義されている: mss :: [Int] -> Int mss = maximum . map sum . subseqs subseqs :: [a] -> [[a]] subseqs [] = [[]] subseqs (x:xs) = xss ++ map (x:) xss where xss = subseqs xs より効率のいい定義…

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

Exercise F 第一部 任意の有限リストxsについて、以下の等式が成り立つことを証明せよ: foldl f e xs = foldr (flip f) e (reverse xs) 帰納法で解く。 Case [] 左辺 foldl f e [] = {foldlの定義} e Case [] 右辺 foldr (flip f) e (reverse []) = {revers…

『読んだら忘れない読書術』

胎児よ 胎児よ 何故躍る 母親の心がわかって おそろしいのか 夢野久作『ドグラ・マグラ』 樺沢紫苑『読んだら忘れない読書術』を読んだ。 「精神科医が教える」と注釈があるように、作者は多読・多作の精神科医らしい。 主張は: とにかく読め、読めばいいこ…

『数学文章作法 基礎編』

結城浩『数学文章作法 基礎編』を読んだ。 「プログラマの数学」「数学ガール」の著者らしく、実に明快で読みやすかった。 テーマがまったくぶれないのがすごい。 「読者のことを考える」がものすごく太い線として常に中心にある。その中心テーマをめぐって…

「いますぐ書け、の文章法」と技術ブログポエジー

堀井憲一郎「いますぐ書け、の文章法」を読んだ。のでいますぐ書いている。 新書で短く読みやすく、ちょっとメッセージが軽い印象はあったが面白く読めた。 あまり頭で考えすぎずに 身体性と即興性を大事に 読者へのサービスだと意識を変えて 今の文章力で …

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

Exercise A 自然数が以下のとおりに定義されている: mult :: Nat -> Nat -> Nat mult Zero y = Zero mult (Succ x) y = mult x y + y mult (x+y) z = mult x z + mult y zを証明せよ: case 0 左辺 mult (x+0) z = {x+0 = x} mult x z case 0 右辺 mult x z…

Thinking Functionally with Haskell勉強メモ: 第6章4 Maximum Segment Sum

第6章の最後はJohn BentleyのProgramming Pearlsに出てくる「Maximum Segment Sum」を今までのような式変換と証明で解く、という演習。 Maximum Segment Sum問題 あるリスト(は整数)の中にある連続部分の和の最大値を求める関数mssを定義せよ ただし空の…

Thinking Functionally with Haskell勉強メモ: 第6章3 foldlとscanl

foldl関数 foldrに似たfoldl関数を定義したい。挙動は以下のとおり(@は任意の演算子): foldr (@) e [a, b, ... y, z] = (a @ (b @ ... (y @ (z @ e)))) foldl (@) e [a, b, ... y, z] = (( ... ((e @ a) @ b) ... @ y) @ z) lisp系やpythonでいうところの…

本日のvim道 2018.3.24

vim

今日はBufferについて。 bufferという単語はよく聞くしなんとなく理解していたつもりだったのだけど、全然うまく使えていないので調べてみた。 Bufferとは そもそもBufferとはvimにおける「メモリ上のファイル」のことである。 ハードディスク上のファイルに…

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

foldr関数 sum、concat、filter、mapは似ている。 リストを受け取る 空リストが停止条件 (x:xs)が引数の場合、(mapやfilterの場合は何か関数適用した)xと、xsに対して再帰的処理した結果とを、なんらかの方法で結合する。 そして例えばsum (xs ++ ys) = su…

Effective C++勉強メモ: Item 27 キャストはできるだけ避けよう

「C++は基本的に型安全。コンパイルするなら本来unsafeなことはしない」とはじまるこの項目。本当か? 「キャストしなければ・・・」と続くわけだが、それにしたって今まで読んできた中にもどれだけundefined behaviourをうっかり踏みそうな地雷を見てきたと…

Thinking Functionally with Haskell勉強メモ: 第6章1 数学的帰納法による証明

第6章は証明について。まずは数学的帰納法による証明を説明し、それを元にfoldl、foldrといった高階関数の性質を証明し、今後は個別の処理について証明するときの論理をfoldlとfoldrの性質を使って簡略化・普遍化する。 今回は数学的帰納法の話。 自然数 数…

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

Exercise A Matrix Intのすべての要素に1を足す関数: addOneToAll = map (map (+1)) Matrix Intのすべての要素の和: sumAll = sum . sum sum :: Row Int -> Int sum [] = 0 sum x:xs = x + sum xs 二つのMatrix Intの各要素を足す関数: addMatrix :: Mat…

Haskellと圏論ノート:Haskと型と関数と関手

Thinking Functionally with Haskellがすこし進んできたので、ちょっと今まで出てきた概念と関連するところまで圏論について調べてみた。まごうことなき私的勉強メモ。 圏Cは以下の三つの要素をあわせた概念: Object(対象)の集まり Cに含まれる対象間のmo…

Effective C++勉強メモ: Item 26 変数の定義はできるだけ遅らせる

古き良きCの作法だと使う変数はすべて関数の一番最初に宣言しておくものだった。 モダンなCだとその必要はないが、C++だとむしろ強く非推奨になる。 いくつかの理由がある。 一つには、変数宣言はその場でコンストラクタの実行を伴い、またスコープから出る…

Clojure/QuilでRのTiny Artを真似てみた

Rでツイートに収まりきる文字数でアート、というブログ記事があった: www.r-bloggers.com いろいろな数式を使ってきれいなパターンをグラフ機能で表示させる、というもの。 残念ながらそこまで文字数を制限することはできなかったが、とりあえずライブラリ…

Thinking Functionally with Haskell勉強メモ: 第5章3 不確定なマスを再帰的に「みなし確定」させて枝刈り

前回のsolveは「すでに確定したマスの値を使って枝刈り」の後に「残った各マスの取り得る値の全探索」という解決方法だった。 これでも相当な効率化が図られているが、「残った各マスの取り得る値の全探索」のほうにまだまだ改善の余地が残されている。例え…

本日のvim道 2018.3.20

vim

今回はスクリーン移動系 H,M,L 現在見せている文書の範囲はまったく変えずに、カーサだけをウィンドウの一番上([H]igh)、真ん中([M]iddle)、一番下([L]ow)に移動する。 zt, zz, zb, C-E, C-Y 文書内でのカーサの現在地は変化させずに、見せている文書の範囲…

Effective C++勉強メモ: Item 25 swap関数あれこれ

C++にはpimplというイディオムがある。 何か大きなデータを持つオブジェクトがある場合、単純にデータメンバとしてしまうと(例えば関数にデータを渡したりする時に)コピーが発生するとコストが高い。 そういう場合には、データを実際に保持するクラスと、…

Clojure/Quilでリセージュと内サイクロイド

数式で表せる曲線を描いてみる。 元ネタ Proce55ing.walker,blog » Blog Archive » 図形を描く数式の使い方 毎度のことながらProcessing Advent Calendar。こういう記事がまとまっている場所があるのは、習作アイディアをもらうのにすごく便利で、参加された…

Effective C++勉強メモ: Item 24 右辺左辺どちらでも型変換が必要な可能性があるオペレータはNon-Member関数

ごくたまに暗黙の型変換が役にたつ時がある。特定の数字を表現するクラスを定義する時などである。 class Rational { private: const int numerator, denominator; public: Rational(int numerator = 0, int denominator = 1); const Rational operator*(con…

ClojureとQuilでSF円

SFやアニメのコンピュータスクリーンによく出てくる、円状のものがクルクルと違うスピードで回ってるやつ。 こちらが元ネタ: labs.uechoco.com Quil版: Quil -L7vYVzO6uheSLTyNizI q/arcがほぼ使い物にならないレベルでガタガタだったので、表示しているの…

ClojureとQuilで"The Matrix"の文字列を作ってみた

例によってProcessing Advent CalendarからQuilで作るネタを漁っている。 今回はこの記事: Proce55ing.walker,blog » Blog Archive » マトリックスのアレを作ってみよう このかたは2011年のProcessing Advent Calendar記事の大半を書いていてすごい。今後も…

Thinking Functionally with Haskell勉強メモ: 第5章2 確定したマスの情報をベースにフィルタ

非常に非効率だが問題文に誠実に宣言的に書いているので正しさが(ほぼ)自明なプログラムに対して、ここから成り立つと証明できる法則を使って、結果が同一なことを担保しつつ効率が上がるような変換を行っていく。 前回の数独ソルバーは981-kものGridを一…

Thinking Functionally with Haskell勉強メモ: 第5章1 数独ソルバー最適化以前

第5章は数独ソルバーの実装を通してHaskell/関数型プログラムの書き方(の一つ)を紹介するというもの。 まずは問題をできるだけ宣言的に解くコードを記述して、その後最適化していく。 この記事は第一段階の非常に非効率な宣言的コードの説明まで。 データ…