Визначте колір шахового квадрата


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.
isaacg

29
Свята корова, хлопці, GS2 - це новий Піт! Хтось зрозуміє, як його добре використати перед Денні ... неважливо.
ETHproductions

56

Python 2, 41 38 байт

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

3 байти завдяки Мего за переплетення рядків

Приймає вхід як "g6". Це світле і темне переплетення.


Це просто чудово з переплетенням струн.
Уейн Вернер

5
Я б фактично сказав, що int(input(),35)це геніальна частина. Я подумав про переплетення рядків, але ваш метод введення зберігає найбільше байтів.
mbomb007

26

Шестикутник , 34 32 байти

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

Розгорнуті та з позначеними контурами виконання:

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

Фіолетовий шлях - це початковий шлях, який читає два символи, обчислює їх різницю і приймає його за модулем 2. Потім <він виступає гілкою, де 1друкується темно-сірий шлях (результат ) darkі світло-сірий шлях (результат 0) light.

Щодо того, як я обчислюю різницю та модуль, ось схема діапазону пам'яті (зі значеннями, прийнятими для введення a1):

введіть тут опис зображення
Діаграма генеруватися з Timwi в ще більш дивним езотеричної IDE (який має візуальний відладчик для Hexagony).

Покажчик пам’яті починається з рядка , позначеного краєм , де ми читаємо символ. }рухається до краю, позначеного колом , де ми читаємо цифру. "переміщується до краю, позначеного різницею, де -обчислює різницю двох. 'переміщається в Непомічені камері , де ми поставили 2, і {=переміщається в клітини позначені мод , де ми обчислимо по модулю з %.

Це може бути зіграно на кілька байтів, повторно використовуючи деякі з них ;, але я сумніваюся, що це може бути багато в гольф, звичайно не до бічної довжини 3.


7
О, гарні кольори!
Селео

1
Ця мова для мене нова, але я вражений вашою здатністю придумати щось більш надумане, ніж я вважав можливим
qwr

18
Я справді не знаю всіх цих мов для гольфу.
молодшийРубіїст

4
@ codeSwift4Life Гексагонія далеко не мова для гольфу. Для подібних тривіальних завдань це може бути досить конкурентоспроможним, оскільки він має команди з однозначними символами, але це більше необхідність, яку поділяють багато інших 2D мов , включаючи Befunge, Piet,> <>. Будь-яке нетривіальне завдання вимагатиме дуже великої кількості коду та складних програм, завдяки дивної моделі пам'яті Гексагоні. Це жодним чином не означало стислої мови, а скоріше екзотичну та дивну, вивчаючи програмування на шестикутних сітках.
Мартін Ендер

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
ваш код посміхається:-)
Doorknob

8
Я вважав не менш ефективним:^)
Пітер Тейлор

2
Поясніть, будь ласка, як це працює.
Фогмайстер

@Fogmeister, додав пояснення.
Пітер Тейлор

17

sed, 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

Піт, 18 байт

@c2"lightdark"iz35

Інтерпретувати введення як основне число 35, розрізати lightdarkнавпіл, роздрукувати.


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

12

Python 2, 45 байт

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

Приймає вхід як "a1". Спробуйте в Інтернеті


Це не працює в Python 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
Це, мабуть, найдивовижніша річ, яку я коли-небудь бачив lol
Лукас

10

JavaScript (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. Це не так; ці рішення здаються найкоротшими.

Ми витрачаємо багато байт, щоб отримати обидва символи в рядку, але те, що дійсно коштує, це тринадцять двобайтових малих літер.


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

Japt , 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.

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");}}

Ви можете використовувати такий інтерфейс: interface i{static void mainоскільки все в інтерфейсі за замовчуванням є загальнодоступним
Yassin Hajaj


7

Рубі, викреслено 44 36 байт

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

Ви можете зберегти байт, замінивши puts на $><<(немає місця).
Лінн

@Mauris Я знаю, але мені подобається мій завершальний новий рядок
daniero

Ви можете зберегти 3 байти, змінивши putsнаp
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");}для 54, хоча з якоїсь причини отримує () повернення сміття, sякщо не глобальне, то воно старіє.
Цифрова травма

ой вау, база-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та Sінструкцій; кожна з цих інструкцій використовує символ ліворуч (щодо напрямку руху бота) як аргумент)


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?
Лінн

О, хороший улов. Хоча на даний момент моє рішення суворо гірше, ніж ваше, оскільки ми використовуємо ту саму техніку. Схоже, у мене є чому навчитися.
xsot

Виявляється, неправильний вихід був викликаний зворотним значенням gets(&c). Я відповідно оновив свої подання.
xsot

7

Clojure, 63 байти

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • Ми читаємо в рядку від stdin з (read-line)
  • Потім розберіть рядок на ціле значення в базі 35, використовуючи виклик методу JVM
  • Беручи модуль результату 2, нам підказують, чи є парним чи непарним
  • Використовуйте результат, повернутий з функції модуля, як індекс до послідовності та надрукуйте його

Я зберігаю гідні 2 байти, цитуючи "світлий" і "темний" з однією цитатою, щоб Clojure сприйняв це як буквальне, на відміну від упаковки кожного слова в пари лапок. Я також зберігаю кілька байтів, використовуючи pr, а не println.

Деякі відомості про цитування в Clojure


Ласкаво просимо до головоломки програмування та коду для гольфу! Це хороша перша відповідь. :) я не надто знайомий з Clojure; Ви не проти додати пояснення?
Олексій А.

Абсолютно! Ось так. Повідомте мене, якщо у вас є якісь питання!
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 зберігаються малоекзіан і мають принаймні два байти.

Пояснення

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, збільшуючи промінь

Світло-зелений - Непарна конструкція тестування. Петля вийде зліва, якщо пучок парний або правий, якщо непарний.

Темно-зелений - вихід темний

Загар - Виходи світла


5

О , 22 17 байт

i # 2% "light'dark"?

Це робить те, що потрібно робити, без додаткових переваг.


5

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

Завдяки Sp3000 за збереження двох байтів.

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

Спробуйте в Інтернеті!

Пояснення

Початок коду - кумедна тупик. Пам'ятайте, що Лабіринт приймає нескінченну кількість нулів, коли йому потрібні операнди в нижній частині стека. Код починається з одного, що -йде вправо, який намагається відняти два числа, тому стек стає:

[ ... 0 ]

Потім ,читає перший символ, aскажіть:

[ ... 0 97 ]

Оператор "не працює, але це також тупик, тому вказівник інструкції обертається і починає рухатись ліворуч. Потім `читає іншого персонажа, 2скаже:

[ ... 0 97 50 ]

Цього разу -віднімаємо ці два числа:

[ ... 0 47 ]

Тепер ІП слід за вигином "коридору". #Отримує глибину стека, ігноруючи приховані нулі, які зручно трапляється 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

Матлаб, 51 байт

Я не думаю, що це не потребує пояснень =)

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

4

> <> , 31 байт

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

Тут я думаю, що "повинен бути кращий спосіб ..."


4

Perl, 29 27 байт

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

Цей код вимагає -pкомутатора, який я порахував як 1 байт.

Спробуйте в Інтернеті на Ideone .

Як це працює

  • Через -pперемикач Perl зчитує один рядок введення та зберігає його $_.

  • /./- регулярний вираз, що відповідає одному символу. Це має два наслідки:

    • Оскільки матч пройшов успішно, /./повертає 1 .

    • Після збігу (другий вхідний символ) зберігається в $'.

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

  • &приймає порозрядне значення AND поверненого значення /./та суми $'+ord, повернення 1 - це сума, якщо непарна, 0, якщо вона є парною.

  • ?light:darkповертає світло, якщо попередній вираз повернувся 1, а темне в іншому випадку.

  • Нарешті $_=призначає результат $_, який Perl друкує автоматично, через -p комутатор.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.