twitterで書けと脅されたので、書いてみました。方針としては、Brainf**kのやつとだいたい同じです。
オンラインで動かせるので、入力を変えて試してみてください。
まずはHaskellで下書き。
main :: IO ()
main = interact $ zunDokoKiyoshi [] . mSeries . seed
seed :: String -> [Int]
seed = pad . toBinary
toBinary :: String -> [Int]
toBinary = concatMap (reverse . take 8 . bits . fromEnum)
bits :: Int -> [Int]
bits x = mod x 2 : bits (div x 2)
pad :: [Int] -> [Int]
pad xs = xs ++ take (32 - length xs) (repeat 1)
mSeries :: [Int] -> [Int]
mSeries xs = ys
where ys = xs ++ zipWith xor (drop 4 ys) (drop 29 ys)
xor :: Int -> Int -> Int
xor x y = mod (x + y) 2
zunDokoKiyoshi :: [Int] -> [Int] -> String
zunDokoKiyoshi (1 : 0 : 0 : 0 : 0 : _) _ = "キ・ヨ・シ!"
zunDokoKiyoshi xs (y : ys) = ["ズン ", "ドコ "] !! y ++ zunDokoKiyoshi (y : xs) ys
Haskellもどきの自家製DSLを使うと、下のような感じに。
zipWith
もconcatMap
もないので、HaskellのPreludeのソースを見て実装。
foldr
を用意しておくと、色々使えて便利なことが分かりました。
DSLのソースはここにあります。殴り書きなので、後で整理する。
import Prelude (($), putStrLn, fromEnum)
import qualified Prelude as P (foldr)
import LazyK.Prim
import LazyK.Util
main = putStrLn $ showC $
b :$ (zunDokoKiyoshi :$ (repeat :$ num 1)) :$ (b :$ mSeries :$
(b :$ seed :$ (takeWhile :$ (b :$ not :$ (le :$ num 256)))))
seed = b :$ pad :$ toBinary
toBinary = concatMap :$ (b :$ reverse :$ (b :$ (take :$ num 8) :$ bits))
bits = (m :$) $ lambda "r" $ lambda "x" $
cons :$ (mod :$ V "x" :$ num 2) :$ (m :$ V "r" :$ (div :$ V "x" :$ num 2))
pad = lambda "x" $ append :$ V "x" :$
(take :$ (sub :$ num 32 :$ (length :$ V "x")) :$ (repeat :$ num 1))
mSeries = lambda "x" $ m :$ (lambda "r" $ append :$ V "x" :$
(zipWith :$ xor :$ (drop :$ num 4 :$ (m :$ V "r")) :$ (drop :$ num 29 :$ (m :$ V "r"))))
xor = lambda "x" $ lambda "y" $
mod :$ (plus :$ V "x" :$ V "y") :$ num 2
zunDokoKiyoshi = (m :$) $ lambda "r" $ lambda "x" $ lambda "y" $
ands :$ (zipWith :$ eq :$ dzzzz :$ V "x") :$ kiyoshi :$
(append :$ nthNX (car :$ V "y") (cons :$ zun :$ (cons :$ doko :$ nil)) :$
(m :$ V "r" :$ (cons :$ (car :$ V "y") :$ V "x") :$ (cdr :$ V "y")))
dzzzz = fromInt [1, 0, 0, 0, 0]
-- UTF-8
zun = fromInt [227, 130, 186, 227, 131, 179, 32]
doko = fromInt [227, 131, 137, 227, 130, 179, 32]
kiyoshi = fromInt [227, 130, 173, 227, 131, 187, 227, 131, 168, 227, 131, 187, 227, 130, 183, 239, 188, 129, 256]
-- Shift_JIS
-- zun = fromInt [0x83, 0x59, 0x83, 0x93, 0x20]
-- doko = fromInt [0x83, 0x68, 0x83, 0x52, 0x20]
-- kiyoshi = fromInt [0x83, 0x4C, 0x81, 0x45, 0x83, 0x88, 0x81, 0x45, 0x83, 0x56, 0x81, 0x49, 0x100]
fromInt = P.foldr (\i a -> cons :$ num i :$ a) nil
これをコンパイルして出力されるLazy Kはこちら。
ぜんぜんゴルフしてないので、まだまだ短くなるはず。
S(KS)K(SII(S(K(S(S(KS)(S(KK)(S(S(K(SII(S(K(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))))(S(K(S(S(KS)(S(KK)(S(KS)(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(SII)))))(K(K(K(SI(K(SK)))))))))(SSK)K))(SII(S(K(S(K(S(S(KS)(S(KK)(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))(K(K(SI(KK))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))))(K(K(K(SI(K(SK))))))))))(S(S(KS)(S(K(S(K(SSK))))(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(K(S(KK)(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(S(K(S(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(K(S(KK)(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)I(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SK)(KK))))))))(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(SI(SS(SK)))(SS(SS(SS(S(SSS))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SSSS(SS(SS(SK))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK))))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SSSS(SS(SS(SK))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SSSSSS(SS(SK)))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(S(SSS)(S(SS(SS(SK)))(SS(SK))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SSSS(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SII(SII(S(S(KS)K)I)))(KK)))))))))))))))))))))(S(K(S(K(S(S(K(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))(S(S(S(SI(KK))(K(SI(K(SK)))))(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(S(S(SS(SS(SK)))(SS(SK)))S)(SSSSSS(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))))))))))))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(SS(SSI(SS(SK))))(SS(SK))(S(KS)K))(KK))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(SS(S(SS(SK))(SS(SSSS(SS(SK))))))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SS(SS(S(SS(S(SSS)(SS(SK))))(SS(SK)))))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(SS(SSSSSS(SS(SK)))(S(KS)K))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)(S(SS(SSI(SS(SK))))(SS(SK))(S(KS)K))(KK))))))(KK)))))(KK)))))))(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(KK)(SII)))))(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))K)))))(K(K(SI(K(SK))))))))(SII(S(K(S(S(KS)(S(K(SI))K))))(S(K(S(KK)))(SII)))I))(S(KS)K(S(K(SII))(S(S(KS)(S(KK)(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))(K(S(S(K(SII(S(K(S(K(S(S(KS)(S(KK)(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))(K(K(SI(KK))))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))))(K(K(K(SI(K(SK))))))))))(S(S(KS)(S(K(S(K(S(K(S(K(SI(K(SK))))))(S(K(S(S(S(K(SII))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(SI(K(S(K(SI))K)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))))))))(S(KK)(S(KK)(S(K(S(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K)))K)))))))))(K(K(S(K(S(SI(K(S(K(SI))K)))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))))))(K(SK)))))K)))))(S(KS)(S(K(S(KS)))(S(KK))))))(K(K(S(S(KS)K)I))))))(S(K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK)))))))))))(K(KI)))(SII(S(S(KS)K)I))))(SII)))(S(K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK)))))))))))(K(KI)))(SS(SS(SSI(SS(SS(SK)))))(S(KS)K))))(SII))))))(S(KS)K(S(KS)K(S(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(S(S(K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK))))))))))))(K(K(K(KK)))))))(S(K(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K(S(SS(SSI(SS(SK))))(SS(SK))(S(KS)K))))(SII(S(K(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))))(S(K(S(S(KS)(S(KK)(S(KS)(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(SII)))))(K(K(K(SI(K(SK)))))))))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))(SK))))(K(SII(S(K(S(S(KS)(S(K(SI))K))))(S(K(S(KK)))(SII)))I))))(S(S(K(SII(S(K(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))))(S(K(S(S(KS)(S(KK)(S(KS)(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(K(S(K(S(KK)))))(SII)))))(K(K(K(SI(K(SK)))))))))))(S(KS)K(SII(S(K(S(K(S(S(KS)(SI(K(K(K(SK))))))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(SI(KK)))))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))))(K(KK))(S(KS)K(SII(S(K(S(S(KS)(S(K(S(SI(K(K(K(SK)))))))K))))(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(KK)(S(KS)(S(KK)(SII)))))(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))K)))))(K(K(SI(K(SK)))))))(KK))(S(KS)K(SII(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)K)))(S(K(S(K(S(KK)))))(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI)))))))))(K(K(SI(K(SK))))))))))))(K(K(K(KK)))))(S(S(S(KS)K))I(S(S(KS)K)I)))(SII(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(S(S(K(S(K(SI(K(SK))))))(S(K(S(S(S(K(SII))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(SI(K(S(K(SI))K)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))))))))(S(KK)(S(KK)(S(K(S(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K)))K)))))))))(K(K(S(K(S(SI(K(S(K(SI))K)))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))))))(K(SK)))))K))(K(S(S(KS)K)I))))))(S(S(KS)(S(KK)(SII)))(K(S(S(K(S(K(SI(KK)))))(S(K(S(S(S(K(SII))(S(S(KS)(S(K(S(KS)))(S(K(S(K(S(KS)))))(S(S(KS)(S(KK)(S(KS)(S(KK)(S(KS)(S(KK)(SI(K(S(K(SI))K)))))))))(S(K(S(K(S(K(S(KK)))))))(S(K(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SII)))(K(S(S(KS)(S(K(S(KS)))(S(KK))))(KI)))))))))(S(KK)(S(KK)(S(K(S(S(K(S(SI(K(S(S(KS)(S(K(S(KS)))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)K)(K(S(K(S(K(SI))))(S(K(S(KK)))(S(K(SI))K))))))))(K(KK)))))(K(K(KI))))))))K)))K)))))))))(K(K(S(K(S(SI(K(S(K(SI))K)))))(S(K(S(KK)))(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK))))))))(K(SK)))))K))(K(S(S(KS)K)I)))))))))))(SII(S(K(S(K(S(S(SI(K(K(K(SK)))))(K(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(S(KS)(S(S(KS)K)(K(SI(KK)))))))(S(K(S(K(S(S(K(S(S(KS)(S(KK)(S(KS)(S(K(SI))K))))(KK)))(SI(KK)))))))(S(S(KS)(S(K(S(KS)))(S(K(S(KK)))(SII))))(K(K(SI(K(SK))))))))))(K(K(K(KK))))))(S(KS)K(S(S(KS)(S(KK)S))(KK))(S(S(KS)(S(KK)(S(KS)(S(K(S(KS)))(S(K(S(KK)))(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK)))))))(K(S(KK)(S(S(KS)(S(KK)(SI(K(S(K(SI))K)))))(KK))))(SII(SII(S(S(KS)K)I))))))))
デバッグの辛さとか、語りたいことも色々あるのだけど、疲れたのでとりあえず寝ます。