# 02 Python

The assignment for the second day.

Input data: Input

We have lines with pairs of rock/paper/scissors in the input file. The first player have them labeled A, B, C, the second player have them labelled X, Y, Z.

``````# map the input letters into numbers
m1 = {
"A": 1,
"B": 2,
"C": 3,
"X": 1,
"Y": 2,
"Z": 3,
}

# for the second part we use slightly different mapping
m2 = dict(m1)
m2["X"] = 0
m2["Y"] = 3
m2["Z"] = 6

def first(txt):
s = 0
for line in txt:
a, b = map(m1.get, line.rstrip().split())
if a == b:
s += 3+b
elif a < b:
if b-a>1:
s += b
else:
s += 6+b
elif a > b:
if a-b>1:
s += 6+b
else:
s += b
print(s)

def second(txt):
s = 0
for line in txt:
a, b = map(m2.get, line.rstrip().split())
s += b
if b == 3:
# if we should draw, add the opponent's hand shape
s += a
elif b == 0:
# if we should lose, we should use less powerful shape
# 3 > 2, 2 > 1, 1 > 3
if a>1:
s += a-1
else:
s += 3
elif b == 6:
# for winning we need to use more powerful shape
# 1 > 2, 2 > 3, 3 > 1
if a<3:
s += a+1
else:
s += 1
print(s)

# when running as a script
if __name__ == "__main__":
# read standard input and store it's lines to txt
first(txt)
second(txt)
``````

The script is called like this:

``````cat 02_input.txt | python3 our_script.py
``````

## AWK again

We don’t need to differentiate between them so we can replace the labels with numbers 1, 2, 3:

The same task but again in `awk`, just for fun and comparison.

``````cat 02.txt | tr "ABCXYZ" "123123"
``````

Next we are supposed to

• find out who won in each round and
• sum up the scores according to the prescription.

Conditions to the rescue!

``````awk '{
if (\$1==\$2) {
s+=3+\$2
}
else {
if (\$1<\$2) {
if (\$2-\$1>1) {
s+=\$2
}
else {
s+=6+\$2
}
}
else {
if (\$1-\$2>1) {
s+=6+\$2
}
else {
s+=\$2
}
}
}
}
END {
print s
}
'
``````

Awk’s auto variables for columns are `\$1` and `\$2`.

## 02B

We will now transform (`tr`) the input slightly differently:

``````cat input.txt | tr "ABCXYZ" "123036"
``````

to match the resulting scores for losing, draw, winning.

The conditions now will be also different:

``````awk '{
s+=\$2
if (\$2=="3") {
s+=\$1
}
if (\$2=="0") {
if (\$1>1) {
s+=\$1-1
}
else {
s+=3
}
}
if (\$2=="6") {
if (\$1<3) {
s+=\$1+1
}
else {
s+=1
}
}
}
END {
print s
}
``````

## What I learned

• not much in Python
published: 2022-12-02