day02
This commit is contained in:
		
							parent
							
								
									1d0e9ec064
								
							
						
					
					
						commit
						50fa518ffc
					
				
					 2 changed files with 86 additions and 0 deletions
				
			
		
							
								
								
									
										39
									
								
								2022/day02/day02.nim
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								2022/day02/day02.nim
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
import std/[strutils, sugar, tables]
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
  Shape = ref object
 | 
			
		||||
    loses: Shape
 | 
			
		||||
    beats: Shape
 | 
			
		||||
    score: int
 | 
			
		||||
 | 
			
		||||
let rock = Shape(score: 1)
 | 
			
		||||
let paper = Shape(beats: rock, score: 2)
 | 
			
		||||
rock.loses = paper
 | 
			
		||||
let scissors = Shape(loses: rock, beats: paper, score: 3)
 | 
			
		||||
rock.beats = scissors
 | 
			
		||||
paper.loses = scissors
 | 
			
		||||
 | 
			
		||||
let charToMove =
 | 
			
		||||
  { "A": rock
 | 
			
		||||
  , "B": paper
 | 
			
		||||
  , "C": scissors
 | 
			
		||||
  , "X": rock
 | 
			
		||||
  , "Y": paper
 | 
			
		||||
  , "Z": scissors
 | 
			
		||||
  }.toTable
 | 
			
		||||
 | 
			
		||||
let input = readAll(stdin).strip().split('\n')
 | 
			
		||||
let rounds = collect:
 | 
			
		||||
  for game in input:
 | 
			
		||||
    let s = game.split(' ')
 | 
			
		||||
    (charToMove[s[0]], charToMove[s[1]])
 | 
			
		||||
 | 
			
		||||
var score = 0
 | 
			
		||||
for (opponent, me) in rounds:
 | 
			
		||||
  score += me.score
 | 
			
		||||
  if me.beats == opponent:
 | 
			
		||||
    score += 6
 | 
			
		||||
  elif me == opponent:
 | 
			
		||||
    score += 3
 | 
			
		||||
 | 
			
		||||
echo score
 | 
			
		||||
							
								
								
									
										47
									
								
								2022/day02/day02_2.nim
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								2022/day02/day02_2.nim
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
import std/[strutils, sugar, tables]
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
  Shape = ref object
 | 
			
		||||
    loses: Shape
 | 
			
		||||
    beats: Shape
 | 
			
		||||
    score: int
 | 
			
		||||
  Strat = enum Lose, Draw, Win
 | 
			
		||||
 | 
			
		||||
let rock = Shape(score: 1)
 | 
			
		||||
let paper = Shape(beats: rock, score: 2)
 | 
			
		||||
rock.loses = paper
 | 
			
		||||
let scissors = Shape(loses: rock, beats: paper, score: 3)
 | 
			
		||||
rock.beats = scissors
 | 
			
		||||
paper.loses = scissors
 | 
			
		||||
 | 
			
		||||
let charToMove =
 | 
			
		||||
  { "A": rock
 | 
			
		||||
  , "B": paper
 | 
			
		||||
  , "C": scissors
 | 
			
		||||
  }.toTable
 | 
			
		||||
 | 
			
		||||
let charToStrat =
 | 
			
		||||
  { "X": Lose
 | 
			
		||||
  , "Y": Draw
 | 
			
		||||
  , "Z": Win
 | 
			
		||||
  }.toTable
 | 
			
		||||
 | 
			
		||||
let input = readAll(stdin).strip().split('\n')
 | 
			
		||||
let rounds = collect:
 | 
			
		||||
  for game in input:
 | 
			
		||||
    let s = game.split(' ')
 | 
			
		||||
    (charToMove[s[0]], charToStrat[s[1]])
 | 
			
		||||
 | 
			
		||||
var score = 0
 | 
			
		||||
for (opponent, strat) in rounds:
 | 
			
		||||
  case strat
 | 
			
		||||
  of Lose:
 | 
			
		||||
    score += opponent.beats.score
 | 
			
		||||
  of Draw:
 | 
			
		||||
    score += opponent.score
 | 
			
		||||
    score += 3
 | 
			
		||||
  of Win:
 | 
			
		||||
    score += opponent.loses.score
 | 
			
		||||
    score += 6
 | 
			
		||||
 | 
			
		||||
echo score
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue