Skip to content

Instantly share code, notes, and snippets.

@gotagotagoat
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gotagotagoat/9641289 to your computer and use it in GitHub Desktop.
Save gotagotagoat/9641289 to your computer and use it in GitHub Desktop.
[プログラミング入門 - Rubyを使って](http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/) の私的解答
# coding : utf-8
# 1年は何時間でしょうか?
puts 365 * 24
# 10年間は何分でしょうか?
puts 365 * 10 * 24 * 60
# あなたが生まれてから今日まで何秒たっているでしょうか?
now = Time.now
bd = Time.new(777, 7, 7)
puts (now - bd).to_i
# 私が生まれてから10億3400万秒 たっているとしたら、私は今何歳でしょう?
puts 1034000000 / 60 / 60 / 24 / 365
# coding : utf-8
puts "性は?"
sei = gets.chomp
puts "名は?"
na = gets.chomp
puts "こんにちは。 " + sei.to_s + " " + na.to_s + " さん。"
# coding : utf-8
puts "好きな数字は?"
number = gets.chomp.to_i
puts (number + 1).to_s + "をおすすめします。"
# coding: utf-8
puts "なにが望みだ"
command = gets.chomp
puts "なにぃ? " + command.to_s + " だとー!! おまえは首だ!!"
# coding: utf-8
lineWidth = 40
puts "目 次".center(lineWidth)
puts
puts "1章: 数".ljust(lineWidth/2) + "p. 1".rjust(lineWidth/2)
puts "2章: 文字".ljust(lineWidth/2) + "p. 72".rjust(lineWidth/2)
puts "3章: 変数".ljust(lineWidth/2) + "p. 118".rjust(lineWidth/2)
# coding: utf-8
bottles = 99
while bottles != 0
puts bottles.to_s + "Bottles of beer on the wall"
puts bottles.to_s + "Bottles of beer"
puts "Take one down and pass it around"
bottles -= 1
puts bottles.to_s + "Bottles of beer on the wall"
puts
end
# coding: utf-8
said = gets.chomp
while said != "BYE"
while said != said.upcase or said == ""
puts "は?! もっと大きな声で話しておくれ、坊や!"
said = gets.chomp
end
while said == said.upcase and said != "BYE" and said != ""
year = rand(20) + 1930
puts "いやー、" + year.to_s + "年以来ないねー!"
said = gets.chomp
end
end
# coding: utf-8
bbamemory = 0
said = gets.chomp
while bbamemory != 2
while bbamemory == 0
while said != said.upcase or said == ""
puts "は?! もっと大きな声で話しておくれ、坊や!"
said = gets.chomp
while said == said.upcase and said != "BYE" and said != ""
year = rand(20) + 1930
puts "いやー、" + year.to_s + "年以来ないねー!"
said = gets.chomp
end
end
if said == "BYE"
puts "なんだって?"
said = gets.chomp
if said == "BYE"
bbamemory += 1
else
bbamemory = 0
end
end
while bbamemory == 1
puts "え?なんだって???"
said = gets.chomp
if said == "BYE"
bbamemory += 1
else
bbamemory = 0
end
end
end
end
# coding: utf-8
bbamemory = 0
said = ""
while bbamemory != 3
while bbamemory == 0
puts "なんだって?"
said = gets.chomp
if said == "BYE"
bbamemory += 1
else
bbamemory = 0
end
while bbamemory == 1
puts "え?なんだって???"
said = gets.chomp
if said == "BYE"
bbamemory += 1
else
bbamemory = 0
end
while bbamemory == 2
puts "ああああああああああ"
said = gets.chomp
if said == "BYE"
bbamemory += 1
else
bbamemory = 0
end
end
end
end
end
# coding: utf-8
puts "開始の年は?"
startYear = gets.to_i
puts "終わりの年は?"
finishYear = gets.to_i
puts "うるう年一覧"
for num in startYear..finishYear
x = num % 4
y = num % 100
z = num % 400
if x == 0 and y != 0
puts num
end
if z == 0
puts num
end
end
# coding: utf-8
puts "開始の年は?"
startYear = gets.to_i
puts "終わりの年は?"
finishYear = gets.to_i
puts "うるう年一覧"
startYear += 4 - startYear % 4 if startYear % 4 != 0
while startYear <= finishYear
if startYear % 100 != 0 or startYear % 400 == 0
puts startYear
end
startYear += 4
end
# coding: utf-8
word = []
newWord =
puts "好きな言葉を入力してね。終了するには何も入力しないでReturnを押してね。"
while newWord != ""
newWord = gets.chomp
word << newWord
end
puts "あなたの好きな言葉をアルファベット順に並べるよ"
puts word.sort
# coding: utf-8
lineWidth = 40
mokuji = ["目 次".center(lineWidth), "1章: 数".ljust(lineWidth/2) + "p. 1".rjust(lineWidth/2), "2章: 文字".ljust(lineWidth/2) + "p. 72".rjust(lineWidth/2), "3章: 変数".ljust(lineWidth/2) + "p. 118".rjust(lineWidth/2)]
puts mokuji
#coding: utf-8
def englishNumber number
if number < 0
return '負でない数を入力してください.'
end
if number == 0
return 'zero'
end
numString = ''
onesPlace = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
tensPlace = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
# start 1000
left = number
write = left/1000
left = left - write*1000
if write > 0
thousands = englishNumber write
numString = numString + thousands + ' thousand'
if left > 0
numString = numString + ' '
end
end
# end 1000
# start 100
write = left/100
left = left - write*100
if write > 0
hundreds = englishNumber write
numString = numString + hundreds + ' hundred'
if left > 0
numString = numString + ' '
end
end
# end 100
# start 10
write = left/10
left = left - write*10
if write > 0
if ((write == 1) and (left > 0))
numString = numString + teenagers[left-1]
left = 0
else
numString = numString + tensPlace[write-1]
end
if left > 0
numString = numString + '-'
end
end
# end 10
# start 1
write = left
left = 0
if write > 0
numString = numString + onesPlace[write-1]
end
# end 1
numString
end
puts englishNumber( 0)
puts englishNumber( 10)
puts englishNumber( 11)
puts englishNumber(100)
puts englishNumber(101)
puts englishNumber(234)
puts englishNumber(1000)
puts englishNumber(3211)
puts englishNumber(5268)
puts englishNumber(1000000)
puts englishNumber(1001000)
#coding: utf-8
def englishNumber number
if number < 0
return '負でない数を入力してください.'
end
if number == 0
return 'zero'
end
numString = ''
onesPlace = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
tensPlace = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
# 増やしたい任意の桁を大きい順に配列に入れる
numPlace = [1000000000000, 1000000000, 1000000, 1000, 100]
numPlaceWords = [' trillion', ' billion', ' million', ' thousand', ' hundred']
# start over 100
left = number
counter = 0
length = numPlace.length - 1
for counter in 0..length
write = left / numPlace[counter]
left = left - write * numPlace[counter]
if write > 0
containner = englishNumber write
numString = numString + containner + numPlaceWords[counter]
if left > 0
numString = numString + ' '
end
end
end
# end over 100
# start 10
write = left/10
left = left - write*10
if write > 0
if ((write == 1) and (left > 0))
numString = numString + teenagers[left-1]
left = 0
else
numString = numString + tensPlace[write-1]
end
if left > 0
numString = numString + '-'
end
end
# end 10
# start 1
write = left
left = 0
if write > 0
numString = numString + onesPlace[write-1]
end
# end 1
numString
end
puts englishNumber( 0)
puts englishNumber( 9)
puts englishNumber( 10)
puts englishNumber( 11)
puts englishNumber( 17)
puts englishNumber( 32)
puts englishNumber( 88)
puts englishNumber( 99)
puts englishNumber(100)
puts englishNumber(101)
puts englishNumber(234)
puts englishNumber(3211)
puts englishNumber(999999)
puts englishNumber(1000000000000)
#coding: utf-8
def englishNumber number
if number < 0
return '負でない数を入力してください.'
end
if number == 0
return 'zero'
end
numString = ''
onesPlace = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
tensPlace = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
# 増やしたい任意の桁を大きい順に配列に入れる
numPlace = [1000000000000, 1000000000, 1000000, 1000, 100]
numPlaceWords = [' trillion', ' billion', ' million', ' thousand', ' hundred']
# start over 100
left = number
counter = 0
length = numPlace.length - 1
for counter in 0..length
write = left / numPlace[counter]
left = left - write * numPlace[counter]
if write > 0
containner = englishNumber write
numString = numString + containner + numPlaceWords[counter]
if left > 0
numString = numString + ' and '
end
end
end
# end over 100
# start 10
write = left/10
left = left - write*10
if write > 0
if ((write == 1) and (left > 0))
numString = numString + teenagers[left-1]
left = 0
else
numString = numString + tensPlace[write-1]
end
if left > 0
numString = numString + ' and '
end
end
# end 10
# start 1
write = left
left = 0
if write > 0
numString = numString + onesPlace[write-1]
end
# end 1
numString
end
puts englishNumber( 0)
puts englishNumber( 9)
puts englishNumber( 10)
puts englishNumber( 11)
puts englishNumber( 17)
puts englishNumber( 32)
puts englishNumber( 88)
puts englishNumber( 99)
puts englishNumber(100)
puts englishNumber(101)
puts englishNumber(234)
puts englishNumber(3211)
puts englishNumber(999999)
puts englishNumber(1000000000000)
#coding: utf-8
def englishNumber number
if number < 0
return '負でない数を入力してください.'
end
if number == 0
return 'zero'
end
numString = ''
onesPlace = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
tensPlace = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
# 増やしたい任意の桁を大きい順に配列に入れる
numPlace = [1000000000000, 1000000000, 1000000, 1000, 100]
numPlaceWords = [' trillion', ' billion', ' million', ' thousand', ' hundred']
# start over 100
left = number
counter = 0
length = numPlace.length - 1
for counter in 0..length
write = left / numPlace[counter]
left = left - write * numPlace[counter]
if write > 0
containner = englishNumber write
numString = numString + containner + numPlaceWords[counter]
if left > 0
numString = numString + ' '
end
end
end
# end over 100
# start 10
write = left/10
left = left - write*10
if write > 0
if ((write == 1) and (left > 0))
numString = numString + teenagers[left-1]
left = 0
else
numString = numString + tensPlace[write-1]
end
if left > 0
numString = numString + '-'
end
end
# end 10
# start 1
write = left
left = 0
if write > 0
numString = numString + onesPlace[write-1]
end
# end 1
numString
end
def beer beerNumber
num = englishNumber beerNumber
while beerNumber != 0
puts num.to_s + " Bottles of beer on the wall"
puts num.to_s + " Bottles of beer"
puts "Take one down and pass it around"
beerNumber -= 1
num = englishNumber beerNumber
puts num.to_s + " Bottles of beer on the wall"
puts
end
end
beer 1000
# coding: utf-8
require 'date'
myBD = Time.new(777, 07, 07, 07, 07, 07) + 1000000000
puts myBD
# coding : utf-8
puts "生まれた年は?"
year = gets.chomp.to_i
puts "生まれた月は?"
month = gets.chomp.to_i
puts "生まれた日は?"
day = gets.chomp.to_i
bd = Time.mktime(year, month, day)
now = Time.now
old = (now - bd) / 31556926 # 一年の正確な秒数
year += 1
cnt = 0
while cnt < old.to_i
puts year.to_s + "年" + month.to_s + "月" + day.to_s + "日 誕生日おめでとう!"
year += 1
cnt += 1
end
# coding : utf-8
class OrangeTree
def initialize
@height = rand(50) + 50
@time = 0
@oranges = 0
end
def checkHeight
if @time != 0
puts @time.to_s + "年経ちました。"
else
puts "木が生えました"
end
puts "現在、オレンジの木は" + @height.to_s + "cmです。"
end
def oneYearPasses
@time += 1
@oranges = 0
@height = @height + rand(100) + 50
dead
end
def countTheOranges
if @time > 3 and @time < 5
@oranges = rand(10) + 1
puts @oranges.to_s + "個のオレンジが生っています。"
end
if @time > 5 and @time < 9
@oranges = rand(10) + 5
puts @oranges.to_s + "個のオレンジが生っています。"
end
if @time == 10
@oranges = rand(10) + 10
puts @oranges.to_s + "個のオレンジが生っています。"
end
end
def pichAnOrange
if @oranges != 0
puts "オレンジを1つ摘みました。"
@oranges -= 1
puts "とてもおいしゅうございました。"
end
if @oranges == 0
puts "オレンジはないよ!"
end
end
private
def dead
if @time == 11
puts "木は死んでしまいました。"
exit
end
end
end
orange = OrangeTree.new
orange.checkHeight
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
orange.oneYearPasses
orange.checkHeight
orange.countTheOranges
orange.pichAnOrange
#coding : utf-8
class Dragon
def talk
while @program != 0
puts @name + " に対する指示を数字で入力してください。\n1:feed , 2:walk , 3:putToBed , 4:toss , 5:rock"
command = gets.chomp.to_i
if command == 1
feed
elsif command == 2
walk
elsif command == 3
putToBed
elsif command == 4
toss
elsif command == 5
rock
end
end
end
def initialize name
@name = name
@asleep = false
@stuffInBelly = 10
@stuffInIntestine = 0
puts @name + ' は生まれました.'
@program = 1
end
def feed
puts 'あなたは ' + @name + 'に食べ物を与えます.'
@stuffInBelly = 10
passageOfTime
end
def walk
puts 'あなたは ' + @name + 'をトイレに連れて行きます.'
@stuffInIntestine = 0
passageOfTime
end
def putToBed
puts 'あなたは ' + @name + ' を寝かしつけます.'
@asleep = true
3.times do
if @asleep
passageOfTime
end
if @asleep
puts @name + ' はいびきをかいて, 部屋中煙だらけ.'
end
end
if @asleep
@asleep = false
puts @name + ' はゆっくり目を覚ます.'
end
end
def toss
puts 'あなたは ' + @name + ' を空中に投げ上げます.'
puts '彼はキャハキャハ笑い, あなたの眉毛は焼け焦げた.'
passageOfTime
end
def rock
puts 'あなたは ' + @name + ' を優しく揺すります.'
@asleep = true
puts '彼は短くうとうと...'
passageOfTime
if @asleep
@asleep = false
puts '...でもやめるとすぐ起きちゃう.'
end
end
private
def hungry?
# メソッドの名前は"?"で終わることができます。
# 通常、メソッドがtrueかfalseのどちらかを返すときだけ、
# この名前を使います。このように:
@stuffInBelly <= 2
end
def poopy?
#うんちが出そう?
@stuffInIntestine >= 8
end
def passageOfTime
if @stuffInBelly > 0
# 食べたものは、胃から腸へ移動
@stuffInBelly = @stuffInBelly - 1
@stuffInIntestine = @stuffInIntestine + 1
else # 私たちのドラゴンは飢えました!
if @asleep
@asleep = false
puts '彼は突然跳び起きます!'
end
puts @name + ' は飢え死にしそう! 死に物狂いの彼は"あなた"を食べてしまいました!'
@program = 0
exit # プログラムを終了します。
end
if @stuffInIntestine >= 10
@stuffInIntestine = 0
puts 'おっと! ' + @name + ' はやっちゃったようです...'
end
if hungry?
if @asleep
@asleep = false
puts '彼は突然起きます!'
end
puts @name + 'のおなかはゴロゴロ言ってます...'
end
if poopy?
if @asleep
@asleep = false
puts '彼は突然起きます!'
end
puts @name + ' はうんちをしたくて踊っています...'
end
end
end
pet = Dragon.new 'Norbert'
pet.talk
# coding : utf-8
def gfClock &block
cnt = 0
now = Time.now.hour
if now <= 12
now += 1
end
if now >= 13
now -= 12
end
while cnt != now # now回処理を繰り返す
block.call
cnt += 1
end
end
gfClock do
puts 'DONG!'
end
# coding : utf-8
def log description, &block
puts '開始 "' + description.to_s + 'ブロック"...'
puts '..."' + description.to_s + 'ブロック"終了, 返り値は: ' + block.call.to_s
end
log '外' do
log 'ある小さな' do
5
end
log 'もうひとつの' do
'I like Thai food!'
end
false
end
# coding : utf-8
def log description, &block
$nestingDepth = " " * $nestingDepth.to_i
puts $nestingDepth.to_s + '開始 "' + description.to_s + 'ブロック"...'
puts $nestingDepth.to_s + '..."' + description.to_s + 'ブロック"終了, 返り値は: ' + block.call.to_s
end
log '外' do
$nestingDepth = 1
log 'ある小さな' do
$nestingDepth = 2
log 'ちっちゃな' do
'lots of love'
end
42
end
$nestingDepth = 1
log 'もうひとつの' do
'I love Indian food!'
end
true
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment