Sąžiningos dalybos

Taškai: 12

Hamidas ir Kazimas susitiko dykumoje. Hamidas turi 4 litrų indą, pilną vandens. Kazimas turi du tuščius 3 litrų ir 1 litro talpos indus.
Hamidas norėtų pasidalyti vandeniu su Kazimu, todėl jiems teks pilstyti vandenį iš vieno indo į kitus, kol vienas iš indų bus pilnas arba liks tuščias.
Hamidas ir Kazimas mąsto, kaip išpilstyti vandenį, kad abiem jo tektų po lygiai. Kadangi pilstant šiek tiek vandens prarandama, reikia kuo mažiau pylimų.
Padėk jiems. Vandenį gali pilstyti panaudodamas kairėje esančius mygtukus.

Įvykdytos komandos:

Paaiškinimas

Norint išspręsti šį uždavinį reikia išskirti du objektus:  indas, į kurį vanduo įpilamas, ir indas, iš kurio vanduo išpilamas.
Vienas vandens pylimas gali pakeisti dviejų indų turinį. Informatikoje toks veiksmas vadinamas šalutiniu poveikiu (kai vienu metu keičiama dviejų objektų būsena). Tačiau akivaizdu, kad trečiam indui šalutinis poveikis netaikomas. Vandens pylimas neturi paslėpto šalutinio poveikio ir daro poveikį tik tiems objektams, kuriems jis yra reikalingas.
Paslėptas šalutinis poveikis daro programą sudėtinga, sunkiai suprantamą, todėl programuojant šalutinio paveikio reikia vengti. Kai kuriose programavimo kalbose, kuriose į veikimą (operaciją, mūsų uždavinio atveju – vandens pylimas) žiūrima kaip į funkciją, todėl skaičiuojant funkcijos reikšmę paslėpto šalutinio poveikio vengimas yra geras programavimo stilius. Realiame gyvenime šalutinis poveikis gali būti naudingas: nenaudodami šalutinio poveikio pilstant vandenį Kazimas vandens negautų.

Atsakymas

Yra dvi trumpiausios pilstymų sekos, kurias atlikus vanduo bus pasidalintas po lygiai:
4→3, 3→1, 1→4 ir
4→1, 1→3, 4→1
Žemiau pateiktame paveiksle parodyti visi galimi pilstymo būdai, pradedant nuo pradinės indų būsenos. Pradinė būsena žymima 4, 0, 0. Galima pastebėti, kad:

  • Atlikus du pilstymus vanduo paskirstomas taip: 3, 1, 0 arba 0, 3, 1 arba 1, 2, 1, tačiau gautas rezultatas netenkina.
  • Iš 0, 3, 1 būsenos vandenį išpilstyti galima tik į anksčiau buvusias būsenas.
  • Atlikdami trečią pilstymą, galime gauti tik dvi palankias situacijas: 2, 2, 0 ir 2, 1, 1, kad Hamidui ir Kazimui tektų po lygiai vandens.

 

Interaktyvi užduotis

 

 
Informacija atnaujinta 2015-12-03 07:50:57