{"id":1069,"date":"2020-05-17T16:26:29","date_gmt":"2020-05-17T16:26:29","guid":{"rendered":"https:\/\/kalkus.dev\/?p=1069"},"modified":"2023-08-24T23:18:01","modified_gmt":"2023-08-24T23:18:01","slug":"szach-mat-w-2-27-kb","status":"publish","type":"post","link":"https:\/\/kalkus.dev\/blog\/2020\/05\/17\/szach-mat-w-2-27-kb\/","title":{"rendered":"Szach-mat w 2.27 KB"},"content":{"rendered":"\n<h3>Programi\u015bci to bystrzy ludzie. Niekt\u00f3rzy z nich to jednak naprawd\u0119 piekielnie inteligentne bestie. Nic nie dowodzi tego lepiej ni\u017c perwersyjne zabawy z kodem&#8230;<\/h3>\n\n\n\n<p>Konkurs\u00f3w na dziwny kod jest sporo, wiele te\u017c jest konkurencji. Jedn\u0105 z nich jest <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Quine_(program_komputerowy)\">quine<\/a>. Zabawa polega tu na stworzeniu aplikacji, kt\u00f3ra wypisze w\u0142asny kod \u017ar\u00f3d\u0142owy. Problem zrozumia\u0142y, ale daleki od prostoty. W przypadku JavaScriptu przyk\u0142adowy quine wygl\u0105da tak:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">(function $(){console.log('('+$+')()');})()<\/pre>\n\n\n\n<p>Idea tworzenia quine\u2019\u00f3w ma zreszt\u0105 do\u015b\u0107 ciekawe pocz\u0105tki. Nazwa pochodzi od nazwiska ameryka\u0144skiego filozofa <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Willard_Van_Orman_Quine\">Willarda Van Orman\u2019a Quine\u2019a<\/a>, kt\u00f3ry zajmowa\u0142 si\u0119 m.in. teori\u0105 poznania, empiryzmem i logik\u0105. Szczeg\u00f3lnie wa\u017cnym tematem zajmuj\u0105cym Quine\u2019a w kontek\u015bcie programowania by\u0142a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Indirect_self-reference\">po\u015brednia auto-referencja<\/a>. Ciekaw\u0105 rzecz\u0105 jest te\u017c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Quine%27s_paradox\">Paradoks Quine\u2019a<\/a>. Przyjrzyjmy si\u0119 poni\u017cszemu zdaniu:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>\u201ezwraca fa\u0142sz, gdy poprzedza je cytat\u201d zwraca fa\u0142sz, gdy poprzedza je cytat.<\/p><\/blockquote>\n\n\n\n<p>Zdanie to sugeruje, \u017ce jest fa\u0142szywe, co jest paradoksalne &#8211; poniewa\u017c je\u015bli jest fa\u0142szywe, to, co stwierdza, jest prawd\u0105&#8230;<\/p>\n\n\n\n<p>Poza konkursami istniej\u0105 te\u017c szalone idee. Na przyk\u0142ad <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Ezoteryczny_j%C4%99zyk_programowania\">j\u0119zyki ezoteryczne<\/a> \u2013 skomplikowane, z\u0142o\u017cone, nieczytelne i z pozoru bezsensowne j\u0119zyki programowania, kt\u00f3re jednak\u017ce dzia\u0142aj\u0105. Tak wygl\u0105da kod \u017ar\u00f3d\u0142owy programu wypisuj\u0105cego \u201eHello world\u201d w jednym z nich, <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Brainfuck\">Brainfuck\u2019u<\/a>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">++++++++++[>+++++++>++++++++++>+++&lt;&lt;&lt;-]>++.>+.+++++++\n ..+++.>++.&lt;&lt;+++++++++++++++.>.+++.------.--------.>+.<\/pre>\n\n\n\n<p>Na koniec za\u015b tytu\u0142owe szachy. Niejeden programista ma tendencj\u0119 do uwielbiania program\u00f3w kr\u00f3tkich, zwi\u0119z\u0142ych i konkurowania z innymi w skracaniu. \u201eUsun\u0105\u0142 po\u0142ow\u0119 i robi to samo\u201d \u2013 brzmi dla wielu jak komplement. Konkursy na skracanie kodu id\u0105 tu o kilka krok\u00f3w dalej. Jednym z barwnych przyk\u0142ad\u00f3w s\u0105 <a href=\"https:\/\/nanochess.org\/chess4.html\">szachy Oscara Toledo<\/a> napisane w JavaScript.<\/p>\n\n\n\n<p>Program zajmuje 2.27 KB i&#8230; generuje szachownic\u0119, figury, umozliwia nam gr\u0119 i w dodatku gra z nami. Kod wygl\u0105da tak:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;script>\/\/(c)2010 Oscar Toledo G.\nvar B,i,y,u,b,I=[],G=120,x=10,z=15,M=1e4,l=[5,3,4,6,2,4,3,5,1,1,1,1,1,1,1,1,9,9\n,9,9,9,9,9,9,13,11,12,14,10,12,11,13,0,99,0,306,297,495,846,-1,0,1,2,2,1,0,-1,-\n1,1,-10,10,-11,-9,9,11,10,20,-9,-11,-10,-20,-21,-19,-12,-8,8,12,19,21];function\nX(w,c,h,e,S,s){var t,o,L,E,d,O=e,N=-M*M,K=78-h&lt;&lt;x,p,g,n,m,A,q,r,C,J,a=y?-x:x;\ny^=8;G++;d=w||s&amp;&amp;s>=h&amp;&amp;X(0,0,0,21,0,0)>M;do{if(o=I[p=O]){q=o&amp;z^y;if(q&lt;7){A=q--&amp;\n2?8:4;C=o-9&amp;z?[53,47,61,51,47,47][q]:57;do{r=I[p+=l[C]];if(!w|p==w){g=q|p+a-S?0\n:S;if(!r&amp;(!!q|A&lt;3||!!g)||(r+1&amp;z^y)>9&amp;&amp;q|A>2){if(m=!(r-2&amp;7))return y^=8,I[G--]=\nO,K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);while(n&lt;=t){L=r?l[r&amp;7|32]-h-q:0;if(\ns)L+=(1-q?l[(p-p%x)\/x+37]-l[(O-O%x)\/x+37]+l[p%x+38]*(q?1:2)-l[O%x+38]+(o&amp;16)\/2:\n!!m*9)+(!q?!(I[p-1]^n)+!(I[p+1]^n)+l[n&amp;7|32]-99+!!g*99+(A&lt;2):0)+!(E^y^9);if(s>h\n||1&lt;s&amp;s==h&amp;&amp;L>z|d){I[p]=n,I[O]=m?(I[g]=I[m],I[m]=0):g?I[g]=0:0;L-=X(s>h|d?0:p,L\n-N,h+1,I[G+1],J=q|A>1?0:p,s);if(!(h||s-1|B-O|i-n|p-b|L&lt;-M))return W(),G--,u=J;\nJ=q-1|A&lt;7||m||!s|d|r|o&lt;z||X(0,0,0,21,0,0)>M;I[O]=o;I[p]=r;m?(I[m]=I[g],I[g]=0):\ng?I[g]=9^y:0;}if(L>N||s>1&amp;&amp;L==N&amp;&amp;!h&amp;&amp;Math.random()&lt;.5){I[G]=O;if(s>1){if(h&amp;&amp;c-L\n&lt;0)return y^=8,G--,L;if(!h)i=n,B=O,b=p;}N=L;}n+=J||(g=p,m=p&lt;O?g-3:g+2,I[m]&lt;z|I[\nm+O-p]||I[p+=p-O])?1:0;}}}}while(!r&amp;q>2||(p=O,q|A>2|o>z&amp;!r&amp;&amp;++C*--A));}}}while(\n++O>98?O=20:e-O);return y^=8,G--,N+M*M&amp;&amp;N>-K+1924|d?N:0;}B=i=y=u=0;while(B++&lt;\n120)I[B-1]=B%x?B\/x%x&lt;2|B%x&lt;2?7:B\/x&amp;4?0:l[i++]|16:7;for(a=\n\"&lt;table cellspacing=0 align=center>\",i=18;i&lt;100;a+=++i%10-9?\n\"&lt;th width=60 height=60 onclick=Y(\"+i+\") id=o\"+i+\n\" style='line-height:50px;font-size:50px;border:2px solid #dde' bgcolor=#\"+\n(i*.9&amp;1?\"c0c\":\"f0f\")+\"0f0>\":(i++,\"&lt;tr>\"));\na+=\"&lt;th colspan=8>&lt;select id=t style='font-size:20px'>&lt;option>\u265b&lt;option>\";\ndocument.write(a+\"\u265c&lt;option>\u265d&lt;option>\u265e&lt;\/select>&lt;\/table>\");\nfunction W(){B=b;for(p=21;p&lt;99;++p)if(q=document.getElementById(\"o\"+p)){q.\ninnerHTML=\"\\xa0\\u265f\\u265a\\u265e\\u265d\\u265c\\u265b  \\u2659\\u2654\\u2658\\u2657\\u2656\\u2655\".charAt(I[p]&amp;z);\nq.style.borderColor=p==B?\"red\":\"#dde\";}}W();\nfunction Y(s){i=(I[s]^y)&z;if(i>8){b=s;W();}else if(B&amp;&amp;i&lt;9){b=s;i=I[B]&z;if((i&amp;\n7)==1&amp;(b&lt;29|b>90))i=14-document.getElementById(\"t\").selectedIndex^y;X(0,0,0,21,\nu,1);if(y)setTimeout(\"X(0,0,0,21,u,2\/*ply*\/),X(0,0,0,21,u,1)\",250);}}\n&lt;\/script><\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resultat za\u015b tak:<\/p>\n\n\n\n<iframe loading=\"lazy\" src=\"https:\/\/nanochess.org\/archive\/toledo_javascript_chess_3.html\" width=\"100%\" height=\"550px\" frameborder=\"0\"><\/iframe>\n","protected":false},"excerpt":{"rendered":"<p>Programi\u015bci to bystrzy ludzie. Niekt\u00f3rzy z nich to jednak naprawd\u0119 piekielnie inteligentne bestie. Nic nie dowodzi tego lepiej ni\u017c perwersyjne zabawy z kodem&#8230; Konkurs\u00f3w na dziwny kod jest sporo, wiele te\u017c jest konkurencji. Jedn\u0105 z nich jest quine. Zabawa polega tu na stworzeniu aplikacji, kt\u00f3ra wypisze w\u0142asny kod \u017ar\u00f3d\u0142owy. Problem zrozumia\u0142y, ale daleki od prostoty. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[161,107,204],"tags":[164,162,206,165,163],"_links":{"self":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts\/1069"}],"collection":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/comments?post=1069"}],"version-history":[{"count":8,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":1094,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/posts\/1069\/revisions\/1094"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/media\/1088"}],"wp:attachment":[{"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kalkus.dev\/blog\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}