% ruby gen.rb | ruby agari.rb
% ruby gen.rb | ruby agari.rb | grep 'o' -c
=> 13277
| #!/usr/bin/env ruby | |
| def pair7?(pais) | |
| v = pais.values | |
| v.delete(0) | |
| v.count(2) == 7 and v.min == 2 and v.max == 2 | |
| end | |
| def chinitsu?(pais, pairs=4) | |
| v = pais.values | |
| v.delete(0) | |
| return true if v.min == 2 and v.count(2) == 1 and (pairs == 0 or (v.max == 3 and v.count(3) == pairs)) | |
| (1..7).each do |k| | |
| next if pais[k]==0 or pais[k+1]==0 or pais[k+2]==0 | |
| pais_ = pais.clone | |
| pais_[k] -= 1 | |
| pais_[k+1] -= 1 | |
| pais_[k+2] -= 1 | |
| return true if chinitsu?(pais_, pairs-1) | |
| end | |
| return false | |
| end | |
| def agari?(pais) | |
| pair7?(pais) or chinitsu?(pais) | |
| end | |
| ARGF.each do |line| | |
| counts = line.strip!.split(/\s*,\s*/).map{|i| i.to_i} | |
| next if counts.size != 9 or counts.inject{|a,b| a+b} != 14 # 9種、合計14枚 | |
| pais = Hash.new(0) | |
| (1..9).each{|i| | |
| pais[i] = counts[i-1] | |
| } | |
| puts "#{line} " + (agari?(pais) ? 'o' : 'x') | |
| end |
| #!/usr/bin/env ruby | |
| for i in 0..(("4"*9).to_i(5)) | |
| res = i.to_s(5) | |
| if res.split('').map{|j| j.to_i}.inject{|a,b| a+b} == 14 | |
| puts ('0'*(9-res.size)+res).split('').join(',') | |
| end | |
| end |