กำหนดสีของตารางหมากรุก


59

ความท้าทายของคุณคือการเขียนโปรแกรมที่ให้สีของสี่เหลี่ยมจัตุรัสที่กำหนดจากกระดานหมากรุก นี่คือลักษณะของกระดานหมากรุก:

ป้อนคำอธิบายรูปภาพที่นี่

คุณจะเห็นได้ว่าจตุรัส a1นั้นมืดและh1เป็นสี่เหลี่ยมจัตุรัส โปรแกรมของคุณจำเป็นต้องมีเอาต์พุตdarkหรือlightเมื่อกำหนดสี่เหลี่ยม ตัวอย่างบางส่วน:

STDIN:  b1
STDOUT: light

STDIN:  g6
STDOUT: light

STDIN:  d4
STDOUT: dark

กฎระเบียบ:

  • คุณจำเป็นต้องให้โปรแกรมเต็มรูปแบบที่ใช้และใช้ STDIN STDOUT เพื่อส่งออกหรือdarklight
  • สมมติว่าอินพุตถูกต้องเสมอ ( [a-h][1-8])
  • นี่คือจำนวนไบต์ที่สั้นที่สุดจึงชนะ!

ป้ายบอกคะแนน

var QUESTION_ID=63772,OVERRIDE_USER=8478;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 commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{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="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


1
ทำไมไม่มีใครลอง <> ^ Fish?
ghosts_in_the_code

คำตอบ:


46

GS2 , 17 15 ไบต์

de♦dark•light♠5

ซอร์สโค้ดใช้การเข้ารหัสCP437 ลองออนไลน์!

การตรวจสอบ

$ xxd -r -ps <<< 6465046461726b076c696768740635 > chess.gs2
$ wc -c chess.gs2 
15 chess.gs2
$ gs2 chess.gs2 <<< b1
light

มันทำงานอย่างไร

d               Add the code points of the input characters.
 e              Compute the sum's parity.
  ♦             Begin a string literal.
   dark
       •        String separator.
        light
             ♠  End the string literal; push as an array of strings.
              5 Select the element that corresponds to the parity.

8
ที่น่าตื่นตาตื่นใจ! ด้วย 9 ไบรท์ที่หลีกเลี่ยงไม่ได้ 3 ไบท์ outgolfing Pyth และ CJam นั้นยอดเยี่ยมมาก
isaacg

29
วัวศักดิ์สิทธิ์พวก GS2 คือ Pyth ใหม่! บางคนคิดวิธีใช้มันให้ดีก่อนเดนนี ... ไม่เป็นไร
ETHproductions

56

Python 2, 41 38 ไบต์

print'ldiagrhkt'[int(input(),35)%2::2]

3 ไบต์ต้องขอบคุณ Mego สำหรับการแทรกสตริง

"g6"จะเข้าเช่น นั่นคือแสงและความมืดพันกัน


นั่นเป็นเพียงความงดงามด้วยการพัวพันสตริง
Wayne Werner

5
ฉันจะบอกว่านั่นint(input(),35)เป็นส่วนที่ยอดเยี่ยม ฉันคิดถึงการเชื่อมโยงสตริง แต่วิธีป้อนข้อมูลของคุณบันทึกได้มากที่สุด
mbomb007

26

Hexagony , 34 32 ไบต์

,},";h;g;;d/;k;-'2{=%<i;\@;trl;a

กางออกและมีพา ธ การดำเนินการหมายเหตุประกอบ:

ป้อนคำอธิบายรูปภาพที่นี่
แผนภาพสร้างขึ้นด้วยTimwi ของที่น่าตื่นตาตื่นใจHexagonyColorer

เส้นทางสีม่วงเป็นเส้นทางเริ่มต้นที่อ่านตัวละครทั้งสองคำนวณความแตกต่างของพวกเขาและใช้มันแบบโมดูโล 2. <จากนั้นทำหน้าที่เป็นสาขาที่เส้นทางสีเทาเข้ม (ผล1) พิมพ์darkและเส้นทางสีเทาอ่อน (ผล0) lightพิมพ์

สำหรับฉันคำนวณความแตกต่างและโมดูโลนี่คือไดอะแกรมของตารางหน่วยความจำ (ด้วยค่าที่ใช้สำหรับอินพุตa1):

ป้อนคำอธิบายรูปภาพที่นี่
ไดอะแกรมที่สร้างขึ้นด้วยความลึกลับที่น่าทึ่งยิ่งขึ้นของ Timwi (ซึ่งมีดีบักเกอร์แบบภาพสำหรับ Hexagony)

ตัวชี้หน่วยความจำเริ่มต้นที่แถวขอบป้ายกำกับที่เราอ่านตัวอักษร }ย้ายไปที่ขอบป้ายกำกับเทือกเขาที่เราอ่านหลัก "ย้ายไปที่ขอบที่มีข้อความต่างที่-คำนวณความแตกต่างของทั้งสอง 'ย้ายไปยังเซลล์ที่ไม่ติดฉลากที่เราใส่2และ{=ย้ายไปยังเซลล์ที่มีข้อความว่าสมัย%ที่เราคำนวณแบบโมดูโลด้วย

นี่อาจจะสามารถเล่นกอล์ฟได้โดยไม่กี่ไบต์โดยการนำบางส่วนกลับมาใช้ใหม่;แต่ฉันสงสัยว่ามันสามารถเล่นกอล์ฟได้มากโดยที่ไม่ลงไปจนถึงความยาวด้านข้าง 3


7
โอ้โหสีสวย!
Celeo

1
ภาษานี้เป็นใหม่ให้ฉัน แต่ฉันประหลาดใจที่ความสามารถของคุณจะเกิดขึ้นกับบางสิ่งบางอย่างที่วางแผนไว้มากกว่าที่ผมคิดว่าเป็นไป
qwr

18
ฉันไม่เข้าใจภาษากอล์ฟเหล่านี้ทั้งหมด
juniorRubyist

4
@ codeSwift4Life Hexagony อยู่ไกลจากการเป็นภาษากอล์ฟ สำหรับงานเล็ก ๆ น้อย ๆ เช่นนี้อาจเป็นการแข่งขันที่สมเหตุสมผลเนื่องจากมีคำสั่งอักขระเดียว แต่มีความจำเป็นมากกว่าที่ใช้ร่วมกันในภาษา 2D อื่น ๆ อีกมากมายรวมถึง Befunge, Piet,> <> งานที่ไม่เกี่ยวกับความจำเป็นจะต้องใช้รหัสจำนวนมากและโปรแกรมที่ซับซ้อนเนื่องจากรูปแบบหน่วยความจำแปลก ๆ ของ Hexagony มันไม่มีความหมายว่าเป็นภาษาที่กระชับ แต่เป็นภาษาที่แปลกใหม่และแปลกประหลาดสำรวจการเขียนโปรแกรมบนกริดหกเหลี่ยม
Martin Ender

3
@qwr ฉันคิดว่าการวางแผนคือจุดของ esolangs ;)
Martin Ender

21

CJam, 18 ไบต์

r:-)"lightdark"5/=

การสาธิตออนไลน์

การผ่า

r               e# Read a token of input
:-              e# Fold -, giving the difference between the two codepoints
)               e# Increment, changing the parity so that a1 is odd
"lightdark"5/   e# Split the string to get an array ["light" "dark"]
=               e# Index with wrapping, so even => "light" and odd => "dark"

34
รหัสของคุณกำลังยิ้ม:-)
Doorknob

8
ฉันได้พิจารณาถึงประสิทธิภาพที่เท่าเทียมกัน:^)
Peter Taylor

2
โปรดอธิบายวิธีการทำงานของมัน
Fogmeister

@Fogmeister เพิ่มคำอธิบาย
ปีเตอร์เทย์เลอร์

17

sed, 37

s/[1357aceg]//g
/^.$/{clight
q}
cdark

คำอธิบาย

s/[1357aceg]//gลบพิกัดคี่ที่จัดทำดัชนีทั้งหมด บัฟเฟอร์รูปแบบที่ได้จะมีความยาว 1 สำหรับ "แสง" หรือความยาว 0 หรือ 2 สำหรับ "มืด" /^.$/ตรงกับรูปแบบที่มีความยาว 1 แบบและcแขวนรูปแบบไปที่ "แสง" และquits ไม่เช่นนั้นรูปแบบจะcถูกแขวนคอเป็น "มืด"


qซ้ำซ้อนและคุณสามารถตรวจสอบครั้งแรกมืดแทนที่จะ/../, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...
Kritixi Lithos

14

Pyth, 18 ไบต์

@c2"lightdark"iz35

ตีความอินพุตเป็นหมายเลขฐาน 35, สับlightdarkครึ่งพิมพ์


13

ShadyAsFuck, 91 ไบต์ / BrainFuck, 181 ไบต์

โปรแกรม BrainFuck ตัวแรกของฉันขอขอบคุณ Mego สำหรับความช่วยเหลือและชี้ให้ฉันไปยังที่เก็บอัลกอริทึม (นั่นหมายความว่าฉันไม่ได้ทำด้วยตัวเอง แต่คัดลอกอัลกอริทึมที่มีอยู่บางส่วนยังคงเป็นประสบการณ์ =)

NKnmWs3mzhe5aAh=heLLp5uR3WPPPPagPPPPsuYnRsuYgGWRzPPPPlMlk_PPPPPP4LS5uBYR2MkPPPPPPPP_MMMkLG]

นี่เป็นคำแปลจาก brainfuck ของฉัน:

,>,[<+>-]++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[-]++++++++++[>++++++++++<-]<[<+>>+<-]<[>+<-]+>>[>++++++++.---.--.+.++++++++++++.<<<->>[-]]<<[>>>.---.+++++++++++++++++.-------.<<<-]

การพัฒนาโดยใช้ล่ามนี้ / ดีบัก

ฉันขโมยโค้ดสองชุดสำหรับdivmodและif/elseจากที่นี่ (ขอบคุณ @Mego!)

,>,               read input
[<+>-]            add
++<               set second cell to 2 

ตอนนี้เรามีการกำหนดค่าเซลล์>sum 2ตอนนี้เราทำการอัลกอริทึม divmod:

[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>
[-]>

ผลลัพธ์ของ divmod มีลักษณะเช่นนี้0 d-n%d >n%d n/dแต่เราได้ทำให้เป็นศูนย์d-n%dและกำลัง zeroing เซลล์ถัดไปด้วย:

>[-]

เติมเซลล์หนึ่งจนถึงค่า100เพื่อให้ได้ผลลัพธ์ที่ง่ายขึ้น:

++++++++++[>++++++++++<-]< 

ตอนนี้การกำหนดค่าคือ>cond 0 100และสำหรับการใช้if/elseอัลกอริทึมเราต้องการตัวแปรชั่วคราวสองตัวดังนั้นเราจึงเลือกการกำหนดค่าtemp0 >c temp1 100

c[<temp0+>>temp1+<c-]<temp0[>c+<temp0-]+
>>temp1[
 #>++++++++.---.--.+.++++++++++++.<         outputs light
 <<temp0-
>>temp1[-]]
<<temp0[
 #>>>.---.+++++++++++++++++.-------.<<<     outputs dark
temp0-]

12

Python 2, 45 ไบต์

print'dlairgkh t'[sum(map(ord,input()))%2::2]

"a1"จะเข้าเช่น ลองออนไลน์


สิ่งนี้จะไม่สามารถใช้งานได้ใน Python 3 เนื่องจากการขาดการ parens สำหรับการพิมพ์
isaacg

ไม่สามารถทดสอบได้ในขณะนี้ แต่สิ่งที่ชอบ"ldiagrhgt"[expression::2]ควรทำงานได้ในขณะที่บันทึกไบต์หรือสอง
FryAmTheEggman


10

รหัสเครื่องทัวริง, 235 ไบต์

ใช้ไวยากรณ์ตารางกฎที่กำหนดไว้ที่นี่

0 a _ r 1
0 c _ r 1
0 e _ r 1
0 g _ r 1
0 * _ r 2
1 2 _ r 3
1 4 _ r 3
1 6 _ r 3
1 8 _ r 3
2 1 _ r 3
2 3 _ r 3
2 5 _ r 3
2 7 _ r 3
* * _ r 4
3 _ l r A
A _ i r B
B _ g r C
C _ h r D
D _ t r halt
4 _ d r E
E _ a r F
F _ r r G
G _ k r halt

1
นี่อาจเป็นสิ่งที่น่าอัศจรรย์ที่สุดที่ฉันเคยเห็นฮ่า ๆ ๆ
ลูคัส


9

TI-BASIC, 66 ไบต์

ทดสอบกับเครื่องคิดเลข TI-84 +

Input Str1
"light
If inString("bdfh",sub(Str1,1,1)) xor fPart(.5expr(sub(Str1,2,1
"dark
Ans

นี่คือรูปแบบที่น่าสนใจมากขึ้นในบรรทัดที่สามซึ่งน่าเศร้าขนาดเท่ากัน:

Input Str1
"dark
If variance(not(seq(inString("bdfh2468",sub(Str1,X,1)),X,1,2
"light
Ans

คุณคิดว่า TI-BASIC น่าจะเหมาะกับความท้าทายนี้เนื่องจากมันเกี่ยวข้องกับ modulo 2 ไม่ใช่; การแก้ปัญหาเหล่านี้ดูเหมือนจะสั้นที่สุด

เราใช้ไบต์จำนวนมากเพื่อรับอักขระทั้งสองในสตริง แต่สิ่งที่มีค่าใช้จ่ายจริงๆคือตัวอักษรตัวพิมพ์เล็กสองไบต์สิบสาม


9

Befunge-93 , 39 37 33 31 ไบต์

เครดิตทั้งหมดให้แก่Linusผู้แนะนำวิธีแก้ปัญหา 31 ไบต์:

<>:#,_@  v%2-~~
"^"light"_"krad

ทดสอบโดยใช้ล่ามนี้

คำอธิบาย

<        v%2-~~

<ที่จุดเริ่มต้นส่งตัวชี้การเรียนการสอนทางด้านซ้ายที่มันล้อมรอบไปทางขวา จากนั้นจะอ่านตัวละครสองตัวจากอินพุตเป็น ASCII ลบออกและทำโมดูโลด้วย 2 ด้วยaและ1ทั้งคู่ก็แปลก (ในแง่ของรหัส ASCII) มันใช้งานได้ การvเปลี่ยนเส้นทางตัวชี้คำสั่งลงไป ...

"^"light"_"krad

... เข้าสู่_ซึ่งจะส่งตัวชี้คำสั่งไปทางซ้ายหากด้านบนสุดของสแต็กเป็น 0 และไปทางขวาเป็นอย่างอื่น อักขระของ "light" หรือ "dark" ตามลำดับจะถูกส่งไปยังสแต็กในลำดับที่กลับกัน เส้นทางทั้งสองกดไป^ทางซ้ายซึ่งจะส่งตัวชี้คำสั่งขึ้นไป ...

 >:#,_@

... ไปยังส่วนเอาต์พุต :ทำซ้ำด้านบนของสแต็ก#กระโดดข้าม,และไปยัง_ซึ่งส่งตัวชี้คำสั่งไปทางขวาหากด้านบนของสแต็คเป็น 0 และซ้ายเป็นอย่างอื่น เมื่อสแต็กว่างเปล่าด้านบนของสแต็ค (หลังจาก:) คือ 0 ดังนั้นตัวชี้คำสั่งฮิต@ที่จะหยุดการดำเนินการ มิฉะนั้นจะกระทบกับ,ซึ่งส่งเอาต์พุตด้านบนของสแต็กเป็นอักขระจากนั้น#จะข้ามไปที่:และเข้าสู่>ซึ่งจะเริ่มกระบวนการอีกครั้ง


บันทึก byte ใช้rad"v>"kโดยไม่ต้องเว้นวรรคหรือไม่?
Linus

@Lusus: "พื้นที่จำเป็นเพราะไม่เช่นนั้นเอาต์พุตจะเป็นdar kเช่นนั้น" ลองใช้ในล่ามออนไลน์ที่เชื่อมโยง
El'endia Starman

1
คุณถูก. อย่างไรก็ตามฉันจะทำสิ่งนี้ได้อย่างรวดเร็ว แต่ฉันจะได้รับเพียง 2 ไบต์ภายใต้คุณ ... <>:#,_@ v%2-~~\n"^"light"_"krad, แก้ไข newline
Linus

@Linus: นั่นยอดเยี่ยม ขอบคุณ!
El'endia Starman

@ JamesHolderness ไม่มีความรู้สึกยาก คุณถูกต้องที่จะชี้ให้เห็นว่าสิ่งนี้ไม่ทำงานในล่าม Befunge-93 ดั้งเดิมข้อมูลจำเพาะที่แท้จริงสำหรับพรู 80x25 คุณอาจต้องการโพสต์เวอร์ชันของคุณเนื่องจากเป็นคำตอบของตัวเองและอธิบายความแตกต่าง ฉันคิดว่าอย่างน้อยก็น่าจะใช้ได้จริงมากกว่าการโต้วาทีรหัสงานอดิเรกปีกับฉัน
Linus

8

Japt , 23 22 ไบต์

Japtเป็นรุ่นสั้นJa vaScri พอยต์ ล่าม

Un19 %2?"dark":"light"

มันทำงานอย่างไร

          // Implicit: U = input string
Un19      // Convert U from a base 19 number to decimal.
%2        // Take its modulo by 2.
?"dark"   // If this is 1, return "dark".
:"light"  // Else, return "light".
          // Implicit: output last expression

ใช้เวอร์ชันใหม่ 0.1.3 (เปิดตัววันที่ 22 พ.ย. ) ซึ่งจะกลายเป็น17 ไบต์ซึ่งสั้นกว่าทั้งหมดยกเว้น GS2:

Un19 %2?`»rk:¦ght

หรืออีกวิธีหนึ่งคือสูตรเวทย์มนตร์: (26 ไบต์)

Un19 %2*22189769+437108 sH
Un19 %2                    // Convert input to base 19 and modulo by 2.
       *22189769+437108    // Where the magic happens (top secret)
                        sH // Convert to a base 32 string.

8

Java, 157 127 124 ไบต์

interface L{static void main(String[]a){System.out.print(new java.util.Scanner(System.in).nextInt(35)%2>0?"dark":"light");}}

คุณสามารถใช้อินเทอร์เฟซแบบนี้: interface i{static void mainเนื่องจากทุกอย่างในอินเทอร์เฟซเป็นแบบสาธารณะโดยค่าเริ่มต้น
Yassin Hajaj

7

TeaScript , 23 ไบต์

®x,35)%2?"dark":"light"

น่าเสียดายที่สตริงdarkและlightไม่สามารถบีบอัดได้


Hehe, Japt สั้นกว่าหนึ่งครั้ง ;) +1 แม้ว่าเทคนิคการบีบอัด JS นั้นยอดเยี่ยมมาก! ฉันอาจเพิ่มพวกมันใน Japt หลังจากปรับปรุงล่ามใหม่
ETHproductions

7

ทับทิมขีดออก 44 36 ไบต์

puts %w[light dark][gets.to_i(19)%2]

คุณสามารถบันทึกไบต์โดยแทนที่puts ด้วย$><<(ไม่มีที่ว่าง)
Lynn

@Mauris ฉันรู้ แต่ฉันชอบการขึ้นบรรทัดใหม่ของฉัน
daniero

คุณสามารถบันทึก 3 ไบต์โดยเปลี่ยนputsเป็นp
Cyoce

7

C, 55 ไบต์

s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}

ลองออนไลน์

ขอบคุณ DigitalTrauma สำหรับเคล็ดลับการเล่นกอล์ฟมากมาย


ฉันคิดว่าคุณมีความพิเศษ(หลังจากputs
ระดับแม่น้ำเซนต์

นี้ s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}55: สมมติว่าความกว้างของจำนวนเต็มใหญ่พอที่จะเก็บสตริงได้ 3 ตัวอักษร คุณควรจะสามารถทำmain(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}เพื่อ 54 แม้ว่าด้วยเหตุผลบางอย่างที่ได้รับ () กำลังคืนขยะคือsถ้าไม่ใช่โกลบอลดังนั้นจึงเป็น segfaults
Digital Trauma

โอ้ว้าว base-19 ฉลาด.
ปุย

7

BotEngine , 165 14x11 = 154

v acegbdfh
>ISSSSSSSS
 v<<<<>v<<P
vS1   vS2ke
vS3   vS4re
vS5   vS6ae
vS7   vS8de
>     >   ^
>     >  v
^S2   ^S1el
^S4   ^S3ei
^S6  P^S5eg
^S8 te^S7eh
     ^   <

นี่คือส่วนเส้นทางที่แตกต่างที่ไฮไลต์:

ป้อนคำอธิบายรูปภาพที่นี่

(อักขระที่ไม่ใช่ช่องว่างใด ๆ ที่ไม่เน้นเป็นอาร์กิวเมนต์สำหรับeและSคำแนะนำ - แต่ละคำแนะนำเหล่านี้ใช้สัญลักษณ์ทางด้านซ้าย (สัมพันธ์กับทิศทางการเดินทางของบอท) เป็นอาร์กิวเมนต์)


7

𝔼𝕊𝕄𝕚𝕟, 26 ตัวอักษร / 34 ไบต์

ô(שǀ(ï,ḣ)%2?`dark`:`light”

Try it here (Firefox only).


1
ฉันจะไม่เรียกมันว่า "การบีบอัด" ถ้าใช้เวลามากขึ้น : P
lirtosiast

1
ฉันกังวลเกี่ยวกับตัวอักษรมากกว่าไบต์ในตอนนี้ ฉันหมดความพยายามอย่างมากที่จะตีนับจำนวนไบต์ใน𝔼𝕊𝕄𝕚𝕟 ...
Mama Fun Roll

1
เราให้คะแนนเป็นไบต์เสมอและในขณะที่มันน่าสนใจในการปรับให้เหมาะสมสำหรับวัตถุประสงค์รองโปรดจำไว้ว่าไบต์ที่น้อยที่สุดจะชนะเสมอ
lirtosiast

ใช่ฉันเข้าใจว่า ฉันไม่ได้มีเป้าหมายเพื่อชนะมาก
Mama Fun Roll

7

C, 49 ไบต์

main(c){gets(&c);puts(c+c/256&1?"light":"dark");}

ไม่นั่นไม่ได้รวบรวม
xsot

โอ้ฉันไม่ดีฉันได้เล่นกับสิ่งอื่น เอาท์พุทเป็นสิ่งที่ผิด แต่ ฉันคิดว่าคุณตั้งใจจะทำgets(&c)%256+c/256อย่างไร
ลินน์

โอ้จับได้ดี แม้ว่า ณ จุดนี้ทางออกของฉันแย่กว่าของคุณอย่างมากเนื่องจากเราใช้เทคนิคเดียวกัน ดูเหมือนว่าฉันมีมากมายที่จะเรียนรู้
xsot

gets(&c)แต่กลับกลายเป็นว่าการส่งออกผิดปกติที่เกิดจากค่าตอบแทนของ ฉันได้อัปเดตข้อมูลที่ส่งให้
xsot

7

Clojure, 63 ไบต์

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • เราอ่านเป็นบรรทัดจาก stdin ด้วย (read-line)
  • จากนั้นแยกสตริงเป็นค่าจำนวนเต็มในฐาน 35 โดยใช้การเรียกใช้วิธีการ JVM
  • การรับ mod ของผลลัพธ์ 2 บอกเราว่ามันเป็นเลขคู่หรือคี่
  • ใช้ผลลัพธ์ที่ส่งคืนจากฟังก์ชันโมดูโลเป็นดัชนีไปยังลำดับและพิมพ์

ฉันบันทึก 2 ไบต์ที่มีค่าโดยการอ้างถึง "แสง" และ "มืด" ด้วยเครื่องหมายคำพูดเดี่ยวเพื่อให้ Clojure ใช้มันเป็นตัวอักษรซึ่งตรงข้ามกับการพันคำแต่ละคำในเครื่องหมายคำพูดคู่หนึ่ง ฉันยังบันทึกไม่กี่ไบต์โดยใช้ pr มากกว่า println

ข้อมูลบางอย่างเกี่ยวกับข้อความใน Clojure


ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและรหัสกอล์ฟ! นี่เป็นคำตอบแรกที่ดี :) ฉันไม่คุ้นเคยกับ Clojure เกินไป คุณจะเพิ่มคำอธิบายได้ไหม?
Alex A.

แน่นอน! ไปแล้ว แจ้งให้เราทราบหากคุณมีข้อสงสัย!
MONODA43


5

C, 46 ไบต์

main(c){gets(&c);puts(c%37%2?"light":"dark");}

คาดว่าจะมีสภาพแวดล้อมที่ints ถูกจัดเก็บข้อมูลแบบ endian น้อยและมีอย่างน้อยสองไบต์

คำอธิบาย

cเป็นดังนั้นในขั้นแรกจะมีargc จะอ่านตัวอักษรสองพูดและและเก็บไว้ในซึ่งขณะนี้01 00 00 00getsa (0x61)1 (0x31)c

61 31 00 00

แทนตัวเลข 0x3161 หรือ 12641

โดยพื้นฐานแล้วในปัญหานี้c = x + 256*yเราต้องการคำนวณ(x + y) mod 2และพิมพ์สตริงตามนั้น เมื่อต้องการทำสิ่งนี้ฉันสามารถเขียนได้c % 255 % 2เช่นนั้น

  (x + 256 * y) % 255 % 2
= (x % 255 + y % 255) % 2      since 256 ≡ 1 (mod 255)
= (x + y) % 2                  since 0 < x, y < 255

อย่างไรก็ตาม37ยังใช้งานได้:

  (x + 256 * y) % 37 % 2
= (x % 37 - 3 * (y % 37)) % 2  since 256 ≡ -3 (mod 37)

xอยู่ในช่วง 49-57 รวม (ตัวเลข 1-8) x % 37 == x - 37ดังนั้น

yอยู่ในช่วง 97-104 รวม (อาพิมพ์เล็ก) y % 37 == y - 74ดังนั้น

ซึ่งหมายความว่าเราสามารถทำให้ง่ายขึ้น

= (x - 3 * y + 185) % 2
= (x + y + 1) % 2              since -3 ≡ 185 ≡ 1 (mod 2)

และเพียงแค่พลิกสายเพื่อแก้ไขความเท่าเทียมกัน


5

บีม , 127 ไบต์

rSr>`+v
   ^  )
n(`)nS<
    >L'''''>`+++++)S>`+++)@---@'''>`+++++)++@-------@H
>L'''''>`+++)S>`++++++)+++@---@--@+@'''>`++++)@H

คำอธิบาย ป้อนคำอธิบายรูปภาพที่นี่ สีฟ้าอ่อน - อ่านตัวละครจากอินพุตไปยังลำแสงบันทึกค่าลำแสงลงในร้านค้าอ่านตัวละครจากอินพุตไปยังลำแสง

สีน้ำเงินเข้ม - เพิ่มร้านค้าลงในคานโดยลดระดับร้านค้าเป็น 0 ในขณะที่เพิ่มลำแสง

ไฟเขียว - โครงสร้างการทดสอบที่แปลก ลูปจะออกไปทางซ้ายถ้าลำแสงเป็นคู่หรือทางขวาถ้าคี่

สีเขียวเข้ม - ส่งออกมืด

ตาล - ให้แสงเอาต์พุต


5

O , 22 17 ไบต์

ฉัน # 2% "light'dark"?

นี่คือสิ่งที่จำเป็นต้องทำโดยไม่มีสิทธิประโยชน์เพิ่มเติม


5

เขาวงกต , 48 46 45 42 ไบต์

ขอบคุณ Sp3000 สำหรับการบันทึกสองไบต์

-,"
#
%0:::8.5.3.4.116.@
1
00.97.114.107.@

ลองออนไลน์!

คำอธิบาย

จุดเริ่มต้นของรหัสคือจุดจบตลก โปรดจำไว้ว่าเขาวงกตถือว่าตัวเลขเป็นศูนย์ที่ไม่สิ้นสุดเมื่อต้องการตัวถูกดำเนินการที่ด้านล่างของสแต็ก รหัสเริ่มต้นหนึ่ง-ไปทางขวาซึ่งจะพยายามลบตัวเลขสองตัว

[ ... 0 ]

จากนั้น,อ่านตัวอักษรตัวแรกaพูดว่า:

[ ... 0 97 ]

the "no-op แต่นี่ก็เป็นจุดสิ้นสุดดังนั้นตัวชี้คำสั่งจะหมุนไปรอบ ๆ และเริ่มไปทางซ้าย จากนั้น`อ่านตัวละครอื่น ๆ2พูดว่า:

[ ... 0 97 50 ]

เวลานี้-ลบตัวเลขสองตัวนั้น:

[ ... 0 47 ]

IP ดังต่อไปนี้โค้งของ "ทางเดิน" #ได้รับความลึกกองละเลยเลขนัยซึ่งสิ่งอำนวยความสะดวกที่จะเกิดขึ้น2:

[ ... 0 47 2 ]

และ%คำนวณโมดูโล:

[ ... 0 1 ]

ณ จุดนี้ IP อยู่ที่จุดเชื่อมต่อ ถ้าด้านบนของสแต็คเป็นศูนย์ก็จะย้ายตรงไปข้างหน้าที่พิมพ์100.97.114.107.@ darkแต่ถ้าด้านบนของสแต็กไม่ใช่ศูนย์ (โดยเฉพาะ1) มันจะย้ายไปทางขวาโดยที่0:::8.5.3.4.116.@ภาพพิมพ์light(โปรดทราบว่าเราสามารถละเว้นผู้นำ1หน้าได้เนื่องจากมี1สแต็คอยู่แล้วและเราสามารถบันทึกซ้ำได้10ใน108, 105, 103, 104โดยการทำสำเนาไม่กี่10ตอนแรกที่เราจะได้มี)


4

Matlab, 51 ไบต์

ฉันไม่คิดว่านี่ต้องการคำอธิบายใด ๆ =)

a={'light','dark'};disp(a(2-mod(sum(input('')),2)))

4

> <> , 31 ไบต์

ii+2%?\"krad"oooo;
l"oc0.\"thgi

ที่นี่ฉันคิดว่า "จะต้องมีวิธีที่ดีกว่า ... "


4

Perl, 29 27 ไบต์

$_=/./&($'+ord)?light:dark

รหัสนี้ต้องใช้-pสวิตช์ซึ่งฉันนับเป็น 1 ไบต์

ลองมันออนไลน์บนIdeone

มันทำงานอย่างไร

  • เพราะ-pสวิทช์, Perl $_อ่านหนึ่งบรรทัดของการป้อนข้อมูลและเก็บไว้ใน

  • /./เป็นนิพจน์ทั่วไปที่ตรงกับอักขระหนึ่งตัว สิ่งนี้มีสองนัย:

    • นับตั้งแต่การแข่งขันประสบความสำเร็จ/./ผลตอบแทนที่1

    • โพสต์การแข่งขัน (ตัวท่านสอง) $'จะถูกเก็บไว้ใน

  • $'+ordเพิ่มจำนวนเต็มในตัวท่านที่สองแสดงให้เห็นถึงจุดรหัส ( ord) $_ของตัวอักษรตัวแรกของตัวแปรโดยปริยาย

  • &ใช้ค่าบิตและของค่าส่งคืนของ/./และผลรวม$'+ord, คืน1คือผลรวมถ้าแปลก, 0ถ้ามันเป็นเลขคู่

  • ?light:darkส่งคืนแสงถ้านิพจน์ก่อนหน้าส่งคืน1และมืดมิฉะนั้น

  • ในที่สุดก็$_=กำหนดผลลัพธ์ให้$_ซึ่ง Perl จะพิมพ์โดยอัตโนมัติเนื่องจาก-p สวิตช์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.