หมายเหตุ: ตามความต้องการที่เป็นที่นิยมฉันได้ผ่อนคลายกฎเล็กน้อย:
- ขนาด regex สูงสุดเติบโตโดย 1 ไบต์ทุก 5 คำตอบ คำตอบNอาจใช้ถึง29 + ⌈N / 5⌉ไบต์
- คะแนนของแต่ละคำตอบจะเป็น(M / (30 + N / 5)) N
ใน regex golf คุณจะได้รับสายสองชุดและถูกขอให้สร้าง regex ที่สั้นที่สุดซึ่งจับคู่กับสายทั้งหมดในชุดแรก แต่ล้มเหลวกับสายทั้งหมดในชุดที่สอง
นั่นคือสิ่งที่เรากำลังจะทำ แต่ทุกครั้งที่มีคนตอบ regex ของพวกเขาเองจะถูกเพิ่มลงในหนึ่งในสองชุดของสตริง (ตามที่พวกเขาเลือกเอง) ดังนั้นจึงมีคำสั่งที่เข้มงวดในการตอบคำถามนี้
ลองดูตัวอย่าง:
- บอกว่าฉันเริ่มต้นด้วย
abc
(ซึ่งฉันจะไม่) และวางไว้ในชุดการแข่งขัน
- จากนั้นจะมีคำตอบที่สองที่ถูกต้อง
a
เนื่องจากตรงกับข้างต้น (และไม่มีสตริงที่ต้องล้มเหลว) พูดคำตอบนี้ไปในชุดที่ล้มเหลว
- ตอนนี้คำตอบที่สามมีการแข่งขันแต่ล้มเหลวใน
abc
ไปได้คำตอบที่สามจึงเป็นa
b
มาใส่ชุดการแข่งขันกันเถอะ
- คำตอบที่สี่ในขณะนี้มีการแข่งขัน
abc
และแต่ล้มเหลวในb
a
เราจะไม่อนุญาตให้คำตอบที่ซ้ำกันดังนั้น regex c|b
ที่ถูกต้องจะเป็น
สิ่งที่สำคัญคือคำตอบของคุณควรสั้นที่สุด นี่อาจเป็นเรื่องเล็กน้อยสำหรับคำตอบแรก ๆ แต่เมื่อเราได้คำตอบสองสามข้อมันก็จะยากขึ้นและยากขึ้นในการได้คู่ที่ต้องการในตัวละครน้อยที่สุด
สำหรับความท้าทายที่เกิดขึ้นจริงในขั้นต้นชุดการแข่งขันมีPPCG
และชุดล้มเหลว[PPCG]
และฉันได้ให้คำตอบแรกแล้ว
ตอบ
สิ่งสำคัญที่ต้องเข้าใจเกี่ยวกับความท้าทายนี้คือการที่บุคคลเพียงคนเดียวสามารถตอบในเวลาและแต่ละคำตอบขึ้นอยู่กับหนึ่งก่อนที่มันจะ
N
มีไม่ควรจะมีสองคำตอบด้วยเหมือนกัน หากมีคนสองคนตอบพร้อมกันสำหรับบางN
คนผู้ตอบในภายหลัง (แม้ว่าจะมีความแตกต่างไม่กี่วินาที) ควรลบคำตอบของพวกเขาด้วยความกรุณา
หากต้องการทำให้การรันราบรื่นขึ้นลองทำตามขั้นตอนต่อไปนี้เมื่อโพสต์คำตอบของคุณ:
- ตรวจสอบให้แน่ใจว่ามีใครบางคนได้ตรวจสอบความถูกต้องของคำตอบก่อนหน้าอย่างอิสระ (และทิ้งความคิดเห็นที่เกี่ยวข้อง)
- ใช้ชุดทดสอบสองชุดที่พบในคำตอบก่อนหน้านี้และเขียน regex ที่ตรงกับสตริงทั้งหมดในชุดเดียวและไม่มีในชุดอื่น
โพสต์คำตอบของคุณในรูปแบบต่อไปนี้:
# N. [regex flavour] - [regex size in bytes]
[regex]
[link to online regex tester]
[notes, explanation, observations, whatever]
### The next answer has to match the following strings:
[match set]
### And fail on these strings:
[fail set]
ที่N
เป็นจำนวนของคำตอบของคุณ โปรดคัดลอก[match set]
และ[fail set]
จากคำตอบก่อนหน้านี้และผนวก regex ของคุณเข้ากับหนึ่งในนั้น
นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับการท้าทาย! ฉันได้จัดทำเครื่องมือแดชบอร์ดสำหรับความท้าทายที่จะช่วยในการทำบัญชีและมันอาศัยเทมเพลตข้างต้น (ดูด้านล่างของโพสต์)
- ตอนนี้ผู้ใช้รายอื่นควรตรวจทานการส่งของคุณและแสดงความคิดเห็น "การยืนยันความถูกต้อง" หากคำตอบของคุณเป็นไปตามกฎทั้งหมด (ดูด้านล่าง) หากไม่เป็นเช่นนั้นพวกเขาควรแสดงความคิดเห็นเพื่อชี้ให้เห็นถึงข้อบกพร่องใด ๆ จากนั้นคุณมีเวลา 15 นาทีในการแก้ไขปัญหาเหล่านั้น หากคุณไม่ตอบคำถามของคุณจะถือว่าไม่ถูกต้องควรถูกลบออกและบุคคลอื่นอาจโพสต์คำตอบติดตามไปยังคำตอบก่อนหน้า (หากเกิดเหตุการณ์นี้คุณสามารถส่งคำตอบใหม่ได้ตลอดเวลา)
กฎระเบียบเหล่านี้อาจดูค่อนข้างเข้มงวด แต่จำเป็นต้องหลีกเลี่ยงคำตอบที่ไม่ถูกต้องในที่ใดที่หนึ่ง
กฎระเบียบ
- ผู้ใช้สามารถส่งหนึ่งคำตอบต่อระยะเวลา 4 ชั่วโมงเท่านั้น (นี่คือการป้องกันไม่ให้ผู้ใช้ดูคำถามอย่างต่อเนื่องและตอบคำถามให้มากที่สุด)
- ผู้ใช้ไม่สามารถส่งคำตอบสองคำติดต่อกัน (เช่นเนื่องจากฉันส่งคำตอบ 1 ฉันไม่สามารถตอบได้ 2 แต่ฉันทำได้ 3)
- อย่าแก้ไขคำตอบที่ได้รับการยืนยันแล้ว (แม้ว่าคุณจะหาทางย่อให้สั้นลง!)
- หากมีการค้นพบข้อผิดพลาดก่อนหน้านี้ในห่วงโซ่ (เช่นหลังจากคำตอบติดตามได้รับการโพสต์) คำตอบที่กระทำผิดควรจะถูกลบและจะถูกลบออกจากชุดของสตริงที่ส่งใหม่ควรล้มเหลว อย่างไรก็ตามคำตอบทั้งหมดที่โพสต์ตั้งแต่ไม่ควรเปลี่ยนเพื่อสะท้อน
- ระบุรสชาติหนึ่งอย่างชัดเจนว่า regex ของคุณใช้ได้คุณสามารถเลือกรสชาติที่สามารถทดสอบออนไลน์ได้อย่างอิสระ มีรายการที่ดีของการทดสอบออนไลน์เป็นมากกว่าใน StackOverflow โดยเฉพาะอย่างยิ่งRegex101และRegexPlanetควรมีประโยชน์เนื่องจากมันรองรับรสชาติที่หลากหลาย โปรดใส่ลิงค์ไปยังผู้ทดสอบที่คุณเลือกในคำตอบของคุณ ด้วยการเปิดตัวโมเดอเรเตอร์
g
lobal และm
ultiline ในเครื่องทดสอบคุณสามารถทดสอบสตริงทั้งหมดในครั้งเดียวหนึ่งตัวในแต่ละบรรทัด (โมดิฟายเออร์เหล่านี้จะไม่ถูกนับรวมกับขนาด regex ของคุณเพราะมันไม่จำเป็นสำหรับสตริงแต่ละตัว)
- regex ของคุณต้องไม่ว่างเปล่า
- regex ของคุณสำหรับคำตอบNต้องไม่เกิน29 + ⌈N / 5⌉ไบต์ เช่นคำตอบที่ 1 ถึง 5 อาจใช้งานได้สูงสุด 30 ไบต์ (รวมอยู่ด้วย) คำตอบ 6 ถึง 10 อาจใช้งานได้ถึง 31 ไบต์ ... คำตอบ 31 ถึง 35 อาจใช้งานได้สูงสุด 36 ไบต์ ตรวจสอบหน้าแดชบอร์ดเพื่อดูว่ามีอักขระกี่ตัวที่อาจใช้คำตอบถัดไป
- regex ของคุณจะต้องไม่เหมือนกับสตริงใด ๆ ในชุดทดสอบอย่างใดอย่างหนึ่ง
- ห้ามรวมตัวคั่นในการส่งหรือจำนวนไบต์แม้ว่าภาษาโฮสต์ที่เกี่ยวข้องจะใช้ หาก regex ของคุณใช้โมเดอเรเตอร์ให้เพิ่มหนึ่งไบต์ต่อตัวดัดแปลงในขนาด Regex เช่น
/foo/i
จะเป็น 4 ไบต์
เกณฑ์การให้คะแนน
คะแนนคำตอบของแต่ละคำนวนถูกคำนวณเป็น(M / (30 + N / 5)) Nโดยที่Mคือขนาดของ regex ในหน่วยไบต์และNเป็นจำนวน คะแนนของผู้ใช้แต่ละคนเป็นผลผลิตของคำตอบทั้งหมด ผู้ใช้ที่มีคะแนนรวมต่ำสุดชนะ ในกรณีที่ไม่เสมอกันผู้ใช้ที่มีการส่งล่าสุดจะชนะ ฉันจะยอมรับคำตอบล่าสุดของผู้ใช้
หากคุณต้องการคะแนนรวมคุณสามารถคำนวณคะแนนของแต่ละคำตอบเป็นN * (บันทึก (M) - บันทึก (30))และรวมคะแนนเหล่านั้นเหนือคำตอบทั้งหมด นั่นจะทำให้คำสั่งกระดานผู้นำเหมือนกัน
ไม่มีความจำเป็นที่จะรวมคะแนนคำตอบในคำตอบคือเพียงแค่รายงานM แดชบอร์ดความท้าทายที่ด้านล่างของคำถามจะคำนวณคะแนนและในกรณีที่คะแนนสองคะแนนใกล้มากฉันจะตรวจสอบผลลัพธ์อีกครั้งโดยใช้ประเภทที่มีความแม่นยำตามอำเภอใจ
โปรดทราบว่าคะแนนของแต่ละคำตอบนั้นน้อยกว่า 1 เพื่อให้คุณสามารถปรับปรุงคะแนนโดยรวมของคุณโดยการให้คำตอบใหม่ อย่างไรก็ตามยิ่งการส่งผลงานของคุณสั้นลงเท่าไหร่คุณก็ยิ่งมีคะแนนลดน้อยลงเท่านั้น นอกจากนี้คำตอบในภายหลังจะได้คะแนนต่ำกว่าแม้ว่าจะนานขึ้นเนื่องจากเลขชี้กำลังที่เพิ่มขึ้น
แผงควบคุม
ผมเคยเขียนเป็นเครื่องมือแดชบอร์ดเล็ก ๆ น้อย ๆ โดยใช้กองเกร็ดเล็กเกร็ดน้อยขึ้นอยู่กับการทำงานของเครื่องมือเพิ่มประสิทธิภาพมากกว่าที่นี่ ฉันหวังว่าสิ่งนี้จะช่วยให้เราได้รับคำสั่งในความท้าทายที่ขึ้นอยู่กับคำตอบเหล่านี้
สิ่งนี้จะแสดงสถานะปัจจุบันของการท้าทาย - โดยเฉพาะหากมีคำตอบที่ขัดแย้งกันหากคำตอบต้องได้รับการยืนยันหรือหากคำตอบถัดไปสามารถโพสต์ได้
นอกจากนี้ยังสร้างรายการคำตอบทั้งหมดด้วยคะแนนรวมถึงกระดานผู้นำของผู้ใช้ทั้งหมด โปรดยึดรูปแบบความท้าทายด้านบนเพื่อให้แดชบอร์ดสามารถอ่านสตริงที่เกี่ยวข้องจากคำตอบของคุณ ไม่เช่นนั้นคุณอาจไม่ได้รวมอยู่ในกระดานแต้มนำ
โปรดแจ้งให้เราทราบ ( นึกคิดในการแชท ) หากคุณพบข้อบกพร่องใด ๆ หรือมีความคิดบางอย่างเกี่ยวกับวิธีการปรับปรุงประโยชน์ของเครื่องมือ
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);$.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|=SIZE_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){e=parseInt(e);t=parseInt(t);return Math.pow(t/(30+e/5),e)}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).replace("{{SIZE}}",29+Math.ceil((parseInt(t)+1)/5)));$("#challenge-status").addClass("next")}var i={};var s={};answers.forEach(function(e){var t=e.body_markdown.split("\n")[0];var n=$("#answer-template").html();var r=t.match(NUMBER_REG)[0];var o=(t.match(SIZE_REG)||[0])[0];var u=getAnswerScore(r,o);var a=getAuthorName(e);n=n.replace("{{NAME}}",a).replace("{{NUMBER}}",r).replace("{{SIZE}}",o).replace("{{SCORE}}",u.toExponential(5)).replace("{{LINK}}",e.share_link);n=$(n);$("#answers").append(n);i[a]=(i[a]||1)*u;s[a]=(s[a]||0)+1});var o=[];for(var u in i)if(i.hasOwnProperty(u)){o.push({name:u,numAnswers:s[u],score:i[u]})}o.sort(function(e,t){return e.score-t.score});var a=1;o.forEach(function(e){var t=$("#user-template").html();t=t.replace("{{NAME}}",e.name).replace("{{NUMBER}}",a++).replace("{{COUNT}}",e.numAnswers).replace("{{SCORE}}",e.score.toExponential(5));t=$(t);$("#users").append(t)})}var QUESTION_ID=41462;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 SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/;var NUMBER_REG=/\d+/
body{text-align:left!important}#challenge-status{font-weight:700;padding:10px;width:620px}#blocked-users{padding:10px;width:620px}.conflict{background:#994343;color:#fff}.verification{background:#FFDB12}.next{background:#75FF6E}#last-user,#timed-out-users{font-weight:700}#answer-list{padding:10px;width:300px;float:left}#leaderboard{padding:10px;width:290px;float:left}table thead{font-weight:700}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>Size</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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{NUMBER}}</td><td>{{NAME}}</td><td>{{SIZE}}</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> <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}}, using up to {{SIZE}} bytes. </div>