Created
July 17, 2018 14:12
-
-
Save kunitoo/0cb7b1a57b2475ccd60dd2a38ec6c7aa to your computer and use it in GitHub Desktop.
積み木の水槽 〜 横へな 2013.9.6 の回答 http://nabetani.sakura.ne.jp/hena/ord13blocktup/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'bundler' | |
Bundler.require | |
def solve(input) | |
nums = input.chars.map(&:to_i) | |
width = nums.size | |
hight = nums.max | |
res = width.times.map { Array.new(hight) } | |
fill_block(res, nums) | |
fill_side_blank(res, nums) | |
reverse(res) | |
res = res.transpose | |
# ブロックと必ず水が溜らない箇所 | |
fill(res, nums) | |
res.flatten.count {|r| r == 'w' }.to_s | |
end | |
def fill_block(res, nums) | |
nums.each.with_index do |v, i| | |
if v == 0 | |
res[i].fill('x') | |
else | |
res[i].fill('b', 0...v) | |
end | |
end | |
end | |
def fill_side_blank(res, nums) | |
res[0].fill('x', nums[0]) | |
res[-1].fill('x', nums[-1]) | |
end | |
def reverse(res) | |
res.each do |r| | |
r.reverse! | |
end | |
end | |
def fill(res, nums) | |
res.each do |r| | |
s = {index: nil, kind: nil} | |
r.each.with_index do |v, i| | |
if s[:kind] == 'b' | |
if v == 'b' | |
r.fill('w', s[:index]...i) | |
s[:index] = nil | |
s[:kind] = nil | |
elsif v == 'x' | |
r.fill('x', s[:index]...i) | |
s[:index] = nil | |
s[:kind] = nil | |
end | |
elsif s[:kind] == 'x' | |
if v | |
r.fill('x', s[:index]...i) | |
s[:index] = nil | |
s[:kind] = nil | |
end | |
end | |
if s[:kind] == nil | |
s[:index] = i + 1 | |
s[:kind] = v | |
end | |
end | |
end | |
end | |
TEST_DATA = <<~EOS | |
/*0*/ test( "83141310145169154671122", "24" ); | |
/*6*/ test( "412", "1" ); | |
/*1*/ test( "923111128", "45" ); | |
/*2*/ test( "923101128", "1" ); | |
/*3*/ test( "903111128", "9" ); | |
/*4*/ test( "3", "0" ); | |
/*5*/ test( "31", "0" ); | |
/*7*/ test( "3124", "3" ); | |
/*8*/ test( "11111", "0" ); | |
/*9*/ test( "222111", "0" ); | |
/*10*/ test( "335544", "0" ); | |
/*11*/ test( "1223455321", "0" ); | |
/*12*/ test( "000", "0" ); | |
/*13*/ test( "000100020003121", "1" ); | |
/*14*/ test( "1213141516171819181716151413121", "56" ); | |
/*15*/ test( "712131415161718191817161514131216", "117" ); | |
/*16*/ test( "712131405161718191817161514031216", "64" ); | |
/*17*/ test( "03205301204342100", "1" ); | |
/*18*/ test( "0912830485711120342", "18" ); | |
/*19*/ test( "1113241120998943327631001", "20" ); | |
/*20*/ test( "7688167781598943035023813337019904732", "41" ); | |
/*21*/ test( "2032075902729233234129146823006063388", "79" ); | |
/*22*/ test( "8323636570846582397534533", "44" ); | |
/*23*/ test( "2142555257761672319599209190604843", "41" ); | |
/*24*/ test( "06424633785085474133925235", "51" ); | |
/*25*/ test( "503144400846933212134", "21" ); | |
/*26*/ test( "1204706243676306476295999864", "21" ); | |
/*27*/ test( "050527640248767717738306306596466224", "29" ); | |
/*28*/ test( "5926294098216193922825", "65" ); | |
/*29*/ test( "655589141599534035", "29" ); | |
/*30*/ test( "7411279689677738", "34" ); | |
/*31*/ test( "268131111165754619136819109839402", "102" ); | |
EOS | |
Minitest::Reporters.use!(Minitest::Reporters::ProgressReporter.new) | |
describe 'Doukaku' do | |
def self.test_order; :sorted; end | |
TEST_DATA.each_line do |test| | |
number, input, expected = test.scan(/(\d+).*"(.*)", "(.*)"/)[0] | |
it "##{number}" do | |
assert_equal expected, solve(input) | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source 'https://rubygems.org' | |
gem 'activesupport', require: 'active_support/all' | |
gem 'minitest', require: 'minitest/autorun' | |
gem 'minitest-reporters' | |
gem 'awesome_print' | |
gem 'tapp' | |
gem 'pry' | |
gem 'pry-byebug' | |
gem 'pry-rescue', require: 'pry-rescue/minitest' | |
gem 'pry-stack_explorer' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment