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>

Adnan
źródło
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.
Dennis
źródło
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.

isaacg
źródło
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.

Martin Ender
źródło
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"
Peter Taylor
źródło
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”.

Cyfrowa trauma
źródło
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.

isaacg
źródło
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-]
wada
źródło
12

Python 2, 45 bajtów

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

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

Mego
źródło
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,
12

Poważnie , 19 bajtów

"dark""light"2,O+%I

Przyjmuje dane wejściowe jak "a1"

Wypróbuj online (będziesz musiał ręcznie wprowadzić dane wejściowe; permalinki nie lubią cudzysłowów)

Mego
źródło
2
Link online ded ..
CalculatorFeline
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
SuperJedi224
źródło
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")
Downgoat
źródło
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.

lirtosiast
źródło
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.

El'endia Starman
źródło
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.
ETHprodukcje
źródło
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");}}
SuperJedi224
źródło
Możesz użyć takiego interfejsu: interface i{static void mainponieważ wszystko w interfejsie jest domyślnie publiczne
Yassin Hajaj
7

TeaScript , 23 bajty

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

Niestety łańcuchy darki lightnie można ich skompresować.

Downgoat
źródło
Hehe, Japt jest raz krótszy ;) +1 jednak techniki kompresji JS są świetne! Mogę dodać je do Japt po przebudowie tłumacza.
ETHprodukcje
7

Ruby, wykreślono 44 36 bajtów

puts %w[light dark][gets.to_i(19)%2]
daniero
źródło
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

Mego
źródło
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)

SuperJedi224
źródło
7

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

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

Try it here (Firefox only).

Mama Fun Roll
źródło
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");}
xsot
źródło
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

MONODA43
źródło
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.
El'endia Starman
źródło
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ść.

Lynn
źródło
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

MickyT
źródło
5

O , 22 17 bajtów

i # 2% „light'dark”?

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

faza
źródło
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ć).

Martin Ender
źródło
4

Matlab, 51 bajtów

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

a={'light','dark'};disp(a(2-mod(sum(input('')),2)))
wada
źródło
4

> <> , 31 bajtów

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

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

Sp3000
źródło
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.

Dennis
źródło