From d0feb92fff9acc8d6bd265b6769c3752d9d5f0b7 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Sat, 7 Dec 2019 08:51:42 -0800 Subject: [PATCH] [2019][ruby] more sorbet --- 2019/ruby/computer.rb | 12 ++++++++---- 2019/ruby/day_06.rb | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/2019/ruby/computer.rb b/2019/ruby/computer.rb index 6047480..8c0d823 100644 --- a/2019/ruby/computer.rb +++ b/2019/ruby/computer.rb @@ -21,7 +21,7 @@ OPCODES = T.let({ 6 => ->(m, _, _, a, b) { m[a].zero? ? m[b] : nil }, # jump-if-false 7 => ->(m, _, _, a, b, c) { m[c] = (m[a] < m[b]) ? 1 : 0; nil }, # less than 8 => ->(m, _, _, a, b, c) { m[c] = (m[a] == m[b]) ? 1 : 0; nil }, # equals - 99 => ->(*) { throw :halt }, + 99 => ->(*) { throw :halt }, # halt }, T::Hash[T.untyped, T.untyped]) class Parameter @@ -73,8 +73,7 @@ class Computer sig {params(input: AnyIO, output: AnyIO).returns(Memory)} def run(input=STDIN, output=STDOUT) - each = T.cast(each(input, output), T::Enumerator[Memory]) - each.inject(nil) {|_,i| i } + each(input, output).inject(nil) {|_,i| i } end sig { @@ -82,7 +81,7 @@ class Computer input: AnyIO, output: AnyIO, blk: T.nilable(T.proc.params(m: Memory).returns(T.nilable(Integer))) - ).returns(T.any(T::Enumerator[Memory], BasicObject)) + ).returns(T::Enumerator[Memory]) } def each(input, output, &blk) return enum_for(T.must(__method__), input, output) unless block_given? @@ -99,6 +98,7 @@ class Computer mode = case mode when 0 then Mode::Position when 1 then Mode::Immediate + else fail "unexpected mode: #{mode}" end Parameter.new(mode, value) } @@ -109,6 +109,10 @@ class Computer yield @memory end end + + # Satisfy sorbet: + # https://sorbet-ruby.slack.com/archives/CHN2L03NH/p1575648549254600 + Enumerator.new {} end sig {params(parameter: Parameter).returns(Integer)} diff --git a/2019/ruby/day_06.rb b/2019/ruby/day_06.rb index 6173ff7..3dbb8e5 100644 --- a/2019/ruby/day_06.rb +++ b/2019/ruby/day_06.rb @@ -1,3 +1,4 @@ +# typed: false orbits = ARGF .read.split("\n").map {|l| l.split(?)) } .each.with_object(Hash.new {|h,k| h[k] = []}) {|(a, b), o|