Codeforces 219A - A. k-String

219A - A. k-String 文字列をソートする。 同じ文字でグルーピング。 グルーピングした文字列の長さが k の倍数なら、k-string は作れる。そうでなければ k-string は作れない import Data.List calc :: Int -> String -> Maybe String calc k s = if all (\…

Codeforces 50A - A. Domino piling

50A - A. Domino pilingM x N サイズのボードに 2 x 1 サイズのドミノを出来るだけ沢山敷き詰める問題。ボードに配置可能なドミノの個数を出力する。制約: 1 ボードのサイズが偶数であれば、隙間なくドミノを敷き詰められます。なので、まず偶数サイズのボー…

Codeforces 189A - A. Cut Ribbon

189A - A. Cut Ribbon長さ n のリボンある。そのリボンを出来るだけたくさんカットしたい。カットされたリボンの長さは、a, b, cのいずれかでなければならない。最大でいくつのリボンにカットできるか、という問題。制約: 1 DPの問題なのでC++で解きました。…

Codeforces 4A - A. Watermelon

4A - A. Watermelon calc :: Int -> String calc n | n > 2 && even n = "YES" | otherwise = "NO" main = do s <- getLine putStrLn $ calc $ read s

Haskellのdoの中のif式のインデント

Haskellについて調べていたら、do の中の if 式の then と else は if よりもインデントを深くする必要があるという情報があった。手元で試す限り、if, then, elseを揃えても特にエラーにならない。仕様が変わったのだろうか。もしかしたらと思い、-Wall を…

Codeforces 208A - A. Dubstep

208A - A. Dubstep WUBを空白に置き換える 連続する空白をひとつの空白にまとめる 両端の空白を取り除く -- "WUB"を取り除く(代わりに空白をおく) removeWUB :: String -> String removeWUB "" = "" removeWUB ('W':'U':'B':xs) = ' ' : removeWUB xs remove…

Codeforces 1A - A. Theatre Square

1A - A. Theatre Square calc n m a = x * y where x = (n `div` a) + (signum $ n `mod` a) y = (m `div` a) + (signum $ m `mod` a) main = do s <- getLine let [n, m, a] = map read $ words s :: [Integer] print $ calc n m a signumを括弧で囲まない…

Codeforces 216A - A. Tiling with Hexagons

216A - Tiling with Hexagonsb*cを一つの固まりとみなす。aの値が増減するとき、b*cの固まりを取り除いた図形のパターンがどのように変換するかを考えた。b*cの固まりを取り除くと、以下の「へ」の字のラインが見えてくる。 calc a b c = (a-1) * (b + c - 1…

fizzbuzz

http://chaton.practical-scheme.net/gauche/a/2012/08/09#entry-5023d040-7e774 のPythonコードが分かりやすかったので、Haskellで書いてみました。 fizz = cycle ["", "", "fizz"] buzz = cycle ["", "", "", "", "buzz"] fizzbuzz n = [if xy == "" then …

Codeforces 194B - B. Square

194B - B. Square 左下隅からスタートして、はじめて4隅に止まるのは何ステップ目だろうか。 小さいサイズで試してみる。 正方形のサイズを n とすると、 n = 1 のときは、1 ステップ目で四隅にはじめて到達する n = 2 のときは、2 ステップ目 n = 3 のとき…

Codeforces 205A - Little Elephant and Rozdil

205A - Little Elephant and Rozdil以下のように書いたら、calcに渡すリストのサイズが 1 のときにRUNTIME_ERRORとなりました。 import Data.List calc :: [Int] -> String calc xs | length xs > 1 && a == b = "Still Rozdil" | otherwise = case findInde…

Codeforces 214A - A. System of Equations

214A - A. System of Equations全探索。 calc n m = sum [1 | a<-[0..1000], b<-[0..1000], a^2+b==n, a+b^2==m] main = do s <- getLine let xs = map (\x -> read x :: Int) $ words s let (n, m) = (xs!!0, xs!!1) putStrLn $ show $ calc n m

Codeforces 200B - Drinks

200B - Drinks calc xs = (sum xs / fromIntegral (100 * length xs)) * 100 main = do s <- getLine t <- getLine putStrLn $ show $ calc $ map (\x -> read x :: Double) $ words t 型に関する理解があいまいなので、型エラーがなかなか取れませんでした…

Codeforces 199A - A. Hexadecimal's theorem

199A - A. Hexadecimal's theoremフィボナッチ数列を求める関数を作成しましたが、必要ありませんでした。 main = do s <- getLine putStrLn ("0 0 " ++ s)

Codeforcesの問題をHaskellで解いてみる

Haskellで問題を解いてみます。CodeforcesのRatingは1300くらいなので、div2の易しい問題を中心に解いていきたいと思います。

OCamlの練習

4けたの数について、それぞれの位の数字を大きいじゅんにならべた数から小さいじゅんにならべた数をひくという計算を行います。1974 について、この計算を 100 回行った答えを書きなさい。 http://d.hatena.ne.jp/cooldaemon/20120603/1338705617 上の問題…

LuaでPythonのrange関数のようなものを作る

Lua

Pythonのrange関数に似た関数をLuaで作成してみます。 function range(n) local i = 0 return function() if i >= n then return nil end local ret = i i = i + 1 return ret end end function main() for i in range(5) do print(i) end end main() 実行結…

zip関数

Lua

Luaでzip関数を作成してみました。 function zip(xs, ys) local i = 1 return function() x = xs[i] y = ys[i] if x and y then i = i + 1 return x, y else return nil end end end function main() for a, b in zip({1,2}, {3,4,5}) do print(a, b) end en…

Luaのlocal function

Lua

function main() function test() print("test") end test() end main() test() 実行結果です。 test testtestがmainの外側から見えてしまっています。関数内でローカル関数を定義する場合は、local functionを使います。 function main() local function te…

「失敗に学ぶこと」を読んで

Lua

失敗に学ぶことを読んで、Luaだとどうなるか確認してみます。 function main() local t = {} for i = 1, 3 do t[#t + 1] = function() print("call", i) end end for i = 1, #t do t[i]() end end main() 実行結果です。 call 1 call 2 call 3お、ちゃんと値…

テーブルのソート

Lua

function main() t = { "foo", "bar", "baz", "hoge" } print(table.concat(t, " ")) table.sort(t) print(table.concat(t, " ")) table.sort(t, function(a, b) return a > b end) print(table.concat(t, " ")) end main() 実行結果です。 foo bar baz hoge…

Juliaのmap関数

map関数で、文字列を数値のリストに変換しようと思ったのだけどエラー(type error)になる。 型変換が入るとダメなのだろうか。 ~ $ julia _ _ _ _(_)_ | (_) | (_) (_) | _ _ _| |_ __ _ | A fresh approach to technical computing | | | | | | |/ _` | | |…

Luaの真偽値

Lua

Luaでは、falseとnilが偽となり、それ以外の値は全て真です。 function test(x) if x then print("true", x) else print("false", x) end end function main() tab = { -1, 0, 1, "", "string", {}, { 1 }, { test=2 }, main, true, false, } for i = 1, #ta…

Luaのgoto文

Lua

Lua 5.2からgoto文が入りました。 function main() for i = 1,10 do for j = 1,10 do if i == 1 and j == 3 then goto exit end print(i, j) end end print("end for loop") ::exit:: print("exit") end main() 実行結果です。 1 1 1 2 exit 参考: lua-users…

re.findall()

忘れるのでメモ。 Python 3.2 (r32:88452, Feb 20 2011, 11:12:31) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> re.findall("ab+", "ababaabb") ['ab', 'ab'…

矩形をドラッグするサンプル。setFocusを使う。

矩形をドラッグするサンプル - noriok's diaryでは、矩形をドラッグするサンプルを作りました。ドラッグ中にマウスをいきおいよく動かし、マウスポインタが矩形の領域外に出てしまうと、イベントが矩形に伝達されず、矩形がその場で止まってしまう問題があり…

Luaのnilは型であり、その値はnilです。

Lua

Luaのnilは型であり、その値はnilです。 function main() print(nil) print(type(nil)) end main() 実行結果です。 nil nil

浮動小数点演算の誤差についての誤解

Lua

『Programming in Lua プログラミング言語Lua公式解説書』p.28ページより。 浮動小数点演算の誤差については広く誤解されており、浮動小数点数では単純に 1 を加算するだけでも悲惨な状況になると恐れている人もいます。実際のところは、倍精度浮動小数点数…

コルーチンの練習

Lua

コルーチンの練習です。 function main() co = coroutine.create(function() coroutine.yield(1) coroutine.yield(2) end) print(co) print(coroutine.status(co)) print(coroutine.resume(co)) print(coroutine.status(co)) print(coroutine.resume(co)) pr…

数値の表記が e を使ったものに切り替わるタイミング

Lua

2^i をプリントするプログラムを作成しました。 function main() for i = 1,50 do print(i, 2^i, type(2^i)) end end main() 実行結果です。 1 2 number 2 4 number 3 8 number 4 16 number 5 32 number 6 64 number 7 128 number 8 256 number 9 512 number…