Let's write β

プログラミング中にできたことか、思ったこととか

Project Euler 67をHaskellで

module Main where import Data.List.Split readTriangle :: FilePath -> IO [[Int]] readTriangle fpath = do content <- readFile fpath return $ map (map read . splitOn " ") $ lines content prob67 :: [[Int]] -> Int prob67 = head . prob67' where …

0hh1 Solver written in Python

仕事が忙しくてなかなか更新できませんでしたが、先日HackersNewsで 0h h1 – A little logic game | Hacker News0hh1というパズルゲームを見かけまして、ちょっとプレイしてみたところ以外にも面白かったので、せっかくだからSolverを書いてみようと思いまし…

2048ゲームをRubyで

2048というゲームがなかなかプレイするのにも、AIを作るのにも面白そうだったので、 自分でいじれるように書いて見ました。 require "curses" def make_board() board = Array.new(4).map!{ Array.new( 4, nil ) } end def available_pos(board) pos = [] bo…

DIMACS CNFパーサーを書いた。

SATソルバーの実装に昨日あたり興味がわきまして、手始めにデータ構造とDIMACS CNFファイルのパーサーを書いて見ました。ファイルから読み込めるようになると今後開発するときのデバッグも用意になりますものね。 module Main where import System.Environme…

MySQLで削除のCASCADEを確認する

Pythonを久々に復習していました。復習がてらちょっとMySQLに接続してDELETEのCASCADEが連鎖的に影響を与える範囲を一覧するスクリプトを書きました。

JavaのSwingでネストしたJSplitPaneを扱う

今とあるツールを久々にJavaのSwingで書いている時に、複数のコンテンツをパッキングしてその間にサイズ調整の棒を表示してユーザーがリサイズできるようにする必要が生じました。JSplitPaneをあてにしていたのですが、どうも奴は2つのコンポーネントしか扱…

Mozart-Oz v2をMacOSXのHomeBrew経由のEmacs.appでつかう。

Mozart.appが更新されていた。 以前の記事ではMozart 1.4.0という少し古いバージョンをEmacs.appで使う方法について書いていたのですが、Mozartのホームページに更新がかかったことを知り、確認してみるとページも綺麗になりMozart-Oz v2という少し新しくな…

Business Card Raytracer in CL.

Redditを眺めていたらHaskellでRayTracingをしてみたよ的な記事が流れてきました。 So I (kind of) made a Haskell clone of the business card Ray Tracer : haskellその説明を眺めてみると何やら名刺サイズのレイトレーシングというものが話題になっていた…

CodeIQのナムドット問題。僕の回答

結城先生がCodeIQに定期的に出題なさっているのですが、今回のナムドット問題をやってみました。 挑戦者求む!【アルゴリズム】古代文献を復元しよう! by The Essence of Programming 結城 浩│CodeIQ 問題の出力に着目してみると、ドットでくぎられている数…

Oz(Mozart)環境をMacOSX 10.8でセットアップした

Ozという言語マルチパラダイム言語があるようで、あまり僕の周囲にはユーザーがいないように 見えるのですが、それでもOzはすごいすごいと聞くので、体験してみねばという事で開発環境の 整備をしました。最近iOS関連の開発をする事になってMacOSXを使ってい…

ClojureでWebApp開発に必要なN個のこと

PerlでWebAppの開発に必要なN個のこと - Islands in the byte streamのClojure版です。あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だ…

NasmでLifeGame

更新が非常に空きました。久々にアセンブラです。 %include "stdio.inc" section .bss array0: resb 8 array1: resb 8 flag: resb 1 section .text global start start: mov rcx,flag mov byte [rcx],0 mov rax,1 mov rbx,0 mov rcx,1 call setCell mov rax,…

SECD Machine in Lisp

;; List Utilities (defun head (lst) (car lst)) (defun tail (list) (cdr list)) ;; Lambda Expression (defun lam-expr (var body) `(lambda ,var ,body)) (defun is-lambda (list) (and (listp list) (eql 'lambda (car list)))) (defun bv (lam) (cadr …

ちょっとした物

ちょっとした物です。 ちょっとした物その2、オートマトンをDOT言語に。

Generalized LR法をHaskellで Part3

以前の構文木では、途中のスタックの状態を保存していなかったので、出力される構文木では どのような途中のスタックの経過をたどったのかが不明瞭でした。 そこで、すこし更新して、スタックの途中経過を構文木中に保存するようにしたので、 どのようなルー…

Generalized LR法をHaskellで Part2

前回はXML風に木を出力するという機能をつけていましたが、本命はDOT言語に出力する事です。 そっちのほうが確認しやすいからね。というわけで付けてみました。 以下は変更した部分だけ -- ParseTreeをDOT言語として出力 type IndentLevel = Int --- インデ…

Generalized LR法をHaskellで

自然言語処理のGeneralized LR法をHaskellで書いてみました。 {-# LANGUAGE TemplateHaskell #-} module Main where import Data.List import Control.Monad import Control.Lens import Text.Printf -- 終端記号と非終端記号(行末も終端記号としておく) dat…

SuffixArrayを使った簡易検索エンジンやってみた。

文字列の検索アルゴリズムについてしらべていたら、良いチュートリアルを発見したので やってみました。 簡単なWebサーチエンジンの作り方 (defun all-suffix-node (str) (loop for s from 1 to (length str) collect (cons s (subseq str (1- s))))) (defun…

ルービックキューブと置換とHaskell

何度かプログラムを書いてるので、自分のためのまとめ記事(自分への記事なのでけっこうはしょっています) ルービックキューブの各セルの面に番号をわりあてる ルービックキューブの表面には全部で 9x6 = 54個のセルの表面が見えています。 この面の事をセル…

置換の合成

複数の置換を合成したりしたい場面がありました。 symm.hs module Symm(Symmetric(Symm),clean) where import Data.List import Data.Monoid data Symmetric a = Symm [(a,a)] deriving (Show,Eq) conc :: Eq a => [(a, a)] -> [(a, a)] -> [(a, a)] conc as…

複数のモジュールを同時includeした場合の処理を設定するNo.2

前回の記事では各モジュールのself includedの中で明示的にチェックを走らせる必要がありました。これがなかなか面倒だなという事だったので、もうすこし省略された記法で書けるようにしょうとおもっていました。 そこで、探していたところ、メソッド実行を…

複数のモジュールを同時includeした場合の処理を設定する

昨日の記事でCommonLispで複数のクラスを継承したときの設定をしたいという事でMOPで実装をこころみたのですが、どうも困難そうだったので一度Rubyで実装をこころみました class UnionRule def initialize(modules, action_proc) @modules = modules @proc =…

特定のパターンでクラスを継承した時に発動する機能を設定したい

タイトルの通り、あるクラスが特定のクラス(複数可)を継承した時になにか処理を実行させたいのです(たとえば、メソッドを定義したり、ログに出力したり..) で、CLOSならなんとかなるんじゃないかと、ちょっと作ってみています。 (eval-when (:load-toplevel …

ちょっとしたツール

入力された数値の最大と最小を除いた残りの値の平均を出す #!/usr/local/bin/ruby values = [] sum = 0; while line = gets val = line.to_f sum += val values << val end sum -= values.max sum -= values.min sum /= (values.length - 2) puts sum 標準入…

Webページに虫を蠢かせるJavascript

暇つぶしです。書きました function insertBug(bugs) { var $div = $("body"); var $jqObj; for(var i=0;i<bugs;i++){ var x = Math.round( Math.random()*1000 ); var y = Math.round( Math.random()*1000 ); $jqObj = $("<div/>").addClass("bug").attr({'data-x': x,'data-y': y, }).css('top', y).css('left', x).css('background-c…</bugs;i++){>

Prologでオートマトン定義

授業でオートマトンの講義を受けていて、Prologでやると綺麗に書けるなぁ とおもう場面が多々あったのでPrologで書いてみました。 とりあえず0が三つ連続して出現する文字列を受理するオートマトン single([_]). butlast(Xs, []) :- single(Xs). butlast([X …

Macbook Pro early 2011を中古でいただいた。

チーム開発の業務でそろそろiOSを専任でやっていたエンジニアに負荷がかかりすぎているという事で、チーム全体としてもiOSを優先としてプロジェクトを進行していくという事になり僕もiOSアプリの開発に参加する事となりました。 Androidアプリを専門に書いて…

CL向けのCSSセレクターベースのテンプレートエンジン Caramelを作った(作っている)

ClojureのEnliveというテンプレートエンジンはClojureのWeb開発界では有名だとおもいます。 そのEnliveのAPIが綺麗でCommon Lispでも同じようなテンプレートエンジンがあったらなぁ とおもってました。 そこで調べてみるとcss-selectorsというcssセレクタを…

大津の閾値判別法

大津の閾値判別法 (ql:quickload :iterate) (ql:quickload :lispbuilder-sdl) (ql:quickload :lispbuilder-sdl-gfx) (use-package :iterate) (defclass <data> () ((max :initform (error "max must specified") :reader data-max :initarg :max) (min :initform (</data>…

ClojureからPixivアクセス

PixivってなんでAPI公開しないんですかね...う〜ん とおもいながらAPIをちょっと叩いてみました。 (ns pixivy.core (:gen-class) (:require [clj-http.client :as client]) (:require [net.cgrand.enlive-html :as en])) (def pixiv-api-base "http://touch.…