-
-
Save nomnel/5184600 to your computer and use it in GitHub Desktop.
[プログラミング入門 - Rubyを使って -](http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/)の練習問題
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
puts "1年は#{365 * 24}時間です" | |
puts "10年間は#{60 * 24 * 365 * 10}分です" | |
puts "生まれてから#{Time.new - Time.mktime(1986, 1, 1)}秒経っている" | |
puts "80年生きるとして、#{(80 * 365) / 7}枚ぐらいかな" | |
puts "10億3400万秒生きてるとしたら#{1034000000 / 60 / 60 / 24 / 365}歳" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# おじいさんの時計 | |
def grandfathersClock | |
h = Time.now.hour % 12 | |
h = 12 if h.zero? | |
h.times{yield} | |
end | |
# プログラムロガー | |
def log(description) | |
puts "開始 \"#{description}\"..." | |
ret = yield | |
puts "...\"#{description}\" 終了, 返り値は: #{ret}" | |
end | |
# プログラムロガー改良版 | |
$nestingDepth = 0 | |
def log_improved(description) | |
indent = " " * $nestingDepth | |
$nestingDepth += 1 | |
puts "#{indent}開始 \"#{description}\"..." | |
ret = yield | |
puts "#{indent}...\"#{description}\" 終了, 返り値は: #{ret}" | |
$nestingDepth -= 1 | |
ret | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# フルネームで挨拶 | |
puts '姓入力して' | |
last_name = gets.chomp | |
puts '名入力して' | |
first_name = gets.chomp | |
puts "こんにちは、#{first_name + ' ' + last_name}" | |
# ベターな数字 | |
puts '好きな数は?' | |
ans = gets.chomp.to_i | |
puts "それより#{ans + 1}のがよくない?" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 怒ったボス | |
puts '何が望みだ?' | |
ans = gets.chomp | |
puts "なにぃ、\"#{ans}\"だとー!!おまえは首だ!!" | |
# 目次 | |
linewidth = 60 | |
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 99 Bottles of Beer on the Wall | |
def pluralize(n, singular) | |
n == 1 ? singular : singular + 's' | |
end | |
99.downto(1).each{|i| | |
puts "#{i} #{pluralize(i, 'bottle')} of beer on the wall" | |
puts "#{i} #{pluralize(i, 'bottle')} of beer" | |
puts "Take one down and pass it around" | |
puts "#{i - 1} #{pluralize(i-1, 'bottle')} of beer on the wall" | |
puts '' | |
} | |
# 耳の遠いおばあちゃん | |
puts 'なんじゃ?' | |
while true | |
ans = gets.chomp | |
if ans == ans.upcase | |
break if ans == 'BYE' | |
puts "いやー、#{1930 + rand(21)}年以来ないねー!" | |
else | |
puts 'は?! もっと大きな声で話しておくれ、坊や!' | |
end | |
end | |
puts 'じゃあの' | |
# さみしがりやの耳の遠いおばあちゃん | |
def gramma(bye_count) | |
return if bye_count >= 3 | |
ans = gets.chomp | |
if ans == ans.upcase | |
if ans == 'BYE' | |
gramma(bye_count + 1) | |
else | |
puts "いやー、#{1930 + rand(21)}年以来ないねー!" | |
gramma(0) | |
end | |
else | |
puts 'は?! もっと大きな声で話しておくれ、坊や!' | |
gramma(0) | |
end | |
end | |
puts 'なんじゃ?' | |
gramma(0) | |
puts 'じゃあの' | |
# うるう年 | |
def leap_year?(year) | |
((year % 400).zero?) || ((year % 4).zero? && (not ((year % 100).zero?))) | |
end | |
puts '開始は?' | |
start_year = gets.chomp.to_i | |
puts '終わりは?' | |
end_year = gets.chomp.to_i | |
(start_year..end_year).select{|y| leap_year? y}.each{|y| puts y} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 入力された値をアルファベット順に並べ替えて出力する | |
ary = [] | |
while true | |
elem = gets.chomp | |
break if elem == '' | |
ary << elem | |
end | |
ary.sort.each{|e| puts e} | |
# 目次を表示するプログラム配列版 | |
linewidth = 60 | |
puts '目次'.center linewidth | |
content = [['1章: 数', 'p. 1'], ['2章: 文字', 'p. 72'], ['3章: 変数', 'p. 118']] | |
content.each{|a| puts a[0].ljust(linewidth/2) + a[1].rjust(linewidth/2)} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# thousand, million, billion, trillion追加済み拡張版 | |
def englishNumber(number) | |
return '負でない数を入力してください.' if number < 0 | |
return 'zero' if number == 0 | |
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'] | |
left = number | |
# 単位(?)の追加はここに | |
[["trillion", 1000000000000], | |
["billion", 1000000000], | |
["million", 1000000], | |
["thousand", 1000]].each{|a| | |
key, value = a[0], a[1] | |
write = left / value | |
left = left - (write * value) | |
if write > 0 | |
num = englishNumber(write) | |
numString = numString + num + ' ' + key | |
if left > 0 | |
numString = numString + ' ' | |
end | |
end | |
} | |
write = left / 100 | |
left = left - (write * 100) | |
if write > 0 | |
numString = numString + onesPlace[write-1] + ' hundred' | |
if left > 0 | |
numString = numString + ' ' | |
end | |
end | |
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 | |
write = left | |
left = 0 | |
if write > 0 | |
numString = numString + onesPlace[write-1] | |
end | |
numString | |
end | |
# weddigNumberは略 | |
# ninety-nine Bottles of Beer on the Wall | |
def pluralize(n, singular) | |
n == 1 ? singular : singular + 's' | |
end | |
99.downto(1).each{|i| | |
eng_num = englishNumber(i) | |
puts "#{eng_num} #{pluralize(i, 'bottle')} of beer on the wall" | |
puts "#{eng_num} #{pluralize(i, 'bottle')} of beer" | |
puts "Take one down and pass it around" | |
puts "#{englishNumber(i-1)} #{pluralize(i-1, 'bottle')} of beer on the wall" | |
puts '' | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
y, m, d = 1986, 1, 1 | |
# いつ10億秒歳になるか | |
puts Time.mktime(y, m, d) + 1000000000 | |
# 今何歳か | |
puts "今#{((Time.new - Time.mktime(y, m, d)) / (60 * 60 * 24 * 365.25)).to_i}歳ぐらい" | |
# OrangeTreeクラス | |
class OrangeTree | |
def initialize | |
@height = 1 | |
@orangeCount = 0 | |
@dead = false | |
@age = 0 | |
end | |
def height | |
puts "#{@height}メートル" | |
end | |
def oneYearPasses | |
if @dead | |
puts "枯れちゃってるので何もないよ" | |
return | |
end | |
@orangeCount = 0 | |
@age += 1 | |
if die? | |
@dead = true | |
else | |
grow | |
produce if grown? | |
end | |
end | |
def countTheOranges | |
"#{@orangeCount}個の実が成っている" | |
end | |
def pichAnOrange | |
if @orangeCount > 0 | |
@orangeCount -= 1 | |
puts "おいしー" | |
else | |
puts "実が無いよー" | |
end | |
end | |
private | |
def die? | |
@age > 10 | |
end | |
def grown? | |
@age > 3 | |
end | |
def grow | |
@height += 1 | |
end | |
def produce | |
@orangeCount = @age | |
end | |
end | |
# 赤ちゃんドラゴンと会話(Dragonの定義は省略) | |
norbert = Dragon.new('Norbert') | |
while true | |
mname = gets.chomp | |
if mnaem == "exit" | |
exit | |
elsif ["feed", "walk", "putToBed", "toss", "rock"].find{|s| s == mname} | |
norbert.method(mname).call | |
else | |
puts "そんなメソッドは無い" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment