home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ruby164.zip / rbemx164.zip / ruby / share / doc / ruby-1.6.4 / sample / biorhythm.rb next >
Text File  |  2001-06-18  |  4KB  |  162 lines

  1. #!/usr/local/bin/ruby
  2. #
  3. #               biorhythm.rb - 
  4. #                       $Release Version: $
  5. #                       $Revision: 1.5 $
  6. #                       $Date: 2000/07/31 09:21:25 $
  7. #                       by Yasuo OHBA(STAFS Development Room)
  8. #
  9. # --
  10. #
  11. #       
  12. #
  13.  
  14. # probably based on:
  15. #
  16. # Newsgroups: comp.sources.misc,de.comp.sources.os9
  17. # From: fkk@stasys.sta.sub.org (Frank Kaefer)
  18. # Subject: v41i126:  br - Biorhythm v3.0, Part01/01
  19. # Message-ID: <1994Feb1.070616.15982@sparky.sterling.com>
  20. # Sender: kent@sparky.sterling.com (Kent Landfield)
  21. # Organization: Sterling Software
  22. # Date: Tue, 1 Feb 1994 07:06:16 GMT
  23. #
  24. # Posting-number: Volume 41, Issue 126
  25. # Archive-name: br/part01
  26. # Environment: basic, dos, os9
  27.  
  28. include Math
  29. require "date.rb"
  30. require "parsearg.rb"
  31. require "parsedate.rb"
  32.  
  33. def usage()
  34.   print "Usage:\n"
  35.   print "biorhythm.rb [options]\n"
  36.   print "  options...\n"
  37.   print "    -D YYYYMMDD(birthday)     : use default values.\n"
  38.   print "    --sdate | --date YYYYMMDD : use system date; use specified date.\n"
  39.   print "    --birthday YYYYMMDD       : specifies your birthday.\n"
  40.   print "    -v | -g                   : show values or graph.\n"
  41.   print "    --days DAYS               : graph range (only in effect for graphs).\n"
  42.   print "    --help                    : help\n"
  43. end
  44. $USAGE = 'usage'
  45.  
  46. def printHeader(y, m, d, p, w)
  47.   print "\n>>> Biorhythm <<<\n"
  48.   printf "The birthday %04d.%02d.%02d is a %s\n", y, m, d, w
  49.   printf "Age in days: [%d]\n\n", p
  50. end
  51.  
  52. def getPosition(z)
  53.   pi = Math::PI
  54.   phys = (50.0 * (1.0 + sin((z / 23.0 - (z / 23)) * 360.0 * pi / 180.0))).to_i
  55.   emot = (50.0 * (1.0 + sin((z / 28.0 - (z / 28)) * 360.0 * pi / 180.0))).to_i
  56.   geist =(50.0 * (1.0 + sin((z / 33.0 - (z / 33)) * 360.0 * pi / 180.0))).to_i
  57.   return phys, emot, geist
  58. end
  59.  
  60. def parsedate(s)
  61.   ParseDate::parsedate(s).indexes(0, 1, 2)
  62. end
  63.  
  64. def name_of_week(date)
  65.   Date::DAYNAMES[date.wday]
  66. end
  67.  
  68. #
  69. # main program
  70. #
  71. parseArgs(0, nil, "vg", "D:", "sdate", "date:", "birthday:", "days:")
  72.  
  73. if $OPT_D
  74.   dd = Date.today
  75.   bd = Date.new(*parsedate($OPT_D))
  76.   ausgabeart = "g"
  77. else
  78.   if $OPT_birthday
  79.     bd = Date.new(*parsedate($OPT_birthday))
  80.   else
  81.     printf(STDERR, "Birthday                      (YYYYMMDD) : ")
  82.     if (si = STDIN.gets.chop) != ""
  83.       bd = Date.new(*parsedate(si))
  84.     end
  85.   end
  86.   if !bd
  87.     printf STDERR, "BAD Input Birthday!!\n"
  88.     exit()
  89.   end
  90.   
  91.   if $OPT_sdate
  92.     dd = Date.today
  93.   elsif $OPT_date
  94.     dd = Date.new(*parsedate($OPT_date))
  95.   else
  96.     printf(STDERR, "Date        [<RETURN> for Systemdate] (YYYYMMDD) : ")
  97.     if (si = STDIN.gets.chop) != ""
  98.       dd = Date.new(*parsedate(si))
  99.     end
  100.   end
  101.   if !dd
  102.     dd = Date.today
  103.   end
  104.  
  105.   if $OPT_v
  106.     ausgabeart = "v"
  107.   elsif $OPT_g
  108.     ausgabeart = "g"
  109.   else
  110.     printf(STDERR, "Values for today or Graph  (v/g) [default g] : ")
  111.     ausgabeart = STDIN.gets.chop
  112.   end
  113. end
  114. if (ausgabeart == "v")
  115.   printHeader(bd.year, bd.month, bd.day, dd - bd, name_of_week(bd))
  116.   print "\n"
  117.   
  118.   phys, emot, geist = getPosition(dd - bd)
  119.   printf "Biorhythm:   %04d.%02d.%02d\n", dd.year, dd.month, dd.day
  120.   printf "Physical:    %d%%\n", phys
  121.   printf "Emotional:   %d%%\n", emot
  122.   printf "Mental:      %d%%\n", geist
  123.   print "\n"
  124. else
  125.   if $OPT_days
  126.     display_period = $OPT_days.to_i
  127.   elsif $OPT_D
  128.     display_period = 9
  129.   else
  130.     printf(STDERR, "Graph for how many days     [default 10] : ")
  131.     display_period = STDIN.gets.chop
  132.     if (display_period == "")
  133.       display_period = 9
  134.     else
  135.       display_period = display_period.to_i - 1
  136.     end
  137.   end
  138.  
  139.   printHeader(bd.year, bd.month, bd.day, dd - bd, name_of_week(bd))
  140.   print "                     P=physical, E=emotional, M=mental\n"
  141.   print "             -------------------------+-------------------------\n"
  142.   print "                     Bad Condition    |    Good Condition\n"
  143.   print "             -------------------------+-------------------------\n"
  144.   
  145.   for z in (dd - bd)..(dd - bd + display_period)
  146.     phys, emot, geist = getPosition(z)
  147.     
  148.     printf "%04d.%02d.%02d : ", dd.year, dd.month, dd.day
  149.     p = (phys / 2.0 + 0.5).to_i
  150.     e = (emot / 2.0 + 0.5).to_i
  151.     g = (geist / 2.0 + 0.5).to_i
  152.     graph = "." * 51
  153.     graph[25] = ?|
  154.     graph[p] = ?P
  155.     graph[e] = ?E
  156.     graph[g] = ?M
  157.     print graph, "\n"
  158.     dd = dd + 1
  159.   end
  160.   print "             -------------------------+-------------------------\n\n"
  161. end
  162.