mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			138 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
#!/usr/local/bin/ruby
 | 
						|
#
 | 
						|
#               biorhythm.rb - 
 | 
						|
#                       $Release Version: $
 | 
						|
#                       $Revision$
 | 
						|
#                       $Date$
 | 
						|
#                       by Yasuo OHBA(STAFS Development Room)
 | 
						|
#
 | 
						|
# --
 | 
						|
#
 | 
						|
#       
 | 
						|
#
 | 
						|
 | 
						|
include Math
 | 
						|
require "date.rb"
 | 
						|
require "parsearg.rb"
 | 
						|
 | 
						|
def usage()
 | 
						|
  print "Usage:\n"
 | 
						|
  print "biorhythm.rb [options]\n"
 | 
						|
  print "  options...\n"
 | 
						|
  print "    -D YYYYMMDD(birthday)     : use default values.\n"
 | 
						|
  print "    --sdate | --date YYYYMMDD : use system date; use specified date.\n"
 | 
						|
  print "    --birthday YYYYMMDD       : specifies your birthday.\n"
 | 
						|
  print "    -v | -g                   : show values or graph.\n"
 | 
						|
  print "    --days DAYS               : graph range (only in effect for graphs).\n"
 | 
						|
  print "    --help                    : help\n"
 | 
						|
end
 | 
						|
$USAGE = 'usage'
 | 
						|
 | 
						|
def printHeader(y, m, d, p, w)
 | 
						|
  print "\n>>> Biorhythm <<<\n"
 | 
						|
  printf "The birthday %04d.%02d.%02d is a %s\n", y, m, d, w
 | 
						|
  printf "Age in days: [%d]\n\n", p
 | 
						|
end
 | 
						|
 | 
						|
def getPosition(z)
 | 
						|
  pi = 3.14159265
 | 
						|
  phys = (50.0 * (1.0 + sin((z / 23.0 - (z / 23)) * 360.0 * pi / 180.0))).to_i
 | 
						|
  emot = (50.0 * (1.0 + sin((z / 28.0 - (z / 28)) * 360.0 * pi / 180.0))).to_i
 | 
						|
  geist =(50.0 * (1.0 + sin((z / 33.0 - (z / 33)) * 360.0 * pi / 180.0))).to_i
 | 
						|
  return phys, emot, geist
 | 
						|
end
 | 
						|
 | 
						|
#
 | 
						|
# main program
 | 
						|
#
 | 
						|
parseArgs(0, nil, "vg", "D:", "sdate", "date:", "birthday:", "days:")
 | 
						|
 | 
						|
if $OPT_D
 | 
						|
  dd = Date.new(Time.now.strftime("%Y%m%d"))
 | 
						|
  bd = Date.new($OPT_D)
 | 
						|
  ausgabeart = "g"
 | 
						|
else
 | 
						|
  if $OPT_birthday
 | 
						|
    bd = Date.new($OPT_birthday)
 | 
						|
  else
 | 
						|
    printf(STDERR, "Birthday                      (YYYYMMDD) : ")
 | 
						|
    if (si = STDIN.gets.chop) != ""
 | 
						|
      bd = Date.new(si)
 | 
						|
    end
 | 
						|
  end
 | 
						|
  if !bd
 | 
						|
    printf STDERR, "BAD Input Birthday!!\n"
 | 
						|
    exit()
 | 
						|
  end
 | 
						|
  
 | 
						|
  if $OPT_sdate
 | 
						|
    dd = Date.new(Time.now.strftime("%Y%m%d"))
 | 
						|
  elsif $OPT_date
 | 
						|
    dd = Date.new($OPT_date)
 | 
						|
  else
 | 
						|
    printf(STDERR, "Date        [<RETURN> for Systemdate] (YYYYMMDD) : ")
 | 
						|
    if (si = STDIN.gets.chop) != ""
 | 
						|
      dd = Date.new(si)
 | 
						|
    end
 | 
						|
  end
 | 
						|
  if !dd
 | 
						|
    dd = Date.new(Time.now.strftime("%Y%m%d"))
 | 
						|
  end
 | 
						|
 | 
						|
  if $OPT_v
 | 
						|
    ausgabeart = "v"
 | 
						|
  elsif $OPT_g
 | 
						|
    ausgabeart = "g"
 | 
						|
  else
 | 
						|
    printf(STDERR, "Values for today or Graph  (v/g) [default g] : ")
 | 
						|
    ausgabeart = STDIN.gets.chop
 | 
						|
  end
 | 
						|
end
 | 
						|
if (ausgabeart == "v")
 | 
						|
  printHeader(bd.year, bd.month, bd.day, dd.period - bd.period, bd.name_of_week)
 | 
						|
  print "\n"
 | 
						|
  
 | 
						|
  phys, emot, geist = getPosition(dd.period - bd.period)
 | 
						|
  printf "Biorhythm:   %04d.%02d.%02d\n", dd.year, dd.month, dd.day
 | 
						|
  printf "Physical:    %d%%\n", phys
 | 
						|
  printf "Emotional:   %d%%\n", emot
 | 
						|
  printf "Mental:      %d%%\n", geist
 | 
						|
  print "\n"
 | 
						|
else
 | 
						|
  if $OPT_days
 | 
						|
    display_period = $OPT_days.to_i
 | 
						|
  elsif $OPT_D
 | 
						|
    display_period = 9
 | 
						|
  else
 | 
						|
    printf(STDERR, "Graph for how many days     [default 10] : ")
 | 
						|
    display_period = STDIN.gets.chop
 | 
						|
    if (display_period == "")
 | 
						|
      display_period = 9
 | 
						|
    else
 | 
						|
      display_period = display_period.to_i - 1
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  printHeader(bd.year, bd.month, bd.day, dd.period - bd.period, bd.name_of_week)
 | 
						|
  print "                     P=physical, E=emotional, M=mental\n"
 | 
						|
  print "             -------------------------+-------------------------\n"
 | 
						|
  print "                     Bad Condition    |    Good Condition\n"
 | 
						|
  print "             -------------------------+-------------------------\n"
 | 
						|
  
 | 
						|
  for z in (dd.period - bd.period)..(dd.period - bd.period + display_period)
 | 
						|
    phys, emot, geist = getPosition(z)
 | 
						|
    
 | 
						|
    printf "%04d.%02d.%02d : ", dd.year, dd.month, dd.day
 | 
						|
    p = (phys / 2.0 + 0.5).to_i
 | 
						|
    e = (emot / 2.0 + 0.5).to_i
 | 
						|
    g = (geist / 2.0 + 0.5).to_i
 | 
						|
    graph = "." * 51
 | 
						|
    graph[25] = ?|
 | 
						|
    graph[p] = ?P
 | 
						|
    graph[e] = ?E
 | 
						|
    graph[g] = ?M
 | 
						|
    print graph, "\n"
 | 
						|
    dd = dd + 1
 | 
						|
  end
 | 
						|
  print "             -------------------------+-------------------------\n\n"
 | 
						|
end
 |