Określ kolor szachowego kwadratu


59

Twoim wyzwaniem jest napisanie programu, który wypisuje kolor danego kwadratu z szachownicy. Tak wygląda szachownica:

wprowadź opis zdjęcia tutaj

Widać, że kwadrat a1 jest ciemny, a h1 to jasny kwadrat. Twój program musi generować dane wyjściowe darklub light, jeśli otrzyma kwadrat. Kilka przykładów:

STDIN:  b1
STDOUT: light

STDIN:  g6
STDOUT: light

STDIN:  d4
STDOUT: dark

Zasady:

  • Musisz podać pełny program, który używa STDIN i używa STDOUT do wyjścia darklub light.
  • Załóżmy, że dane wejściowe są zawsze prawidłowe ( [a-h][1-8])
  • To jest , więc wygrywa najmniejsza ilość bajtów!

Tablica wyników

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
Dlaczego nikt nie próbował <> ^ Fish?
— ghosts_in_the_code

Odpowiedzi:


46

GS2 , 17 15 bajtów

de♦dark•light♠5

Kod źródłowy używa kodowania CP437 . Wypróbuj online!

Weryfikacja

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

Jak to działa

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
To wspaniale! Z 9 nieuniknionymi bajtami, 3 bajtowy outgolfing Pyth i CJam jest niesamowity.
— Isaacg,

29
Święta krowa, chłopaki, GS2 to nowy Pyth! Ktoś wymyślił, jak go używać przed Denni ... nieważne.
— ETHprodukcje

56

Python 2, 41 38 bajtów

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

3 bajty dzięki Mego do przeplotu łańcuchów

Przyjmuje dane wejściowe jak "g6". To jasne i ciemne splecione.


To jest po prostu wspaniałe z przeplotem struny.
— Wayne Werner

5
Powiedziałbym, że int(input(),35)to genialna część. Myślałem o przeplataniu łańcucha, ale twoja metoda wprowadzania danych zapisuje najwięcej bajtów.
— mbomb007,

26

Sześciokąt , 34 32 bajty

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

Rozłożony iz adnotowanymi ścieżkami wykonania:

wprowadź opis zdjęcia tutaj
Schemat wygenerowany za pomocą niesamowitego HexagonyColorer Timwi .

Purpurowa ścieżka jest początkową ścieżką, która odczytuje dwa znaki, oblicza ich różnicę i przyjmuje ją modulo 2. <Następnie działa jak gałąź, gdzie 1drukuje się ciemnoszara ścieżka (wynik ) darki jasnoszara ścieżka (wynik 0) light.

Jeśli chodzi o sposób obliczania różnicy i modulo, oto schemat siatki pamięci (z wartościami pobranymi na wejściu a1):

wprowadź opis zdjęcia tutaj
Schemat wygenerowany za pomocą jeszcze bardziej niesamowitego Esoteric IDE Timwi (który ma wizualny debugger dla Hexagony).

Wskaźnik pamięci zaczyna się od wiersza oznaczonego na brzegu , w którym czytamy znak. }przesuwa się do krawędzi oznaczonej kol , gdzie czytamy cyfrę. "przenosi się do krawędzi oznaczony diff gdzie -oblicza różnicę pomiędzy nimi. 'przesuwa się do nieoznakowanej komórki, w której umieszczamy 2, i {=przechodzi do oznaczonego komórką modu, w którym obliczamy moduł %.

Może to być możliwe do gry w golfa o kilka bajtów poprzez ponowne użycie niektórych z ;, ale wątpię, że można grać w golfa o wiele, na pewno nie do boku 3.


7
Och, ładne kolory!
— Celeo,

1
Ten język jest dla mnie nowy, ale jestem zdumiony twoją zdolnością wymyślenia czegoś bardziej wymyślonego, niż myślałem, że to możliwe
— qwr

18
Naprawdę nie rozumiem tych wszystkich języków golfowych.
— juniorRubyist

4
@ codeSwift4Life Hexagony jest daleki od bycia językiem golfa. W przypadku takich trywialnych zadań może być dość konkurencyjny, ponieważ ma komendy jednoznakowe, ale jest to bardziej konieczność wspólna dla wielu innych języków 2D , w tym Befunge, Piet,> <>. Każde nietrywialne zadanie będzie wymagało bardzo dużej ilości kodu i skomplikowanych programów, ze względu na dziwny model pamięci Hexagony. W żadnym wypadku nie jest to język zwięzły, ale raczej egzotyczny i dziwny, eksplorujący programowanie na sześciokątnych siatkach.
— Martin Ender

3
@qwr Myślałem, że bycie wymyślonym było celem esolangów. ;)
— Martin Ender

21

CJam, 18 bajtów

r:-)"lightdark"5/=

Demo online

Sekcja

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
twój kod się uśmiecha:-)
— Klamka

8
Uważałem równie skuteczny:^)
— Peter Taylor

2
Proszę wyjaśnić, jak to działa.
— Fogmeister,

@Fogmeister, dodano wyjaśnienie.
— Peter Taylor

17

sed, 37

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

Wyjaśnienie

s/[1357aceg]//gusuwa wszystkie współrzędne o nieparzystym indeksie. Powstały bufor wzoru ma następnie długość 1 dla „jasnego” lub długość 0 lub 2 dla „ciemnego”. /^.$/pasuje do wzorów o długości 1, cdopasowuje wzór do „światła” i quits. W przeciwnym razie wzór zostanie cpowieszony na „ciemny”.


qJest zbędny i można sprawdzić za ciemny najpierw zamiast z /../, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...
— Kritixi Lithos

14

Pyth, 18 bajtów

@c2"lightdark"iz35

Interpretuj dane wejściowe jako liczbę podstawową 35, podziel lightdarkna pół, wydrukuj.


13

ShadyAsFuck, 91 bajtów / BrainFuck, 181 bajtów

Mój pierwszy prawdziwy program BrainFuck, dziękuję Mego za pomoc i za skierowanie mnie do archiwum algorytmów. (Oznacza to, że tak naprawdę nie zrobiłem tego sam, ale skopiowałem niektóre istniejące algorytmy. Nadal doświadczenie =)

NKnmWs3mzhe5aAh=heLLp5uR3WPPPPagPPPPsuYnRsuYgGWRzPPPPlMlk_PPPPPP4LS5uBYR2MkPPPPPPPP_MMMkLG]

To jest oczywiście tłumaczenie z moich pieprzonych mózgów odpowiedzi:

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

Opracowany przy użyciu tego interpretera / debuggera .

Wygrałem dwa fragmenty kodu do divmodi if/elseod tutaj. (Dzięki @Mego!)

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

Teraz mamy konfigurację komórek >sum 2, teraz wykonujemy algorytm divmod:

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

Wyjście divmod wygląda tak, 0 d-n%d >n%d n/dale wyzerowaliśmy d-n%di zerujemy również następną komórkę:

>[-]

Wypełnij jedną komórkę do wartości, 100aby ułatwić wyjście:

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

Teraz konfiguracja jest >cond 0 100i do zastosowania if/elsealgorytmu potrzebujemy dwóch zmiennych temp, więc wybieramy konfiguracjętemp0 >c temp1 100

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

12

Python 2, 45 bajtów

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

Przyjmuje dane wejściowe jak "a1". Wypróbuj online


Nie działałoby to w Pythonie 3 z powodu braku parens do wydruku.
— isaacg

Nie można teraz przetestować, ale coś takiego "ldiagrhgt"[expression::2]powinno działać, oszczędzając bajt lub dwa
— FryAmTheEggman,


10

Kod maszynowy Turinga, 235 bajtów

Korzystanie ze zdefiniowanej tutaj składni tabeli reguł .

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
Jest to prawdopodobnie najbardziej niesamowita rzecz, jaką kiedykolwiek widziałem lol
— Lucas

10

JavaScript (ES6), 45 bajtów

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

sposób, aby przejść do korzystania z radix! +1 FTW ...
— WallyWest,

9

TI-BASIC, 66 bajtów

Testowany na kalkulatorze TI-84 +.

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

Oto bardziej interesująca odmiana trzeciej linii, która niestety ma dokładnie ten sam rozmiar:

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

Można by pomyśleć, że TI-BASIC byłby przyzwoity w tym wyzwaniu, ponieważ dotyczy modulo 2. Nie jest; rozwiązania te wydają się być możliwie najkrótsze.

Wydajemy dużo bajtów, aby uzyskać oba znaki w ciągu, ale tak naprawdę kosztuje trzynaście dwubajtowych małych liter.


9

Befunge-93 , 39 37 33 31 bajtów

Podziękowania dla Linusa, który zaproponował to 31-bajtowe rozwiązanie:

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

Przetestuj za pomocą tego interpretera .

Wyjaśnienie

<        v%2-~~

Na <początku wysyła wskaźnik instrukcji w lewo, a następnie zawija się w prawo. Następnie czyta w dwóch znaków z wejścia jako ASCII, odejmuje je i robi modulo przez 2. Jak ai 1to zarówno nieparzyste (jeśli chodzi o kodzie ASCII), to działa. vPrzekierowuje wskaźnik instrukcji w dół ...

"^"light"_"krad

... na _, który wysyła wskaźnik instrukcji w lewo, jeśli góra stosu wynosi 0, a w prawo w przeciwnym razie. Znaki odpowiednio „jasnego” lub „ciemnego” są wypychane na stos w odwrotnej kolejności. Obie ścieżki uderzają ^w lewą stronę, co wysyła wskaźnik instrukcji w górę ...

 >:#,_@

... do segmentu wyjściowego. :duplikuje górę stosu, #przeskakuje nad ,i na _, co wysyła wskaźnik instrukcji w prawo, jeśli wierzchołek stosu wynosi 0, a w przeciwnym razie lewy. Gdy stos jest pusty, górna część stosu (po :) ma wartość 0, więc wskaźnik instrukcji trafia w tę, @która zatrzymuje wykonywanie. W przeciwnym razie trafia w ,postać, która wypuszcza górę stosu jako postać, a następnie #przeskakuje ją nad :i na >, co ponownie rozpoczyna proces.


zapisać bajt rad"v>"kbez użycia spacji?
— Linus

@Linus: „Przestrzeń jest niezbędna, ponieważ w przeciwnym razie dane wyjściowe byłyby dar k.” Wypróbuj w połączonym tłumaczu online.
— El'endia Starman

1
Masz rację. W każdym razie zamierzałem to zrobić w befunge, ale mogę uzyskać tylko 2 bajty pod tobą ... <>:#,_@ v%2-~~\n"^"light"_"krad, napraw nową linię.
— Linus,

@Linus: To wspaniale. Dzięki!
— El'endia Starman

@JamesHolderness, brak twardych uczuć. Masz rację, wskazując, że to nie działa w oryginalnym tłumaczu Befunge-93, rzeczywista specyfikacja dotyczy torusa 80x25. Możesz opublikować swoją wersję jako własną odpowiedź i wyjaśnić różnicę. Myślę, że przynajmniej byłoby to bardziej praktyczne niż dyskutowanie ze mną rocznego kodu hobby.
— Linus

8

Japt , 23 22 bajtów

Japt to skrócona wersja Ja vaScri pt . Interpretator

Un19 %2?"dark":"light"

Jak to działa

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

Używając nowej wersji 0.1.3 (wydanej 22 listopada), staje się 17 bajtów , krótszych niż wszystkie oprócz GS2:

Un19 %2?`»rk:¦ght

Lub alternatywnie magiczna formuła: (26 bajtów)

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 bajtów

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

Możesz użyć takiego interfejsu: interface i{static void mainponieważ wszystko w interfejsie jest domyślnie publiczne
— Yassin Hajaj


7

Ruby, wykreślono 44 36 bajtów

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

Możesz zapisać bajt, zastępując puts go $><<(bez spacji).
— Lynn

@Mauris Wiem, ale podoba mi się moja kończąca nowa linia
— daniero

Możesz zapisać 3 bajty, zmieniając putsnap
— Cyoce

7

C, 55 bajtów

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

Wypróbuj online

Dzięki DigitalTrauma za wiele wskazówek golfowych


Myślę, że masz dodatkowe (poputs
— Level River St

To dla 55: s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}. Zakłada, że ​​szerokość całkowita jest wystarczająco duża, aby pomieścić 3 znaki ciągu. Powinieneś być w stanie zrobić main(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}dla 54, chociaż z jakiegoś powodu funkcja get () zwraca śmieci, sjeśli nie globalne, więc segfault.
— Digital Trauma

o wow, baza-19. sprytny.
— puszysty

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

Oto wyróżnione różne segmenty ścieżki:

wprowadź opis zdjęcia tutaj

(Wszelkie niewyróżnione znaki spacji służą jako argumenty dla instrukcji ei - Skażda z tych instrukcji używa jako argumentu symbolu po lewej stronie (w stosunku do kierunku podróży bota)


7

𝔼𝕊𝕄𝕚𝕟, 26 znaków / 34 bajty

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

Try it here (Firefox only).


1
Nie nazwałbym tego „kompresją”, jeśli zajmuje więcej bajtów: P
— lirtosiast

1
W tym momencie bardziej martwię się znakami niż bajtami. Całkowicie zrezygnowałem z gry w golfa w liczbie bajtów 𝔼𝕊𝕄𝕚𝕟 ...
— Mama Fun Roll

1
Zawsze oceniamy bajty i chociaż optymalizacja pod kątem celu dodatkowego jest często interesująca, pamiętaj, że najmniej bajtów zawsze wygrywa.
— lirtosiast

Tak, rozumiem to. Jednak tak naprawdę nie zamierzam wygrywać.
— Mama Fun Roll

7

C, 49 bajtów

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

Nie, to się nie kompiluje.
— xsot

O mój Boże, majstrowałem przy czymś innym. Jednak dane wyjściowe są nieprawidłowe . Myślę, że chciałeś to zrobić gets(&c)%256+c/256?
— Lynn

Och, dobry chwyt. Chociaż w tym momencie moje rozwiązanie jest zdecydowanie gorsze niż twoje, ponieważ używamy tej samej techniki. Wygląda na to, że mam wiele do nauczenia się.
— xsot

Okazuje się, że zła wartość wyjściowa została spowodowana wartością zwracaną gets(&c). Zaktualizowałem odpowiednio swoje zgłoszenie.
— xsot

7

Clojure, 63 bajty

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • Czytamy w wierszu od standardowego przy pomocy (read-line)
  • Następnie parsuj łańcuch na wartość całkowitą w bazie 35 za pomocą wywołania metody JVM
  • Biorąc mod wyniku 2 mówi nam, czy jest parzysty czy nieparzysty
  • Użyj wyniku zwróconego z funkcji modulo jako indeksu sekwencji i wydrukuj go

Zapisuję godne 2 bajty, cytując słowa „jasne” i „ciemne” za pomocą pojedynczego cytatu, dzięki czemu Clojure przyjmuje je dosłownie, zamiast zawijać każde słowo w parę znaków cudzysłowu. Zapisuję też kilka bajtów, używając raczej pr niż println.

Kilka informacji na temat cytowania w Clojure


Witamy w Programowaniu zagadek i Code Golf! To miła pierwsza odpowiedź. :) Nie znam się zbyt dobrze na Clojure; czy mógłbyś dodać wyjaśnienie?
— Alex A.,

Absolutnie! Proszę bardzo. Daj mi znać, jeśli masz jakieś pytania!
— MONODA43,

5

Minkolang 0,12 , 28 24 bajtów

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

Wypróbuj tutaj.

Wyjaśnienie

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 bajtów

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

Oczekuje środowiska, w którym ints są przechowywane little-endian i mają co najmniej dwa bajty.

Wyjaśnienie

cjest argc, więc początkowo zawiera 01 00 00 00. getsodczyta dwa znaki, powie a (0x61)i 1 (0x31)i zapisze je c, co jest teraz

61 31 00 00

reprezentujący liczbę 0x3161 lub 12641.

Zasadniczo, biorąc pod uwagę ten problem, c = x + 256*ychcemy obliczyć (x + y) mod 2i odpowiednio wydrukować ciąg. Aby to zrobić, mogłem napisać c % 255 % 2tak jak wtedy

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

37Działa jednak również:

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

xjest w zakresie 49–57 włącznie (cyfry 1-8), więc x % 37 == x - 37.

yjest w zakresie 97-104 włącznie (małe litery ah), więc y % 37 == y - 74.

Oznacza to, że możemy uprościć

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

i po prostu odwróć ciągi, aby poprawić parzystość.


5

Belka , 127 bajtów

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

Wyjaśnienie wprowadź opis zdjęcia tutaj Jasnoniebieski - odczytaj znak z wejścia na wiązkę, zapisz wartość wiązki do sklepu, przeczytaj znak z wejścia na wiązkę.

Ciemnoniebieski - Dodaje pamięć do wiązki poprzez zmniejszenie pamięci do 0 podczas zwiększania wiązki

Jasnozielony - nawet dziwny konstrukt testowy. Pętla wyjdzie w lewo, jeśli wiązka jest parzysta, lub w prawo, jeśli jest nieparzysta.

Ciemnozielony - wyświetla ciemne

Tan - emituje światło


5

O , 22 17 bajtów

i # 2% „light'dark”?

Robi to, co jest wymagane, bez dodatkowych korzyści.


5

Labirynt , 48 46 45 42 bajtów

Dzięki Sp3000 za oszczędność dwóch bajtów.

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

Wypróbuj online!

Wyjaśnienie

Początek kodu to zabawny ślepy zaułek. Pamiętaj, że Labirynt przyjmuje nieskończoną liczbę zer, gdy wymaga operandów na dole stosu. Kod zaczyna się od -prawej, która próbuje odjąć dwie liczby, więc stos staje się:

[ ... 0 ]

Następnie ,czyta pierwszy znak, apowiedz:

[ ... 0 97 ]

"Jest no-op, ale to też jest ślepa więc wskaźnik instrukcji odwraca się i zaczyna chodzić do lewej. Następnie `czyta drugą postać, 2powiedz:

[ ... 0 97 50 ]

Tym razem -odejmuje te dwie liczby:

[ ... 0 47 ]

IP podąża teraz za zakrętem „korytarza”. #Dostaje głębokość stosu, ignorując ukryte zer, które łatwo się składa, że 2:

[ ... 0 47 2 ]

I %oblicza modulo:

[ ... 0 1 ]

W tym momencie adres IP jest na styku. Jeśli górna część stosu ma wartość zero, przesunie się na wprost, gdzie zostaną 100.97.114.107.@wydrukowane dark. Ale jeśli górna część stosu jest różna od zera (konkretnie 1), przesunie się w prawo, tam gdzie 0:::8.5.3.4.116.@drukuje light(pamiętaj, że możemy pominąć wiodące 1, ponieważ jest już 1na stosie i możemy zaoszczędzić na powtarzających się 10w 108, 105, 103, 104poprzez kilka kopie 10, kiedy pierwszy raz się tam dostać).


4

Matlab, 51 bajtów

Nie sądzę, że wymaga to wyjaśnienia =)

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

4

> <> , 31 bajtów

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

Tutaj myślę „musi być lepszy sposób ...”


4

Perl, 29 27 bajtów

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

Ten kod wymaga -pprzełącznika, który policzyłem jako 1 bajt.

Wypróbuj online na Ideone .

Jak to działa

  • Z powodu -pprzełącznika Perl odczytuje jeden wiersz danych wejściowych i zapisuje je $_.

  • /./jest wyrażeniem regularnym, które pasuje do jednego znaku. Ma to dwie konsekwencje:

    • Ponieważ mecz się powiódł, /./zwraca 1 .

    • Dopasowanie (drugi znak wejściowy) jest przechowywane w $'.

  • $'+orddodaje liczbę całkowitą, którą drugi znak wejściowy reprezentuje do punktu kodowego ( ord) pierwszego znaku zmiennej niejawnej $_.

  • &przyjmuje bitowe AND wartości zwracanej /./i sumy $'+ord, zwracając 1 jest sumą, jeśli jest nieparzysta, 0, jeśli jest parzysta.

  • ?light:darkzwraca światło, jeśli poprzednie wyrażenie zwróciło 1, a ciemne w przeciwnym razie.

  • Na koniec $_=przypisuje wynik $_, który Perl drukuje automatycznie, z powodu -p przełącznika.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.