Skip to content

Instantly share code, notes, and snippets.

@aikyo02
Created March 24, 2016 07:24
Show Gist options
  • Save aikyo02/7e09512c9d4477d474e4 to your computer and use it in GitHub Desktop.
Save aikyo02/7e09512c9d4477d474e4 to your computer and use it in GitHub Desktop.
Win = {'P' => 'R', 'R' => 'S', 'S' => 'P'}
Lose = {'P' => 'S', 'R' => 'P', 'S' => 'R'}
def solve(input)
tournaments = create_tournaments(input)
tournaments = calculate_tournaments(tournaments)
"(#{tournaments[0]})"
end
def create_tournaments(input)
tournaments = input.scan(/\w+/)
end
def calculate_tournaments(tournaments)
tournaments = split_tornament(tournaments)
p tournaments
games_tournaments(tournaments)
tournaments
end
def split_tornament(tournaments)
size = tournaments.size
l_tournaments, r_tournaments = tournaments[0..(size/2 - 1)], tournaments[(size/2)..(size - 1)]
l_tournaments = split_tornament(l_tournaments) if l_tournaments.size > 2
r_tournaments = split_tornament(r_tournaments) if r_tournaments.size > 2
[l_tournaments, r_tournaments]
end
def games_tournaments(tournaments)
left, right = tournaments[0], tournaments[1]
left = games_tournaments(left) if left.size == 2
right = games_tournaments(right) if right.size == 2
game(left[0], right[0])
end
def game(left, right)
left_cs, right_cs = left.chars, right.chars
max_count = left.size.lcm(right.size)
left_cs = left_cs * (max_count / left.size)
right_cs = right_cs * (max_count / right.size)
# puts "max_count: #{max_count}, left: #{left}, right: #{right}"
0.upto(max_count - 1) do |i|
# puts "left: #{left_cs[i]}, right: #{right_cs[i]}"
if Win[left_cs[i]] == right_cs[i]
# puts "winner left. left: #{left_cs[i]}, right: #{right_cs[i]}"
return left
elsif Lose[left_cs[i]] == right_cs[i]
# puts "winner right. left: #{left_cs[i]}, right: #{right_cs[i]}"
return right
else
next
end
end
# draw
left
end
def test(input, expected)
result = solve(input)
# puts result
# puts expected
if result == expected
puts 'passed'
else
puts 'failed'
end
end
# test("(RSP)(R)(RPS)(SP)", "(RPS)")
# test("(RPS)(R)(RSP)(SP)(RSSP)", "(RSSP)")
# test("(RRS)(S)(PSSRP)(PRP)(PSS)", "(PRP)")
# test("(PRS)(PSPP)(PRSP)(S)(RR)(SSPR)", "(PRS)")
# test("(PSRP)(PR)(RPRPR)(PSSPP)(SP)(SRPP)(PR)", "(SP)")
# test("(SPS)(R)(RP)(RRS)(PPRRS)(R)(RS)(RRRRP)", "(PPRRS)")
# test("(PPSRPSPRR)(SP)(PPPRSSR)(PS)(P)(PRSPS)(PP)(RSSR)", "(SP)")
# test("(SRPRS)(SRPSRS)(SPP)(RSPRS)(S)(SRPSPS)(RSPPSSS)(SRRPRRPSSP)", "(RSPPSSS)")
# test("(SRSPSPRS)(RRPRRS)(PRRRRS)(RSSPSSRPS)(PPSSPPRR)(PPSPPS)(PSPSPSSSP)(RPPRPS)", "(PRRRRS)")
# test("(S)(PRS)(RSRP)(S)(PPRR)(PP)(RSSS)(P)(RSR)", "(PP)")
# test("(RPR)(P)(PSPR)(SRSRP)(SR)(RPPR)(RRS)(S)(SSPR)(PRPR)", "(RPPR)")
# test("(PSR)(PPPRR)(S)(SP)(S)(PR)(SPSRP)(PPSRR)(PRPPR)(RRRSP)(SR)", "(S)")
# test("(PPRPP)(RSS)(PRS)(R)(RPRP)(SPSSS)(RR)(PPRP)(RSSS)(RSRS)(RP)", "(PPRPP)")
# test("(P)(PPPRR)(RRRS)(RR)(RPRSS)(PRSPS)(PP)(R)(PSR)(RPPP)(RP)(SSSR)", "(PSR)")
# test("(SR)(P)(RRPRP)(RSPS)(PSS)(SPPSP)(RRPS)(PR)(RRRSR)(PRR)(SSS)(RRRSS)(P)", "(SR)")
# test("(PS)(RS)(RR)(RPR)(SR)(SP)(PRP)(PPS)(R)(PRSP)(SSPRR)(SP)(PPR)(RSRR)", "(SSPRR)")
# test("(RRRRS)(SRPRR)(PPSS)(SSPPS)(R)(R)(P)(P)(PSSPR)(S)(RRPP)(SPRR)(S)(RR)(S)", "(PSSPR)")
# test("(RRPSSRP)(SSSSSP)(RRSPSS)(PRSRRSRP)(SSRRRRR)(SS)(SSSSSSPPRP)(R)(SRRSR)(PPPSRSP)(RPRS)(RSRPPRS)(RPPPPRPR)(PRRSR)(RPRRSR)", "(PPPSRSP)")
# test("(SSSRS)(SRPSS)(RSPRP)(RPPPP)(S)(PPRPS)(RRR)(PS)(RPSPS)(SPP)(PSRS)(P)(P)(RR)(S)(PSP)", "(RSPRP)")
# test("(SPP)(PR)(SR)(SRPSP)(P)(RR)(SSPP)(RS)(RRRPP)(R)(PRSPS)(RRPP)(RRRSS)(RRRSS)(RSP)(SRPR)(PPS)", "(SPP)")
# test("(SSS)(SSPR)(SSRR)(P)(PRRSP)(RRRPP)(PR)(P)(PS)(PPR)(R)(SRPSR)(R)(S)(SSPRS)(SRPR)(PPPR)(SRS)", "(SSRR)")
# test("(PR)(R)(PRPS)(PR)(S)(PS)(R)(P)(R)(SS)(RP)(SS)(SP)(R)(SPR)(RPR)(PSP)(PPPS)(SPRPR)", "(RP)")
# test("(SPS)(SRPR)(P)(SPPS)(SS)(RS)(SRPPS)(SRSPS)(RSR)(SRPR)(P)(SPSS)(SRS)(SP)(RSRRP)(PP)(SR)(RPRP)(P)(SPPPS)", "(RSR)")
# test("(SSRSP)(SPRRPRSPS)(SPSPS)(PRPR)(SPPRP)(RS)(SPSSPRRS)(PSPPRPSSP)(PSRRRRRP)(SPPRS)(SRRP)(SP)(SRSPRPSP)(PPSRRRSR)(PPPSSRSR)(PRPSPS)(SRR)(RP)(SP)(RSRPSPSSRS)", "(RS)")
# test("(RRPS)(SRPR)(PS)(SPPS)(SS)(RS)(SRPPS)(SRSPS)(RSR)(SRPR)(P)(SPSS)(SRS)(SP)(RSRRP)(PP)(SR)(RPRP)(P)(SPPPS)", "(RRPS)")
# test("(S)(PRSRR)(PP)(PSSSS)(SR)(SRRP)(PRRPR)(PRSS)(SPPS)(SS)(SPPR)(SSRSR)(PSRPP)(RSP)(R)(P)(PPP)(SS)(SP)(SSSS)(RRSR)", "(SRRP)")
# test("(PS)(R)(R)(S)(S)(SSP)(RPPP)(RPSP)(RPRR)(R)(SRRSS)(RSR)(PS)(PRP)(SSSS)(S)(SSSR)(SS)(PSP)(RS)(PSRSR)(SR)", "(SR)")
# test("(RSPSS)(RRSSR)(S)(RRS)(PSSRR)(S)(RPRRP)(RS)(PS)(RR)(R)(PSRR)(RPPRP)(SSS)(S)(R)(R)(SRSS)(PR)(S)(RRPPS)(S)(SSPRR)", "(RRS)")
# test("(PSSS)(RRRPR)(PRPP)(RSSS)(RR)(RP)(PPS)(PSR)(SPS)(SRSS)(R)(RR)(SPRSR)(RSPRP)(RRSP)(SSRRP)(RSSSR)(PPSS)(PRS)(RRSRS)(PS)(SS)(P)(SPR)", "(PRPP)")
# test("(RSRPSS)(RPPRPRRSP)(PRPSRSRPPP)(SSRSSRS)(RPS)(SP)(PPPPPSSP)(RRRPSR)(PSR)(SRSRSSR)(RPSSSRP)(RRSPSSSPPR)(RS)(SRRRSPRP)(PR)(RSSRPSSS)(PPRRRRRR)(RRSRP)(RRR)(PSPRSSPRP)(PRPPRSSRP)(SPPSPSS)(PSS)(RPS)(P)(RRSRSP)(PS)(RRPSSSRR)(RR)(PPPSPRPR)(PS)(PRSSRPR)(RRP)(PSRPR)(PS)(R)(RRPP)(SSPPSS)(SRPSSS)(RRSRRPRPP)", "(SPPSPSS)")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment