체스 광장의 색상 결정


59

당신의 도전은 체스 판에서 주어진 사각형의 색상을 출력하는 프로그램을 작성하는 것입니다. 이것은 체스 판 모양입니다 :

여기에 이미지 설명을 입력하십시오

사각형 a1 이 어둡고 h1 이 밝은 사각형 임을 알 수 있습니다 . 여러분의 프로그램은 출력이 필요 dark하거나 light정사각형 주어 졌을 때. 몇 가지 예 :

STDIN:  b1
STDOUT: light

STDIN:  g6
STDOUT: light

STDIN:  d4
STDOUT: dark

규칙:

  • 당신은 STDIN을 사용하고 출력 STDOUT를 사용하는 전체 프로그램을 제공 할 필요가 dark또는 light.
  • 입력이 항상 유효하다고 가정합니다 ( [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 바이트 아웃소싱 Pyth와 CJam은 놀랍습니다.
isaacg

29
거룩한 소, 여러분, GS2는 새로운 Pyth입니다! 누군가 Denni 전에 잘 사용하는 방법을 알아 냈습니다.
ETHproductions

56

파이썬 2, 41 38 바이트

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

문자열 인터 레이싱을위한 Mego 덕분에 3 바이트

같은 입력을 "g6"받습니다. 밝고 어둡습니다.


그것은 문자열 인터레이스로 화려합니다.
Wayne Werner

5
나는 실제로 그것이 int(input(),35)훌륭한 부분 이라고 말하고 싶습니다 . 문자열 인터레이스를 생각했지만 입력 방법이 가장 많은 바이트를 절약합니다.
mbomb007

26

헥사 고니 , 34 32 바이트

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

펼쳐진 주석이 달린 실행 경로 :

여기에 이미지 설명을 입력하십시오
Timwi의 놀라운 HexagonyColorer로 생성 된 다이어그램 .

자주색 경로는 두 문자를 읽고 차이를 계산하여 모듈로 2를 취하는 초기 경로입니다. <그런 다음 어두운 회색 경로 (결과 1)가 인쇄 dark되고 밝은 회색 경로 (결과 0)가 인쇄 되는 분기 역할을 합니다 light.

차이와 모듈로를 계산하는 방법에 대해서는 메모리 그리드의 다이어그램이 있습니다 (입력 값이 사용됨 a1).

여기에 이미지 설명을 입력하십시오
Timwi의 훨씬 더 놀라운 Esoteric IDE (Hexagony 용 시각적 디버거가 있음)로 생성 된 다이어그램 .

메모리 포인터는 row 라고 표시된 가장자리에서 시작 하여 문자를 읽습니다. col} 이라고 표시된 모서리로 이동합니다. 여기서 숫자를 읽습니다. 엣지 라벨로 이동 DIFF 양자의 차이를 계산한다. 우리가 넣어 레이블이없는 세포로 이동 하고, 셀 라벨로 이동 모드 우리가 가진 모듈을 계산한다 ."-'2{=%

이것은의 일부를 재사용하여 몇 바이트 ;로 골프를 칠 수는 있지만 측면 길이 3까지는 아니지만 많이 골프를 칠 수는 없을 것입니다.


7
오, 예쁜 색상!
셀 레오

1
이 언어는 나에게는 새로운 것이지만, 내가 생각했던 것보다 더 많은 것을 고안 할 수있는 능력에 놀랐습니다
qwr

18
나는이 골프 언어를 모두 얻지 못한다.
juniorRubyist

4
@ codeSwift4Life Hexagony는 골프 언어가 아닙니다. 이와 같은 사소한 작업의 경우 단일 문자 명령이 있기 때문에 합리적으로 경쟁적 일 수 있지만 Befunge, Piet,> <>를 포함한 다른 많은 2D 언어 에서 더 많이 공유 해야 합니다. 사소한 작업은 Hexagony의 이상한 메모리 모델로 인해 매우 많은 양의 코드와 복잡한 프로그램이 필요합니다. 간결한 언어가 아니라 6 각형 그리드에서 프로그래밍을 탐색하는 이국적이고 이상한 언어가 아닙니다.
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홀수 색인 된 좌표를 모두 제거합니다. 결과 패턴 버퍼는 "light"의 경우 길이가 1이거나 "dark"의 경우 길이가 0 또는 2입니다. /^.$/1- 길이 패턴과 일치하고 c패턴을 "빛"과 quit에 매달립니다. 그렇지 않으면 패턴이 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 답변의 번역입니다.

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

이 인터프리터 / 디버거를 사용하여 개발되었습니다 .

나는 두 코드 조각을 훔친 divmodif/else에서 여기. (@Mego에게 감사합니다!)

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

이제 >sum 2divmod 알고리즘을 수행하는 셀 구성이 있습니다 .

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

divmod의 출력은 다음과 0 d-n%d >n%d n/d같지만 0 d-n%d을 제로화하고 다음 셀도 제로화합니다.

>[-]

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

파이썬 2, 45 바이트

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

같은 입력을 "a1"받습니다. 온라인으로 사용해보십시오


파이썬 3에서는 인쇄에 대한 괄호가 없기 때문에 작동하지 않습니다.
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
이것은 내가 본 것 중 가장 놀라운 것입니다.
Lucas

10

자바 스크립트 (ES6), 45 바이트

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

기수를 사용하는 방법! +1 FTW ...
WallyWest

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은 모듈로 2와 관련이 있기 때문에이 과제에 적합하다고 생각할 것입니다. 이러한 솔루션은 가능한 가장 짧은 것 같습니다.

문자열에서 두 문자를 모두 얻기 위해 많은 바이트를 소비하지만 실제로 비용이 드는 것은 2 바이트 소문자 13 자입니다.


9

Befunge-93 , 39 37 33 31 바이트

이 31 바이트 솔루션 을 제안한 Linus의 모든 공로 :

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

이 인터프리터를 사용하여 테스트하십시오 .

설명

<        v%2-~~

<시작 부분은 오른쪽으로 감싸는 왼쪽에 명령 포인터를 보냅니다. 그런 다음 입력에서 ASCII로 두 문자를 읽고 빼고 2로 모듈로를 수행 합니다. ASCII 코드로 볼 때 홀수 a이며 1홀수입니다. 은 v하향 명령 포인터 리디렉션 ...

"^"light"_"krad

... on. _스택의 상단이 0이면 왼쪽으로 명령 포인터를 보내고 그렇지 않으면 오른쪽으로 명령 포인터를 보냅니다. "light"또는 "dark"의 문자는 각각 역순으로 스택에 푸시됩니다. 두 경로 모두 ^왼쪽에서를 누르면 명령 포인터가 위쪽으로 전송됩니다.

 >:#,_@

... 출력 세그먼트로. :스택의 상단을 복제하고 및로 #이동하여 스택의 상단이 0이면 명령 포인터를 오른쪽으로 보내고 그렇지 않으면 왼쪽으로 이동합니다. 스택이 비어 있으면 스택 맨 위 (이후 )가 0이므로 명령 포인터가에 도달 하여 실행을 중지합니다. 그렇지 않으면, 안타 문자로서 스택의 최상위를 출력하는, 다음은 오버를 점프 하고 상 과정을 다시 시작한다.,_:@,#:>


rad"v>"k공백없이 사용하여 바이트를 저장 하시겠습니까?
Linus

@Linus : "그렇지 않으면 출력이되므로 공간이 필요합니다 dar k." 연결된 온라인 통역사에서 사용해보십시오.
El'endia Starman

1
당신의 권리. 어쨌든, 나는 이것을 재미있게 할 것이지만 2 바이트 만 얻을 수 있습니다 ... <>:#,_@ v%2-~~\n"^"light"_"krad, 개행을 수정하십시오.
Linus

@Linus : 훌륭합니다. 감사!
El'endia Starman

@JamesHolderness, 어려운 감정은 없습니다. 이것이 원래 Befunge-93 인터프리터에서 작동하지 않는다는 것을 지적하는 것이 옳습니다 . 실제 사양 은 80x25 원환 체입니다. 자신의 답변으로 버전을 게시하고 차이점을 설명 할 수 있습니다. 적어도 저와 같은 취미 코드를 토론하는 것보다 더 실용적이라고 생각합니다.
Linus

8

apt , 23 22 바이트

JaptJa vaScri pt 의 단축 버전입니다 . 통역사

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 (11 월 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

자바, 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

루비, 44 36 바이트 공격

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

당신은 대체하여 바이트를 저장할 수 있습니다 puts 으로 $><<(공백없이).
Lynn

@Mauris 알아,하지만 난 내 종료 줄 바꿈 좋아
daniero

putsp
Cyoce

7

C, 55 바이트

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

온라인으로 사용해보십시오

많은 골프 팁을위한 감사합니다 DigitalTrauma


난 당신이 여분이 있다고 생각 (puts
레벨 강 세인트

55의 경우 : s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}. 정수 너비가 3 자 문자열을 보유 할만큼 충분히 크다고 가정합니다. main(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}비록 어떤 이유로 gets ()가 쓰레기를 반환 s하는 것이 전역이 아닌 경우, segfaults 이지만 54를 위해 할 수 있어야합니다 .
Digital Trauma

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

다른 경로 세그먼트가 강조 표시된 상태입니다.

여기에 이미지 설명을 입력하십시오

(공백이 아닌 임의의 문자는 eS명령어에 대한 인수로 사용됩니다. 이러한 각 명령어는 왼쪽으로 봇의 이동 방향에 대한 기호를 인수로 사용합니다)


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?
Lynn

오, 잘 잡아 현재로서는 동일한 기술을 사용하므로 내 솔루션이 귀하의 솔루션보다 엄격하게 나쁩니다. 배울 것이 많을 것 같습니다.
xsot

의 반환 값으로 인해 잘못된 출력이 발생한 것으로 나타났습니다 gets(&c). 이에 따라 제출물을 업데이트했습니다.
xsot

7

클로저, 63 바이트

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • 우리는 stdin에서 (read-line)으로 한 줄을 읽습니다.
  • 그런 다음 JVM 메소드 호출을 사용하여 기본 35의 문자열을 정수 값으로 구문 분석하십시오.
  • 결과 2의 모드를 취하면 그것이 짝수인지 홀수인지 알려줍니다.
  • 모듈로 함수에서 반환 된 결과를 시퀀스의 인덱스로 사용하여 인쇄

Clojure가 각 단어를 한 쌍의 따옴표로 묶는 대신 문자 그대로 사용하도록 작은 따옴표로 "light"와 "dark"를 인용하여 2 바이트를 절약합니다. 또한 println 대신 pr을 사용하여 몇 바이트를 절약합니다.

Clojure에서 인용에 관한 정보


프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다! 이것은 좋은 첫 번째 대답입니다. :) Clojure에 익숙하지 않습니다. 설명을 추가 하시겠습니까?
Alex A.

물론! 당신은 간다. 궁금한 점이 있으면 알려주세요!
MONODA43

5

Minkolang 0.12 , 28 24 바이트

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

여기에서 시도하십시오.

설명

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 바이트

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

ints가 리틀 엔디안으로 저장되고 2 바이트 이상인 환경을 예상합니다 .

설명

c이다 argc, 그래서 처음에는 그것을 포함한다 01 00 00 00. gets두 개의 문자를 읽어 말할 것이다 a (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 (소문자 ah) 범위에 있으므로 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으로 감소시켜 빔에 저장을 추가합니다

연한 녹색-짝수 테스트 구성. 빔이 짝수이면 루프가 왼쪽으로 나갑니다. 홀수이면 오른쪽입니다.

진한 녹색-어두운 출력

Tan-빛을 출력합니다


5

O , 22 17 바이트

i # 2 % "light'dark"?

추가 혜택없이 필요한 작업을 수행합니다.


5

미로 , 48 46 45 42 바이트

2 바이트를 절약 한 Sp3000에 감사합니다.

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

온라인으로 사용해보십시오!

설명

코드의 시작은 재미있는 막 다른 골목입니다. Labyrinth는 스택 맨 아래에 피연산자가 필요할 때 무한한 수의 0을 가정합니다. 코드는 하나를 -올바르게 시작하여 두 숫자를 빼려고 시도하므로 스택은 다음과 같이됩니다.

[ ... 0 ]

그런 다음 ,첫 번째 문자를 읽습니다 a.

[ ... 0 97 ]

"아무 조합 없지만, 명령 포인터가 돌아 서서 왼쪽으로가는 시작, 그래서 이것은 또한 죽은 엔드입니다. 그런 다음 `다른 문자를 읽습니다 2.

[ ... 0 97 50 ]

이번에는 -두 숫자를 뺍니다.

[ ... 0 47 ]

IP는 이제 "복도"의 굴곡을 따릅니다. 이 #편리하게 될 일이 암시 제로를 무시하고, 스택 깊이를 얻을 수 2:

[ ... 0 47 2 ]

그리고 %모듈로를 계산합니다.

[ ... 0 1 ]

이 시점에서 IP는 정션에 있습니다. 스택의 상단이 0이면 100.97.114.107.@인쇄 위치로 똑바로 이동 합니다 dark. 그러나 스택의 상단이 0이 아닌 경우 (특히, 1) 오른쪽으로 이동하여 0:::8.5.3.4.116.@인쇄합니다 light( 1이미 1스택에 이미 있기 때문에 Leading을 생략 할 수 있으며 반복하여 절약 할 수 있음에 유의하십시오) 10108, 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

펄, 29 27 바이트

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

이 코드에는 -p스위치 가 필요 하며 1 바이트로 계산했습니다.

Ideone에서 온라인으로 사용해보십시오 .

작동 원리

  • -p스위치로 인해 Perl은 한 줄의 입력을 읽고에 저장합니다 $_.

  • /./한 문자와 일치하는 정규식입니다. 여기에는 두 가지 의미가 있습니다.

    • 성공적으로 일치하므로 1을/./ 반환합니다 .

    • 사후 일치 (두 번째 입력 문자)는에 저장됩니다 $'.

  • $'+ord두 번째 입력 문자가 나타내는 정수를 ord암시 적 변수의 첫 번째 문자의 코드 포인트 ( )에 추가합니다 $_.

  • &의 반환 값 /./과 sum 의 비트 AND를 가져 와서 1을$'+ord 반환 하면 홀수이면 합이고, 짝수이면 0을 반환합니다.

  • ?light:dark반환 불이 이전 식을 반환하는 경우 1어두운 그렇지.

  • 마지막으로 스위치로 $_=결과를 $_펄에 자동으로 인쇄 하는 결과를 할당합니다 -p.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.