Slide 1

Slide 1 text

Compe&&ve Programming in Ruby (101) RubyKaigi 2016 Kyoto A1er Party LT (2016-09-10) @yhara (Yutaka Hara) RubyKaigi 2016 Kyoto LT (2016-09-10) 1

Slide 2

Slide 2 text

RubyKaigi 2016 Kyoto LT (2016-09-10) 2

Slide 3

Slide 3 text

Recently I'm trying Compe22ve Programming with my colleagues RubyKaigi 2016 Kyoto LT (2016-09-10) 3

Slide 4

Slide 4 text

Compe&&ve Programming RubyKaigi 2016 Kyoto LT (2016-09-10) 4

Slide 5

Slide 5 text

Programming contest RubyKaigi 2016 Kyoto LT (2016-09-10) 5

Slide 6

Slide 6 text

Write a program fast and correctly RubyKaigi 2016 Kyoto LT (2016-09-10) 6

Slide 7

Slide 7 text

Need C(++, #) or Java? RubyKaigi 2016 Kyoto LT (2016-09-10) 7

Slide 8

Slide 8 text

You can use Ruby too! RubyKaigi 2016 Kyoto LT (2016-09-10) 8

Slide 9

Slide 9 text

Sites which supports Ruby • Sphere Online Judge • Aizu Online Judge • yukicoder • AtCoder ←Today's topic RubyKaigi 2016 Kyoto LT (2016-09-10) 9

Slide 10

Slide 10 text

atcoder.jp • AtCoder Grand Contest • AtCoder Regular Contest • AtCoder Beginner Contest • AtCoder Typical Contest RubyKaigi 2016 Kyoto LT (2016-09-10) 10

Slide 11

Slide 11 text

Don't join the contest RubyKaigi 2016 Kyoto LT (2016-09-10) 11

Slide 12

Slide 12 text

Try previous contests first ! RubyKaigi 2016 Kyoto LT (2016-09-10) 12

Slide 13

Slide 13 text

! • Any%me • No %me limit RubyKaigi 2016 Kyoto LT (2016-09-10) 13

Slide 14

Slide 14 text

• AtCoder Grand Contest • AtCoder Regular Contest • AtCoder Beginner Contest • AtCoder Typical Contest RubyKaigi 2016 Kyoto LT (2016-09-10) 14

Slide 15

Slide 15 text

AtCoder Beginner Contest • A: Very easy • B: Easy • C: Easy? • D: Not really easy RubyKaigi 2016 Kyoto LT (2016-09-10) 15

Slide 16

Slide 16 text

But Ruby is slow...? ! RubyKaigi 2016 Kyoto LT (2016-09-10) 16

Slide 17

Slide 17 text

No problem! RubyKaigi 2016 Kyoto LT (2016-09-10) 17

Slide 18

Slide 18 text

Algorithm Ma-ers ! RubyKaigi 2016 Kyoto LT (2016-09-10) 18

Slide 19

Slide 19 text

Example: one-line Reversi RubyKaigi 2016 Kyoto LT (2016-09-10) 19

Slide 20

Slide 20 text

one-line Reversi • Given N pieces, flip Q ranges • Calculate the final state ●●●●●●●●● 1..4 2..6 8..9 ɹɹ↓ ○●●●○○●○○ RubyKaigi 2016 Kyoto LT (2016-09-10) 20

Slide 21

Slide 21 text

Just flipping each pieces? ranges.each do |r| r.each do |i| line[i] = !line[i] end end RubyKaigi 2016 Kyoto LT (2016-09-10) 21

Slide 22

Slide 22 text

RubyKaigi 2016 Kyoto LT (2016-09-10) 22

Slide 23

Slide 23 text

200,000 pieces ! 200,000 ranges ! RubyKaigi 2016 Kyoto LT (2016-09-10) 23

Slide 24

Slide 24 text

Billions of flips ! ranges.each do |r| # <- 200,000 times r.each do |i| # <- 50,000 times or so line[i] = !line[i] end end RubyKaigi 2016 Kyoto LT (2016-09-10) 24

Slide 25

Slide 25 text

⏰ Time Limit = 2 sec. RubyKaigi 2016 Kyoto LT (2016-09-10) 25

Slide 26

Slide 26 text

Be#er algorithm Memorize where color changes 10001 23005 ɹɹɹɹ↓ɹɹ↓ ●●●...●○...○●●● RubyKaigi 2016 Kyoto LT (2016-09-10) 26

Slide 27

Slide 27 text

Passed! ! RubyKaigi 2016 Kyoto LT (2016-09-10) 27

Slide 28

Slide 28 text

You can try Compe//ve Prograaming in Ruby ! (at least for beginner contest) RubyKaigi 2016 Kyoto LT (2016-09-10) 28

Slide 29

Slide 29 text

! BTW ! RubyKaigi 2016 Kyoto LT (2016-09-10) 29

Slide 30

Slide 30 text

RubyKaigi 2016 Kyoto LT (2016-09-10) 30

Slide 31

Slide 31 text

ABC037-D • I couldn't pass with Ruby ! • Traversing 1000x1000 maze • Maybe with Ruby3...? RubyKaigi 2016 Kyoto LT (2016-09-10) 31

Slide 32

Slide 32 text

Crystal passes ※CrystalɿRuby-like sta0cally typed language RubyKaigi 2016 Kyoto LT (2016-09-10) 32

Slide 33

Slide 33 text

Pypy2 passes ※Pypy2ɿFaster Python implemanta2on RubyKaigi 2016 Kyoto LT (2016-09-10) 33

Slide 34

Slide 34 text

Python3 passes!? ! RubyKaigi 2016 Kyoto LT (2016-09-10) 34

Slide 35

Slide 35 text

RubyKaigi 2016 Kyoto LT (2016-09-10) 35

Slide 36

Slide 36 text

RubyKaigi 2016 Kyoto LT (2016-09-10) 36

Slide 37

Slide 37 text

RubyKaigi 2016 Kyoto LT (2016-09-10) 37

Slide 38

Slide 38 text

(DON'T TRY THIS AT HOME !) RubyKaigi 2016 Kyoto LT (2016-09-10) 38