読者です 読者をやめる 読者になる 読者になる

Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

カウンタも剰余演算もないSleep FizzBuzz作ってみた

かなり前にsleepによってソートするSleep Sortが話題を呼びました
Genius sorting algorithm: Sleep sort
比較演算がないユニークなソートです

今回はこれに影響されてSleep FizzBuzzを作ってみました
sleepを使用するので剰余演算が必要ありません.
そしてカウンタは一秒ごとにタイマを進め, 初期時間との差分によって求めますので, 実質カウンタの実装はありません.

#!/bin/bash

TMPFILE=tmp
PIDSFILE=pidsfile
function destractor {
  if test -f $TMPFILE; then
    rm $TMPFILE
  fi
  if test -f $PIDSFILE; then
    kill `cat $PIDSFILE`
    rm $PIDSFILE
  fi
}

if [ $# -eq 0 ]; then
  trap "destractor; exit 1" 2

  $0 fb &
  usleep 200000
  $0 f &
  $0 b &
  usleep 200000
  $0 n &
  usleep 200000

  start=`date +%s`
  while :; do
    sleep 1
    if test -f $TMPFILE; then
      rm $TMPFILE
    fi
  done

elif [ $1 = "n" ]; then
  echo $$ >>$PIDSFILE
  start=`date +%s`
  while :; do
    sleep 1
    if test ! -f $TMPFILE; then
      echo $((`date +%s`-$start))
    fi
  done

elif [ $1 = "f" ]; then
  echo $$ >>$PIDSFILE
  start=`date +%s`
  while :; do
    sleep 3
    if test ! -f $TMPFILE; then
      echo Fizz
      touch $TMPFILE
    fi
  done

elif [ $1 = "b" ]; then
  echo $$ >>$PIDSFILE
  start=`date +%s`
  while :; do
    sleep 5
    if test ! -f $TMPFILE; then
      echo Buzz
      touch $TMPFILE
    fi
  done

elif [ $1 = "fb" ]; then
  echo $$ >>$PIDSFILE
  start=`date +%s`
  while :; do
    sleep 15
    if test ! -f $TMPFILE; then
      echo FizzBuzz
      touch $TMPFILE
    fi
  done
fi