39
24

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 5 years have passed since last update.

Ruby でモルダー、あなた疲れてるのよを出力する方法

Last updated at Posted at 2016-03-28

まえがき

Ruby を仕事で使う上で、「モルダー、あなた疲れてるのよ」を出力したり、出力しなかったりしたいことはままあります。

そこで今回は「モルダー、あなた疲れてるのよ」を出力したり、出力しなかったりします。

本文

コード

def mulder
  %w[モルダー あなた 疲れてる のよ].shuffle.each_slice(2).map { |ws|
    ws.map { |w|
      w.chars.each_slice((w.size/2.0).ceil).map(&:join)
    }.flatten.tap{ |_|
      break [_[2], _[1], _[0], _[3]] if rand(2) == 0
    }
  }.flatten.insert(2, '、').join
end

loop.with_index(1) do |_, i|
  print "#{i}: "
  puts mulder.tap{ |_|
    exit puts(_).to_i if _ == 'モルダー、あなた疲れてるのよ'
  }
end

実行結果例

1: のよ、あなたモルダー疲れてる
2: のてる、疲れよモルダーあなた
3: のよ、疲れてるあなたモルダー
4: 疲れてる、あなたモルよのダー
5: 疲れダー、モルてるのよあなた
6: モルダー、疲れてるのよあなた
7: モルダー、あなた疲れよのてる
8: モルダー、あなたのてる疲れよ
9: のた、あなよ疲れダーモルてる
10: 疲れた、あなてるのよモルダー
11: のダー、モルよあなた疲れてる
12: あなた、疲れてるモルダーのよ
13: モルダー、疲れてるあなたのよ
14: あなた、疲れてるモルよのダー
15: あなた、モルダーのよ疲れてる
16: モルよ、のダーあなてる疲れた
17: モルダー、のよ疲れたあなてる
18: 疲れてる、モルダーのよあなた
19: 疲れてる、のよモルダーあなた
20: モルダー、あなた疲れよのてる
21: のよ、疲れてるあなダーモルた
22: のてる、疲れよモルダーあなた
23: のてる、疲れよあなダーモルた
24: 疲れてる、のよあなダーモルた
25: のよ、あなた疲れダーモルてる
26: のよ、モルダー疲れてるあなた
27: 疲れた、あなてるのダーモルよ
28: のよ、モルダーあなてる疲れた
29: 疲れダー、モルてるあなたのよ
30: のよ、モルダーあなた疲れてる
31: モルダー、疲れてるのよあなた
32: 疲れよ、のてるモルたあなダー
33: 疲れてる、モルダーのよあなた
34: 疲れた、あなてるのよモルダー
35: 疲れてる、モルダーあなたのよ
36: のダー、モルよ疲れてるあなた
37: モルてる、疲れダーのよあなた
38: 疲れダー、モルてるのたあなよ
39: のダー、モルよ疲れてるあなた
40: あなダー、モルたのよ疲れてる
41: 疲れてる、のよあなたモルダー
42: あなよ、のたモルダー疲れてる
43: あなよ、のたモルてる疲れダー
44: 疲れてる、あなたのダーモルよ
45: あなダー、モルたのよ疲れてる
46: モルダー、疲れてるあなよのた
47: あなてる、疲れたのダーモルよ
48: モルよ、のダーあなた疲れてる
49: 疲れた、あなてるのよモルダー
50: あなた、疲れてるモルよのダー
51: あなダー、モルた疲れよのてる
52: のた、あなよモルダー疲れてる
53: モルてる、疲れダーのよあなた
54: モルダー、あなた疲れてるのよ

ピックアップ

  • 疲れてる、あなたモルよのダー
  • 疲れダー、モルてるのよあなた
  • あなダー、モルたのよ疲れてる
  • モルてる、疲れダーのよあなた
  • 疲れてる、のよあなたモルダー
  • モルダー、疲れてるのよあなた

いいですか?色々なモルダーがあります。色々ありますので、よろしくお願いします。

コード内に出現した Ruby tips

  • percent notation を使うと文字列の配列などをいい感じに生成できます
  • tap はブロック内で break した場合のみ返り値に副作用を起こすことが出来ます
  • Kernel#puts の返り値は nil なので、to_i すると 0 が得られます。これを悪用して exitputs("some str").to_i を渡すと、文字列を出力しつつエラーなしで(exit code を 0 にして)終了することができます

無限ループをして文字列を出力しつつ、特定の文字列が出現した場合は終了するといったコードを書きたい場合、上記 exitlooptap を組み合わせることで短いけど気持ち悪いトリッキーなコードが書けます。おめでとうございます。

おわりに

「モルダー、あなた疲れてるのよ」を出力したり、出力しなかったりすることができました。みなさんも、お使いください。

39
24
1

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
39
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?