{"id":"informatyka-2015-czerwiec-matura-rozszerzona-2/zad/6.1","paper_id":"informatyka-2015-czerwiec-matura-rozszerzona-2","number":"6.1","points":null,"ptype":"open","subject":"informatyka","category":"matura","year":2015,"month":"czerwiec","level":"rozszerzona","text":"Zadanie 6.1. (0-5)\ndla każdej liczby N z pliku kody.txt, dwie liczby całkowite oddzielone pojedynczym\nznakiem odstępu - sumę cyfr liczby N z pozycji parzystych i sumę cyfr liczby N z pozycji\nnieparzystych;","answer":"patrz kod: even_sum, odd_sum na pozycjach parzystych/nieparzystych","answer_text":null,"solution":"Program (Python) obliczający dla każdej liczby N sumę cyfr na pozycjach parzystych i nieparzystych (pozycja 0 = cyfra jednostek), zapisujący wynik do kody1.txt (pierwsza część wspólnego programu poniżej — używa się tylko fragmentu wypełniającego out1). Poprawność zweryfikowana na przykładzie z treści zadania (764321: suma parzysta=10, suma nieparzysta=13).\n\nCODES = {\n'0': '10101110111010', '1': '11101010101110', '2': '10111010101110',\n'3': '11101110101010', '4': '10101110101110', '5': '11101011101010',\n'6': '10111011101010', '7': '10101011101110', '8': '11101010111010',\n'9': '10111010111010',\n}\nSTART = '11011010'\nSTOP = '11010110'\n\ndef sums(n):\n# n: string of digits, pozycja 0 = cyfra jednostek (najmniej znacząca, od prawej)\neven_sum = sum(int(c) for i, c in enumerate(reversed(n)) if i % 2 == 0)\nodd_sum = sum(int(c) for i, c in enumerate(reversed(n)) if i % 2 == 1)\nreturn even_sum, odd_sum\n\ndef check_digit(n):\neven_sum, odd_sum = sums(n)\nr = (even_sum * 3 + odd_sum) % 10\nreturn (10 - r) % 10\n\nwith open('kody.txt') as f:\nnumbers = [line.strip() for line in f if line.strip()]\n\nwith open('kody1.txt', 'w') as out1, open('kody2.txt', 'w') as out2, open('kody3.txt', 'w') as out3:\nfor n in numbers:\neven_sum, odd_sum = sums(n)\nout1.write(f\"{even_sum} {odd_sum}\\n\")\n\nc = check_digit(n)\nout2.write(f\"{c} {CODES[str(c)]}\\n\")\n\nbarcode = START + ''.join(CODES[d] for d in n) + CODES[str(c)] + STOP\nout3.write(barcode + \"\\n\")","image":"img/informatyka-2015-czerwiec-matura-rozszerzona-2/zad-6.1.webp","solution_image":null,"topics":null,"page_from":7,"source":"ai","answer_source":"ai","answer_text_source":null,"solution_source":"ai","text_source":"ocr","source_label":"Informatyka · Matura · czerwiec 2015 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 6.1. (0-5)<br>dla każdej liczby N z pliku kody.txt, dwie liczby całkowite oddzielone pojedynczym<br>znakiem odstępu - sumę cyfr liczby N z pozycji parzystych i sumę cyfr liczby N z pozycji<br>nieparzystych;</p>","solutions":[{"source":"ai","label":"AI","kind":"text","html":"<p>Program (Python) obliczający dla każdej liczby N sumę cyfr na pozycjach parzystych i nieparzystych (pozycja 0 = cyfra jednostek), zapisujący wynik do kody1.txt (pierwsza część wspólnego programu poniżej — używa się tylko fragmentu wypełniającego out1). Poprawność zweryfikowana na przykładzie z treści zadania (764321: suma parzysta=10, suma nieparzysta=13).</p>\n<p>CODES = {<br>&#x27;0&#x27;: &#x27;10101110111010&#x27;, &#x27;1&#x27;: &#x27;11101010101110&#x27;, &#x27;2&#x27;: &#x27;10111010101110&#x27;,<br>&#x27;3&#x27;: &#x27;11101110101010&#x27;, &#x27;4&#x27;: &#x27;10101110101110&#x27;, &#x27;5&#x27;: &#x27;11101011101010&#x27;,<br>&#x27;6&#x27;: &#x27;10111011101010&#x27;, &#x27;7&#x27;: &#x27;10101011101110&#x27;, &#x27;8&#x27;: &#x27;11101010111010&#x27;,<br>&#x27;9&#x27;: &#x27;10111010111010&#x27;,<br>}<br>START = &#x27;11011010&#x27;<br>STOP = &#x27;11010110&#x27;</p>\n<p>def sums(n):<br># n: string of digits, pozycja 0 = cyfra jednostek (najmniej znacząca, od prawej)<br>even_sum = sum(int(c) for i, c in enumerate(reversed(n)) if i % 2 == 0)<br>odd_sum = sum(int(c) for i, c in enumerate(reversed(n)) if i % 2 == 1)<br>return even_sum, odd_sum</p>\n<p>def check_digit(n):<br>even_sum, odd_sum = sums(n)<br>r = (even_sum * 3 + odd_sum) % 10<br>return (10 - r) % 10</p>\n<p>with open(&#x27;kody.txt&#x27;) as f:<br>numbers = [line.strip() for line in f if line.strip()]</p>\n<p>with open(&#x27;kody1.txt&#x27;, &#x27;w&#x27;) as out1, open(&#x27;kody2.txt&#x27;, &#x27;w&#x27;) as out2, open(&#x27;kody3.txt&#x27;, &#x27;w&#x27;) as out3:<br>for n in numbers:<br>even_sum, odd_sum = sums(n)<br>out1.write(f&quot;{even_sum} {odd_sum}\\n&quot;)</p>\n<p>c = check_digit(n)<br>out2.write(f&quot;{c} {CODES[str(c)]}\\n&quot;)</p>\n<p>barcode = START + &#x27;&#x27;.join(CODES[d] for d in n) + CODES[str(c)] + STOP<br>out3.write(barcode + &quot;\\n&quot;)</p>"}]}