Just do IT

思うは招く

【Ruby】ある文章にアルファベットがすべて含まれているかどうかを判定する方法

Exercismの問題を解いた。

問題

Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma, "every letter") is a sentence using every letter of the alphabet at least once. The best known English pangram is:

The quick brown fox jumps over the lazy dog.

The alphabet used consists of ASCII letters a to z, inclusive, and is case insensitive. Input will not contain non-ASCII symbols.

問題の要約:

  • ある文章がパングラムかどうか判定せよ
  • パングラムとは、すべてのアルファベットが最低でも1回は使われている文章のことである
  • 例:「The quick brown fox jumps over the lazy dog」

解答

class Pangram
  ALPHABET = ('a'..'z')

  def self.pangram?(sentence)
    ALPHABET.all? { |x| sentence.downcase.chars.include?(x) }
  end
end

all?include?で似たようなロジックに応用できそう。

【Ruby】配列の要素をチェックするメソッドをサンプル付きでまとめる

Ruby(またはRails)で「配列の中に特定の要素を含むかどうか」を知りたいときは多々ある。そんなときに使える主なメソッドをまとめた。

※Enumerableモジュールのものは配列だけではなくハッシュでも使えます。

include?「これ入ってる?」

配列が引数と==で等しい要素を持つときにtrueを返す。「これ入ってる?」みたいな感じ。

Array#include? (Ruby 3.1 リファレンスマニュアル)

data = %w[jayson james gill]

# jaysonっている?
>  data.include? 'jayson'
=> true

# thomasっている?
> data.include? 'thomas'
=> false

any?:「ひとつでもそうだよね?」

配列の要素でどれか1つでも真ならtrueを返す。「どれかひとつでもそうだよね?」みたいな感じ。

Enumerable#any? (Ruby 3.1 リファレンスマニュアル)

data = %w[jayson james gill]

> data.any? 'jayson'
=> true

# 名前がjから始まる人、最低一人はいるよね?
> data.any? { |name| name.start_with?('j')}
=> true #うん、いるよ

# 名前がjで終わる人、最低一人はいるよね?
> data.any? { |name| name.end_with?('j')}
=> false #いねーよ

all?「ぜんぶそうだよね?」

配列の要素すべてが真になるときにtrueを返す。ひとつでも偽ならfalseを返す。「すべてがそうだよね?」みたいな感じ。

Enumerable#all? (Ruby 3.1 リファレンスマニュアル)

data = [1, 2, 3]

# すべてIntegerだよね?
> data.all?(Integer)
=> true #うん、ぜんぶそうだよ

# すべて偶数だよね?
> data.all? { |num| num.even? }
=> false #いや、ちげーよ

none?「ひとつもないよね?」

配列の要素すべてが偽のときにtrueを返す。「ひとつもないよね?」みたいな感じ。

Enumerable#none? (Ruby 3.1 リファレンスマニュアル)

> data = %w[aaa bbb ccc]

# 'ddd'なんてひとつもないよね?
> data.none? 'ddd'
=> true #うん、ないよ

# wordの長さが1のものなんてないよね?
> data.none? { |word| word.size == 1 }
=> true #うん、ないよ

one?「ひとつだけだよね?」

配列の要素に真のものが1つだけあったときにtrueを返す。「ひとつだけだよね?」みたいな感じ。

Enumerable#one? (Ruby 3.1 リファレンスマニュアル)

data = %w[jayson james gill james]

# jaysonはひとつだけなのでtrue
> data.one? 'jayson'
=> true

# jamesは2つあるのでfalse
> data.one? 'james'
=> false

# gから始まる名前の人は一人だよね?
> data.one? { |name| name.start_with?('g') }
=> true #うん、そうだよ

# jで始まる名前の人は一人だよね?
> data.one? { |name| name.start_with?('j') }
=> false #いや、ちげーよ(3人いるよ)

【読書感想】1440分の使い方

1日を分で表すと1440分。「1440分の使い方」は、時間をいかに効率的に使うかというテーマの本です。我が家には2人のわんぱくな子どもがいるため、「時間のなさ」は日々痛感している…。この記事では、本のなかで印象に残った内容を列挙していきます。

  • TODOリストは使わない
    • 結局忘れ去られるため
    • 結局終わらないことが多い
  • TODOはスケジュール表に時間を書き込む(タイムブロックする)
    • 12時〜13時まではジム、14時〜16時までは企画作成など
  • マルチタスクはしない
  • メモを常に持ち歩く
    • スマホのメモではなく、なるべく手書きのメモを使う
    • 手書きのほうが頭を使うため
    • 勉強や会議にも手書きメモを使うことで頭に残りやすくなる
  • 常にノートを携帯し、覚えておきたことはすべて書き留める
    • TODOはスケジュール表になるべく早く書き込む
  • 早起きする
    • 早朝なら誰にも邪魔されにくい
    • 朝一番でニュースチェックしたり、スマホSNSを見たりは絶対にしてはいけない
    • 読書や勉強をして自分のために使う
    • ウォーキングや筋トレなど運動もするのがよい

一度しか触らないルール

  • 時間を決めて一気に片付ける
    • 郵便物をチェックするなら一度にまとめてチェックする
    • 9時から30分をメール返信に費やすなど

多く休憩する

  • 生産性の高さを調べる実験で上位10%に入る社員は他と比べて長く働いているわけではないことがわかった
  • むしろ長い休憩をとっていた
    • 平均で「52分仕事・17分休憩」をしていた
  • ポモドーロテクニックを使うのもいいが、自分に合った集中・休憩時間を見つけること
    • 25分・5分にこだわらなくてもいい
    • 45分・15分でもいい
    • 大事なのは自分に最も合ったサイクルを見つけること
  • 何をするにもタイマーをセットする
  • 睡眠を十分にとる
  • 栄養価の高い食品を食べて運動を欠かさない

感想

僕は通常は週4〜5日、最低でも週3日はジムで筋トレをしているので、運動不足にはならない。むしろ休息を取らないといけないと思うことがしばしばある…。ちょくちょく散歩にも行くので、運動不足の心配は死ぬまでしないと思う。

改善の必要があるのは睡眠だ。寝る前にどうしてもYoutubeを見てしまって、目が冴えて寝付きが悪くなることが頻繁にある。これは止めたい習慣なんだけど、どうしたらいいのものか…。