Pretakanje

Odprto: četrtek, 7. oktober 2021, 00.00
Rok za oddajo: sreda, 27. oktober 2021, 15.15

(English translation at the bottom.)

V oni stari nalogi imamo dva vrča; v vrč a gre 7 litrov in v vrč b gredo 4 litri. Vodo lahko točimo:

  • iz jezera v vrč, pri čemer vrč vedno napolnimo do vrha;
  • iz vrča v jezero, pri čemer vrč vedno popolnoma izpraznimo;
  • iz vrča v vrč, pri čemer točimo toliko časa, da je vrč, v katerega točimo, poln, ali pa vrč, iz katerega točimo, prazen - karkoli od tega se zgodi prej.

Naloga običajno zahteva, da z vrčema namerimo določeno količino vode, na primer dva litra. Naša ni takšna.

Obvezna naloga

Tole je skoraj bolj naloga iz pogojev kot iz zank.

Zaporedje pretakanj naj bo podano takole (te vrstice skopiraj na začetek programa):

poteze = [("j", "a"), ("a", "b"), ("b", "j"), ("a", "b"), ("j", "a"),
          ("a", "b"), ("b", "j"), ("a", "b"), ("a", "j"), ("b", "a"),
          ("j", "a"), ("a", "j")]

Pri tem prvi element para pove, odkod točimo, drugi pa, kam. Napiši program, ki simulira takšno pretakanje in sproti poroča, koliko vode je v katerem vrču. Za gornji primer mora izpisati:

a: 7 b: 0
a: 3 b: 4
a: 3 b: 0
a: 0 b: 3
a: 7 b: 3
a: 6 b: 4
a: 6 b: 0
a: 2 b: 4
a: 0 b: 4
a: 4 b: 0
a: 7 b: 0
a: 0 b: 0

Dodatna naloga

Zdaj pa obratno: imamo zaporedje stanj vrčev, podanih s seznamom terk, na primer.

stanja = [(7, 0), (3, 4), (3, 0), (0, 3), (7, 3), (6, 4),
          (6, 0), (2, 4), (0, 4), (4, 0), (7, 0), (0, 0)]

Napiši program, ki za takšno zaporedje izpiše pripadajoči vrstni red pretakanj. Izpis naj bo v takšni obliki:

j a
a b
b j
a b
j a
a b
b j
a b
a j
b a
j a
a j

There's that old task in which we have two jars. Jar 'a' can hold 7 litres and 'b' can hold 4 litres. We can pour water

  • from the lake into one of the jars until the jar is full;
  • from a jar into the lake, until the jar is empty;
  • from one jar into another until the former is empty or the latter is full, whichever comes first.

The task is typically to measure a certain amount of water, say two litres. We will do something simpler.

Mandatory part

This is more about conditions than about loops.

The sequence of moves is given as follows (copy these lines into your program):

moves = [("j", "a"), ("a", "b"), ("b", "j"), ("a", "b"), ("j", "a"),
         ("a", "b"), ("b", "j"), ("a", "b"), ("a", "j"), ("b", "a"),
          ("j", "a"), ("a", "j")]

The first element of the pair gives the source (a, b, or j for lake, jezero), and the second is the destination. Write a program that simulates teh sequence and prints out the content of each jar after every move. For the above sequence, it should print:

a: 7 b: 0
a: 3 b: 4
a: 3 b: 0
a: 0 b: 3
a: 7 b: 3
a: 6 b: 4
a: 6 b: 0
a: 2 b: 4
a: 0 b: 4
a: 4 b: 0
a: 7 b: 0
a: 0 b: 0

Extra part

Now let's do the opposite: we hav a sequence of states, given like this:

states = [(7, 0), (3, 4), (3, 0), (0, 3), (7, 3), (6, 4),
          (6, 0), (2, 4), (0, 4), (4, 0), (7, 0), (0, 0)]

and the program must write the sequence of moves in the following form:

j a
a b
b j
a b
j a
a b
b j
a b
a j
b a
j a
a j