Comment detail

憂鬱な勇者 (Nested Flatten)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
module Main where

import Data.List
import qualified System.IO.UTF8 as U
import System.IO.Unsafe
import System.Random

shuffle :: StdGen -> [a] -> ([a],StdGen)
shuffle g xs = shuffle' [] g (length xs,xs)
  where shuffle' acc g (0,_)  = (acc,g)
        shuffle' acc g (n,xs) = case randomR (0,n-1) g of
          (i,g') -> case splitAt i xs of
                      (ys,z:zs) -> shuffle' (z:acc) g' (n-1,ys++zs)

facts = scanl (*) 1 [1..30]
monsters = ["焼きたてパン","強いシャチホコ","もんじゃ焼き一年生","怪人ホタテ男","ニセ勇者","逃げ足の早いアレ","睡魔","煩悩","愛らしい子犬の中の人","恋するスズメバチ","勇敢なクマンバチ","信じられない物","勇者の師匠","浮遊する鎧","怪盗ドボン","闇の招き猫","誘惑のカスタードクリーム","しょっぱすぎる籠手","カレー味の兜","光沢だけは一流の盾","若葉マークのモンスター","新緑の季節","梅雨時の車両のニオイ","暑すぎる夏","新宿らしき何か","やたら発達したドーナツ","育ちすぎたクマー","なごやかな雰囲気","凍り付いた気配","忍び寄る恐怖"]

skills = ["お豆腐の買い方","鉛筆の買い方","消しゴムの使い方","メモの取り方","攻撃に使えないこともない呪文","裏町の歩き方","森林浴","珈琲の味","しじみのみそ汁の作り方","回覧板の回し方","郵便物の投函方法","立ち話のコツ","猫の呼び方","犬の呼び方","カラスの呼び方","鳩専用豆鉄砲","秘密の趣味","速く走るコツ","剣の使い方","斧の使い方","まきわりで、まっきわりわり","聖なる祈り","孤独","涼しく過ごすコツ","お洒落のコツ","卵をふわっと焼く方法","ごはんの研ぎ方","油汚れの対応方法","大人の振るまい","Suicaの使い方"]

main = do { g <- getStdGen
          ; let (ms,g') = shuffle g monsters
          ; let (ss,_)  = shuffle g' skills
          ; U.putStrLn 
          $ unlines 
          $ intersperse sep 
          $ map showStep 
          $ zip [1..30] 
          $ zip3 facts ms ss
          }

showStep (l,(v,m,s))
  = unlines 
  $ ["*-----"
    ,m++"を倒した!"
    ,show (facts !! l) ++ "の経験値を得た."
    ,"勇者は"++(if l==30 then "また,"
                else show l ++"に")++"レベルが上った!"
    ,"勇者は"++(if l==30 then "ふと空しさ" 
                else s) ++"を覚えた."]

sep = unlines ["そして,"
              ,"かくかくかじかで,山あり谷ありの冒険が続いがが割愛."]

書きわすれましたが、日本語(utf8)を表示するにはutf8-stringというパッケージが提供するSystem.IO.UTF8モジュールが必要です。

Index

Feed

Other

Link

Pathtraq

loading...