Satranç karesinin rengini belirleme


59

Buradaki zorluk, verilen karenin rengini satranç tahtasından çıkaran bir program yazmaktır. Satranç tahtasının görüntüsü şöyle:

görüntü tanımını buraya girin

A1 karesinin karanlık ve h1’in açık bir kare olduğunu görebilirsiniz. Programınızın çıktısını alması darkveya lightbir kare verildiğinde gerekir. Bazı örnekler:

STDIN:  b1
STDOUT: light

STDIN:  g6
STDOUT: light

STDIN:  d4
STDOUT: dark

Kurallar:

  • STDIN kullanan darkveya çıktı almak için STDOUT kullanan tam bir program sağlamanız gerekir light.
  • Girişin her zaman geçerli olduğunu varsayalım ( [a-h][1-8])
  • Bu , yani en kısa bayt miktarı kazanıyor!

sayı tahtası

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
Neden kimse <> ^ Balık denememişti?
ghosts_in_the_code

Yanıtlar:


46

GS2 , 17 15 bayt

de♦dark•light♠5

Kaynak kod CP437 kodlamasını kullanır . Çevrimiçi deneyin!

Doğrulama

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

Nasıl çalışır

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
Bu harika! Kaçınılmaz 9 byte, 3 byte outgolfing Pyth ve CJam ile inanılmaz.
isaacg

29
Kutsal inek, millet, GS2 yeni Pyth! Birileri Denni'den önce nasıl kullanılacağını çözdü ... boşver.
ETHProductions,

56

Python 2, 41 38 bayt

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

String interlacing için Mego sayesinde 3 bayt

Gibi girdi alır "g6". Bu aydınlık ve karanlık iç içe.


Bu sadece dize birbirine geçerken muhteşem.
Wayne Werner

5
Aslında bunun int(input(),35)harika bir bölüm olduğunu söyleyebilirim . Dize birbirine geçtiğini düşündüm, ancak giriş yönteminiz en çok baytı koruyor.
mbomb007

26

Altıgen , 34 32 bayt

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

Açılmamış ve açıklamalı yürütme yolları:

görüntü tanımını buraya girin
Diyagram ile oluşturulan Timwi en şaşırtıcı HexagonyColorer .

Mor yolu iki karakter okur kendi farkını hesaplar ve 2. modülo sürer ilk yoldur <sonra bir dal, işlevi görür; koyu gri yol (sonuç 1) baskılar darkve açık gri yolu (sonuç 0) baskılar light.

Farkı ve modüloğu nasıl hesapladığımı gelince, işte bellek ızgarasının bir şeması (giriş için alınan değerler ile a1):

görüntü tanımını buraya girin
Diyagram ile oluşturulan Timwi en daha da şaşırtıcı Ezoterik IDE (Hexagony için görsel hata ayıklayıcı vardır).

Bellek ibre kenar etiketli başlar satır biz karakteri okuma. rakamı okuduğumuz col} etiketli kenara gider . Kenar etiketli hareket fark iki farkı hesaplar. biz koymak etiketsiz hücreye hareket eder ve hücre etiketli gider mod biz modulo hesaplamak ."-'2{=%

Bu, bazılarını yeniden kullanarak birkaç byte'la oynanabilir olabilir ;, ancak kesinlikle yan boy 3'e kadar değil, çok golf oynayabileceğinden şüpheliyim.


7
Ooh, güzel renkler!
Celeo

1
Bu dil benim için yeni ama mümkün olduğunu düşündüğümden daha fazla
tartışmalı bir

18
Bu golf dillerini gerçekten anlamıyorum.
juniorRubyist

4
@ codeSwift4Life Hexagony bir golf dili olmaktan uzak. Bunun gibi önemsiz görevler için oldukça rekabetçi olabilir, çünkü tek karakterli komutları vardır, ancak bu Befunge, Piet,> <> dahil olmak üzere diğer birçok 2D dili tarafından paylaşılan bir gerekliliktir . Önemsiz olan herhangi bir görev, Hexagony'nin tuhaf hafıza modeli nedeniyle çok büyük miktarda kod ve karmaşık programlar gerektirecektir. Hiçbir şekilde özlü bir dil olmak yerine, altıgen ızgaralar üzerinde programlamayı inceleyen, egzotik ve tuhaf bir dil değildir.
Martin Ender

3
@qwr Ben mahkum olmak esolangs noktası olduğunu düşündüm. ;)
Martin Ender

21

CJam, 18 bayt

r:-)"lightdark"5/=

Çevrimiçi demo

teşrih

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
kodunuz gülümsüyor:-)
Doorknob

8
Eşit derecede etkili olduğunu düşündüm:^)
Peter Taylor

2
Lütfen bunun nasıl çalıştığını açıklayabilir misiniz?
Fogmeister

@Fogmeister, açıklama eklendi.
Peter Taylor

17

sed, 37

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

açıklama

s/[1357aceg]//gtüm tek dizinli koordinatları siler. Elde edilen desen tamponu daha sonra "ışık" için 1 uzunluğa ya da "karanlık" için 0 ya da 2 uzunluğa sahiptir. /^.$/1 uzunluktaki kalıplarla ceşleşir, kalıbı "ışık" a qçevirir ve uyar. Aksi takdirde, desen c"karanlık" olarak asılır.


qGereksiz ve yerine birlikte karanlık ilk kontrol edebilirsiniz /../, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//...
Kritixi Lithos

14

Pyth, 18 bayt

@c2"lightdark"iz35

Girişi baz numara olarak yorumlayın, ikiye bölün lightdark, yazdırın.


13

ShadyAsFuck, 91 bayt / BrainFuck, 181 bayt

İlk gerçek BrainFuck programım, yardım için ve beni algoritma arşivine yönlendirdiğim için Mego'ya teşekkür ederim. (Bu, gerçekten kendi başıma yapmadığım, ancak varolan bazı algoritmaları kopyaladığım anlamına gelir. Yine de bir deneyim =)

NKnmWs3mzhe5aAh=heLLp5uR3WPPPPagPPPPsuYnRsuYgGWRzPPPPlMlk_PPPPPP4LS5uBYR2MkPPPPPPPP_MMMkLG]

Bu elbette beynimin cevaplarından gelen çeviri:

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

Bu tercüman / hata ayıklayıcı kullanılarak geliştirilmiştir .

Ben iki kod parçacıklarını çaldı divmodve if/elsegelen burada. (@Mego için teşekkürler!)

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

Şimdi >sum 2divmod algoritmasını gerçekleştirdiğimiz konfigürasyona sahip olduk:

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

Divmodun çıktısı şöyle gözüküyor 0 d-n%d >n%d n/dama biz sıfırladık d-n%dve sonraki hücreyi de sıfırlıyoruz :

>[-]

100Daha kolay çıktı almak için bir hücreyi değere kadar doldurun :

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

Şimdi konfigürasyon >cond 0 100ve if/elsealgoritmayı uygulamak için iki geçici değişkene ihtiyacımız var, bu yüzden konfigürasyonu seçiyoruztemp0 >c temp1 100

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

12

Python 2,45 bayt

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

Gibi girdi alır "a1". Çevrimiçi deneyin


Bu, Python 3'te, yazdırılacak parens eksikliği nedeniyle işe yaramaz.
isaacg

Şu anda test edemiyorum ama bir "ldiagrhgt"[expression::2]veya iki byte kaydederken gibi bir şey çalışması gerekir
FryAmTheEggman


10

Turing Makine Kodu, 235 bayt

Burada tanımlanan kural tablosu sözdizimini kullanma .

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
Bu muhtemelen gördüğüm en harika şey lol
Lucas

10

JavaScript (ES6), 45 bayt

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

radix kullanmaya gitmenin yolu! +1 FTW ...
WallyWest

9

TI-BASIC, 66 bayt

TI-84 + hesap makinesinde test edilmiştir.

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

İşte üçüncü satırda ne yazık ki tam olarak aynı boyutta olan daha ilginç bir varyasyon:

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

Modül 2'yi içerdiği için TI-BASIC'in bu mücadelede iyi olacağını düşünürsünüz. Bu çözümler mümkün olan en kısa gibi görünüyor.

Her iki karakteri de dizgede almak için çok sayıda bayt harcıyoruz, ancak asıl maliyeti, on iki iki baytlık küçük harflerdir.


9

Befunge-93 , 39 37 33 31 bayt

Tüm kredi Linus önerdi bu 31 bayt çözümü:

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

Bu tercümanı kullanarak test edin .

açıklama

<        v%2-~~

<Başında o sağa sarar solunda, yönerge işaretçisi gönderir. Daha sonra ASCII olarak girdiden iki karakter okur, onları çıkarır ve 2 ile bir modulo yapar. As ave 1her ikisi de tuhaf (ASCII kodları açısından) bu işe yarar . vAşağıya doğru talimat işaretçi yönlendirir ...

"^"light"_"krad

... üstüne, _eğer istifin üstü 0 ise ve sağa ise talimat göstergesini sola gönderir. Sırasıyla "açık" veya "koyu" karakterleri ters sırayla istifin üzerine itilir. Her iki yol ^da sola vurur , bu da komut işaretçisini yukarı doğru gönderir ...

 >:#,_@

... çıkış bölümüne. :yığının tepesini çoğaltır, yığının üstünde 0 ve aksi halde bırakıldığında, komut işaretçisini sağa gönderen ve üzerine #atlar . Yığın boşken, yığının üstü (sonrasındaki ) 0'dır, bu nedenle komut göstericisi hangisinin çalışmayı durdurduğuna bakar. Aksi takdirde, yığının tepesini bir karakter olarak çıkaran ve ardından üzerine tekrar atlayan üstüne çarpar .,_:@,#:>


rad"v>"kboşluk olmadan bir bayt kaydetmek ?
Linus

@Linus: "Boşluk gereklidir, çünkü aksi takdirde çıktı olacaktır dar k." Bağlantılı çevrimiçi tercümanda deneyin.
El'endia Starman

1
Haklısın. Her neyse, bunu befunge'de yapacaktım ama altından sadece 2 byte alabilirim ... <>:#,_@ v%2-~~\n"^"light"_"krad, newline'ı düzeltebilirim.
Linus,

@Linus: Bu mükemmel. Teşekkürler!
El'endia Starman

@JamesHolderness, Sert duygu yok. Bunun orijinal Befunge-93 tercümanında işe yaramadığını belirtmekte haklısın , asıl şart 80x25 torus içindir. Sürümünüzü kendi cevabı olarak göndermek ve aradaki farkı açıklamak isteyebilirsiniz. En azından benimle ilgili eski hobi kurallarını tartışmaktan daha pratik olacağını düşünüyorum.
Linus

8

Japt , 23 22 bayt

Japt kısaltılmış versiyonudur Ja vaScri nk . tercüman

Un19 %2?"dark":"light"

Nasıl çalışır

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

Yeni sürüm 0.1.3 (22 Kasım'de yayınlanan) kullanıldığında, bu GS2 dışında hepsinden daha kısa, 17 bayt olur :

Un19 %2?`»rk:¦ght

Veya, alternatif olarak, sihirli bir formül: (26 bayt)

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 bayt

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

Bunun gibi bir arayüz kullanabilirsiniz: bir arayüzdeki interface i{static void mainher şey varsayılan olarak herkese açık olduğundan
Yassin Hajaj


7

Ruby, 44 36 bayta çarptı

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

Sen değiştirerek byte kaydedebilirsiniz puts ile $><<(aralıksız).
Lynn

@Mauris Biliyorum ama sonlandırdığım
newline'imi

Sen değiştirerek 3 bayt kaydedebilirsiniz putsiçinp
Cyoce

7

C, 55 bayt

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

Çevrimiçi deneyin

Golf ipuçları için teşekkürler DigitalTrauma


Bir tane daha var (sonraputs
Seviye Nehri St

55: Bu s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}. Tamsayı genişliğinin 3 karakter katarı tutacak kadar büyük olduğunu varsayar. Ayrıca main(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}, 54 için de yapabiliyor olmalısınız , ancak bir nedenden dolayı salırsanız () küresel olmasa da çöpleri geri veriyordur, bu yüzden segfaults.
Dijital Travma

vay, üs 19. zeki.
kabarık

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

Burada vurgulanan farklı yol bölümleri var:

görüntü tanımını buraya girin

(Vurgulanmamış boşluksuz karakterler eve Stalimatlar için argüman olarak işlev görür ; bu talimatların her biri sola doğru ( argümanın simgesi olarak botun seyahat yönüne göre) sembolünü kullanır)


7

26, 26 karakter / 34 bayt

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

Try it here (Firefox only).


1
Daha fazla bayt alırsa "sıkıştırma"
demezdim

1
Bu noktada baytlardan daha fazla karakter için endişeliyim. Tamamen 𝔼𝕊𝕄𝕚𝕟 golf aşağı bayt sayısı çalışırken vazgeçince ...
Mama Eğlence Rulo

1
Her zaman baytlarla puan alıyoruz ve ikincil bir amaç için en iyileştirme yapmak genellikle ilginç olsa da, en az baytın her zaman kazandığını unutmayın.
lirtosiast

Evet, anlıyorum. Aslında o kadar kazanmayı hedeflemiyorum.
Mama Fun Roll

7

C, 49 bayt

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

Hayır, bu derleme değil.
xsot

Oh, kötü, başka bir şeyle uğraşmıştım. Yine de çıktı yanlış . Bence yapmak istedin gets(&c)%256+c/256?
Lynn

Oh, iyi yakalar. Bu noktada, aynı tekniği kullandığımız gibi benim çözümüm kesinlikle sizinkinden daha kötü. Öğrenecek çok şeyim var gibi görünüyor.
xsot

Yanlış çıkışın dönüş değerinden kaynaklandığı ortaya çıktı gets(&c). Gönderimimi buna göre güncelledim.
xsot

7

Clojure, 63 bayt

(pr (['light 'dark] (mod (Integer/parseInt (read-line) 35) 2)))
  • Stdin'den bir satırda okuruz (okuma satırı)
  • Daha sonra, JVM yöntemine yapılan bir çağrıyı kullanarak dizgiyi tabandaki 35 bir tamsayı değerine ayrıştırma
  • 2. sonucun modunu almak bize eşit mi yoksa tek mi olduğunu söyler
  • Modulo işlevinden döndürülen sonucu dizinin bir indeksi olarak kullanın ve yazdırın

Tek bir alıntı ile "aydınlık" ve "karanlık" ifadelerini alıntı yaparak değerli bir 2 bayt biriktiriyorum, böylece Clojure her kelimeyi bir çift tırnak işareti içine almanın aksine, onu gerçek anlamıyla alır. Ayrıca println yerine pr kullanarak birkaç bayttan tasarruf ediyorum.

Clojure'da alıntı hakkında bazı bilgiler


Programlama Bulmacaları ve Code Golf'a Hoş Geldiniz! Bu güzel bir ilk cevap. :) Clojure ile fazla aşina değilim; bir açıklama ekler misin?
Alex A.

Kesinlikle! İşte gidiyorsun. Herhangi bir sorunuz varsa bana bildirin!
MONODA43

5

Minkolang 0.12 , 28 24 bayt

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

Burada dene.

açıklama

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 bayt

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

S'nin intendian işaretli ve en az iki bayt olduğu bir ortam bekler .

açıklama

cyani argc, başlangıçta içerir 01 00 00 00. getsİki karakter okumak diyecekler a (0x61)ve 1 (0x31)ve bunları saklamak cartık hangi

61 31 00 00

0x3161 veya 12641 sayısını temsil eder.

Temel olarak, bu problemde verilen bir dize c = x + 256*yhesaplamak (x + y) mod 2ve yazdırmak istiyoruz . Bunu yapmak için c % 255 % 2, o zamanki gibi yazabilirdim.

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

Ancak, 37aynı zamanda çalışır:

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

x49-57 arasındadır (1-8 rakamları arasında) x % 37 == x - 37.

y97-104 aralığında (küçük harf ah), yani y % 37 == y - 74.

Bu basitleştirebileceğimiz anlamına gelir

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

ve sadece pariteyi düzeltmek için telleri çevirin.


5

Kiriş , 127 bayt

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

Bir açıklama görüntü tanımını buraya girin Açık mavi - Girişten ışına bir karakter okuyun, ışın değerini depoya kaydedin, Girişten ışına bir karakter okuyun.

Koyu mavi - Işını arttırırken, mağazayı 0'a düşürerek saklamak için mağaza ekler

Açık yeşil - Eşsiz bir test yapısı. Işık demeti eşitse döngü sağa, tek ise sağa döner.

Koyu yeşil - Koyu çıktılar

Tan - Çıktıları ışık


5

O , 22 17 bayt

i #% 2 "light'dark"?

Bu, ek bir fayda sağlamadan yapılması gerekenleri yapar.


5

Labirent , 48 46 45 42 bayt

İki byte tasarrufu için Sp3000'e teşekkürler.

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

Çevrimiçi deneyin!

açıklama

Kodun başlangıcı komik bir çıkmaz. Labyrinth'in yığının altındaki işlenenleri gerektirdiğinde sonsuz sayıda sıfır aldığını unutmayın. Kod -, iki sayıyı çıkarmaya çalışan baştan başlayarak başlar : böylece yığın olur:

[ ... 0 ]

Sonra ,ilk karakteri okur, aşöyle der:

[ ... 0 97 ]

"No-op, ancak talimat işaretçisi etrafında döner ve sola gidiyor başlar dolayısıyla bu da bir çıkmaz olduğunu. Sonra `diğer karakteri okur, 2şöyle der:

[ ... 0 97 50 ]

Bu sefer, -bu iki sayıyı çıkarır:

[ ... 0 47 ]

IP şimdi "koridor" bükülmesini izliyor. #Uygun olması umulur örtülü sıfır, göz ardı ederek, yığın derinliği alır 2:

[ ... 0 47 2 ]

Ve %moduloyu hesaplar:

[ ... 0 1 ]

Bu noktada, IP bir kavşaktadır. Yığınının üst sıfır ise, dosdoğru, nereye hareket edecek 100.97.114.107.@baskılar dark. Ancak yığının üstü sıfır değilse (özellikle 1), sağa doğru hareket eder, burada 0:::8.5.3.4.116.@basılır light(öncüyü atlayabileceğimize dikkat edin 1, çünkü 1yığında zaten bir tane vardır ve tekrarlananları kaydedebiliriz). 10içinde 108, 105, 103, 104birkaç kopya yaparak 10öncelikle) zaman oraya.


4

Matlab, 51 bayt

Bunun bir açıklama gerektirdiğini sanmıyorum =)

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

4

> <> , 31 bayt

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

Burada düşünüyorum ki "daha iyi bir yol olmalı ..."


4

Perl, 29 27 bayt

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

Bu kod -p1 bayt olarak saydığım anahtarı gerektiriyor .

Ideone'da çevrimiçi olarak deneyin .

Nasıl çalışır

  • -pAnahtar nedeniyle , Perl bir satır giriş okur ve onu saklar $_.

  • /./bir karakterle eşleşen normal bir ifadedir. Bunun iki sonucu var:

    • Maç başarılı olduğu için 1/./ döndürür .

    • Maç sonrası (ikinci giriş karakteri) içinde saklanır $'.

  • $'+ordikinci girdi karakterinin temsil ettiği tamsayıyı ord, örtük değişkenin ilk karakterinin kod noktasına ( ) ekler $_.

  • &dönüş değerinin bit cinsinden AND değerini /./ve toplamı alır $'+ord, 1 değerini döndürmek , eğer çift ise, çift ise 0 olur.

  • ?light:darkönceki ifade 1 veya aksi takdirde karanlık döndürdüyse ışık verir .

  • Sonunda , anahtar nedeniyle Perl'in otomatik olarak yazdırdığı $_=sonucu atar .$_-p

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.