Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1905 - Snooker 1
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Enunț == Jocul de snooker are reguli relativ simple: Doi jucători au la dispoziție 15 bile roșii și 6 bile colorate. Bilele roșii valorează câte 1 punct, iar cele colorate au valori cuprinse între 1 și 6 puncte. De fiecare dată când un jucător intră la masă trebuie să introducă serii de bile, începând cu o bilă roșie apoi una colorată, după fiecare bilă colorată fiind obligat să introducă o bilă roșie. Atunci când un jucător nu introduce nicio bilă sau nu introduce o bilă corectă, la masă urmează adversarul său. Loviturile nepermise se penalizează cu 5 puncte. De fiecare dată când este introdusă o bilă colorată, aceasta se repune pe masă. Când nu mai există bile roșii, bilele colorate se vor introduce în ordinea valorii lor, de la 1 la 6. Dan și Paul și-au propus să învețe să joace snooker, dar până mai capătă puțină experiență ei nu vor ține cont de absolut toate regulile jocului și vor contoriza punctajele în felul următor: apare valoarea 1 dacă un jucător a introdus o bilă roșie, o valoare cuprinsă între 1 și 6 dacă introduce corect o bilă colorată și valoarea -5 dacă jucătorul comite fault. Când un jucător ratează, pe tabelă apare valoarea 0. De fiecare dată când un jucător comite fault sau ratează, acesta își pierde rândul la masă. == Cerința == La sfârșitul jocului cei doi prieteni studiază tabela de scor și își doresc să afle: a) Care dintre ei a câștigat partida? b) Care este numărul maxim de bile introduse consecutiv de un jucător fără a comite fault la sfârșitul respectivei serii? == Date de intrare == Fișierul de intrare snooker1in.txt conține pe prima linie numărul n, reprezentând numărul de lovituri, iar pe a doua linie n numere care ilustrează tabela de scor, cu semnificațiile din enunț. == Date de ieșire == Fișierul de ieșire snooker1out.txt va conține pe prima linie răspunsul la cerința a),respectiv numărul 1 dacă Dan a câștigat jocul sau numărul 2 dacă Paul a câștigat. Pe a doua linie se va afișa răspunsul la cerința b). == Restricții și precizări == * 1 ≤ n ≤ 1000 * Dan este cel care începe mereu jocul * Se consideră că a câștigat jocul copilul care a strâns cele mai multe puncte și se garantează că în datele de test cei doi copii nu vor avea la final punctaje egale. === '''Exemplu''' === snooker1in.txt 45 0 0 1 0 1 3 1 4 0 1 0 1 0 1 0 1 0 1 0 0 0 1 4 1 1 1 5 -5 0 1 5 1 6 1 6 0 0 1 6 1 2 3 0 4 5 snooker1out.txt 2 6 == Explicație == Paul a câștigat partida deoarece a acumulat 52 de puncte, în timp ce Dan a acumulat 13 puncte. Paul introduce 6 bile consecutiv, fără a comite fault după introducerea acestora: 1 5 1 6 1 6 == '''Rezolvare''' == <syntaxhighlight lang="python"> def validare_n(n): if 1 <= n <= 1000: return True else: print("Valoare invalidă pentru 'n'. N trebuie sa fie intre 1 ≤ n ≤ 1000.") return False def proceseaza_element(v, i, juc, s1, s2, k1, k2, maxim): if i < len(v): if v[i] != 0 and juc % 2 == 1: s1 += v[i] k1 += 1 if v[i] != 0 and juc % 2 == 0: s2 += v[i] k2 += 1 if v[i] == 0 or v[i] == -5: if k1 > maxim and v[i] != -5: maxim = k1 if k2 > maxim and v[i] != -5: maxim = k2 juc += 1 k1, k2 = 0, 0 else: print(f"Index i out of range for list 'v'") return juc, s1, s2, k1, k2, maxim with open("snooker1in.txt", "r") as f: n = int(f.readline()) v = list(map(int, f.readline().split())) juc, s1, s2, k1, k2, maxim = 1, 0, 0, 0, 0, 0 for i in range(n): juc, s1, s2, k1, k2, maxim = proceseaza_element(v, i, juc, s1, s2, k1, k2, maxim) if k1 > maxim: maxim = k1 if k2 > maxim: maxim = k2 with open("snooker1out.txt", "w") as g: if s1 > s2: g.write("1\n") else: g.write("2\n") g.write(str(maxim)) </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width