Tantangan Anda adalah menulis program yang menampilkan warna kotak yang diberikan dari papan catur. Beginilah tampilan papan catur:
Anda dapat melihat bahwa kuadrat a1 gelap, dan h1 adalah kuadrat terang. Program Anda perlu menampilkan dark
atau light
, jika diberi kotak. Beberapa contoh:
STDIN: b1
STDOUT: light
STDIN: g6
STDOUT: light
STDIN: d4
STDOUT: dark
Aturan:
- Anda perlu menyediakan program lengkap yang menggunakan STDIN dan menggunakan STDOUT untuk menghasilkan
dark
ataulight
. - Asumsikan bahwa input selalu valid (
[a-h][1-8]
) - Ini adalah kode-golf , jumlah byte terpendek yang menang!
Papan angka
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>
Jawaban:
GS2 ,
1715 byteKode sumber menggunakan pengkodean CP437 . Cobalah online!
Verifikasi
Bagaimana itu bekerja
sumber
Python 2,
4138 byte3 byte berkat Mego untuk interlacing string
Mengambil input seperti
"g6"
. Terang dan gelap terjalin.sumber
int(input(),35)
adalah bagian yang brilian. Saya memikirkan interlacing string, tetapi metode input Anda menyimpan sebagian besar byte.Hexagony ,
3432 byteDibuka dan dengan jalur eksekusi beranotasi:
Diagram yang dihasilkan dengan Timwi ini menakjubkan HexagonyColorer .
Jalur ungu adalah jalur awal yang membaca dua karakter, menghitung perbedaannya dan membawanya modulo 2.
<
Kemudian bertindak sebagai cabang, di mana jalur abu-abu gelap (hasil1
) dicetakdark
dan jalur abu-abu terang (hasil0
) dicetaklight
.Adapun cara saya menghitung perbedaan dan modulo, berikut adalah diagram dari kisi memori (dengan nilai yang diambil untuk input
a1
):Diagram dihasilkan dengan Esoteric IDE Timwi yang lebih menakjubkan (yang memiliki debugger visual untuk Hexagony).
Penunjuk memori dimulai pada baris berlabel tepi , tempat kita membaca karakter.
}
bergerak ke tepi berlabel col , di mana kita membaca angka."
bergerak ke tepi berlabel diff di mana-
menghitung perbedaan keduanya.'
pindah ke sel yang tidak berlabel di mana kita meletakkannya2
, dan{=
pindah ke sel yang berlabel mod tempat kita menghitung modulo%
.Ini mungkin golf dengan beberapa byte dengan menggunakan kembali beberapa
;
, tapi saya ragu itu bisa golf dengan banyak, tentu saja tidak sampai ke sisi panjang 3.sumber
CJam, 18 byte
Demo online
Pembedahan
sumber
:-)
:^)
sed, 37
Penjelasan
s/[1357aceg]//g
menghapus semua koordinat indeks ganjil. Buffer pola yang dihasilkan kemudian memiliki panjang 1 untuk "cahaya" atau panjang 0 atau 2 untuk "gelap"./^.$/
cocok dengan pola 1-panjang,c
gantung pola ke "cahaya" danq
uits. Kalau tidak, polanyac
digantung ke "gelap".sumber
q
mubazir, dan Anda dapat memeriksa gelap terlebih dahulu dengan/../
, tio.run/##K05N@f@/WD/a0NjUPDE5NT1WXz@dS19PTz85JbEomys5JzM9o@T//…Pyth, 18 byte
Menginterpretasikan input sebagai nomor basis 35, memotong
lightdark
setengah, mencetak.sumber
ShadyAsFuck, 91 byte / BrainFuck, 181 byte
Program BrainFuck pertama saya yang sebenarnya, terima kasih Mego atas bantuannya dan karena telah menunjuk saya ke arsip algoritma. (Itu berarti saya tidak benar-benar melakukannya sendiri, tetapi menyalin beberapa algoritma yang ada. Masih pengalaman =)
Ini tentu saja merupakan terjemahan dari jawaban brainfuck saya:
Dikembangkan menggunakan juru bahasa / debugger ini .
Saya mencuri dua cuplikan kode untuk
divmod
danif/else
dari sini. (Terima kasih kepada @Mego!)Sekarang kita memiliki konfigurasi sel
>sum 2
sekarang kita melakukan algoritma divmod:Output dari divmod terlihat seperti ini,
0 d-n%d >n%d n/d
tetapi kami memusatkan perhatian padad-n%d
dan juga memusatkan sel berikutnya:Isi satu sel hingga nilai
100
untuk menghasilkan yang lebih mudah:Sekarang konfigurasinya
>cond 0 100
dan untuk menerapkanif/else
algoritma kita memerlukan dua variabel temp, jadi kita memilih konfigurasitemp0 >c temp1 100
sumber
Python 2, 45 byte
Mengambil input seperti
"a1"
. Cobalah onlinesumber
"ldiagrhgt"[expression::2]
harus bekerja sambil menyimpan satu atau dua byteSerius , 19 byte
Mengambil input seperti
"a1"
Cobalah online (Anda harus memasukkan input secara manual; permalink tidak suka kutipan)
sumber
Kode Mesin Turing, 235 byte
Menggunakan sintaks tabel aturan yang didefinisikan di sini.
sumber
JavaScript (ES6), 45 byte
sumber
TI-BASIC, 66 byte
Diuji pada kalkulator TI-84 +.
Berikut variasi yang lebih menarik pada baris ketiga, yang sayangnya ukurannya persis sama:
Anda akan berpikir TI-BASIC akan layak pada tantangan ini, karena ini melibatkan modulo 2. Tidak; solusi ini tampaknya menjadi yang sesingkat mungkin.
Kami menghabiskan banyak byte untuk mendapatkan kedua karakter dalam string, tetapi yang benar-benar biaya adalah tiga belas huruf kecil dua byte.
sumber
Befunge-93 ,
39373331 byteSemua kredit untuk Linus yang menyarankan solusi 31-byte ini:
Uji menggunakan penerjemah ini .
Penjelasan
The
<
di awal mengirimkan pointer instruksi ke kiri, di mana ia membungkus ke kanan. Itu kemudian dibaca dalam dua karakter dari input sebagai ASCII, kurangi mereka, dan lakukan modulo oleh 2. Asa
dan1
keduanya aneh (dalam hal kode ASCII), ini berfungsi. Thev
pengalihan instruksi pointer ke bawah ...... ke atas
_
, yang mengirimkan penunjuk instruksi ke kiri jika puncak tumpukan adalah 0 dan ke kanan sebaliknya. Karakter "terang" atau "gelap", masing-masing, didorong ke tumpukan dengan urutan terbalik. Kedua jalur menekan^
di sebelah kiri, yang mengirimkan penunjuk instruksi ke atas ...... ke segmen keluaran.
:
menduplikasi bagian atas tumpukan,#
melompati,
dan ke atas_
, yang mengirimkan penunjuk instruksi ke kanan jika bagian atas tumpukan adalah 0 dan meninggalkan sebaliknya. Ketika tumpukan kosong, bagian atas tumpukan (setelah:
) adalah 0, sehingga penunjuk instruksi menyentuh@
yang menghentikan eksekusi. Jika tidak, itu akan memukul,
, yang menampilkan bagian atas tumpukan sebagai karakter, dan kemudian#
melompat ke atas:
dan ke>
, yang memulai proses lagi.sumber
rad"v>"k
tanpa spasi?dar k
." Cobalah di penerjemah daring yang ditautkan.<>:#,_@ v%2-~~\n"^"light"_"krad
, perbaiki baris baru.Japt ,
2322 byteJapt adalah versi singkat dari Ja vaScri pt . Penerjemah
Bagaimana itu bekerja
Menggunakan versi baru 0.1.3 (dirilis 22 November), ini menjadi 17 byte , lebih pendek dari semua kecuali GS2:
Atau, sebagai alternatif, formula ajaib: (26 byte)
sumber
Java,
157127124 bytesumber
interface i{static void main
karena semua yang ada di antarmuka bersifat publik secara defaultTeaScript , 23 byte
Sayangnya senar
dark
danlight
tidak bisa dikompresi.sumber
Ruby,
dicoret 4436 bytesumber
puts
dengan$><<
(tanpa spasi).puts
untukp
C, 55 byte
Cobalah online
Terima kasih DigitalTrauma untuk banyak tips bermain golf
sumber
(
setelahputs
s;main(){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
. Asumsikan bahwa lebar integer cukup besar untuk menampung 3 karakter string. Anda juga harus dapat melakukannyamain(s){puts(strtol(gets(&s),0,19)&1?"light":"dark");}
untuk 54, meskipun karena beberapa alasan mendapat () mengembalikan sampahs
jika tidak global, jadi itu segfaults.BotEngine ,
16514x11 = 154Ini dia dengan segmen jalur yang berbeda yang disorot:
(Setiap karakter non-spasi yang tidak disorot berfungsi sebagai argumen untuk
e
danS
instruksi - masing-masing instruksi ini menggunakan simbol ke kiri (relatif terhadap arah perjalanan bot) sebagai argumennya)sumber
𝔼𝕊𝕄𝕚𝕟, 26 karakter / 34 byte
Try it here (Firefox only).
sumber
C, 49 byte
sumber
gets(&c)%256+c/256
?gets(&c)
. Saya telah memperbarui kiriman saya.Clojure, 63 byte
Saya menyimpan 2 byte yang layak dengan mengutip "terang" dan "gelap" dengan satu kutipan sehingga Clojure menganggapnya sebagai literal, bukan membungkus setiap kata dengan sepasang tanda kutip. Saya juga menyimpan beberapa byte dengan menggunakan pr daripada println.
Beberapa info tentang mengutip di Clojure
sumber
Minkolang 0,12 ,
2824 byteCoba di sini.
Penjelasan
sumber
C, 46 byte
Mengharapkan lingkungan tempat
int
s disimpan little-endian, dan setidaknya dua byte.Penjelasan
c
adalahargc
, jadi awalnya isinya01 00 00 00
.gets
akan membaca dua karakter, mengatakana (0x61)
dan1 (0x31)
, dan menyimpannyac
, yang sekarangmewakili angka 0x3161, atau 12641.
Pada dasarnya, dalam masalah ini, diberikan
c = x + 256*y
, kami ingin menghitung(x + y) mod 2
, dan mencetak string yang sesuai. Untuk melakukan ini, saya bisa menulisc % 255 % 2
, seperti ituNamun,
37
juga berfungsi:x
berada dalam kisaran 49-57 inklusif (digit 1-8), jadix % 37 == x - 37
.y
berada di kisaran 97-104 inklusif (huruf kecil), jadiy % 37 == y - 74
.Ini berarti kita dapat menyederhanakannya
dan hanya membalik senar untuk memperbaiki paritas.
sumber
Beam , 127 byte
Penjelasan Biru terang - baca karakter dari input ke beam, simpan nilai beam ke dalam store, baca karakter dari input ke beam.
Biru tua - Menambahkan toko ke balok dengan mengurangi toko ke 0 sambil menambah balok
Hijau muda - Konstruk pengujian yang bahkan aneh. Lingkaran akan keluar ke kiri jika berkasnya rata atau kanan jika aneh.
Hijau tua - Output gelap
Tan - Lampu keluaran
sumber
O ,
2217 byteIni melakukan apa yang harus dilakukan, tanpa manfaat tambahan.
sumber
Labyrinth ,
48464542 byteTerima kasih kepada Sp3000 untuk menghemat dua byte.
Cobalah online!
Penjelasan
Awal kode adalah jalan buntu yang lucu. Ingatlah bahwa Labyrinth mengasumsikan jumlah nol yang tidak terbatas ketika membutuhkan operan di bagian bawah tumpukan. Kode mulai satu arah
-
kanan, yang mencoba mengurangi dua angka, sehingga tumpukan menjadi:Kemudian
,
bacalah karakter pertama,a
katakan:Ini
"
adalah no-op, tetapi ini juga jalan buntu sehingga penunjuk instruksi berbalik dan mulai pergi ke kiri. Kemudian`
bacalah karakter lainnya,2
katakan:Kali ini,
-
kurangi dua angka itu:IP sekarang mengikuti tikungan "koridor". The
#
mendapat kedalaman stack, mengabaikan nol implisit, yang mudah terjadi menjadi2
:Dan
%
menghitung modulo:Pada titik ini, IP berada di persimpangan. Jika bagian atas tumpukan adalah nol, ia akan bergerak lurus ke depan, tempat
100.97.114.107.@
mencetakdark
. Tetapi jika bagian atas tumpukan tidak nol (khusus,1
), ia akan bergerak ke kanan, di mana0:::8.5.3.4.116.@
cetakanlight
(perhatikan bahwa kita dapat menghilangkan yang memimpin1
, karena sudah ada1
di tumpukan, dan kita bisa menghemat yang diulang10
di108
,105
,103
,104
dengan membuat beberapa salinan dari10
ketika kita pertama kali sampai di sana).sumber
Matlab, 51 byte
Saya tidak berpikir ini perlu penjelasan =)
sumber
> <> , 31 byte
Di sini saya berpikir "pasti ada cara yang lebih baik ..."
sumber
Perl,
2927 byteKode ini membutuhkan
-p
sakelar, yang telah saya hitung sebagai 1 byte.Cobalah online di Ideone .
Bagaimana itu bekerja
Karena
-p
saklar, Perl membaca satu baris input dan menyimpannya$_
././
adalah ekspresi reguler yang cocok dengan satu karakter. Ini memiliki dua implikasi:Karena pertandingan berhasil,
/./
pengembalian 1 .Pasca-pertandingan (karakter input kedua) disimpan di
$'
.$'+ord
menambahkan integer yang mewakili karakter input kedua ke titik kode (ord
) dari karakter pertama dari variabel implisit$_
.&
mengambil bitwise AND dari nilai pengembalian/./
dan jumlah$'+ord
, mengembalikan 1 adalah jumlah jika ganjil, 0 jika itu genap.?light:dark
mengembalikan cahaya jika ekspresi sebelumnya menghasilkan 1 dan gelap sebaliknya.Akhirnya
$_=
memberikan hasil$_
, yang Perl cetak secara otomatis, karena-p
saklar.sumber