Hatena::ブログ(Diary)

趣味的にっき このページをアンテナに追加 RSSフィード

2007-08-20

スタバで読書

今日有給でした 21:32 今日は有給でしたを含むブックマーク 今日は有給でしたのブックマークコメント

朝起きたら、へろへろでした。有給とっておいてホントによかった〜。

昼。三宮センタープラザ地下の「四季愛菜ダイニング」でランチ牛肉コロッケ×2。胡麻じゃこのかかったご飯がおいしい(胡麻じゃこ以外にも鮭フレークとか高菜とか選べます)。ちょっと食べ過ぎた。。。苦しい。「四季愛菜ダイニング」はお客さんがほとんど女性なので、ちょっと恥かしいです。長居できません。

東急ハンズ向いのスタバお茶しながら読書。何にしようか迷ったあげく抹茶ティーラテ洋書を20ページくらい。ぼーっとして、英語があんまり頭に入ってこない。このペースでは週末のEasyReadingまでに読み終わるか微妙。がんばらなきゃ。

参照: アクセスされたURLは変更されました

[] Nothing found for 404 - エロと風俗情報満載 どう抜く? 21:33  Nothing found for 404 - エロと風俗情報満載 どう抜く?を含むブックマーク  Nothing found for 404 - エロと風俗情報満載 どう抜く?のブックマークコメント

結局は1 〜 nの整数リストシャッフルする問題に帰結します。普通にshuffleを実装したら、nobsunさんのとほとんど同じになってしまいました。

module Main (main) where

import System.Random (RandomGen, getStdGen, randomR)

shuffle :: RandomGen g => g -> Int -> [a] -> [a]
shuffle _ 0 _  = []
shuffle _ _ [] = []
shuffle g n xs =
    let (i, g') = randomR (0, n - 1) g
        (xs1', (x' : xs2')) = splitAt i xs
    in x' : shuffle g' (n - 1) (xs1' ++ xs2')

bingo :: RandomGen g => g -> Int -> [Int]
bingo g n = shuffle g n [1 .. n]

main :: IO ()
main = print . flip bingo 10 =<< getStdGen
-- => [4,1,2,6,3,8,10,9,5,7]

[] Nothing found for 404 - エロと風俗情報満載 どう抜く? 21:33  Nothing found for 404 - エロと風俗情報満載 どう抜く?を含むブックマーク  Nothing found for 404 - エロと風俗情報満載 どう抜く?のブックマークコメント

slice、showBingoを追加しました。整形処理とIOを分離するのがいかにもHaskellぽいと思います。

module Main (main) where

import System.Random (RandomGen, getStdGen, randomR)
import Text.Printf (printf)

shuffle :: RandomGen g => g -> Int -> [a] -> [a]
shuffle _ 0 _  = []
shuffle _ _ [] = []
shuffle g n xs =
    let (i, g') = randomR (0, n - 1) g
        (xs1', (x' : xs2')) = splitAt i xs
    in x' : shuffle g' (n - 1) (xs1' ++ xs2')

bingo :: RandomGen g => g -> Int -> [Int]
bingo g n = shuffle g n [1 .. n]

slice :: Int -> [a] -> [[a]]
slice _ [] = []
slice n xs = 
    let (xs1', xs2') = splitAt n xs
    in xs1' : slice n xs2'

showBingo :: [Int] -> String
showBingo = concatMap showChunk . map unzip . slice 10 . zip [1 ..]
  where
    showChunk :: ([Int], [Int]) -> String
    showChunk (ns1, ns2) = showLine ns1 ++ showLine ns2 ++ "\n"

    showLine :: [Int] -> String
    showLine = printf "%s\n" . unwords . map (printf "%2d")

main :: IO ()
main = putStr . showBingo . flip bingo 35 =<< getStdGen
-- =>  1  2  3  4  5  6  7  8  9 10
--    32 33  9  2  1 13 20 35 22 14
--    
--    11 12 13 14 15 16 17 18 19 20
--    16 15 27  4 34 30 11 23 18  7
--    
--    21 22 23 24 25 26 27 28 29 30
--    17  3 10  5 29  8 25 21 28 24
--    
--    31 32 33 34 35
--    26 12 19 31  6

@nifty:デイリーポータルZ:ストリングラフィ〜糸電話を弾く〜 22:10 @nifty:デイリーポータルZ:ストリングラフィ〜糸電話を弾く〜を含むブックマーク @nifty:デイリーポータルZ:ストリングラフィ〜糸電話を弾く〜のブックマークコメント

ストリングラフィ」っていう糸電話を弾く楽器があるそうです。バイオリンとか二胡ぽい音がします。ひとりで出せる音はやっぱり2音までなのかな。

参照:

トラックバック - http://d.hatena.ne.jp/ha-tan/20070820
Connection: close