Twoim wyzwaniem jest napisanie programu, który wypisuje kolor danego kwadratu z szachownicy. Tak wygląda szachownica:
Widać, że kwadrat a1 jest ciemny, a h1 to jasny kwadrat. Twój program musi generować dane wyjściowe dark
lub 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
dark
lublight
. - Załóżmy, że dane wejściowe są zawsze prawidłowe (
[a-h][1-8]
) - To jest golf golfowy , 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>
Odpowiedzi:
GS2 ,
1715 bajtówKod źródłowy używa kodowania CP437 . Wypróbuj online!
Weryfikacja
Jak to działa
źródło
Python 2,
4138 bajtów3 bajty dzięki Mego do przeplotu łańcuchów
Przyjmuje dane wejściowe jak
"g6"
. To jasne i ciemne splecione.źródło
int(input(),35)
to genialna część. Myślałem o przeplataniu łańcucha, ale twoja metoda wprowadzania danych zapisuje najwięcej bajtów.Sześciokąt ,
3432 bajtyRozłożony iz adnotowanymi ścieżkami wykonania:
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łąź, gdzie1
drukuje się ciemnoszara ścieżka (wynik )dark
i jasnoszara ścieżka (wynik0
)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
):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 umieszczamy2
, 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.źródło
CJam, 18 bajtów
Demo online
Sekcja
źródło
:-)
:^)
sed, 37
Wyjaśnienie
s/[1357aceg]//g
usuwa 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,c
dopasowuje wzór do „światła” iq
uits. W przeciwnym razie wzór zostaniec
powieszony na „ciemny”.źródło
q
Jest zbędny i można sprawdzić za ciemny najpierw zamiast z/../
, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...Pyth, 18 bajtów
Interpretuj dane wejściowe jako liczbę podstawową 35, podziel
lightdark
na pół, wydrukuj.źródło
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 =)
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
divmod
iif/else
od tutaj. (Dzięki @Mego!)Teraz mamy konfigurację komórek
>sum 2
, teraz wykonujemy algorytm divmod:Wyjście divmod wygląda tak,
0 d-n%d >n%d n/d
ale wyzerowaliśmyd-n%d
i zerujemy również następną komórkę:Wypełnij jedną komórkę do wartości,
100
aby ułatwić wyjście:Teraz konfiguracja jest
>cond 0 100
i do zastosowaniaif/else
algorytmu potrzebujemy dwóch zmiennych temp, więc wybieramy konfiguracjętemp0 >c temp1 100
źródło
Python 2, 45 bajtów
Przyjmuje dane wejściowe jak
"a1"
. Wypróbuj onlineźródło
"ldiagrhgt"[expression::2]
powinno działać, oszczędzając bajt lub dwaPoważnie , 19 bajtów
Przyjmuje dane wejściowe jak
"a1"
Wypróbuj online (będziesz musiał ręcznie wprowadzić dane wejściowe; permalinki nie lubią cudzysłowów)
źródło
Kod maszynowy Turinga, 235 bajtów
Korzystanie ze zdefiniowanej tutaj składni tabeli reguł .
źródło
JavaScript (ES6), 45 bajtów
źródło
TI-BASIC, 66 bajtów
Testowany na kalkulatorze TI-84 +.
Oto bardziej interesująca odmiana trzeciej linii, która niestety ma dokładnie ten sam rozmiar:
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.
źródło
Befunge-93 ,
39373331 bajtówPodziękowania dla Linusa, który zaproponował to 31-bajtowe rozwiązanie:
Przetestuj za pomocą tego interpretera .
Wyjaśnienie
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. Jaka
i1
to zarówno nieparzyste (jeśli chodzi o kodzie ASCII), to działa.v
Przekierowuje wskaźnik instrukcji w dół ...... 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.źródło
rad"v>"k
bez użycia spacji?dar k
.” Wypróbuj w połączonym tłumaczu online.<>:#,_@ v%2-~~\n"^"light"_"krad
, napraw nową linię.Japt ,
2322 bajtówJapt to skrócona wersja Ja vaScri pt . Interpretator
Jak to działa
Używając nowej wersji 0.1.3 (wydanej 22 listopada), staje się 17 bajtów , krótszych niż wszystkie oprócz GS2:
Lub alternatywnie magiczna formuła: (26 bajtów)
źródło
Java,
157127124 bajtówźródło
interface i{static void main
ponieważ wszystko w interfejsie jest domyślnie publiczneTeaScript , 23 bajty
Niestety łańcuchy
dark
ilight
nie można ich skompresować.źródło
Ruby,
wykreślono 4436 bajtówźródło
puts
go$><<
(bez spacji).puts
nap
C, 55 bajtów
Wypróbuj online
Dzięki DigitalTrauma za wiele wskazówek golfowych
źródło
(
poputs
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,s
jeśli nie globalne, więc segfault.BotEngine ,
16514x11 = 154Oto wyróżnione różne segmenty ścieżki:
(Wszelkie niewyróżnione znaki spacji służą jako argumenty dla instrukcji
e
i -S
każda z tych instrukcji używa jako argumentu symbolu po lewej stronie (w stosunku do kierunku podróży bota)źródło
𝔼𝕊𝕄𝕚𝕟, 26 znaków / 34 bajty
Try it here (Firefox only).
źródło
C, 49 bajtów
źródło
gets(&c)%256+c/256
?gets(&c)
. Zaktualizowałem odpowiednio swoje zgłoszenie.Clojure, 63 bajty
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
źródło
Minkolang 0,12 ,
2824 bajtówWypróbuj tutaj.
Wyjaśnienie
źródło
C, 46 bajtów
Oczekuje środowiska, w którym
int
s są przechowywane little-endian i mają co najmniej dwa bajty.Wyjaśnienie
c
jestargc
, więc początkowo zawiera01 00 00 00
.gets
odczyta dwa znaki, powiea (0x61)
i1 (0x31)
i zapisze jec
, co jest terazreprezentujący liczbę 0x3161 lub 12641.
Zasadniczo, biorąc pod uwagę ten problem,
c = x + 256*y
chcemy obliczyć(x + y) mod 2
i odpowiednio wydrukować ciąg. Aby to zrobić, mogłem napisaćc % 255 % 2
tak jak wtedy37
Działa jednak również:x
jest w zakresie 49–57 włącznie (cyfry 1-8), więcx % 37 == x - 37
.y
jest w zakresie 97-104 włącznie (małe litery ah), więcy % 37 == y - 74
.Oznacza to, że możemy uprościć
i po prostu odwróć ciągi, aby poprawić parzystość.
źródło
Belka , 127 bajtów
Wyjaśnienie 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
źródło
O ,
2217 bajtówRobi to, co jest wymagane, bez dodatkowych korzyści.
źródło
Labirynt ,
48464542 bajtówDzięki Sp3000 za oszczędność dwóch bajtów.
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ę:Następnie
,
czyta pierwszy znak,a
powiedz:"
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ć,2
powiedz:Tym razem
-
odejmuje te dwie liczby:IP podąża teraz za zakrętem „korytarza”.
#
Dostaje głębokość stosu, ignorując ukryte zer, które łatwo się składa, że2
:I
%
oblicza modulo: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.@
wydrukowanedark
. Ale jeśli górna część stosu jest różna od zera (konkretnie1
), przesunie się w prawo, tam gdzie0:::8.5.3.4.116.@
drukujelight
(pamiętaj, że możemy pominąć wiodące1
, ponieważ jest już1
na stosie i możemy zaoszczędzić na powtarzających się10
w108
,105
,103
,104
poprzez kilka kopie10
, kiedy pierwszy raz się tam dostać).źródło
Matlab, 51 bajtów
Nie sądzę, że wymaga to wyjaśnienia =)
źródło
> <> , 31 bajtów
Tutaj myślę „musi być lepszy sposób ...”
źródło
Perl,
2927 bajtówTen kod wymaga
-p
przełącznika, który policzyłem jako 1 bajt.Wypróbuj online na Ideone .
Jak to działa
Z powodu
-p
przełą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
$'
.$'+ord
dodaje 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:dark
zwraca ś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.źródło