ã·ãã·ã19é£éJavaScriptç
ã²ã¼ã ãã·ãã·ããã§ããã£ã¼ã«ãã®ç¶æ ãããã¹ãã§ä¸ããããã¨ããæ¶ãããã·ãããæ¶ãã¦æ¬¡ã®ãã£ã¼ã«ãã®ç¶æ ãåºåããããã°ã©ã ãæ¸ãã
http://okajima.air-nifty.com/b/2011/01/2011-ffac.html
ååæ¸ããHaskellçã®ã¢ã«ã´ãªãºã ã®ã¾ã¾JavaScriptã«ç§»æ¤ãã¦ã¿ãã
const partition = (f,xs) => xs.reduce(([y,z],x) => f(x) ? [[...y,x],z] : [y,[...z,x]],[[],[]]) const cat = (x,[ok,ng]) => [[x,...ok.flat()],...ng] const cmp = ([i,j,],[ii,jj,]) => i==ii ? j-jj : i-ii const near = ([i,j,c],[ii,jj,cc]) => c==cc && (ii-i)**2+(jj-j)**2==1 const xyc = (n,xs) => xs.map((x,i) => [i/n|0,i%n,x]) const tr = xs => xs.map(([i,j,c]) => [j,i,c]) const str = xs => xs.sort(cmp).map(([,,c])=>c) const joins = xs => xs.filter(([,,c])=>c.match(/\S/)) .reduce((r,x)=>cat(x,partition(ys=>ys.some(y=>near(x,y)),r)),[]) const puyo = obj => { const xs = tr(xyc(obj.cols,obj.value.split(""))) const j4 = joins(xs).filter(x=>x.length>3).flat() obj.value = str(tr(xyc(obj.rows,str(xs.map(x=>j4.some(y=>x+""==y+"") ? [x[0],-1," "] : x))))).join("") }
<!DOCTYPE html> <title>puyo</title> <script src=puyo.js></script> <form name=f> <input type=button value=next onclick='puyo(document.f.t)'> <input type=reset value=reset><br> <textarea name=t rows=13 cols=7> GYRR RYYGYG GYGYRR RYGYRG YGYRYG GYRYRG YGYRYR YGYRYR YRRGRG RYGYGG GRYGYR GRYGYR GRYGYR </textarea> </form>
ã·ãã·ã19é£é
ã²ã¼ã ãã·ãã·ããã§ããã£ã¼ã«ãã®ç¶æ ãããã¹ãã§ä¸ããããã¨ããæ¶ãããã·ãããæ¶ãã¦æ¬¡ã®ãã£ã¼ã«ãã®ç¶æ ãåºåããããã°ã©ã ãæ¸ãã
http://okajima.air-nifty.com/b/2011/01/2011-ffac.html
ãã®åé¡ãè¦ãã¨ãã«ãHaskellã§è§£ãã¦ã¿ããã¨æã£ãã®ã ãããã©ã°çã®å¯ä½ç¨ã使ããªããã¾ãæ¸ãæ¹ãæãã¤ããªãã¦ãèµå
¥ãã«ãã¦ãã
ä»åããµã¨ãããã¨ã§æ¹éãæãã¤ããã®ã§æ¸ãã¦ã¿ãã
import Data.List input = [" GYRR" ,"RYYGYG" ,"GYGYRR" ,"RYGYRG" ,"YGYRYG" ,"GYRYRG" ,"YGYRYR" ,"YGYRYR" ,"YRRGRG" ,"RYGYGG" ,"GRYGYR" ,"GRYGYR" ,"GRYGYR"] h = length input w = length $ head input near (i,j,c) (i',j',c') = c==c' && abs(i'-i)+abs(j'-j)==1 xyc n cs = [(div i n,mod i n,c) | (i,c) <- zip [0..] cs] tr xs = [(j,i,c) | (i,j,c) <- xs] str xs = [c | (_,_,c) <- sort xs] joins xs = foldr f [] [x | x@(_,_,c) <- xs, c/=' ' && c/='\n'] where f x r = let (ok,ng) = partition (any $ near x) r in (x : concat ok) : ng puyo xs = (str $ tr xs) : if xs==ys then [] else puyo ys where j4 = concat [x | x <- joins xs, length x > 3] ys = xyc h $ str [if elem x j4 then (i,-1,' ') else x | x@(i,_,_) <- xs] main = mapM_ putStrLn $ puyo $ tr $ xyc (w+1) $ unlines input
ãã¤ã³ãããªã¼ã³ã³ãã¼ã¿
Haskell風ã«æ¸ãããé¢æ°å®ç¾©ãã©ã ãå¼ãã(.)ãflipã使ã£ããã¤ã³ãããªã¼ã¹ã¿ã¤ã«ã«å¤æããããã°ã©ã ãä½ã£ã¦ã¿ãã
http://kar.s206.xrea.com/js/pointfree.html
使ç¨ä¾1
ä¾ãã°ããã«ããåé¡ã解ããã¦ã¿ãã
ãã¤ã³ãããªã¼ã¹ã¿ã¤ã«å ¥é - melponæ¥è¨
http://d.hatena.ne.jp/melpon/20111031/1320024473
åé¡1
foo x y = f (g x y)
å ¥åæ¬ã«ã
foo x y = f (g x y)
ã¨æ¸ãã¦å®è¡ãæ¼ãã¨ã
(f.).g
ã¨è¡¨ç¤ºãããã
使ç¨ä¾2
次ã«ãåãå¤æ°ãè¤æ°ç®æã§ä½¿ãä¾
ãã¤ã³ãããªã¼ - 西尾泰åã®ã¯ã¦ãªãã¤ã¢ãªã¼
http://d.hatena.ne.jp/nishiohirokazu/20100520/1274364170
square = (*)<*>id -- \x -> x * x
å ¥åæ¬ã«ã
\x -> x * x
ã¨æ¸ãã¦å®è¡ãæ¼ãã¨ã
(*)<*>id
ã¨è¡¨ç¤ºãããã
ã¨ãããããã®2ã¤ã¯ãã£ã¦ããã©ããããããã¹ããããã
ã¿ã¤ãã³ã°æ¸¬å®
ã¿ã¤ãã³ã°é度ã測å®ããããã°ã©ã ãã¤ãã£ã¦ã¿ãã
http://jsdo.it/katona/typing
ä¸æ®µã®textareaã®èª²é¡æãä¸æ®µã®textareaã«å
¥åããã
1æåç®ã®æã¡å§ãããè¨æ¸¬ãéå§ããããæå©ï¼ï¼ï¼ãªä»æ§ã
<html> <head> <title>Typing</title> <script> function key(f){ while(f.src.value.indexOf(f.usr.value)!=0) f.usr.value = f.usr.value.slice(0,-1); if(f.now.value.match(/GOAL/)) return; if(f.start.value=="") f.start.value = new Date().getTime(); f.now.value = (new Date().getTime() - f.start.value) / 1000; if(f.usr.value==f.src.value) f.now.value += ' GOAL'; } </script> </head> <body onload='document.f.usr.focus()'> <form name=f> <input name=now><input type=reset><input name=start style='display:none'><br> <textarea name=src rows=3 style='width:100%'>The razor-toothed piranhas of the genera Serrasalmus and Pygocentrus are the most ferocious freshwater fish in the world. In reality they seldom attack a human.</textarea> <textarea name=usr rows=3 style='width:100%' onkeyup='key(document.f)'></textarea> </form> </body> </html>
ãµã³ãã«ã®èª²é¡æã¯ããã¨åããã®
ã±ã¼ã¿ã¤æ©æã¡ã®ä¸çæéè¨é²æ´æ°ãiPhoneã§éæ - ã¹ã©ãã·ã¥ãããã»ã¸ã£ãã³
http://slashdot.jp/mobile/article.pl?sid=10/08/30/0811226
課é¡æã¯ä»¥ä¸ã®éããã®ãã¹èªå®ãåããããã®æ¨æºããã¹ãã«ãªã£ã¦ããã
The razor-toothed piranhas of the genera Serrasalmus and Pygocentrus are the most ferocious freshwater fish in the world. In reality they seldom attack a human.
ããã¾ã§ã®æéã¯ãSamsungã®Galaxy Sã使ã£ã¦ã¤ã®ãªã¹ã®å¥³æ§ã23æ¥ã«éæãã25.94ç§ã ã£ãããã©ã¤ã¢ã³ããã¯iPhoneã使ã£ã¦21.8ç§ã§å ¥åããã¨ããã
ããããPCã®ãã¼ãã¼ãã§ãã£ã¦ã¿ã¦ãã30ç§å°ããã§ãªãâ¦
æºå¸¯ã®Opera mobileã§ã¯ããã£ãããã©ã¼ã«ã¹ãã¦ããã¹ãå
¥åç¶æ
ã«ãªãã¨ãå
¥åã確å®ãã¦ãã©ã¼ã«ã¹ã解é¤ããã¾ã§onkeyupã®ã¤ãã³ããçºçããªãããã ã
ãããªç¶æ³ä¸ãæºå¸¯ã§ã¯2ã¿ããå
¥åã§200ç§è¶
ã ã£ãâ¦
é«éé¢æ°ã¯ã¤ãº
# let twice f x = f (f x)ãã㯠f ã¨ããé¢æ°ã¨å¤ x ãããã£ã¦ãf ãäºå x ã«é©ç¨ããé¢æ°ã§ãã
ãã¦ãã§ã¯ã# twice twice twice twice add1 0ã¯ä½ã帰ã£ã¦æ¥ãã¨æãã¾ããï¼
http://d.hatena.ne.jp/camlspotter/20100710/1278752186
ã»twiceã¯ãã£ã¼ãæ°ã§ã®2ã¨åãã
ã»ãã£ã¼ãæ°xã«ãã£ã¼ãæ°yãé©ç¨ãã㨠y^x ã«ãªãã
ãã£ã¦ãåé¡ã®çãã¯ã2^(2^(2^2))ã®è¨ç®çµæã¨åãã«ãªããã¨æãã
ã³ã³ããã¼ã¿çãã£ã¼ãæ°ã®å æ¸ä¹é¤
ãã£ãï¼ã¤ã®é¢æ°ããåºçºãã¦æ¨æ¥ãã£ãチャーチ数の加減乗除 - MEMO:はてな支店ãåç¾ããã
æåã«çæãã¦ããå種ã³ã³ããã¼ã¿ã¯ã³ã¡ã³ããã¤ãã¦ããããm=ã®ã¨ããããã¯åºæ¬çã«æ¨æ¥ã¨åããªã®ã§çç¥ã
æåã®é¢æ°x(Fokkerçã®ä¸ç¹åºåºã³ã³ããã¼ã¿)ã ãã¯æ®éã®é¢æ°å®ç¾©ã ãã
ãã以éã¯é¢æ°xã®é©ç¨ã®ã¿ã®ãããunsafeCoerceãxå
ã§ï¼åº¦ä½¿ãã ãã§æ¸ãã
import Unsafe.Coerce x f = f (\x y z -> x z $ y $ unsafeCoerce z) (\x y z -> x) k = x x -- k x y = x s = x k -- s f g x = f x (g x) ki = s k -- ki x y = y i = ki x -- i x = x b = s (k s) k -- b f g x = f (g x) d = b b -- d f x g y = f x (g y) c = s (d s) (k k) -- c f x y = f y x t = c i -- t x f = f x v = b c t -- v x y f = f x y s' = b (b s) b -- s' f g h x = f (g x) (h x) b' = b (b b) b -- b' f g h x = f (g (h x)) c' = b (b c) b -- c' f g x y = f (g y) x m = s i i y = b m (c b m) true = k false = ki not' = v false true and' = c c false or' = t true cons = v car = t true cdr = t false inc = s b incs = s (b cons cdr) (b inc cdr) dec = b car (c (t incs) (k n0)) n0 = ki n1 = i n2 = inc n1 n4 = n2 n2 n5 = inc n4 add = b s d mul = b pow = t sub = c (t dec) is0 = v (k false) true le = d b is0 sub ge = c le lt = d b not' ge gt = c lt rsub = c (c' c' s' sub) i -- rsub f m n = f (sub m n) n mod' = y $ b (s' s (s' c lt i)) rsub div' = y $ b' (s' s (c' c lt n0)) (d b inc) rsub num n = n (+1) 0 :: Int main = print $ map (\f -> num $ f n5 n2) [add,mul,pow,sub,mod',div']
å®è¡çµæ
ãããã5+2, 5*2, 5^2, 5-2, 5%2, 5/2ã®è¨ç®çµæã«ãªã£ã¦ããã
[7,10,25,3,1,2]
ãã¾ã
ä¸è¨ã®ã½ã¼ã¹ã¯æ®µéçã«é©ç¨çµæãå¤æ°ã«å
¥ãã¦ãã¦xã ãã§åãã¦ããã¨ããå®æããããªããã
ä¾ãã°n2ã¨mulãxã ãã§æ¸ãã¨ä»¥ä¸ã®ã¨ããã
import Unsafe.Coerce x f = f (\x y z -> x z $ y $ unsafeCoerce z) (\x y z -> x) n2 = x (x x) (x (x x) (x x (x (x x))) (x x)) (x (x x) (x x) x) mul = x (x x) (x x (x (x x))) (x x) num n = n (+1) 0 :: Int main = print $ map num [n2,mul n2 n2,mul n2 (mul n2 n2)]
å®è¡çµæ
ãããã2, 2*2, 2*2*2ã®è¡¨ç¤ºçµæ
[2,4,8]
ãã£ã¼ãæ°ã®å æ¸ä¹é¤
åæ¨è«ãç¡å¹ã«ããæ¹æ³ãçºè¦ã
åæ¨è«ããã¾ãã Y ã³ã³ããã¼ã¿
http://d.hatena.ne.jp/kazu-yamamoto/20100519/1274240859
L ã®å®ç¾©ã¯ãæ¬å½ã¯ L x y = x (y y) ã§ãã(y y)ã®é¨åãèªå·±è¨åã«ãªã£ã¦ãGHC ã§ã¯ãã®é¨åã®åããã¾ãå¦çã§ãã¾ãããããã§ãunsafeCoerce ã§åæ¨è«ããã¾ããã¦ãã¾ãã
ãããã§ãæ念ãã¦ããHaskellçã®ãã£ã¼ãæ°ã®å¼ãç®ã¨Yã³ã³ããã¼ã¿ã使ã£ãå²ãç®(ã¨å°ä½)ãä½ããã
ããã§å æ¸ä¹é¤ã®åºæ¬æ¼ç®ãããã£ããæè¬ã
import Unsafe.Coerce m x = x (unsafeCoerce x) y f = m (\x -> f (m x)) true x y = x false x y = y not' p = p false true and' p q = p q false or' p q = p true q cons x y f = f x y car p = p true cdr p = p false inc n f x = f (n f x) incs p = cons (cdr p) (inc (cdr p)) dec n = car (n incs (const n0)) n0 f x = x n1 f x = f x n2 = inc n1 n4 = n2 n2 n5 = inc n4 add m n f x = m f (n f x) mul m n f = m (n f) pow m n = unsafeCoerce n m sub m n = unsafeCoerce n dec m is0 n = n (const false) true le m n = is0 (sub m n) ge m n = le n m lt m n = not' (ge m n) gt m n = lt n m mod' f m n = (lt m n) m (f (sub m n) n) div' f m n = (lt m n) n0 (inc (f (sub m n) n)) num n = n (+1) 0 :: Int main = print $ map (\f -> num $ f n5 n2) [add,mul,pow,sub,y mod',y div']
å®è¡çµæ
ãããã5+2, 5*2, 5^2, 5-2, 5%2, 5/2ã®è¨ç®çµæã«ãªã£ã¦ããã
[7,10,25,3,1,2]
çµå±unsafeCoerceã使ã£ãã®ã¯mã³ã³ããã¼ã¿ã¨powã¨subã®3ã«æã
n4 = n2 n2ã¯ãã®ã¾ã¾éãã®ã«ããªãpowã¯unsafeCoerceãã¤ããªãã¨ã¨ã©ã¼ã«ãªãã®ããè¬ã