{"id":9994,"date":"2017-05-18T02:10:18","date_gmt":"2017-05-18T06:10:18","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9994"},"modified":"2017-07-28T17:04:14","modified_gmt":"2017-07-28T21:04:14","slug":"15a-pl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/15a-pl\/","title":{"rendered":"15A: Ustalenie Zako\u0144czenia"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version.<br \/>\nOriginal lesson author: David Pritchard, daveagp@gmail.com, http:\/\/cscircles.ca<br \/>\nLicense: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/-->\n<p><em>\u0106wiczenia 15A, 15B i 15C mog\u0105 by\u0107 wykonane w dowolnej kolejno\u015bci.<\/em><\/p>\n<p>W tej lekcji zrealizujesz d\u0142ugi i z\u0142o\u017cony problem, kt\u00f3ry dla ciebie zosta\u0142 podzielony na cz\u0119\u015bci. W tej lekcji tak\u017ce wprowadzamy <code>str.split()<\/code>, u\u017cyteczn\u0105 metoda dzielenia \u0142a\u0144cuch\u00f3w: usuwa wszystkie spacje, a nast\u0119pnie zwraca list\u0119 wszystkich s\u0142\u00f3w w \u0142a\u0144cuchu. Oryginalny ci\u0105g nie jest modyfikowany.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform0\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox0'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Przyk\u0142ady ze <code>str.split()<\/code><div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 188px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=7 readonly='readonly'  style = 'height : 188px;'  class='pyboxCode RO'>\nS = 'To jest \u0142a\u0144cuch'\nwords = S.split()\nprint(words)\nprint(len(words))\nprint(words[1])\nprint(S)   # S is not changed\nprint('  Inny przyk\u0142ad ze split '.split())<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"afd8639e4bd4c9454084781cb0144fe0\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit0\").value = \"Run program\";document.getElementById(\"inputInUse0\").value = \"N\";<\/script>\n<\/p>\n<p><table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Mo\u017cesz wywo\u0142a\u0107\u00a0<code>split()<\/code> ze specjalnymi argumentami dla bardziej wyrafinowanego podzia\u0142u, ale nie potrzebujemy tej mo\u017cliwo\u015bci poni\u017cej. Je\u015bli jeste\u015b zainteresowany, sprawd\u017a <a href=\"http:\/\/docs.python.org\/py3k\/library\/stdtypes.html#str.split\">dokumentacj\u0119 Pythona<\/a>. <\/span><\/td><\/table><\/p>\n<p>Teraz, przed nami do wykonania zadanie. Stary j\u0119zyk programowania <a href=\"http:\/\/en.wikipedia.org\/wiki\/BASIC\">BASIC<\/a> s\u0142ynie z numerowanych linii i instrukcji <code>goto<\/code>. W tym \u0107wiczeniu zaimplementowano prost\u0105 wersj\u0119 BASIC w\u0142a\u015bnie z tymi cechami. W szczeg\u00f3lno\u015bci dane wej\u015bciowe do Twojego programu b\u0119d\u0105 sk\u0142ada\u0107 si\u0119 z kilku wierszy w formacie<\/p>\n<p style=\"text-align: center;\"><code>\u00ablabel\u00bb goto \u00abtarget\u00bb<\/code><\/p>\n<p>gdzie <code>\u00ablabel\u00bb<\/code>(etykieta)\u00a0i <code>\u00abtarget\u00bb<\/code>(cel)\u00a0s\u0105 dodatnimi liczbami ca\u0142kowitymi. <em>Label<\/em>\u00a0jest podobna  nazwy lub adresu linii;\u00a0<em>wszystkie <em>label<\/em> s\u0105  niepowtarzalne.<\/em>\u00a0<em>Target<\/em> informuje o label linii, do kt\u00f3rej w nast\u0119pnej kolejno\u015bci trzeba przej\u015b\u0107. Ostatni\u0105 lini\u0105 programu jest <code>\u00ablabel\u00bb END<\/code>\u00a0informuj\u0105ca, \u017ce nale\u017cy zatrzyma\u0107 si\u0119 po przej\u015bciu do tej linii. Oto przyk\u0142adowy program BASIC:<\/p>\n<pre>5 GOTO 30\r\n10 GOTO 20\r\n20 GOTO 10\r\n30 GOTO 40\r\n40 END<\/pre>Kiedy BASIC uruchamia program, oto co si\u0119 dzieje. Zaczynamy od pierwszej linii (z etykiet\u0105 5). Linia z etykiet\u0105 5 kieruje nas do linii 30, nast\u0119pnie idziemy do linii z etykiet\u0105 30. Nast\u0119pnie linia 30 m\u00f3wi nam, aby przej\u015b\u0107 do wiersza 40. Linia 40 m\u00f3wi nam, aby ZAKO\u0143CZY\u0106. Wi\u0119c program zako\u0144czy\u0142 si\u0119 pomy\u015blnie.<\/p>\n<p>Z drugiej strony, program BASIC mo\u017ce r\u00f3wnie\u017c zap\u0119tli\u0107 si\u0119. Oto przyk\u0142ad:<\/p>\n<pre>10 GOTO 21\r\n21 GOTO 37\r\n37 GOTO 21\r\n40 END<\/pre>Program zaczyna si\u0119 od wiersza 10, ale potem niesko\u0144czenie przewija si\u0119 mi\u0119dzy wierszami 21 i 37.<\/p>\n<p><strong>Twoim zadaniem<\/strong> jest napisanie w Pythonie programu, kt\u00f3ry odczytuje na wejsciu program BASIC. Je\u015bli program si\u0119 zako\u0144czy, tw\u00f3j program powinien wydrukowa\u0107\u00a0<code>success<\/code>. Je\u015bli program wejdzie w niesko\u0144czon\u0105 p\u0119tl\u0119, tw\u00f3j program powinien wydrukowa\u0107 <code>infinite loop<\/code>.\u00a0Za\u0142\u00f3\u017cmy. \u017ce ka\u017cdy cel (target) jest r\u00f3wny jakiej\u015b wa\u017cnej etykiecie (label) i wszystkie etykiety s\u0105 unikalne, wi\u0119c nie musisz sprawdza\u0107 b\u0142\u0119d\u00f3w.<\/p>\n<p>Mo\u017cna to zrobi\u0107 na kilka sposob\u00f3w, ale w tej lekcji wybrali\u015bmy jedno proste podej\u015bcie, kt\u00f3re powoduje przerwanie - podzadanie 3. (W lekcji 15C masz jeden du\u017cy problem i sam zaprojektujesz podzadania.)<\/p>\n<h2>Podzadanie 1: Czytanie programu<\/h2>\n<p>Aby odczyta\u0107 program, musimy wywo\u0142a\u0107 <code><a href=\"\/pl-5\/\">input()<\/a><\/code>. Musimy jednak zatrzyma\u0107 wywo\u0142anie <code>input()<\/code>, gdy ostatnia linia (ta z <code>END<\/code>) zostanie osi\u0105gni\u0119ta, aby unikn\u0105\u0107 b\u0142\u0119du <code>EOFError<\/code>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform1\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox1'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Czytanie Programu<\/span><\/div>Napisz funkcj\u0119 <code>getBASIC()<\/code>, kt\u00f3ra nie zawiera \u017cadnych argument\u00f3w i wykonuje nast\u0119puj\u0105ce czynno\u015bci: odczytuje wiersze z wej\u015bcia przy u\u017cyciu p\u0119tli while; kiedy dotrze do ko\u0144ca, funkcja powinna zwr\u00f3ci\u0107 ca\u0142y odczytany program w formie listy \u0142a\u0144cuch\u00f3w. (Wskaz\u00f3wka: o <a class=\"hintlink\"  id=\"hintlink2\">listach<\/a> i\u00a0<a class=\"hintlink\"  id=\"hintlink3\">zatrzymywaniu<\/a>)<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput1\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit1' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch1\" value=\"Input Switch\" onclick=\"pbInputSwitch(1,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(1)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(1,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect1' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(1,'15a.getbasic')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(1);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse1\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"1\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"8b2f5e6b95b6347a59947697737c54d0\"\/>\n<div id='pbresults1' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(1);});pbInputSwitch(1,\"N\");<\/script>\n<\/p>\n<h2>Podzadanie 2: Id\u017a do niej!<\/h2>\n<p>Po przeczytaniu programem musimy by\u0107 w stanie przej\u015b\u0107 z jednej linii do kolejnej linii programu. Aby to osi\u0105gn\u0105\u0107, prosimy o napisanie nast\u0119puj\u0105cej procedury.<br \/>\n<form class=\"pbform\" action=\"#\" id=\"pbform4\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox4'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Id\u017a do niej!<\/span><\/div>Zdefiniuj funkcj\u0119 <code>findLine(prog, target)<\/code>, aby wykonywa\u0107 nast\u0119puj\u0105ce czynno\u015bci. Za\u0142\u00f3\u017cmy, \u017ce <code>prog<\/code> to lista \u0142a\u0144cuch\u00f3w zawieraj\u0105cych program BASIC, podobnego typu jak generowany przez <code>getBASIC()<\/code>; za\u0142\u00f3\u017cmy, \u017ce <code>target<\/code> jest to ci\u0105g znak\u00f3w zawieraj\u0105cym numer linii, kt\u00f3ra jest celem instrukcji GOTO. Funkcja powinna zwraca\u0107 indeks <code>i<\/code> (liczb\u0119 mi\u0119dzy <code>0<\/code> a <code>len(prog)-1<\/code>) tak\u0105, \u017ce <code>prog[i]<\/code> jest lini\u0105, kt\u00f3rej etykieta (label) jest r\u00f3wna <code>target<\/code>.<a class=\"hintlink\"  id=\"hintlink5\">Wskaz\u00f3wka<\/a>\u00a0<br\/><strong>Przyk\u0142ad (wej\u015bcia\/wyj\u015bcia) input\/output:<\/strong> Je\u015bli wywo\u0142asz <\/p>\n<pre>findLine(['10 GOTO 20','20 END'], '10')<\/pre> wtedy wyj\u015bcie powinno by\u0107 <code>0<\/code>, skoro  element 0 listy jest lini\u0105 z etykiet\u0105 (label) 10.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput4\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch4\" value=\"Input Switch\" onclick=\"pbInputSwitch(4,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect4' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(4,'15a.goto')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(4);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"bed654c7c12996647ca21009ea7c5434\"\/>\n<div id='pbresults4' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(4);});pbInputSwitch(4,\"Y\");<\/script>\n<\/p>\n<h2>Podzadanie 3: Inteligentna Symulacja<\/h2>\n<p>W poprzednich dw\u00f3ch \u0107wiczeniach, zajmowali\u015bmy si\u0119 <em>procedur\u0105 wprowadzania<\/em> i <em>zadaniem na szukanie<\/em>. B\u0119d\u0105 one przydatne do zapisania kr\u00f3cej g\u0142\u00f3wnego programu. Niemniej jednak, nadal istnieje wa\u017cne pytanie: w jaki spos\u00f3b mo\u017cemy rzeczywi\u015bcie rozwi\u0105za\u0107 oryginalny problem? Najbardziej prostym sposobem by\u0142oby symulowanie programu BASIC:<\/p>\n<ul>\n<li>niech <code>prog<\/code> b\u0119dzie BASIC programem (list\u0105 \u0142a\u0144cuch\u00f3w)<\/li>\n<li>uruchomi\u0107 licznik <code>ustawiony<\/code> na 0, poniewa\u017c zaczynamy od pierwszej linii programu<\/li>\n<li>while True,\n<ul>\n<li>je\u015bli <code>prog[location]<\/code> to linia z END, zwr\u00f3\u0107 \"sukes\" i zatrzymaj.<\/li>\n<li>niech <code>T<\/code> b\u0119dzie docelowym \u0142a\u0144cuchem wskazanym w <code>prog[location]<\/code><\/li>\n<li>niech now\u0105 warto\u015bci\u0105\u00a0<code>location<\/code> b\u0119dzie\u00a0<code>findLine(prog, T)<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Jest jednak powa\u017cny problem: nie wykrywa niesko\u0144czonych p\u0119tli, a je\u015bli program BASIC ma niesko\u0144czon\u0105 p\u0119tl\u0119, to program Pythona r\u00f3wnie\u017c wejdzie w niesko\u0144czon\u0105 p\u0119tl\u0119. Chcieli\u015bmy, aby w tej sytuacji program wydrukowa\u0142 \"infinite loop\". Opuszczamy ten problem, ty go rozwi\u0105\u017c; podajemy podpowied\u017a poni\u017cej.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox6'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Inteligentna Symulacja<\/span><\/div>Napisz funkcj\u0119 <code>execute(prog)<\/code>, kt\u00f3ra wykona poni\u017csze czynno\u015bci. Za\u0142\u00f3\u017cmy, \u017ce <code>prog<\/code> to lista \u0142a\u0144cuch\u00f3w zawieraj\u0105cych program BASIC, podobnie jak poprzednio. Nast\u0119pnie Twoja funkcja powinna zwraca\u0107 \"<code>success<\/code>\" lub \"<code>infinite loop<\/code>\" w zale\u017cno\u015bci od tego, czy program ko\u0144czy si\u0119, czy zap\u0119tli. <strong>Wa\u017cne<\/strong>: nale\u017cy za\u0142o\u017cy\u0107, \u017ce procedura <code>findLine(prog, target)<\/code> zdefiniowana w podzadaniu 2 jest ju\u017c zdefiniowana, nie ma potrzeby ponownego jej zapisu.<a class=\"hintlink\"  id=\"hintlink7\">Wskaz\u00f3wka<\/a> <div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode6' id='usercode6'  cols=10 rows=20   class='pyboxCode RW'>\n# here is a broken solution to get you started\ndef execute(prog):\n  location = 0\n  while True:\n    if location==len(prog)-1: return \"success\"\n    #get T from prog[location] via str.split\n    location = findLine(prog, T)\n<\/textarea><\/div>\n<div id='pbhistory6' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput6\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode6' value='# here is a broken solution to get you started\\ndef execute(prog):\\n  location = 0\\n  while True:\\n    if location==len(prog)-1: return \\\"success\\\"\\n    #get T from prog[location] via str.split\\n    location = findLine(prog, T)\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit6' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch6\" value=\"Input Switch\" onclick=\"pbInputSwitch(6,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(6)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(6,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect6' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(6,'15a.main')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(6,descape($('#defaultCode6').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(6);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse6\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"6\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"a429b1ee864fb0736b87aece2cd0de3d\"\/>\n<div id='pbresults6' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(6);});pbInputSwitch(6,\"Y\");<\/script>\n<\/p>\n<h2>\u0141\u0105cz\u0105c wszystko razem<\/h2>\n<p>Aby przetestowa\u0107 kod jako kompletne rozwi\u0105zanie, skopiuj i wklej poprzednie rozwi\u0105zania do nast\u0119puj\u0105cego szablonu.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform8\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox8'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Symulator BASICa<\/span><\/div>Zr\u00f3b sw\u00f3j symulator BASICa.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode8' id='usercode8'  cols=10 rows=20   class='pyboxCode RW'>\n# def getBASIC from subtask 1\n\n# def findLine from subtask 2\n\n# def execute from subtask 3\n\nprint(execute(getBASIC()))\n<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput8\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode8' value='# def getBASIC from subtask 1\\n\\n# def findLine from subtask 2\\n\\n# def execute from subtask 3\\n\\nprint(execute(getBASIC()))\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit8' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch8\" value=\"Input Switch\" onclick=\"pbInputSwitch(8,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(8)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(8,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect8' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(8,'15a.overall')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(8,descape($('#defaultCode8').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(8);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse8\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"8\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"39f860e0a98a255612bdc9e503a43b2a\"\/>\n<div id='pbresults8' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(8);});pbInputSwitch(8,\"N\");<\/script>\n<\/p>\n<p><table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Je\u015bli tw\u00f3j j\u0119zyk programowania jest nieco bardziej <em>skomplikowany<\/em>, to niemo\u017cliwe jest napisanie programu weryfikuj\u0105cego zako\u0144czenie. Jest to jeden z najstarszych i najwa\u017cniejszych twierdze\u0144 w informatyce, udowodnione przez <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Alan_Turing\">Alana Turinga<\/a> w latach trzydziestych, a dzi\u015b ludzie odnosz\u0105 si\u0119 do tego, m\u00f3wi\u0105c: \"a href=\"https:\/\/pl.wikipedia.org\/wiki\/Problem_stopu\">Problem stopu jest nierozstrzygalny<\/a>\". <\/span><\/td><\/table><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0106wiczenia 15A, 15B i 15C mog\u0105 by\u0107 wykonane w dowolnej kolejno\u015bci. W tej lekcji zrealizujesz d\u0142ugi i z\u0142o\u017cony problem, kt\u00f3ry dla ciebie zosta\u0142 podzielony na cz\u0119\u015bci. W tej lekcji tak\u017ce wprowadzamy str.split(), u\u017cyteczn\u0105 metoda dzielenia \u0142a\u0144cuch\u00f3w: usuwa wszystkie spacje, a &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/15a-pl\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9994","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=9994"}],"version-history":[{"count":21,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9994\/revisions"}],"predecessor-version":[{"id":10396,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9994\/revisions\/10396"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}