ä¹ ã ã®æ代é ãã²ã¨ãFizzBuzzç¥ããä»åã¯/bin/shãè¦ã¯ã·ã§ã«ã¹ã¯ãªãããååã®Tclã¨ã®ç¹ããã¯â¦â¦ä½ã¨ãªãé°å²æ°ãä¼¼ã¦ãããããã¾ãå ã Tclã¯Unixã¢ããªã±ã¼ã·ã§ã³ã®æ¨æºã®æ¡å¼µã¹ã¯ãªããè¨èªã¨ãã¦ãã¶ã¤ã³ããããããã ããã·ã§ã«ã¹ã¯ãªããã¯Unixç°å¢ã§ããã¥ã©ã¼ãªä¼çµ±çããã°ã©ããã«ã»ãã¼ã«ã®1ã¤ãªã®ã§ãåèã«ããå¯è½æ§ã¯ä½ãã¯ãªãã¨æã*1ã
å®ã¯ã·ã§ã«ã¹ã¯ãªãããæ¸ãæ©ä¼ã¯å°ãªããé·æéä½æ¥ããç°å¢ãWindowsãªçºãããããã¡ã¤ã«ãæ¸ãæ¹ãå¤ããMinGWãMSYSãGnuWin32ã®å種ãã¼ã«ã®æ··æã§ç¬èªã®Unixã©ã¤ã¯ç°å¢ãä½ã£ã¦ããã®ã§*2ãè²ã ã¨å¶ç´ãå¤ããã¨ãçç±ã®ä¸ã¤ã ã
ãã¾ãã«ãæ¸ãæ©ä¼ãå°ãªãã®ã§ãªããªãä¸éãããã·ã§ã«ã¹ã¯ãªãããæ¸ãããä¿®æ£ãããããæã¯ãã¤ãè¦å´ãããã§ããæ¬å¿ã§ã¯ããããã¡ã¤ã«ãã/bin/shãªã·ã§ã«ã¹ã¯ãªãããé¸ã³ãããã§ãé¸ã¹ãªãããããã¢ã³ããã¬ã³ã¹ã
ãããªèæ¯ããã£ã¦ãä»åã®FizzBuzzã¯ãªãããªãå ¼ãã¦ãããåä½ç°å¢ã¯MSYSä»å±ã®bash 2.04ä¸ã§ãbashã®å®è¡ãã¡ã¤ã«åãsh.exeã«å¤æ´ãããã®ã使ç¨ãã¦ããã
#!/bin/sh pfizbuz() { RETVAL=$1 if [ `expr $1 % 3` -eq 0 ]; then RETVAL=Fizz fi if [ `expr $1 % 5` -eq 0 ]; then RETVAL=Buzz fi if [ `expr $1 % 15` -eq 0 ]; then RETVAL=FizzBuzz fi echo $RETVAL } i=1 while [ $i -le 100 ] do pfizbuz $i i=`expr $i + 1` done
é ããæå ã®Windowsç°å¢*3ã§ã¯ãå ¨ã¦è¡¨ç¤ºãããã¾ã§30ç§å¼·æãããæ£ç´çºçããããªãç¶æ³ã ã
Intel Atom 330ãã·ã³*4ä¸ã®Ubuntu 8.04LTSã§ã試ãã¦ã¿ãæãå§åçã«éããªã£ããã®ã®ãããã§ãgawkãªã©ã§æ¸ããFizzBuzzã¨æ¯ã¹ãã¨ç®ã«è¦ãã¦åããç¨åº¦ã«ã¯é ããgawkçã¯ä¸ç¬ã§çµãããããã®ã·ã§ã«ã¹ã¯ãªããã ã¨æåãæµãã¦ãããã¨ãåããé度ã ã
ããã¯ä½ã¨ãããªãã¦ã¯ãªããªãã
ä¸ä½ãä½ãåå ã ãããï¼ãæããæãé«ãã¤ãã¦ããã®ã¯ã³ãã³ãã®å®è¡ã ãããçµã¿è¾¼ã¿é¢æ°ãã·ã§ã«é¢æ°ä»¥å¤ã®ã³ãã³ããå®è¡ããæã«æ¯åããã»ã¹ãçæããã¦ããã¯ãã ããå¤åããã»ã¹çæã®åº¦ã«ã¦ã¤ã«ã¹ãã¹ã¿ã¼2009ã®ç£è¦ç¶²ã«å¼ã£ããã£ã¦ããã®ã§*5ããã®åã ãé ããªã£ã¦ããã¯ãã ã
ã¨ãããã¨ã§ãã¾ãpfizbuzå ã§ã®exprã®å¼ã³åºãåæ°ãã»ãã®å°ãæ¸ããã¦ã¿ãã
#!/bin/sh pfizbuz() { RETVAL=$1 if [ `expr $1 % 15` -eq 0 ]; then RETVAL=FizzBuzz elif [ `expr $1 % 3` -eq 0 ]; then RETVAL=Fizz elif [ `expr $1 % 5` -eq 0 ]; then RETVAL=Buzz fi echo $RETVAL } i=1 while [ $i -le 100 ] do pfizbuz $i i=`expr $i + 1` done
ãããç®ã«è¦ããå¹æã¯ç¢ºèªã§ããªãã£ãã
念ã®çºãã·ã§ã«å¤æ°ãæ¯åå®ç¾©ããã®ãæ¢ãã¦ã¿ãã
#!/bin/sh pfizbuz() { if [ `expr $1 % 15` -eq 0 ]; then echo FizzBuzz elif [ `expr $1 % 3` -eq 0 ]; then echo Fizz elif [ `expr $1 % 5` -eq 0 ]; then echo Buzz else echo $1 fi } i=1 while [ $i -le 100 ] do pfizbuz $i i=`expr $i + 1` done
ãããå¹æãªãããã¯ãå°æå ã®å¤æ´ã§ã¯å¹æã¯ãªãã
ã¨ãããã¨ã§çºæ³ãå¤ãã¦ã¿ããpfizbuzæ¬ä½ã§ã¯ãªããå¼ã³åºãå´ã«åé¡ãããã®ã§ã¯ãªããï¼ãããè¦ã¦ã¿ãããã«ã¼ãã®æã«exprã§ã«ã¦ã³ãã¢ãããã¦ãããããã¯ç¡é§ã ã
#!/bin/sh pfizbuz() { if [ `expr $1 % 15` -eq 0 ]; then echo FizzBuzz elif [ `expr $1 % 3` -eq 0 ]; then echo Fizz elif [ `expr $1 % 5` -eq 0 ]; then echo Buzz else echo $1 fi } for i in `seq 1 100` do pfizbuz $i done
ãªã®ã§seqã§1ã100ã¾ã§ä¸æ°ã«çæããããã«ãã¦ã¿ãããã®ã¹ã¯ãªããã ã¨å®è¡æéã¯20ç§ç¨åº¦ã§ã10ç§ãããç縮ããããã¨ã«ãªãã
ã¡ãªã¿ã«ãããªæ¸ãæ¹ãã§ããã
#!/bin/sh pfizbuz() { if [ `expr $1 % 15` -eq 0 ]; then echo FizzBuzz elif [ `expr $1 % 3` -eq 0 ]; then echo Fizz elif [ `expr $1 % 5` -eq 0 ]; then echo Buzz else echo $1 fi } seq 1 100 | while read i do pfizbuz $i done
ä½ããæ°ãã¤ããªãç¨åº¦ã ãããã¤ããä¸æ®µæãåã ãå¾®å¦ã«é ããªãããã ã
10ç§ã®ç縮ã«æåããã®ã§ãæ´ãªãç縮ã«æãã§ã¿ããã¾ãã¾ãå°æå ã®å¤æ´ã ããexprã§æ±ããå°ä½ãæååã¨ãã¦æ¯è¼ãã¦ã¿ããæ¯è¼å¯¾è±¡ã®2ã¤ã®æååãæ°å¤ã«å¤æãã¦ããæ¯è¼ããã®ã¨ããã®ã¾ã¾æååã¨ãã¦æ¯è¼ããã®ã§ã¯ãã©ã¡ããè² è·ãé«ãã®ã ãããï¼
#!/bin/sh pfizbuz() { if [ `expr $1 % 15` = '0' ]; then echo FizzBuzz elif [ `expr $1 % 3` = '0' ]; then echo Fizz elif [ `expr $1 % 5` = '0' ]; then echo Buzz else echo $1 fi } for i in `seq 1 100` do pfizbuz $i done
試ãã¦ã¿ããããã®ã±ã¼ã¹ã§ã¯ç¹ã«ããã¨ãã£ãå·®ã¯ç¡ãããã ã£ãã
ãã¯ããpfizbuzå é¨ã§ã®ã³ãã³ãã®å®è¡åæ°ãæ¸ãããããé«éåã¯å®ç¾ã§ããªãããã ã極åã·ã§ã«çµã¿è¾¼ã¿ã®é¢æ°ãã·ã§ã«é¢æ°ã使ç¨ããããã«å¤æ´ãããã¨ã§ãä½ã¨ãé«éåã§ããªããã®ãã試ãã¦ã¿ãã
#!/bin/sh FIZVAL=`seq -s ' ' 3 3 100` isfizz() { for i in $FIZVAL do if [ $i = $1 ]; then FIZVAL=`echo $FIZVAL | sed -e 's/^[0-9]*[ ]*//'` return 0 fi break done return 1 } BUZVAL=`seq -s ' ' 5 5 100` isbuzz() { for i in $BUZVAL do if [ $i = $1 ]; then BUZVAL=`echo $BUZVAL | sed -e 's/^[0-9]*[ ]*//'` return 0 fi break done return 1 } isfizbuz() { for i in $BUZVAL do if [ $i = $1 ]; then for j in $FIZVAL do if [ $j = $1 ]; then FIZVAL=`echo $FIZVAL | sed -e 's/^[0-9]*[ ]*//'` BUZVAL=`echo $BUZVAL | sed -e 's/^[0-9]*[ ]*//'` return 0 fi break done fi break done return 1 } pfizbuz() { if isfizbuz $1; then echo FizzBuzz elif isfizz $1; then echo Fizz elif isbuzz $1; then echo Buzz else echo $1 fi } for i in `seq 1 100` do pfizbuz $i done
ã³ã¼ããéåé·ããªã£ããå®è¡æéã¯7ã8ç§ç¨åº¦ãFizzBuzzã¨è¡¨ç¤ºãããã¨ãã«åä½ãå¼ã£ãããã®ã¯ãæå¬ãã¨ãããã¨ã§åå¼ãã¦ã»ããã
æ¹è¯ã®ä½å°ã¯ããããã ãã©ãããã§çµäºãã¨ãããã·ã§ã«ã¹ã¯ãªããã®ä¸ã«Perlãgawkã®ã¹ã¯ãªãããåãè¾¼ãæ¹ãæã£åãæ©ãã¦ä¸ã¤é«éã«åä½ããã¯ããªã®ã§ããã以ä¸ãããã試è¡é¯èª¤ããæ°ãèµ·ããªãã
#!/bin/sh seq 1 100 | gawk ' { str = "" if ($0 % 3 == 0) str = "Fizz" if ($0 % 5 == 0) str = str "Buzz" print str == "" ? $0 : str }'
ãã®ã³ã¼ãã®æ¹ãçãããï¼awkãç¥ã£ã¦ãã人ã«ã¯ï¼åãããããããããé«éã«åä½ãããã¾ããããã·ã§ã«ã¹ã¯ãªããæ¬æ¥ã®ä½¿ãæ¹ã®1ã¤ãã¨ãããã¨ãã
*1:ä½ãæ¬å½ã®ã¨ããã¯èª¿ã¹ã¦ããªãã®ã§ä¸æã
*2:Cygwinã®é¡ã¯Windowsã¨ã®è¦ªåæ§ãã¤ãã¤ãã ããä»®æ³ç°å¢ã«Linuxçãå ¥ãã¦ä½æ¥ããã«ã¯ãã¼ãã¦ã§ã¢ã®ã¹ããã¯ã足ããªãã
*3:DELL Inspiron 2200ã®Windows XP SP3ä¸ã§MSYSã®bashã使ç¨ããå ´åãPentium M 1.7GHzãå èµã¡ã¢ãªã¨PC2700 DDRã¡ã¢ãªãåããã¦1280MBæè¼ãã¤ãã§ã«ã¦ã¤ã«ã¹ãã¹ã¿ã¼2009ã稼åä¸ã
*4:Intelã®ä¾ã®ãã¼ãã使ã£ããã¤ãã¡ã¢ãªã¯2GBã
*5:å®éã«ã¦ã¤ã«ã¹ãã¹ã¿ã¼ãæ¢ãã¦å®è¡ããæãå®è¡æéãååã«ãªã£ãã