結果

問題 No.832 麻雀修行中
コンテスト
ユーザー wipex
提出日時 2019-09-28 18:35:19
言語 Ruby
(4.0.2)
コンパイル:
ruby -w -c _filename_
実行:
ruby _filename_
結果
AC  
実行時間 85 ms / 2,000 ms
コード長 629 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 79 ms
コンパイル使用メモリ 9,216 KB
実行使用メモリ 14,976 KB
最終ジャッジ日時 2026-04-19 05:38:40
合計ジャッジ時間 4,861 ms
ジャッジサーバーID
(参考情報)
judge2_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 6
other AC * 25
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.rb:15: warning: ambiguous `*` has been interpreted as an argument prefix
Syntax OK

ソースコード

diff #
raw source code

s = gets.chomp.split("").map(&:to_i).sort

def f(n,g)
  return g.all?{|k, v| v == 0 } if n > 9
  if g[n] == 0
    f(n+1,g)
  else
    (if n <= 7 && g[n] > 0 && g[n+1] > 0 && g[n+2] > 0
     g[n] -= 1;g[n+1] -= 1;g[n+2] -= 1
     f(n,g).tap{ g[n] += 1;g[n+1] += 1;g[n+2] += 1 } end)||
      (if g[n] >= 3;g[n] -= 3;f(n,g).tap{ g[n] += 3 } end )
  end
end

p *(1..9).select{|n|
  a =s+[n]
  h = a.group_by(&:itself).map{|k,v|[k,v.size]}.to_h
  h.default = 0
  next if (1..9).any?{|x| h[x] >4}
  if h.all?{|k,v| v ==2}
    true
  else
    (1..9).any?{|j|
      next if h[j] < 2
      g = h.dup; g[j] -= 2
      f(1,g)
    }
  end
}
0