Haskell
これ とか これ の入力になっている (A)(BC)(DEF)のような文字列から括弧の中にある文字列を取り出したい、というのが動機。 まわせ! Bouwkamp!! 横へな2016.2.6 問題 ESM オフラインリアルタイムどう書く 拡大版 · GitHub Ruby def tokenize(s, left, right…
備忘録。 Haskell operate :: [Integer] -> String -> [Integer] operate (r:l:st) "+" = (l + r):st operate (r:l:st) "-" = (l - r):st operate (r:l:st) "*" = (l * r):st operate (r:l:st) "/" = (l `div` r):st operate stack t = (read t::Integer):st…
アンダースタンディング コンピュテーションを読んでいます。アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで作者: Tom Stuart,笹田耕一,笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型本…
Haskellでたわむれていると。 id:nobsun さんが実に軽快な解法をコメントに残してくださいました。 colns = concat cns where cns'@(_:cns) = [""] : [[c:ns | c <- ['A'..'Z'], ns <- nss] | nss <- cns' ] Qiita では、さらにエレガントな解を展開されてい…
おさらい。 いかにして表計算の列名をつくるか - エンジニアのソフトウェア的愛情 いかにして表計算の列名をつくるか・補遺 - エンジニアのソフトウェア的愛情 最終形態 先日、Haskellで無限長配列を生成する例を挙げました。再掲。 import Data.List(group)…
先日Rubyで書いたものをRuby以外のメジャーどころの言語でも実装してみます。 桁上がりで1文字戻す Ruby 再掲。 def column_names(n) result = '' begin result = (n % 26 + 65).chr + result n = n / 26 - 1 end while n >= 0 result end C++ #include <string> st</string>…
Haskell evenTen = map (\n -> n * 10) . filter even Prelude> evenTen [1,2,3,4,5,6,7,8,9,10] [20,40,60,80,100] Ruby def evenTen(a) a.select{|n| n % 2 == 0}.map{|n| n * 10} end irb(main):004:0> evenTen [1,2,3,4,5,6,7,8,9,10] => [20, 40, 60, 8…
自主練の覚え書き的なエントリを先日書いたところ、コメントで有用な情報を頂くことができました。ありがとうございます。 畳み込み関数と展開関数 id:nobsun さんからは展開関数の存在を教えて頂きました。 展開関数とは 畳み込み関数と双対となる関数との…
昨日やったことをHaskellでも。 実は。このやりかただとヨクナイ結果になることがあるのがわかっているのだけれども。そこは今はちょっと保留ということでご勘弁を。あとでおさらいする予定です。昨日のC++のコード自体にも不備があるし…。 ま。それはそれと…
「第7回オフラインリアルタイムどう書くの問題」を解いていて気がついたこと、学んだことを明日のじぶんのために、記録。 のんびり座りたい 〜 横へな 2013.2.2 いろいろ問題をコネているうちに、この問題はパタンマッチングで解けることに気がつきました。…
「オフラインリアルタイムどう書く第6回の参考問題 - Qiita」は前回一度解いていますが、別の方法――対象となる点をすべて数え上げるという方法で解く場合のお話。この問題では判定が必要な点の個数は10×10のたかだか100とわかっているので、こういう力技法で…
今年の後半は、鍋谷さんが主催されている「オフラインリアルタイムどう書く」にオンラインで非リアルタイムで参加させてもらいました(参加というか、勝手にコード書いてアップしてただけですが)。以前にも書きましたが、鍋谷さんが出題される問題の難易度…
備忘録。 Combination - Wikipedia Subsequence - Wikipedia C++で vector以外でキチンと動作するか、まだ確かめてないです。 combination #ifndef COMBINATION_H #define COMBINATION_H #include <vector> #include <iterator> template<typename iterator_t> void combination(iterator_t begin, i</typename></iterator></vector>…
いつも絶妙で楽しい問題を提供してくださっている@Nabetaniさん。すでに第5回の募集と参考問題の公開が始まっています。興味のある方はぜひ参加して、また問題を解いてみてください。問題の絶妙さが実感できます。 第5回 オフラインリアルタイムどう書く : A…
恥ずかしながら。ごく最近までHaskellにUnitTestのライブラリがあるのを知りませんでした。恥ずかしい。 調べてみたところ、思ったよりも簡単にUnitTestを書けることがわかったので、ちょっとまとめてみました。 間違いありましたらご指摘いただけるとたいへ…
PrologとHaskellで同じ問題を解いてみました。Prologで同程度の問題を解けるくらいのプログラミングができたのは初かもしれない…。 お題は鍋谷さんが開催されている「オフラインリアルタイムどう書く」の第4回のお題を利用させてもらいました。 テトロミノ認…
Bit Tetris 〜 横へな 2012.7.25 今度もオンライン上だけでの参加になりました。 ネタのリサイクルになりますが、Qiitaに投稿したものをブログにも投下しときます。 第二回 オフラインリアルタイムどう書く その1 - Qiita 第二回 オフラインリアルタイムどう…
第一回 オフラインリアルタイムどう書くの参考問題 - Qiita (via 鍋谷さんの参考問題: へなちょこ解答(Java) - 虎塚) こういう面白そうな話題は、まぜてくださいー。 あ、残念ながらオフラインのほうの参加はちょっと無理。ほんと残念ながら。 先に結果…
昨夜は @emattsan さんのLuaとIOの話から始まり、 @crashpon さん交えてアセンブラに寄り道しつつ、最後 @maccha がPrologについて熱く語り、その全てを @torazuka さんが熱心に聞く、という稀有な展開。オイラはその展開自体をメタに楽しんだw— あまのりょ…
前回のエントリで「ソースからシンクへとデータを流し続けるような場合」の例として、コンテナからシンクオブジェクトへとデータを流すコードを書きました。よくよく考えてみると、「コンテナそのものを渡すよりもイテレータで範囲を渡す方がよい(STLもこの…
おさらい。 リストを項目ごとに集計する - 日々常々 リストを項目ごとに集計するときのデータオブジェクトの使い方 - 虎塚 キー毎に値を集計する方法 - ひしだまの変更履歴 昨日(日付的には今日ですけど)、最後に「なんかよくわかんないんですけど、なんか…
前々々回、前々回の続きで、 前回考察した結果を元に実装。 C++ #include <iostream> #include <vector> #include <boost/format.hpp> #include <boost/lexical_cast.hpp> void print(int a, int b, int c) { const int m = (a - b) / c; const int n = a - b / c; std::cout << (boost::format("(%1% - %2%) / %3% = %4%"</boost/lexical_cast.hpp></boost/format.hpp></vector></iostream>…
前回のつづき。どうにか動くものが書けました。前回同様、ここのコードはGitHubにも登録してあります。 ぢゃ、Haskellでは? 前回の最後で「書いているうちに、わけわかんなくなりました。Haskell篇は後日ということで…」と書きましたが、こんなコードではわ…
さらに昨日のつづき。 AtomをShowのインスタンスにしてみました。これでshow関数が使えるようになりました。 ふだんは手っ取り早く「data Atom (中略) deriving Show」とやって終りにしていたので、改めてHaskellの基本を調べなおして書き直し。基礎練習、…
先日のつづき。気持ちとしては。翌日にもアップしたかったものの。予想以上にはまることになり。とういうかHaskell忘れすぎ。脳のHaskell野の活動が弱くなってます。 一番ハマったのがシンボルにリストと実引数のリストから、辞書を作る式。 ss = [SYMBOL "x…
以前C++で書いたものをHaskellのParsecで。 まだテストしてないので間違えてるかもしれない。(2010/02/03追記:やっぱり間違えてた。quoteStringはエスケープしたダブルコーテーションをきちんと処理できない。修正版は後日) import Text.ParserCombinator…
もう一段階簡単にする方法をコメントで教えて頂きました。ありがとうございました。 fizz = cycle [ "", "", "Fizz" ] buzz = cycle [ "", "", "", "", "Buzz" ] fizzbuzz = zipWith max (map show [1..]) $ zipWith (++) fizz buzz 大小を比較できる要素か…
fizz = cycle [ "", "", "Fizz" ] buzz = cycle [ "", "", "", "", "Buzz" ] fizzbuzz = zipWith ( \ n s -> if s /= "" then s else (show n) ) [1..] $ zipWith (++) fizz buzz main = mapM_ putStrLn $ take 20 fizzbuzz もう一段階、簡単になりそうな気…
昨日のコードをWindows/Cygwinでも動かそうとしてみた。が、リンクエラーになる。OpenGLやGLUTのライブラリのインストールに失敗したかと、インストールを何度もやり直すが解決せず。 どうにもわからないのでネットで検索をかけたら、id:mokeheheさんのブロ…
投稿してしばらく経ってから、これは、 turnRight :: Direction -> Direction turnRight d = toEnum (((fromEnum d) + 1) `mod` 4) turnLeft :: Direction -> Direction turnLeft d = toEnum (((fromEnum d) + 3) `mod` 4) こう書けることに気がついた。 tur…