Определите цвет шахматного квадрата

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
Почему никто не пробовал <> ^ Рыбу?
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.
Исаак
29
Святая корова, ребята, GS2 - это новый Pyth! Кто-нибудь придумает, как использовать это задолго до Денни ... не говоря уже.
ETHproductions
56

Python 2, 41 38 байт

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

3 байта благодаря Mego для чередования строк

Принимает участие как "g6". Это свет и тьма переплетаются.

isaacg
источник
Это просто великолепно с переплетением строк.
Уэйн Вернер
5
Я бы сказал, что int(input(),35)это блестящая часть. Я думал о чередовании строк, но ваш метод ввода сохраняет больше байтов.
mbomb007
26

Гексагония , 34 32 байта

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

Развернутый и с аннотированными путями выполнения:

введите описание изображения здесь
Диаграмма, созданная с помощью потрясающего HexagonyColorer Тимви .

Фиолетовый путь - это начальный путь, который считывает два символа, вычисляет их разность и принимает его по модулю 2. Затем <он действует как ветвь, где 1печатаются темно-серый путь (результат ) darkи светло-серый путь (результат 0) light.

Что касается того, как я вычисляю разницу и по модулю, вот диаграмма сетки памяти (со значениями, взятыми для ввода a1):

введите описание изображения здесь
Диаграмма, созданная с помощью еще более удивительной Esoteric IDE Тимви (в которой есть визуальный отладчик для Hexagony).

Указатель памяти начинается с края, обозначенного строкой , где мы читаем символ. }перемещается к краю с надписью col , где мы читаем цифру. "перемещается к краю с надписью diff, где -вычисляет разницу между ними. 'перемещается в ячейку без метки, в которую мы помещаем 2, и {=перемещается в ячейку, помеченную как мод, где мы вычисляем по модулю %.

Это может быть пригодно для игры в гольф на несколько байтов путем повторного использования некоторых из них ;, но я сомневаюсь, что это может быть сделано в гольф многими, конечно, не до длины стороны 3.

Мартин Эндер
источник
7
О, красивые цвета!
Celeo
1
Этот язык для меня новый, но я поражен твоей способностью придумать что-то более надуманное, чем я думал, возможно
qwr
18
Я действительно не понимаю все эти языки гольфа.
младший Рубиист
4
@ codeSwift4Life Hexagony - далеко не язык для игры в гольф. Для таких простых задач, как эта, она может быть достаточно конкурентоспособной, поскольку в ней есть односимвольные команды, но это больше необходимость, которую разделяют многие другие двумерные языки , включая Befunge, Piet,> <>. Любая нетривиальная задача потребует очень большого количества кода и сложных программ из-за странной модели памяти Hexagony. Он никоим образом не предназначен для того, чтобы быть кратким языком, а скорее экзотическим и странным языком, исследующим программирование на гексагональных сетках.
Мартин Эндер
3
@qwr Я думал, что придумывать - вот смысл эзолангов. ;)
Мартин Эндер
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
ваш код улыбается:-)
дверная ручка
8
Я считаю одинаково эффективным:^)
Питер Тейлор
2
Пожалуйста, вы можете объяснить, как это работает.
Fogmeister
@Fogmeister, добавил объяснение.
Питер Тейлор
17

Сед, 37

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

объяснение

s/[1357aceg]//gудаляет все нечетные координаты. Полученный шаблонный буфер имеет длину 1 для «светлого» или длину 0 или 2 для «темного». /^.$/соответствует шаблонам 1 длины, cпередает шаблон на «свет» и qиспользует. В противном случае рисунок cповешен до «темного».

Цифровая травма
источник
qЯвляется излишним, и вы можете проверить на темноту первого вместо этого /../, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...
Kritixi Lithos
14

Pyth, 18 байт

@c2"lightdark"iz35

Интерпретировать ввод как основную цифру 35, разрезать lightdarkпополам, распечатать.

isaacg
источник
13

ShadyAsFuck, 91 байт / BrainFuck, 181 байт

Моя первая настоящая программа BrainFuck, спасибо Мего за помощь и за указание на архив алгоритмов. (Это означает, что я действительно не делал это самостоятельно, но скопировал некоторые существующие алгоритмы. Все еще опыт =)

NKnmWs3mzhe5aAh=heLLp5uR3WPPPPagPPPPsuYnRsuYgGWRzPPPPlMlk_PPPPPP4LS5uBYR2MkPPPPPPPP_MMMkLG]

Это, конечно, перевод из моих ответов мозговой команды:

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

Разработано с использованием этого интерпретатора / отладчика .

Я украл два фрагмента кода для divmodи if/elseот сюда. (Спасибо @Mego!)

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

Теперь у нас есть конфигурация ячеек, >sum 2теперь мы выполняем алгоритм divmod:

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

Вывод divmod выглядит следующим образом, 0 d-n%d >n%d n/dно мы обнулили 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-]
flawr
источник
12

Python 2, 45 байт

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

Принимает участие как "a1". Попробуйте онлайн

Мего
источник
Это не сработает в Python 3 из-за отсутствия скобок для печати.
Исаак
Не могу проверить прямо сейчас, но что-то вроде "ldiagrhgt"[expression::2]должно работать, сохраняя один или два байта
FryAmTheEggman
12

Серьезно , 19 байтов

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

Принимает вход как "a1"

Попробуйте онлайн (вам нужно будет вручную ввести ввод; постоянные ссылки не любят кавычки)

Мего
источник
2
Онлайн ссылка ded ..
CalculatorFeline
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
SuperJedi224
источник
1
Это, пожалуй, самая удивительная вещь, которую я когда-либо видел LOL
Лукас
10

JavaScript (ES6), 45 байт

alert(parseInt(prompt(),35)%2?"dark":"light")
Downgoat
источник
способ использовать основание! +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. Это не так; эти решения кажутся кратчайшими.

Мы тратим много байтов, чтобы получить оба символа в строке, но на самом деле стоит тринадцать двухбайтовых строчных букв.

lirtosiast
источник
9

Befunge-93 , 39 37 33 31 байт

Вся благодарность Линусу, который предложил это 31-байтовое решение:

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

Проверьте это с помощью этого интерпретатора .

объяснение

<        v%2-~~

В <начале отправляет указатель инструкции влево, где он оборачивается вправо. Затем он считывает из входных данных два символа как ASCII, вычитает их и делает по модулю значение 2. Поскольку aи 1оба являются нечетными (с точки зрения кода ASCII), это работает. vПеренаправляет указатель инструкции вниз ...

"^"light"_"krad

... на _, который отправляет указатель инструкции влево, если вершина стека равна 0, и вправо в противном случае. Символы «светлый» или «темный», соответственно, помещаются в стек в обратном порядке. Оба пути попадают ^слева, что отправляет указатель инструкции вверх ...

 >:#,_@

... в выходной сегмент. :дублирует вершину стека, #перепрыгивает через ,и на _, что отправляет указатель инструкции вправо, если вершина стека равна 0, и в противном случае остается влево. Когда стек пуст, вершина стека (после :) равна 0, поэтому указатель инструкции достигает значения, @которое останавливает выполнение. В противном случае он попадает в ,, который выводит вершину стека как символ, а затем #перепрыгивает его через :и в >, что снова запускает процесс.

Эльендия Старман
источник
сохранить байт, используя rad"v>"kбез пробела?
Линус
@Linus: «Пространство необходимо, потому что в противном случае вывод будет dar k.» Попробуйте это в связанном онлайн-переводчике.
El'endia Starman
1
Твое право. Во всяком случае, я собирался сделать это в ближайшее время, но я могу получить только 2 байта под вас ... <>:#,_@ v%2-~~\n"^"light"_"krad, исправить новую строку.
Линус
@Linus: Это великолепно. Спасибо!
El'endia Starman
@JamesHolderness, никаких обид. Вы правы, отметив, что это не работает в оригинальном интерпретаторе Befunge-93, реальная спецификация для тора 80x25. Возможно, вы захотите опубликовать свою версию в качестве собственного ответа и объяснить разницу. Я думаю, что по крайней мере это было бы более практичным, чем обсуждение со мной годовалого хобби-кода.
Линус
8

Джапт , 23 22 байта

Japt - это сокращенная версия Ja 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 (выпущенной 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.
ETHproductions
источник
8

Java, 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");}}
SuperJedi224
источник
Вы можете использовать такой интерфейс: interface i{static void mainтак как все в интерфейсе по умолчанию общедоступно
Yassin Hajaj
7

TeaScript , 23 байта

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

К сожалению строки darkи lightне могут быть сжаты.

Downgoat
источник
Хе-хе, Japt на этот раз короче ;) +1 хотя методы сжатия JS великолепны! Я могу добавить их в Japt после обновления переводчика.
ETHproductions
7

Рубин, вычеркнуто 44 36 байт

puts %w[light dark][gets.to_i(19)%2]
daniero
источник
Вы можете сохранить байты, заменяя puts с $><<(без пробела).
Линн
@Mauris Я знаю, но мне нравится мой завершающий
перевод
Вы можете сэкономить 3 байта, изменив putsнаp
Cyoce
7

C, 55 байтов

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

Попробуйте онлайн

Спасибо DigitalTrauma за множество советов по игре в гольф

Мего
источник
Я думаю, что у вас есть дополнительные (послеputs
Level River St
Это за s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}. Предполагается, что целочисленная ширина достаточно велика, чтобы вместить 3 символа строки. Вы также должны быть в состоянии сделать main(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}для 54, хотя по какой-то причине get () возвращает мусор, sесли не глобальный, так что это segfaults.
Цифровая травма
Ух ты, база-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
     ^   <

Вот это с различными выделенными сегментами пути:

введите описание изображения здесь

(Любой не-пробельные символы не выделенные служить в качестве аргументов для eи Sinstructions- каждого из этих команд используют символ влево ( по отношению к направлению бота движения) в качестве аргумента)

SuperJedi224
источник
7

𝔼𝕊𝕄𝕚𝕟, 26 символов / 34 байта

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

Try it here (Firefox only).

Mama Fun Roll
источник
1
Я бы не назвал это «сжатием», если бы он
занимал
1
На данный момент я больше беспокоюсь о символах, чем байтах. Я полностью разочаровался в попытке подсчитать байты в 𝔼𝕊𝕄𝕚𝕟 ...
Mama Fun Roll
1
Мы всегда подсчитываем байты, и, хотя часто бывает интересно оптимизировать для второстепенной цели, помните, что всегда побеждает меньшее количество байтов.
Lirtosiast
Да, я понимаю это. Хотя я не очень стремлюсь к победе.
Mama Fun Roll
7

C, 49 байтов

main(c){gets(&c);puts(c+c/256&1?"light":"dark");}
xsot
источник
Нет, это не компилируется.
xsot
О, мой плохой, я возился с чем-то другим. Вывод неверный, хотя . Я думаю, что ты хотел сделать gets(&c)%256+c/256?
Линн
О, хороший улов. Хотя на данный момент мое решение строго хуже вашего, так как мы используем ту же технику. Похоже, мне есть чему поучиться.
xsot
Оказывается, неправильный вывод был вызван возвращаемым значением gets(&c). Я обновил свое представление соответственно.
xsot
7

Clojure, 63 байта

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • Читаем в строке из stdin с (read-line)
  • Затем разберите строку в целочисленное значение в базе 35 с помощью вызова метода JVM
  • Принимая мод результата 2 говорит нам, если он четный или нечетный
  • Используйте результат, возвращенный функцией modulo, в качестве индекса последовательности и распечатайте его

Я сохраняю 2 достойных байта, заключая в кавычки слова «светлые» и «темные», чтобы Clojure воспринимал их как литерал, а не заключал каждое слово в кавычки. Я также экономлю несколько байтов, используя pr, а не println.

Некоторая информация о цитировании в Clojure

MONODA43
источник
Добро пожаловать в программирование головоломок и Code Golf! Это хороший первый ответ. :) Я не слишком знаком с Clojure; Вы не против добавить объяснение?
Алекс А.
Абсолютно! Вот и ты. Дайте знать, если у вас появятся вопросы!
MONODA43
5

Минколанг 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 хранится в порядке байтов и имеет размер не менее двух байтов.

объяснение

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 включительно (строчные ах), т 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 - выход света

MickyT
источник
5

О , 22 17 байт

я # 2% "light'dark"?

Это делает то, что требуется, без каких-либо дополнительных преимуществ.

фаза
источник
5

Лабиринт , 48 46 45 42 байта

Спасибо Sp3000 за сохранение двух байтов.

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

Попробуйте онлайн!

объяснение

Начало кода - забавный тупик. Помните, что Лабиринт предполагает бесконечное число нулей, когда он требует операндов в нижней части стека. Код начинается с -правильного хода, который пытается вычесть два числа, поэтому стек становится:

[ ... 0 ]

Затем ,читает первый символ, aскажите:

[ ... 0 97 ]

Параметр "no-op, но это также тупик, поэтому указатель инструкций поворачивается и начинает идти влево. Затем `читает другой персонаж, 2скажите:

[ ... 0 97 50 ]

На этот раз -вычитает эти два числа:

[ ... 0 47 ]

IP теперь следует за поворотом «коридора». #Получает глубину стека, игнорируя скрытые нули, которые удобно случается 2:

[ ... 0 47 2 ]

И %вычисляет по модулю:

[ ... 0 1 ]

На данный момент IP находится на стыке. Если вершина стека равна нулю, он будет двигаться прямо вперед, где 100.97.114.107.@печатаетdark . Но если вершина стека отлична от нуля (в частности, 1), она переместится вправо, где 0:::8.5.3.4.116.@печатает light(обратите внимание, что мы можем опустить ведущий 1, потому что 1в стеке уже есть , и мы можем сэкономить на повторном 10в 108, 105, 103, 104сделав несколько копий , 10когда мы сначала получить там).

Мартин Эндер
источник
4

Matlab, 51 байт

Я не думаю, что это нуждается в каких-либо объяснениях =)

a={'light','dark'};disp(a(2-mod(sum(input('')),2)))
flawr
источник
4

> <> , 31 байт

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

Здесь я думаю, что "должен быть лучший способ ..."

Sp3000
источник
4

Perl, 29 27 байт

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

Для этого кода требуется -pпереключатель, который я посчитал 1 байтом.

Попробуйте онлайн на Ideone .

Как это устроено

  • Благодаря -pпереключателю Perl читает одну строку ввода и сохраняет ее в $_.

  • /./является регулярным выражением, которое соответствует одному символу. Это имеет два значения:

    • Поскольку совпадение прошло успешно, /./возвращается 1 .

    • Пост-матч (второй входной символ) сохраняется в $'.

  • $'+ordдобавляет целое число, которое представляет второй входной символ, к коду point ( ord) первого символа неявной переменной $_.

  • &принимает побитовое И возвращаемого значения /./и суммы $'+ord, возвращая 1 - это сумма, если она нечетная, 0, если она четная.

  • ?light:darkвозвращает свет, если предыдущее выражение вернуло 1 и темно противном случае.

  • Наконец, $_=присваивает результат $_, который Perl печатает автоматически, благодаря -p переключателю.

Деннис
источник