0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【自分用】ピカソの洗礼名を覚える為のタイムアタックプログラムと、作って学んだことをメモ

Last updated at Posted at 2020-03-13

コード

picass.rb
require 'date'

class Array
  def average
  self.inject(:+) / self.length
  end
end

christian_name = "パブロ・ディエゴ・ホセ・フランシスコ・デ・パウラ・ファン・ネポムセーノ・マリア・デ・ロス・レメディオス・クリスピン・クリスピアーノ・デ・ラ・サンティシマ・トリニダード・ルイス・イ・ピカソ"

num = 1
results = []
while num <= 10 do
  puts "#{num}回目:ピカソのフルネームを入力してください"
  started_at = Time.now
  christian_name_input = gets
  while christian_name_input.chomp != christian_name do
    puts "#{num}回目:間違ってます!きちんとピカソのフルネームを入力してください!"
    christian_name_input = gets
  end
  finished_at = Time.now
  puts "#{(finished_at - started_at).round(2)}"
  results.push((finished_at - started_at).round(2))
  num+=1
end
puts "---結果------------------"
results.each_with_index do |result, i|
  puts "#{i+1}回目:#{result}秒"
end
average = results.average
puts "平均入力時間:#{average.round(2)}秒"
puts ""
puts "あの世のパブロからのコメント"
if average > 20
  puts "「ナニ サイゴマデ ヤッテンダヨ。 ヒマカヨ、、」"
elsif average <= 20 && average >= 10
  puts "「アンタ ダイブキモチワルイネ、、」"
elsif average <= 10
  puts "「コピペデショ?、、チガウノ?ヒエッ、、」"
else
  puts "「ナニカガ オカシイ」"
end
puts "------------------------"

書いて学んだこと

既存のクラスを任意の場所で開いて、メソッドの追加や修正が自由に行えます。
オープンクラスといいます。

class Array
  def average
  self.inject(:+) / self.lengt
  end
end

それから、Arrayクラスのinjectメソッドは、演算子をsymbolで渡すことができます。
こんな感じでスッキリ書けます。
self.inject(:+) #全部足す

getsでキーボードから入力した値には改行が入ってきますが、chompで消せる。
また、数字を入力しても数値ではなく文字列として入ってくるので注意。

  picass_input = gets
  while picass_input.chomp != picass_fullname do
    puts "#{num}回目:間違ってます!きちんとピカソのフルネームを入力してください!"
    picass_input = gets
  end

何らかの日時を代入する変数名を、今まではfinish_timeみたいにしてたが、finished_atのようにした方がかっこいい。
あと標準出力用のメソッドは色々あります。
[参考]https://qiita.com/naoge/items/f5d84581d3a301a9c22f

  finished_at = Time.now # finish_timeはダサい
  puts "#{(finished_at - started_at).round(2)}"

switch文のwhen節の条件を範囲にしたい場合は、こんな感じで範囲オブジェクトが使える。

score = 65
case score
when 0..59
  puts "C"
when 60..79
  puts "B"
else
  puts "A"
end # B

今回は小数が入ってくるので、仕方なく関係演算子を使った。
(59.01だとelseに入ってしまうので)

if average > 20
  puts "「ナニ サイゴマデ ヤッテンダヨ。 ヒマカヨ、、」"
elsif average <= 20 && average >= 10
  puts "「アンタ ダイブキモチワルイネ、、」"
elsif average <= 10
  puts "「コピペデショ?、、チガウノ?ヒエッ、、」"
else
  puts "「ナニカガ オカシイ」"
end
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?