To wyzwanie zależy od odpowiedzi! Kolejność odpowiedzi ma znaczenie, a dokładne zadanie zależy od ostatniej opublikowanej odpowiedzi. Możesz posortować odpowiedzi według najstarszych .
Złóżmy razem kod! Oto 1920 losowych (drukowalnych ASCII) znaków. Pomyśl o nich jak o dużej kupie nieposortowanych puzzli wciąż w pudełku:
L-^=v^Ej2tW8OxNOIecSt4m}tji2O%YRJ;PJ!M|0*oO77$*Rs&2*<c"KI7e%FY^?I=];Y@`x)u)IBk%_a#<E6<yv5O*$kL):
KNGq)2Wa%b)j."(6U|{[UY@`lrCSJ`u0RHX!1z7f,v}n=GvRgkrEZ=YT:4H44bz]iC<](:+FF?Ay'vX~h5QMF)0vaXk1sk@p
Zj).{+l;PBKHABvEP%FnSw>u<_-4B^A>I8Kay&5]vXZJ{fCF]UVZ<!ZpOI$7\Y%`@:%H3wPsX-`/l]ZZ?Q/d`\M<T@'t]zip
{[ovg:6EpCT&'+vU4Heb^;}0AV|?<}M0rAH/^DL"RkT~%$[VUlM]-&We4(P=66},hL~;a`:$'yty.W[g2OWcL~b:Ryj0*eN<
;&-n[F1F=oh0k[NI!xS"]pA@Y;K}'=ekG5yda8J$+`N;:FIx:l,f_LT@sV[]HF@2*vl?|q"GL1j&%e(CyYPqY%3W|@`z}]bp
4_'1Nx{"G2&j6$UWt_#%`sTt2xC}s1P8J<gV24_RWge/aMuyVOjz=zS!1i2s@`Q#@^~@W/k@.YLbKxS:g9?J^p;7ju?B\yC5
x,ZApKS5G4}kx_iM)f4/|su>=[{XSV#{,j5Qn3U.v5LF;HXs%DYm4'+efmU;\}f6j$SFCRC`Gsd37:'3$q=bs;lvsW0Yj^:-
I[94@I|.IpR=}4KB4Z0G4>8PR29'L?n\gk,*4X[-%T`\FC)jj0jl_x<xL8E:G2-"3tT8&E}"sE+SH[7jR%@V)a{!m8K>.rAO
2[dq7GX9nrz8p4}^2mn@q|dF%<.Tl8)Dk?O.<UoE(a*k_=4+u!h$^bVd:$jS#EHFh@Z=y=ib^~/~lEJ^SQ3E_t#&^IOov7v8
~j#I#OHgxg{DZDyCsq-(GVq}HbiG,JV?eJ~5wJ;bSt@;3LI!2(6gIT92>}`_dw;YF@ccTIEz\Gu@2(}J2I1"S{R(2niIYPp9
8A3iiP[*!SH2*SN8'`V?w4Ufx2H*Az%{}FlUdH31TJ5{:ge^N91^;9Gj`Uqf'$_|8P"kHR1w.(ASwmN)U-~q"[XcWbqPnns=
d.ZoPJ}$Xc2lA>HN28`(d0y+UAr*sQ=?KE07=\FsVN(#?&hRabS%BVI#<`O$o#4x5ZFFLGDcA4t?&Eh~Z$oBWwNSNv`^;vO'
2&9egng~L#\QkfMG?S/n@%-VA[?f9K&3"V%P#Sv0!D<,GV:Z;3c&zFe^k&^0b7fAjvrbMc^Lq7k$h=YL<h7<0\NK>~Q=uUv)
4cI$.'b-RVS-=rom:=8QR=c>9am-^5F[XGv>E/>|]~\']3{r{kTc?ee1v=;I7]52#NE)~A;}!z>5?hi{5<9FtWH6{VO_Y-Jy
Mw>{l8n#mD,kl'8cG^.7sy=QqU-3~SKGs5(.Ta]:-Vfr'NS$o*q:w6e$&7spk3{CFT'l_hGY0-0Xui*5i^0^fO@6?2IdCn_C
lPKaJ6]0t!u>v8<d'Vby]8kEHh04p(YI)&7w82BrGB3PkI,s+%7ux5)gau`G!8F8hLa4[lfD55Xf3Hqy*-K,?;2'fxH3JWYE
Z.[N`:[K:CY@TzKX4TMXsm{Xbd:B3)Gy[mlwnC$>)z`:k=C\0ho/v{57#+2,*%]>p~vI2^C:2DebJR>.ESw^wd2N<~]O9sOQ
`_yvIw&Ryf%JgT@W(G1wfU3.4G3U}x1jKJzJY\S9n$2~P;F}*eT9UXcTNBTrTs>~0v_Oi.y8ofX6i5u$;'^"q][QhTb*gO[U
n'R0"v1r+9fv;5G7Bg=D:c*a=1@[}7}dYOO{Mz2&@6`jnNq.QcBDM9Dd=R.*=MqZ93#'{AJJFqx<{qb':B!H8ig1L%T\Vuc"
(h$i3`,scX'hqpbw"=nY`*Lu:h1wR{+-`\^3cQkIWfq)3?&p;~pvDW$o7\O|R6rB2{PX.s#G6A.s<OA_,TI_b*&lO@L3KrQv
„Podłoga”, na której zastanawiamy, to początkowo siatka odstępów 96 x 20 (punkt kodowy 0x20). Każda odpowiedź może poruszać się po sąsiednich blokach elementów i wybrać do 10 elementów układanki (postaci) i dodać je do układanki, aby utworzyć nowy program. Ten program musi wydrukować numer twojej odpowiedzi (numerowany kolejno, zaczynając od 1).
Odpowiadanie
Kluczową rzeczą do zrozumienia w tym wyzwaniu jest to, że tylko jedna osoba może odpowiedzieć na raz, a każda odpowiedź zależy od poprzedniej .
Nigdy nie powinny być dwie odpowiedzi z tym samym numerem N . Jeśli dwie osoby jednocześnie odpowiedzą na jakieś N , ten, który odpowiedział później (nawet jeśli jest to różnica kilku sekund), powinien uprzejmie usunąć swoją odpowiedź.
Aby ten przebieg przebiegał nieco płynniej, postaraj się przestrzegać następujących kroków podczas publikowania odpowiedzi:
- Upewnij się, że ktoś niezależnie zweryfikował poprawność poprzedniej odpowiedzi (i zostawił odpowiedni komentarz).
Weź poprzednią „podłogę układanki” i „pudełko elementów”. Możesz przesuwać dowolny sąsiadujący blok znaków na podłodze układanki swobodnie jako jednostka (postacie sąsiadują, jeśli dotykają się w kierunku poziomym lub pionowym). Sąsiednich bloków nie można ponownie podzielić. Przykłady na siatce 5x4:
Last answer: Valid: Invalid: |a bc| |d g | |a bc| | bc | |a bc| | d e | |fa bc| |d e | -or- |d e | -or- | e | | f g| | e | | f g| |f g | |df g | | h | |h | | h | | h | | h |
W prawidłowym przykładzie
a
został przesunięty o krok w dół i w prawo.df
Blok został przeniesiony do lewej górnej.bce
Blok został przeniesiony przez 1.g
było poruszyć się o dwa w górę i jeden w lewo.h
Blok został przeniesiony przez całą drogę w lewo.
W pierwszym nieprawidłowym przykładziedf
został rozdzielony. W drugima
został usunięty. W trzecimdf
został obrócony.Następnie usuń co najmniej 1 i maksymalnie 10 znaków z „pudełka elementów” i wybierz tyle spacji na „podłodze puzzli”, które zastąpisz tymi postaciami. To jest twój przesłany program. W odpowiedzi umieść zarówno nowe „piętro układanki”, jak i „pudełko elementów”.
Opublikuj swoją odpowiedź w następującym formacie:
# N. [Language], [number of blocks moved], [number of pieces added] [grid that is your program] ### Remaining pieces: [grid of remaining characters] [notes, explanation, observations, whatever]
gdzie
N
jest numer twojej odpowiedzi.Jest to absolutnie niezbędne do podjęcia wyzwania! Udostępniłem narzędzie pulpitu nawigacyjnego, które pomaga w prowadzeniu księgowości i opiera się na powyższym szablonie. (Zobacz dół posta.)
- Proszę uwzględnić pionowe paski po bokach podłogi układanki, ponieważ w przeciwnym razie Stack Exchange nie wyświetli pustych linii. Te dwie kolumny nigdy nie powinny być uważane za część kodu.
- Inny użytkownik powinien teraz przejrzeć przesłane zgłoszenie i zostawić komentarz „Poprawność zweryfikowana”, jeśli odpowiedź jest zgodna ze wszystkimi zasadami (patrz poniżej). Jeśli nie, powinni zostawić komentarz wskazujący na wszelkie wady. Masz wtedy 15 minut na rozwiązanie tych problemów. Jeśli tego nie zrobisz, twoja odpowiedź zostanie uznana za nieważną, powinna zostać usunięta, a ktoś inny może opublikować odpowiedź uzupełniającą na poprzednią. (Jeśli tak się stanie, możesz przesłać nową odpowiedź w dowolnym momencie).
Przepisy te mogą wydawać się dość surowe, ale są konieczne, aby uniknąć nieprawidłowych odpowiedzi gdzieś w łańcuchu.
Zasady
- Użytkownik może przesłać tylko jedną odpowiedź na okres 4 godzin. (Ma to na celu uniemożliwienie użytkownikom ciągłego oglądania pytania i udzielania jak największej odpowiedzi).
- Użytkownik nie może przesłać dwóch odpowiedzi z rzędu. (np. odkąd przesłałem odpowiedź 1, nie mogę odpowiedzieć 2, ale mógłbym zrobić 3)
- Żadnego języka nie można używać więcej niż jeden raz! Różne wersje tego samego języka są liczone jako ten sam język. Języki liczą się jako odrębne, jeśli są tradycyjnie nazywane dwoma różnymi nazwami. (Mogą występować tu pewne niejasności, ale nie pozwól, aby zrujnowało to konkurs).
- Nie edytuj odpowiedzi, które zostały zweryfikowane.
Jeśli błąd zostanie wykryty wcześniej w łańcuchu (tj. Po opublikowaniu odpowiedzi uzupełniających), odpowiedź naruszającą należy usunąć. Jednak wszystkie odpowiedzi, które zostały opublikowane od tego czasu, nie powinny być zmieniane w celu odzwierciedlenia tego.
Twój program musi wydrukować
N
, numer twojej odpowiedzi, STDOUT lub najbliższą alternatywę. Musi to być pełny program i nie może zakładać środowiska REPL.- Możesz wydrukować lub wstawić nowy wiersz.
Niech K będzie liczbą bloków został przeniesiony za odpowiedź (bez względu na to, jak daleko) i P liczba znaków, które dodaje się do podłogi puzzle, wynik z odpowiedź będzie 10 + N - M - P . Jako przykład 5x4, jeśli twoja odpowiedź zmieniła podłogę układanki w następujący sposób
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
Twój wynik wyniósłby 10 + N - 2 - 3 = N + 5 , ponieważ dwa bloki zostały przeniesione (
h
ibce
), a trzy znaki zostały dodane (i
,j
ik
).Zwycięzcą zostanie użytkownik, który zgromadzi największą liczbę punktów w swoich odpowiedziach. W przypadku remisu wygrywa użytkownik z najnowszą odpowiedzią. Przyjmuję najnowszą odpowiedź zwycięzcy.
- W mało prawdopodobnym przypadku, gdy wszystkie postacie zostaną wyczerpane, wyzwanie kończy się.
Deska rozdzielcza
Oto małe narzędzie Dashboard, które powinno pomóc w niezbędnej księgowości dla tego rodzaju wyzwań.
Wyświetla bieżący stan wyzwania - w szczególności, jeśli istnieją sprzeczne odpowiedzi, jeśli odpowiedź wymaga weryfikacji lub jeśli można opublikować następną odpowiedź.
Tworzy również listę wszystkich używanych języków, a także tabelę wyników wszystkich użytkowników. Proszę trzymać się powyższego formatu odpowiedzi, aby pulpit nawigacyjny mógł odczytać odpowiednie ciągi z twoich odpowiedzi. W przeciwnym razie możesz nie zostać uwzględniony w tabeli wyników.
Daj mi znać ( najlepiej na czacie ), jeśli zauważysz jakieś błędy lub masz jakieś pomysły, w jaki sposób można poprawić użyteczność narzędzia.
function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentsUrl(e,t){return"http://api.stackexchange.com/2.2/answers/"+e+"/comments?page="+t+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){$.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){answers.push.apply(answers,e.items);if(e.has_more)getAnswers();else{page=1;getFinalComments()}}})}function getFinalComments(){answers=answers.filter(shouldHaveHeading);answers=answers.filter(shouldHaveScore);console.log(answers);$.ajax({url:commentsUrl(answers[0].answer_id,page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){comments.push.apply(comments,e.items);if(e.has_more)getAnswers();else process()}})}function shouldHaveHeading(e){var t=false;try{t|=/^(#|<h).*/.test(e.body_markdown);t|=["-","="].indexOf(e.body_markdown.split("\n")[1][0])>-1}catch(n){}return t}function shouldHaveScore(e){var t=false;try{t|=HEADER_REG.test(e.body_markdown.split("\n")[0])}catch(n){}return t}function findDuplicates(e){var t=false;var n={};e.forEach(function(e){var r=e.body_markdown.split("\n")[0].match(NUMBER_REG)[0];if(n[r])t=t||r;n[r]=true});return t}function hasBeenVerified(e,t){var n=false;t.forEach(function(t){n|=/correctness verified/i.test(t.body_markdown)&&e!=t.owner.user_id});return n}function userTimedOut(e){return NOW-e.creation_date*1e3<MSEC_PER_ANSWER}function getAuthorName(e){return e.owner.display_name}function getAnswerScore(e,t,n){e=parseInt(e);t=parseInt(t);n=parseInt(n);return 10+e-t-n}function process(){$("#last-user").append(answers[0].owner.display_name);var e=answers.slice(1).filter(userTimedOut).map(getAuthorName).join(", ");if(e)$("#timed-out-users").append(e);else $("#timed-out-notice").hide();var t=answers[0].body_markdown.split("\n")[0].match(NUMBER_REG)[0];var n=findDuplicates(answers);if(n){var r=$("#status-conflict-template").html();$("#challenge-status").append(r.replace("{{NUMBER}}",n));$("#challenge-status").addClass("conflict")}else if(!hasBeenVerified(answers[0].owner.user_id,comments)){var r=$("#status-verification-template").html();$("#challenge-status").append(r.replace("{{NUMBER}}",t));$("#challenge-status").addClass("verification")}else{var r=$("#status-next-template").html();$("#challenge-status").append(r.replace("{{NUMBER}}",t).replace("{{NEXT}}",parseInt(t)+1));$("#challenge-status").addClass("next")}var i={};var s={};var o=[];answers.forEach(function(e){var t=e.body_markdown.split("\n")[0];var n=$("#answer-template").html();var r=t.match(HEADER_REG)||[0,-1,"",0,0];var u=r[1];var a=r[2];var f=r[3];var l=r[4];var c=getAnswerScore(u,f,l);var h=getAuthorName(e);n=n.replace("{{NAME}}",h).replace("{{NUMBER}}",u).replace("{{LANGUAGE}}",a).replace("{{MOVED}}",f).replace("{{ADDED}}",l).replace("{{SCORE}}",c).replace("{{LINK}}",e.share_link);n=$(n);$("#answers").append(n);i[h]=(i[h]||0)+c;s[h]=(s[h]||0)+1;o.push({lang:a,link:e.share_link})});var u=[];for(var a in i)if(i.hasOwnProperty(a)){u.push({name:a,numAnswers:s[a],score:i[a]})}u.sort(function(e,t){return t.score-e.score});var f=1;u.forEach(function(e){var t=$("#user-template").html();t=t.replace("{{NAME}}",e.name).replace("{{NUMBER}}",f++).replace("{{COUNT}}",e.numAnswers).replace("{{SCORE}}",e.score);t=$(t);$("#users").append(t)});o.sort(function(e,t){return e.lang.localeCompare(t.lang)});o.forEach(function(e){var t=$("#lang-template").html();t=t.replace("{{LANGUAGE}}",e.lang).replace("{{LINK}}",e.link);t=$(t);$("#lang-list").append(t)})}var QUESTION_ID=44966;var ANSWER_FILTER="!*cCFgu5yS6BFQP8Z)xIZ.qGoikO4jB.Ahv_g-";var COMMENT_FILTER="!)Q2B_A497Z2O1kEH(Of5MUPK";var HOURS_PER_ANSWER=4;var MSEC_PER_ANSWER=HOURS_PER_ANSWER*60*60*1e3;var NOW=Date.now();var answers=[],comments=[],page=1;getAnswers();var NUMBER_REG=/\d+/;var HEADER_REG=/(\d+)[.]\s*([^,]*[^,\s])\s*,[^,\d]*(\d+)[^,\d]*,[^,\d]*(\d+)/
body { text-align: left !important} #challenge-status { font-weight: bold; padding: 10px; width: 800px; } #blocked-users { padding: 10px; width: 800px; } .conflict { background: #994343; color: white; } .verification { background: #FFDB12; } .next { background: #75FF6E; } #last-user, #timed-out-users { font-weight: bold; } #answer-list { padding: 10px; width: 350px; float: left; } #leaderboard { padding: 10px; width: 280px; float: left; } #languages { padding: 10px; width: 130px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="challenge-status"> </div> <div id="blocked-users"> User <span id="last-user"></span> has posted the last answer, and may not post the next one. <div id="timed-out-notice"><span id="timed-out-users"></span> have answered within the last four hours and may not answer again yet. (If a user appears in this list twice, they must have answered twice within four hours!)</div> </div> <div id="answer-list"> <h2>List of Answers (newest first)</h2> <table class="answer-list"> <thead> <tr><td>No.</td><td>Author</td><td>Language</td><td>M</td><td>P</td><td>Score</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <div id="leaderboard"> <h2>Leaderboard</h2> <table class="leaderboard"> <thead> <tr><td>No.</td><td>User</td><td>Answers</td><td>Score</td></tr> </thead> <tbody id="users"> </tbody> </table> </div> <div id="languages"> <h2>Languages</h2> <table class="languages"> <tbody id="lang-list"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{NUMBER}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{MOVED}}</td><td>{{ADDED}}</td><td>{{SCORE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="user-template"> <tr><td>{{NUMBER}}</td><td>{{NAME}}</td><td>{{COUNT}}</td><td>{{SCORE}}</td></tr> </tbody> </table> <table style="display: none"> <tbody id="lang-template"> <tr><td><a href="{{LINK}}">{{LANGUAGE}}</a></td></tr> </tbody> </table> <div id="status-conflict-template" style="display: none"> There is more than one answer with number {{NUMBER}}!<br> Please resolve this conflict before posting any further answer. </div> <div id="status-verification-template" style="display: none"> Answer {{NUMBER}} has not been verified!<br> Please review the answer and post a comment reading "Correctness verified." on the answer if it is valid. Note that this has to be done by a different user than the author of the answer! </div> <div id="status-next-template" style="display: none"> Answer {{NUMBER}} has been verified!<br> You may now post answer {{NEXT}}. </div>
Przydatne skrypty
Oto dwa skrypty CJam dla Twojej wygody. Możesz je uruchomić w tłumaczu online .
- Aby usunąć pierwszą i ostatnią kolumnę z podłogi układanki (aby uzyskać rzeczywisty kod), wklej ją do STDIN i uruchom
qN/1f>Wf<N*
. - Aby wstawić kod do prostokąta 96 x 20 i dodać wokół niego kolumny pionowych pasków, uruchom
qN/La20*+20<{96S*+96<'|\+'|+}%N*
kod. Aby dowiedzieć się, które postacie zostały usunięte z pudełka złożonego z dwóch odpowiedzi, wklej oba do STDIN (bez pustej linii między nimi) i uruchom
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Pokaże także, czy postacie zostały dodane (choć nie ile).
Jeśli ktoś chce je zaimplementować jako fragmenty stosu, chętnie dodam je do tego postu.