87 lines
1.2 KiB
Nim
87 lines
1.2 KiB
Nim
import os
|
|
import std/strutils
|
|
|
|
# A - rock
|
|
# B - paper
|
|
# C - scissors
|
|
# X = lose
|
|
# Y = draw
|
|
# Z = win
|
|
|
|
const
|
|
ROCK_POINTS = 1
|
|
PAPER_POINTS = 2
|
|
SCISSORS_POINTS = 3
|
|
|
|
ROCK = "A"
|
|
PAPER = "B"
|
|
SCISSORS = "C"
|
|
|
|
LOSE_POINTS = 0
|
|
DRAW_POINTS = 3
|
|
WIN_POINTS = 6
|
|
|
|
LOSE = "X"
|
|
DRAW = "Y"
|
|
WIN = "Z"
|
|
|
|
proc rock(symStr: string): int =
|
|
case symStr:
|
|
of LOSE:
|
|
SCISSORS_POINTS + LOSE_POINTS
|
|
of DRAW:
|
|
ROCK_POINTS + DRAW_POINTS
|
|
of WIN:
|
|
PAPER_POINTS + WIN_POINTS
|
|
else:
|
|
0
|
|
|
|
proc paper(symStr: string): int =
|
|
case symStr:
|
|
of LOSE:
|
|
ROCK_POINTS + LOSE_POINTS
|
|
of DRAW:
|
|
PAPER_POINTS + DRAW_POINTS
|
|
of WIN:
|
|
SCISSORS_POINTS + WIN_POINTS
|
|
else:
|
|
0
|
|
|
|
proc scissors(symStr: string): int =
|
|
case symStr:
|
|
of LOSE:
|
|
PAPER_POINTS + LOSE_POINTS
|
|
of DRAW:
|
|
SCISSORS_POINTS + DRAW_POINTS
|
|
of WIN:
|
|
ROCK_POINTS + WIN_POINTS
|
|
else:
|
|
0
|
|
|
|
proc calcScore(left, right: string): int =
|
|
case left:
|
|
of ROCK:
|
|
rock(right)
|
|
of PAPER:
|
|
paper(right)
|
|
of SCISSORS:
|
|
scissors(right)
|
|
else:
|
|
0
|
|
|
|
|
|
proc main() =
|
|
let fileName = paramStr(1)
|
|
|
|
var sum = 0
|
|
var count = 0
|
|
|
|
for line in fileName.lines:
|
|
let sp = line.split(" ")
|
|
sum += calcScore(sp[0], sp[1])
|
|
count += 1
|
|
|
|
echo sum
|
|
|
|
|
|
main()
|