まぐげんがーです。

PaizaBINGO Ruby正攻法最短(多分)を書いた

乱択がBANされるという風のうわさを聞いてガチゴルフをしたのですが、結局乱択の人が商品をもらったらしいです

問題

##.
.#.
.##

みたいな形式の3*3ビンゴ表(# -> true, . -> false)のビンゴ数を出力

コード

自力

a=`tr '.#
' 01_`.to_i 2;p [7,56,448,73,146,292,273,84].count{a&_1==_1}

気づかなかったやつ

a=`tr '.#
' 01_`.to_i 2;p [7,56,448,73,146,292,273,84].count{a|_1==a}

解説

a=`tr '.#\n' 01_`.to_i 2

##.
.#.
.##

'110_010_011'.to_i(2)

他:

  • ''の中の改行は'\n'と同じ
  • バッククオートはshell呼び出し、trは置換コマンド
  • to_i(2)の括弧は削れる時がある

    p [7,56,448,73,146,292,273,84].count{a|_1==a}

int count = 0;
for(const auto& _1 : vector<int>{7, 56, 448, 73, 146, 292, 273, 84})if((a | _1) == a)count++;
cout << count << endl;

と同じ

[7,56,448,73,146,292,273,84]

ビンゴである必要条件の#.の並び(例:

#..
.#.
..#

とか

#..
#..
#..

とか)をa=`tr '.#\n' 01_`.to_i 2と同じ方法で10進数の数にして埋め込んだもの