<?xml version="1.0" encoding="EUC-JP" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ruby-src:sample/biorhythm.rb</title> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP" /> <link href="default.css" type="text/css" rel="stylesheet" /> <link href="refm471.html" rel="next" /> <link href="refm469.html" rel="prev" /> <link href="index.html" rel="start" /> </head> <body> <div class="navigator"><span class="navigator">[<a href="index.html">MAIN</a>][<a href="refm482.html">INDEX</a>][<a href="refm483.html">KEYWORD</a>][<a href="refm594.html">METHOD</a>(<a href="refm633.html">NC</a>)] [<a href="index.html">TOP</a>][<a href="index.html">UP</a>][<a href="refm469.html"><-PREV</a>][<a href="refm471.html">NEXT-></a>]</span></div> <hr /> <h1>ruby-src:sample/biorhythm.rb</h1> #!/usr/bin/ruby<br /> #<br /> # biorhythm.rb - <br /> # $Release Version: $<br /> # $Revision: 1.9 $<br /> # $Date: 2003/05/05 14:02:14 $<br /> # by Yasuo OHBA(STAFS Development Room)<br /> #<br /> # --<br /> #<br /> # <br /> #<br /> <br /> # probably based on:<br /> #<br /> # Newsgroups: comp.sources.misc,de.comp.sources.os9<br /> # From: fkk@stasys.sta.sub.org (Frank Kaefer)<br /> # Subject: v41i126: br - Biorhythm v3.0, Part01/01<br /> # Message-ID: <1994Feb1.070616.15982@sparky.sterling.com><br /> # Sender: kent@sparky.sterling.com (Kent Landfield)<br /> # Organization: Sterling Software<br /> # Date: Tue, 1 Feb 1994 07:06:16 GMT<br /> #<br /> # Posting-number: Volume 41, Issue 126<br /> # Archive-name: br/part01<br /> # Environment: basic, dos, os9<br /> <br /> include Math<br /> require "date.rb"<br /> require "parsearg.rb"<br /> require "parsedate.rb"<br /> <br /> def usage()<br /> print "Usage:\n"<br /> print "biorhythm.rb [options]\n"<br /> print " options...\n"<br /> print " -D YYYYMMDD(birthday) : use default values.\n"<br /> print " --sdate | --date YYYYMMDD : use system date; use specified date.\n"<br /> print " --birthday YYYYMMDD : specifies your birthday.\n"<br /> print " -v | -g : show values or graph.\n"<br /> print " --days DAYS : graph range (only in effect for graphs).\n"<br /> print " --help : help\n"<br /> end<br /> $USAGE = 'usage'<br /> <br /> def printHeader(y, m, d, p, w)<br /> print "\n>>> Biorhythm <<<\n"<br /> printf "The birthday %04d.%02d.%02d is a %s\n", y, m, d, w<br /> printf "Age in days: [%d]\n\n", p<br /> end<br /> <br /> def getPosition(z)<br /> pi = Math::PI<br /> z = Integer(z)<br /> phys = (50.0 * (1.0 + sin((z / 23.0 - (z / 23)) * 360.0 * pi / 180.0))).to_i<br /> emot = (50.0 * (1.0 + sin((z / 28.0 - (z / 28)) * 360.0 * pi / 180.0))).to_i<br /> geist =(50.0 * (1.0 + sin((z / 33.0 - (z / 33)) * 360.0 * pi / 180.0))).to_i<br /> return phys, emot, geist<br /> end<br /> <br /> def parsedate(s)<br /> ParseDate::parsedate(s).values_at(0, 1, 2)<br /> end<br /> <br /> def name_of_week(date)<br /> Date::DAYNAMES[date.wday]<br /> end<br /> <br /> #<br /> # main program<br /> #<br /> parseArgs(0, nil, "vg", "D:", "sdate", "date:", "birthday:", "days:")<br /> <br /> if $OPT_D<br /> dd = Date.today<br /> bd = Date.new(*parsedate($OPT_D))<br /> ausgabeart = "g"<br /> else<br /> if $OPT_birthday<br /> bd = Date.new(*parsedate($OPT_birthday))<br /> else<br /> STDERR.print("Birthday (YYYYMMDD) : ")<br /> unless (si = STDIN.gets.chop).empty?<br /> bd = Date.new(*parsedate(si))<br /> end<br /> end<br /> if !bd<br /> STDERR.print "BAD Input Birthday!!\n"<br /> exit()<br /> end<br /> <br /> if $OPT_sdate<br /> dd = Date.today<br /> elsif $OPT_date<br /> dd = Date.new(*parsedate($OPT_date))<br /> else<br /> STDERR.print("Date [<RETURN> for Systemdate] (YYYYMMDD) : ")<br /> unless (si = STDIN.gets.chop).empty?<br /> dd = Date.new(*parsedate(si))<br /> end<br /> end<br /> dd ||= Date.today<br /> <br /> if $OPT_v<br /> ausgabeart = "v"<br /> elsif $OPT_g<br /> ausgabeart = "g"<br /> else<br /> STDERR.print("Values for today or Graph (v/g) [default g] : ")<br /> ausgabeart = STDIN.gets.chop<br /> end<br /> end<br /> if ausgabeart == "v"<br /> printHeader(bd.year, bd.month, bd.day, dd - bd, name_of_week(bd))<br /> print "\n"<br /> <br /> phys, emot, geist = getPosition(dd - bd)<br /> printf "Biorhythm: %04d.%02d.%02d\n", dd.year, dd.month, dd.day<br /> printf "Physical: %d%%\n", phys<br /> printf "Emotional: %d%%\n", emot<br /> printf "Mental: %d%%\n", geist<br /> print "\n"<br /> else<br /> if $OPT_days<br /> display_period = $OPT_days.to_i<br /> elsif $OPT_D<br /> display_period = 9<br /> else<br /> STDERR.printf("Graph for how many days [default 10] : ")<br /> display_period = STDIN.gets.chop<br /> if display_period.empty?<br /> display_period = 9<br /> else<br /> display_period = display_period.to_i - 1<br /> end<br /> end<br /> <br /> printHeader(bd.year, bd.month, bd.day, dd - bd, name_of_week(bd))<br /> print " P=physical, E=emotional, M=mental\n"<br /> print " -------------------------+-------------------------\n"<br /> print " Bad Condition | Good Condition\n"<br /> print " -------------------------+-------------------------\n"<br /> <br /> (dd - bd).step(dd - bd + display_period) do |z|<br /> phys, emot, geist = getPosition(z)<br /> <br /> printf "%04d.%02d.%02d : ", dd.year, dd.month, dd.day<br /> p = (phys / 2.0 + 0.5).to_i<br /> e = (emot / 2.0 + 0.5).to_i<br /> g = (geist / 2.0 + 0.5).to_i<br /> graph = "." * 51<br /> graph[25] = ?|<br /> graph[p] = ?P<br /> graph[e] = ?E<br /> graph[g] = ?M<br /> print graph, "\n"<br /> dd = dd + 1<br /> end<br /> print " -------------------------+-------------------------\n\n"<br /> end<br /> <hr /> <div class="navigator"><span class="navigator">[<a href="index.html">MAIN</a>][<a href="refm482.html">INDEX</a>][<a href="refm483.html">KEYWORD</a>][<a href="refm594.html">METHOD</a>(<a href="refm633.html">NC</a>)] [<a href="index.html">TOP</a>][<a href="index.html">UP</a>][<a href="refm469.html"><-PREV</a>][<a href="refm471.html">NEXT-></a>]</span></div> </body> </html>