Xác định màu sắc của hình vuông cờ vua


59

Thử thách của bạn là viết một chương trình tạo ra màu của hình vuông đã cho từ bàn cờ. Đây là cách một bàn cờ trông:

nhập mô tả hình ảnh ở đây

Bạn có thể thấy hình vuông a1 tối và h1 là hình vuông sáng. Chương trình của bạn cần xuất darkhoặc lightkhi được đưa ra một hình vuông. Vài ví dụ:

STDIN:  b1
STDOUT: light

STDIN:  g6
STDOUT: light

STDIN:  d4
STDOUT: dark

Những quy định:

  • Bạn cần cung cấp một chương trình đầy đủ sử dụng STDIN và sử dụng STDOUT để xuất darkhoặc light.
  • Giả sử rằng đầu vào luôn hợp lệ ( [a-h][1-8])
  • Đây là , nên số byte ngắn nhất sẽ thắng!

Bảng điểm

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
Tại sao không ai thử <> ^ Cá?
ghosts_in_the_code

Câu trả lời:


46

GS2 , 17 15 byte

de♦dark•light♠5

Mã nguồn sử dụng mã hóa CP437 . Hãy thử trực tuyến!

xác minh

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

Làm thế nào nó hoạt động

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
Thật đáng kinh ngạc! Với 9 byte không thể tránh khỏi, 3 byte vượt trội Pyth và CJam là tuyệt vời.
isaacg

29
Chúa ơi, GS2 là Pyth mới! Ai đó tìm ra cách sử dụng nó tốt trước Denni ... đừng bận tâm.
Sản phẩm ETH

56

Python 2, 41 38 byte

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

3 byte nhờ Mego cho chuỗi xen kẽ

Đưa đầu vào như thế nào "g6". Đó là ánh sáng và bóng tối đan xen.


Điều đó thật tuyệt vời với chuỗi đan xen.
Wayne Werner

5
Tôi thực sự muốn nói rằng đó int(input(),35)là phần tuyệt vời. Tôi nghĩ về việc xen kẽ chuỗi, nhưng phương thức nhập của bạn tiết kiệm được nhiều byte nhất.
mbomb007

26

Lục giác , 34 32 byte

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

Mở ra và với các đường dẫn thực thi có chú thích:

nhập mô tả hình ảnh ở đây
Sơ đồ được tạo bằng HexagonyColorer tuyệt vời của Timwi .

Đường dẫn màu tím là đường dẫn ban đầu đọc hai ký tự, tính toán sự khác biệt của chúng và lấy nó theo mô đun 2. Sau <đó hoạt động như một nhánh, trong đó đường dẫn màu xám đậm (kết quả 1) in darkvà đường dẫn màu xám nhạt (kết quả 0) in light.

Về cách tôi tính toán sự khác biệt và modulo, đây là sơ đồ của lưới bộ nhớ (với các giá trị được lấy cho đầu vào a1):

nhập mô tả hình ảnh ở đây
Sơ đồ được tạo bằng IDE bí mật tuyệt vời hơn nữa của Timwi (có trình gỡ lỗi trực quan cho Hexagony).

Con trỏ bộ nhớ bắt đầu trên hàng có nhãn cạnh , nơi chúng ta đọc ký tự. }di chuyển đến cạnh có nhãn col , nơi chúng ta đọc chữ số. "di chuyển đến cạnh có nhãn diff nơi -tính toán sự khác biệt của hai. 'di chuyển đến ô không ghi nhãn nơi chúng ta đặt 2{=di chuyển đến ô có nhãn mod nơi chúng ta tính toán modulo với %.

Điều này có thể được chơi bằng một vài byte bằng cách sử dụng lại một số trong số đó ;, nhưng tôi nghi ngờ rằng nó có thể được đánh gôn nhiều, chắc chắn không giảm xuống 3 chiều dài.


7
Ôi, màu sắc đẹp quá!
Celeo

1
Ngôn ngữ này là mới đối với tôi nhưng tôi ngạc nhiên về khả năng của bạn để đưa ra một thứ gì đó giả tạo hơn tôi nghĩ là có thể
qwr

18
Tôi thực sự không có được tất cả các ngôn ngữ golf.
juniorRubyist

4
@ codeSwift4Life Hexagony không phải là ngôn ngữ chơi gôn. Đối với các tác vụ tầm thường như thế này, nó có thể cạnh tranh hợp lý, bởi vì nó có các lệnh một ký tự, nhưng đó là điều cần thiết hơn được chia sẻ bởi nhiều ngôn ngữ 2D khác , bao gồm Befunge, Piet,> <>. Bất kỳ tác vụ không cần thiết nào cũng sẽ yêu cầu số lượng mã rất lớn và các chương trình phức tạp, do mô hình bộ nhớ kỳ lạ của Hexagony. Nó không phải là một ngôn ngữ ngắn gọn, mà là một ngôn ngữ kỳ lạ và kỳ lạ, khám phá lập trình trên lưới lục giác.
Martin Ender

3
@qwr Tôi nghĩ bị chiếm đoạt là điểm của esolang. ;)
Martin Ender

21

CJam, 18 byte

r:-)"lightdark"5/=

Bản demo trực tuyến

Mổ xẻ

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
mã của bạn đang mỉm cười:-)
Doorknob

8
Tôi đã xem xét hiệu quả tương đương:^)
Peter Taylor

2
Xin vui lòng bạn có thể giải thích làm thế nào điều này hoạt động.
Fogmeister

@Fogmeister, thêm lời giải thích.
Peter Taylor

17

sed, 37

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

Giải trình

s/[1357aceg]//gloại bỏ tất cả các tọa độ chỉ số lẻ. Bộ đệm mẫu kết quả sau đó có chiều dài 1 cho "sáng" hoặc chiều dài 0 hoặc 2 cho "tối". /^.$/phù hợp với các mẫu có độ dài 1, ctreo mẫu cho "ánh sáng" và quits. Nếu không, mô hình được ctreo vào "tối".


Các qlà không cần thiết, và bạn có thể kiểm tra tối đầu tiên thay vì với /../, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...
Kritixi Lithos

14

Bình thường, 18 byte

@c2"lightdark"iz35

Giải thích đầu vào dưới dạng số cơ sở 35, cắt làm lightdarkđôi, in.


13

ShadyAsFuck, 91 byte / BrainFuck, 181 byte

Chương trình BrainFuck thực sự đầu tiên của tôi, cảm ơn Mego vì sự giúp đỡ và đã chỉ cho tôi đến kho lưu trữ thuật toán. (Điều đó có nghĩa là tôi không thực sự tự làm điều đó, nhưng đã sao chép một số thuật toán hiện có. Vẫn là một kinh nghiệm =)

NKnmWs3mzhe5aAh=heLLp5uR3WPPPPagPPPPsuYnRsuYgGWRzPPPPlMlk_PPPPPP4LS5uBYR2MkPPPPPPPP_MMMkLG]

Tất nhiên đây là bản dịch từ câu trả lời brainfuck của tôi:

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

Được phát triển bằng trình thông dịch / trình gỡ lỗi này .

Tôi đã đánh cắp hai đoạn mã cho divmodif/elsetừ đây. (Cảm ơn @Mego!)

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

Bây giờ chúng ta có cấu hình các ô, >sum 2bây giờ chúng ta thực hiện thuật toán divmod:

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

Đầu ra của divmod trông như thế này 0 d-n%d >n%d n/dnhưng chúng tôi đã bỏ qua d-n%dvà cũng không hiển thị ô tiếp theo:

>[-]

Điền một ô lên đến giá trị 100để xuất ra dễ dàng hơn:

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

Bây giờ cấu hình là >cond 0 100và để áp dụng if/elsethuật toán, chúng ta cần hai biến tạm thời, vì vậy chúng tôi chọn cấu hìnhtemp0 >c temp1 100

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

12

Python 2, 45 byte

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

Đưa đầu vào như thế nào "a1". Dùng thử trực tuyến


Điều này sẽ không hoạt động trong Python 3 do thiếu parens cho bản in.
isaacg

Không thể kiểm tra ngay bây giờ nhưng một cái gì đó giống như "ldiagrhgt"[expression::2]sẽ hoạt động trong khi tiết kiệm một hoặc hai byte
FryAmTheEggman


10

Mã máy Turing, 235 byte

Sử dụng cú pháp bảng quy tắc được xác định ở đây.

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
Đây có lẽ là điều tuyệt vời nhất tôi từng thấy lol
Lucas

10

JavaScript (ES6), 45 byte

alert(parseInt(prompt(),35)%2?"dark":"light")

cách để sử dụng một cơ số! +1 FTW ...
WallyWest

9

TI-BASIC, 66 byte

Đã thử nghiệm trên máy tính TI-84 +.

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

Đây là một biến thể thú vị hơn trên dòng thứ ba, đáng buồn là có cùng kích thước:

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

Bạn sẽ nghĩ TI-BASIC sẽ rất tốt trong thử thách này, vì nó liên quan đến modulo 2. Không phải vậy; những giải pháp này dường như là ngắn nhất có thể.

Chúng tôi dành rất nhiều byte để có được cả hai ký tự trong chuỗi, nhưng cái thực sự tốn kém là mười ba chữ cái viết thường hai byte.


9

Befunge-93 , 39 37 33 31 byte

Tất cả tín dụng cho Linus , người đã đề xuất giải pháp 31 byte này:

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

Kiểm tra nó bằng cách sử dụng thông dịch viên này .

Giải trình

<        v%2-~~

<đầu gửi con trỏ lệnh sang trái, nơi nó bao quanh bên phải. Sau đó, nó đọc hai ký tự từ đầu vào là ASCII, trừ chúng và thực hiện một modulo bằng 2. Như a1cả hai đều lẻ (về mã ASCII), điều này hoạt động. Các vchuyển hướng con trỏ hướng xuống dưới ...

"^"light"_"krad

... lên trên _, sẽ gửi con trỏ lệnh sang trái nếu đỉnh của ngăn xếp là 0 và ở bên phải. Các ký tự "sáng" hoặc "tối", tương ứng, được đẩy lên ngăn xếp theo thứ tự ngược lại. Cả hai đường dẫn chạm ^vào bên trái, sẽ gửi con trỏ lệnh lên trên ...

 >:#,_@

... Đến phân khúc đầu ra. :nhân đôi đỉnh ngăn xếp, #nhảy qua ,và lên trên _, nó sẽ gửi con trỏ lệnh sang phải nếu đỉnh của ngăn xếp là 0 và trái lại. Khi ngăn xếp trống, đỉnh của ngăn xếp (sau :) là 0, do đó, con trỏ lệnh sẽ chạm vào lệnh @dừng thực thi. Mặt khác, nó chạm vào ,, xuất ra đỉnh ngăn xếp dưới dạng một ký tự, và sau đó #nhảy nó qua :và lên >, bắt đầu lại quá trình.


tiết kiệm một byte bằng cách sử dụng rad"v>"kmà không có không gian?
Linus

@Linus: "Không gian là cần thiết bởi vì nếu không thì đầu ra sẽ là dar k." Hãy thử nó trong trình thông dịch trực tuyến được liên kết.
El'endia Starman

1
Quyền của bạn. Dù sao, tôi sẽ làm điều này trong befunge nhưng tôi chỉ có thể nhận được 2 byte theo bạn ... <>:#,_@ v%2-~~\n"^"light"_"krad, sửa lỗi dòng mới.
Linus

@Linus: Thật tuyệt vời. Cảm ơn!
El'endia Starman

@JamesHoldiness, Không có cảm xúc khó khăn. Bạn có quyền chỉ ra điều này không hoạt động trong trình thông dịch Befunge-93 ban đầu, thông số thực tế dành cho hình xuyến 80x25. Bạn có thể muốn đăng phiên bản của mình dưới dạng câu trả lời của riêng mình và giải thích sự khác biệt. Tôi nghĩ rằng ít nhất điều đó sẽ thiết thực hơn là tranh luận về mã sở thích năm tuổi với tôi.
Linus

8

Japt , 23 22 byte

Japt là phiên bản rút gọn của Ja vaScri pt . Thông dịch viên

Un19 %2?"dark":"light"

Làm thế nào nó hoạt động

          // 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

Sử dụng phiên bản mới 0.1.3 (phát hành ngày 22 tháng 11), điều này trở thành 17 byte , ngắn hơn tất cả trừ GS2:

Un19 %2?`»rk:¦ght

Hoặc, thay vào đó, một công thức ma thuật: (26 byte)

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 byte

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

Bạn có thể sử dụng một giao diện như thế này: interface i{static void mainvì mọi thứ trong giao diện đều được công khai theo mặc định
Yassin Hajaj 4/12/2015


7

Ruby, đánh ra 44 36 byte

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

Bạn có thể lưu một byte bằng cách thay thế puts bằng $><<(không có khoảng trắng).
Lynn

@Mauris Tôi biết, nhưng tôi thích dòng mới chấm dứt của mình
daniero

Bạn có thể lưu 3 byte bằng cách thay đổi putschop
Cyoce

7

C, 55 byte

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

Dùng thử trực tuyến

Cảm ơn DigitalTrauma vì rất nhiều mẹo chơi gôn


Tôi nghĩ bạn có thêm một khoản (sauputs
Level River St

Điều này cho 55 : s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}. Giả sử rằng chiều rộng số nguyên đủ lớn để chứa 3 ký tự chuỗi. Bạn cũng có thể thực hiện main(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}trong 54, mặc dù vì một số lý do, get () đang trả lại rác snếu không phải là toàn cầu, vì vậy nó sẽ phân tách.
Chấn thương kỹ thuật số

oh wow, cơ sở 19. tài giỏi.
lông mịn

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
     ^   <

Đây là với các đoạn đường dẫn khác nhau được tô sáng:

nhập mô tả hình ảnh ở đây

(Bất kỳ ký tự không phải không gian nào không được tô sáng sẽ đóng vai trò là đối số cho eShướng dẫn - mỗi hướng dẫn này sử dụng ký hiệu ở bên trái (liên quan đến hướng di chuyển của bot) làm đối số của nó)


7

, 26 ký tự / 34 byte

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

Try it here (Firefox only).


1
Tôi sẽ không gọi nó là "nén" nếu mất nhiều byte hơn : P
lirtosiast

1
Tôi lo lắng về ký tự hơn byte tại thời điểm này. Tôi đã hoàn toàn từ bỏ việc cố gắng giảm số byte trong 𝔼𝕊𝕄𝕚𝕟 ...
Mama Fun Roll

1
Chúng tôi luôn ghi điểm theo byte và mặc dù việc tối ưu hóa cho mục tiêu phụ thường rất thú vị, hãy nhớ rằng ít byte nhất luôn thắng.
lirtosiast

Vâng, tôi hiểu điều đó. Tôi không thực sự nhắm đến chiến thắng nhiều như vậy.
Mama Fun Roll

7

C, 49 byte

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

Không, điều đó không được biên dịch.
xsot

Ôi, tệ quá, tôi đã nghịch ngợm với thứ khác. Đầu ra là sai, mặc dù . Tôi nghĩ bạn có nghĩa là để làm gì gets(&c)%256+c/256?
Lynn

Oh, bắt tốt. Mặc dù tại thời điểm này, giải pháp của tôi hoàn toàn tệ hơn của bạn vì chúng tôi đang sử dụng cùng một kỹ thuật. Hình như tôi có nhiều thứ để học.
xsot

Nó chỉ ra rằng đầu ra sai là do giá trị trả về của gets(&c). Tôi đã cập nhật trình của tôi cho phù hợp.
xsot

7

Clojure, 63 byte

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • Chúng tôi đọc trong một dòng từ stdin với (dòng đọc)
  • Sau đó phân tích chuỗi thành một giá trị số nguyên trong cơ sở 35 bằng cách sử dụng lệnh gọi đến phương thức JVM
  • Lấy mod của kết quả 2 cho chúng ta biết nó là chẵn hay lẻ
  • Sử dụng kết quả được trả về từ hàm modulo làm chỉ mục cho chuỗi và in nó

Tôi lưu 2 byte xứng đáng bằng cách trích dẫn "sáng" và "tối" bằng một trích dẫn duy nhất để Clojure lấy nó theo nghĩa đen, trái ngược với việc gói từng từ trong một cặp dấu ngoặc kép. Tôi cũng lưu một vài byte bằng cách sử dụng pr thay vì println.

Một số thông tin về trích dẫn trong Clojure


Chào mừng bạn đến với Câu đố lập trình và Code Golf! Đây là một câu trả lời đầu tiên tốt đẹp. :) Tôi không quá quen thuộc với Clojure; bạn có phiền thêm một lời giải thích?
Alex A.

Chắc chắn rồi! Có bạn đi. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi!
MONODA43

5

Chồn 0,12 , 28 24 byte

on+2%t"dark"t"light"t$O.

Hãy thử nó ở đây.

Giải trình

o                   Take character from input
n                   Take integer from input
+                   Add
2%                  Modulo by 2
t      t       t    Ternary; runs first half if top of stack is 0, second half otherwise
 "dark" "light"     Pushes the string "dark" or "light", depending.
$O.                 Output the whole stack as characters and stop.

5

C, 46 byte

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

Yêu cầu một môi trường nơi ints được lưu trữ ít endian và có ít nhất hai byte.

Giải trình

cargc, vì vậy ban đầu nó chứa 01 00 00 00. getssẽ đọc hai ký tự, nói a (0x61)1 (0x31), và lưu trữ chúng c, bây giờ

61 31 00 00

đại diện cho số 0x3161 hoặc 12641.

Về cơ bản, trong vấn đề này, được đưa ra c = x + 256*y, chúng tôi muốn tính toán (x + y) mod 2và in một chuỗi tương ứng. Để làm điều này, tôi có thể viết c % 255 % 2như sau đó

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

Tuy nhiên, 37cũng hoạt động:

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

xnằm trong phạm vi 49-57, bao gồm (chữ số 1-8), vì vậy x % 37 == x - 37.

ylà trong phạm vi bao gồm 97-104 (chữ thường ah), vì vậy y % 37 == y - 74.

Điều này có nghĩa là chúng ta có thể đơn giản hóa để

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

và chỉ cần lật các chuỗi để sửa cho chẵn lẻ.


5

Chùm tia , 127 byte

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

Một lời giải thích nhập mô tả hình ảnh ở đây Màu xanh nhạt - đọc một ký tự từ đầu vào thành chùm, lưu giá trị chùm vào cửa hàng, đọc một ký tự từ đầu vào thành chùm.

Màu xanh đậm - Thêm cửa hàng vào chùm tia bằng cách giảm cửa hàng về 0 trong khi tăng chùm tia

Màu xanh nhạt - Một cấu trúc thử nghiệm thậm chí lẻ. Vòng lặp sẽ thoát sang bên trái nếu chùm sáng chẵn hoặc bên phải nếu lẻ.

Màu xanh đậm - Đầu ra tối

Tân - Đầu ra ánh sáng


5

O , 22 17 byte

tôi # 2% "light'dark"?

Điều này làm những gì nó được yêu cầu phải làm, không có lợi ích bổ sung.


5

Mê cung , 48 46 45 42 byte

Cảm ơn Sp3000 vì đã lưu hai byte.

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

Hãy thử trực tuyến!

Giải trình

Sự khởi đầu của mã là một ngõ cụt buồn cười. Hãy nhớ rằng Labyrinth giả định vô số số 0 khi nó yêu cầu toán hạng ở dưới cùng của ngăn xếp. Mã bắt đầu một -bên phải, cố gắng trừ hai số, vì vậy ngăn xếp trở thành:

[ ... 0 ]

Sau đó ,đọc ký tự đầu tiên, anói:

[ ... 0 97 ]

Đây "là một no-op, nhưng đây cũng là một ngõ cụt để con trỏ lệnh quay lại và bắt đầu đi sang bên trái. Sau đó `đọc các ký tự khác, 2nói:

[ ... 0 97 50 ]

Lần này, -trừ hai số đó:

[ ... 0 47 ]

IP bây giờ đi theo khúc quanh của "hành lang". Các #nhận độ sâu chồng, bỏ qua zero ngầm, mà thuận tiện sẽ xảy ra là 2:

[ ... 0 47 2 ]

%tính toán modulo:

[ ... 0 1 ]

Tại thời điểm này, IP nằm ở một ngã ba. Nếu đỉnh của ngăn xếp bằng 0, nó sẽ di chuyển thẳng về phía trước, nơi 100.97.114.107.@in dark. Nhưng nếu đỉnh của ngăn xếp khác không (cụ thể, 1), nó sẽ di chuyển sang phải, nơi 0:::8.5.3.4.116.@in light(lưu ý rằng chúng ta có thể bỏ qua hàng đầu 1, vì đã có một 1ngăn xếp và chúng ta có thể lưu vào lặp lại 10trong 108, 105, 103, 104bằng cách làm một vài bản sao của 10khi chúng tôi lần đầu tiên đạt được điều đó).


4

Matlab, 51 byte

Tôi không nghĩ rằng điều này cần bất kỳ lời giải thích =)

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

4

> <> , 31 byte

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

Ở đây tôi đang nghĩ "phải có một cách tốt hơn ..."


4

Perl, 29 27 byte

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

Mã này yêu cầu -pchuyển đổi, mà tôi đã tính là 1 byte.

Hãy thử trực tuyến trên Ideone .

Làm thế nào nó hoạt động

  • Do công -ptắc, Perl đọc một dòng đầu vào và lưu nó vào $_.

  • /./là một biểu thức chính quy phù hợp với một ký tự. Điều này có hai hàm ý:

    • Vì trận đấu thành công, /./trả về 1 .

    • Trận đấu sau (ký tự đầu vào thứ hai) được lưu trữ trong $'.

  • $'+ordthêm số nguyên mà ký tự đầu vào thứ hai biểu thị cho điểm mã ( ord) của ký tự đầu tiên của biến ẩn $_.

  • &lấy bitwise AND của giá trị trả về của /./và tổng $'+ord, trả về 1 là tổng nếu lẻ, 0 nếu là số chẵn.

  • ?light:darktrả về ánh sáng nếu biểu thức trước trả về 1tối khác.

  • Cuối cùng $_=gán kết quả cho $_, mà Perl sẽ tự động in, vì công -p tắc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.