argopt: Rust向けの宣言的なコマンドライン引数パーザー

TL;DR 簡潔で直感的に扱える、宣言的なRust向けのコマンドライン引数パーザーを作りました。 https://crates.io/crates/argopt モチベーション Rustにstructoptというライブラリがあります。これはコマンドライン引数をパーズするライブラリなんですが、僕は…

使いやすさを重視したHTMLスクレイピングライブラリを作った

TL:DR レポジトリ https://github.com/tanakh/easy-scraper ドキュメント 背景 このところ訳あってRustでHTMLからデータを抽出するコードを書いていたのですが、 既存のスクレイピングライブラリが(個人的には)どれもいまいち使いやすくないなあと思ってい…

memoise-0.2

この前作ったメモ化ライブラリ をいろいろ改良しました。 これまではTokenStreamのparseがめんどかったのでサードライブラリのマッピングライブラリを使っていたんですが、 制約が大きくていい感じの構文が作れなかったので自前でparseするようにしました。 …

Rustでメモ化を行うためのシンプルなライブラリを作った

TL;DR 一行追加するだけで関数をメモ化するマクロを作った。 成果物はこちら https://docs.rs/memoise/ 背景 同じ引数に対して同じ値を返す関数(いわゆる参照透明だったり数学的だったりな関数)では、 関数の計算結果を保存しておくことによって計算を高速…

SECCON Beginners CTF 2019 writeup

Beginners CTF 2019 2891 points 24th place 初心者向けらしいので出てみた。 Webが解けなさすぎるっぽいのでなんとかしたい。 Web: [warmup] Ramen なぜかラーメン店員を検索できるWebページに隠されたフラグを探す。名前の部分文字列でヒットするので、SQL…

Harekaze CTF 2019 writeup

Harekaze CTF 2019 - Harekazeharekaze.com 今後のために、せっかくなので解いた問題の記録残しておこうと思います。 scramble 正しいフラグを標準入力から入れるとCorrect!と表示されるプログラムが与えられるみたいなんで、そこから逆算してフラグを求める…

Google Code Jam 2019 Qualification Round

せっかくなので記録付けてみようと思います。 Foregone Solution 10進表記で'4'を一つ以上含む数N(<=10100)が与えられるので、N=A+Bなる'4'を含まない数A、Bに分解せよ、という問題。 Nのうち'4'の桁を'3'にしたものをA、'4'の桁を'1'、それ以外の桁を'0'に…

Microsoft Q# Coding Contest - Winter 2019 - その4

今回はC1からです。 MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ] } }); $$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1…

Microsoft Q# Coding Contest - Winter 2019 - その3

前回の続きでB1からになります。 MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ] } }); $$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \…

Microsoft Q# Coding Contest - Winter 2019 - その2

MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ] } }); 前回与太話だけで終わってしまったので、今回はちゃんと解説していきます。 $$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#…

Microsoft Q# Coding Contest - Winter 2019

去年の夏に第一回が行われた、マイクロソフトによるQ#のプログラミングコンテストが再びやってきました。 個人的に凄く楽しかったので、次回があると良いなあと勝手に期待していたのですが、案外早くやってきてくれて嬉しいです。 codeforces.com 2018夏とタ…

JavaScript UM Emulator

JavaScript上のPCエミュレータ http://bellard.org/jslinux/ に触発されて、http://tanakh.jp/jsumix/こんなものを作りました。 詳しくはこちら → http://www.boundvariable.org/ JavaScript意外と速くてびっくりなのです。 本家よりは全然すごくないですけ…

Boost.勉強会 #4 で発表してきました

Boost.勉強会 #4で発表してきました。ICFP Programming Contest 2010 での Discriminating Hacker's 言語の件から、 C++をDISるというテーマで話す機会を頂いたので、せっかくなので、発表させていただくことにしました。 C++コミュニティーの中心でC++をDIS…

MacBook Air 11インチ欲しい!

MacBook Air 11インチ欲しい! でゲソ!

Haskellのエラー処理とMonadCatchIOの落とし穴

(この記事はHaskell Advent Calendar jp 2010のために書かれました)Haskellではエラー処理に例外が用いられます(MaybeモナドやErrorモナドも用いられますが、ここでは例外に焦点をあてます)。 例外インターフェースの話 Haskellにも、例外を扱うためにtr…

関数型!侵略ノススメ☆

(この記事は Functional Ikamusume Advent Calendar jp 2010 の為に書かれました)侵略!侵略!侵略!侵略!侵略!侵略!イカ娘! 再帰しなイカ? main = putStrLn $ f 6 where f 0 = "イカ娘!" f n = "侵略!" ++ f (n-1) 古風に再帰しなイカ? main = pu…

ICFP Programming Contest 2010 優勝

Pure Pure Code ++ Language: C++, Haskell, Python ... are the programming languages of choice for discriminating hackers.今年のICFP Programming Contestにて優勝しました。(コンテスト中の様子は http://d.hatena.ne.jp/tanakh/20100702#p1 こちら…

One-liner in Haskell

Haskellを現場言語にするために、こんなものを作ってみました。hoe: Haskell One-liner Evaluator (名前には深い意味はありません。)Haskellでワンライナーをやろうという誰得なツールです。誰得ですが、ワンライナーでも、型があると便利なんではなかろう…

Lazy I/O must go! - Iteratee: 列挙ベースのI/O

最近ちょっと気になるiterateeを勉強したので、日本語の解説を書いてみます。と言いつつ、大部分が The Monad.Reader Issue 16 *1 からの引用です。 はじめに Iterateeと呼ばれる新たなI/Oの抽象化手法が、最近にわかに広まりつつあります。既存のI/Oが抱え…

[ICFP] ICFP Programming Contest 2010 参加記

pure pure code ++ というチームで参加していました。今回は問題がとても面白かったと思います。楽しめました。チームのメンバは http://twitter.com/nya3jp/status/16604202811 の6人。6人目のメンバーはトンちゃんでしょうか。 http://www.icfpcontest.org…

第五回チームラボ天下一武道会

第五回チームラボ天下一武道会 : ATND第五回チームラボ天下一武道会で優勝しました。第三回に続いて二回目です(第四回も参加していましたが、あまりに成績が悪かったので、参加記書くの忘れてました…)。 問題 http://tam-lab.sakura.ne.jp/tenkaichi/マル…

ファミコンエミュレータ for Java

http://d.hatena.ne.jp/tanakh/20050506#p2のあたりで開発したファミコンエミュレータをJavaに移植しました。ここで公開中 http://github.com/tanakh/bjne-javajarもあります。 http://github.com/tanakh/bjne-java/downloadsオリジナルのC++版。 http://git…

Haskellでメモ化を行うもう一つの方法

はじめに Haskell で動的計画法を書くための3つの方針 - tosの日記これを読んで、私もちょっと前にHaskellでメモ化をやる方法を考えていたことを思い出したので、書いてみることにします。Haskellでのメモ化は、私のかなり昔の駄文(リアルにびっくりするほど…

という夢を見ました

エイプリルフールなので、普段できない、関数型言語を貶しまくるというのをやってみましたが、思った以上に普通になりました。嘘をつくのは自分の心だけにして、それ以外はなるべく説得力のある文章を心掛けましたが、いかがでしたでしょうか。なんだ、分か…

手続き型に改宗しました

つい先日にあのような資料をアップロードして心苦しいのですが、手続き型に改宗することにしました。誰よりも関数型言語を愛し、常日頃よりどうして関数型が流行らないのかを考え続けていた私ですが、10年余りを経てようやく気付きました。関数型がイケてな…

チームラボ天下一武道会

チームラボ天下一武道会 ~コードGolf & F1レース!~ : ATND に参加してきました。普段Java使っていないのでどうなるかと思いましたが、なんとか優勝することができました。問題は、ユーザデータと商品の購入データが与えられるので、全商品間のコサイン類…

JOI 春合宿の講義資料

id:iwiwi さんからご紹介に与りまして、JOI春合宿にて講義をさせて頂きました。テーマはなんでも良いとのことでしたので、関数プログラミング入門ということで話させて頂きました。スライドを以下に公開しております。関数プログラミング入門View more prese…

wafのユニットテストモジュールの改良

前回wafの紹介記事を書きましたが、あれからいくつかバージョンアップがあって、それに伴ってユニットテストモジュールの仕様が結構変わりました。変わったといいますか、かなり改悪されたように思います。 --alltestオプションが常にTrueになるようになった…

waf チュートリアル

waf - The flexible build system http://code.google.com/p/waf/wafというものを最近知り一目惚れしてしまったので、紹介記事を書きます。ユーザーが増えると嬉しいな。 wafとは何か?特徴・利点・使うべき理由 wafはPythonベースのビルドシステムです。同…

[その他] 200x年総括

なんか思い出に残ってること 2000 SuperCon GBエミュレータ 入試 2001 SNESエミュレータ Lispにかぶれる 2002 erg制作 2003 暇すぎて鬱になる 2004, 2005, 2006 ICPC WF Haskellにはまる 2007 ニコ動鑑賞 2008 CodeJam WF 2009 マリオWiiおもろかったね