pengantar
Seperti inilah bentuk papan catur.
Anda dapat melihat bahwa itu a1
adalah kotak gelap . Namun, b1
adalah kotak cahaya .
Tugas
Tantangannya adalah, diberikan dark
, light
atau both
, output semua kotak gelap , terang atau semua dengan pemisah (seperti spasi atau baris baru). Urutan semua kotak tidak masalah .
Uji kasus
Input: dark
Output: a1 a3 a5 a7 b2 b4 b6 b8
c1 c3 c5 c7 d2 d4 d6 d8
e1 e3 e5 e7 f2 f4 f6 f8
g1 g3 g5 g7 h2 h4 h6 h8
Input: light
Output: a2 a4 a6 a8 b1 b3 b5 b7
c2 c4 c6 c8 d1 d3 d5 d7
e2 e4 e6 e8 f1 f3 f5 f7
g2 g4 g6 g8 h1 h3 h5 h7
Input: both
Output: a1 a2 a3 a4 a5 a6 a7 a8
b1 b2 b3 b4 b5 b6 b7 b8
c1 c2 c3 c4 c5 c6 c7 c8
d1 d2 d3 d4 d5 d6 d7 d8
e1 e2 e3 e4 e5 e6 e7 e8
f1 f2 f3 f4 f5 f6 f7 f8
g1 g2 g3 g4 g5 g6 g7 g8
h1 h2 h3 h4 h5 h6 h7 h8
Catatan: Saya sudah melakukan prettified output tetapi ini tidak perlu .
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
a2a4a6...
tidak apa-apa?[[a2,a4,a6,a8],[...]...]
light
,dark
danboth
harus dimasukkan sebagaiString
s atau dapatkah mereka direpresentasikan melalui tipe data apa pun?Jawaban:
Pyth,
2221 byte-1 byte oleh @ Sp3000
Di bawah fungsi
%Chz3
,dark
hash ke 1,light
ke 0, danboth
ke 2. Jika kita mengambil paritas jumlah ords dari kotak catur (yaitu,a1
->[97, 33]
->(97 + 33)%2
=0
, kotak gelap pergi ke 0, dan cahaya ke 1 Ini memungkinkan kita untuk memfilter berdasarkan ketidaksetaraan.Coba di sini .
sumber
fn%Chz3%sCMT2sM*<G8S8
Bash + GNU Utilities, 74
{a..h}{1..9}
adalah ekspansi bash brace yang menghasilkan semua koordinat untuk papan 8x8, ditambah kolom tambahan9
. Ini penting karena membuat panjang baris aneh yang memungkinkan efek papan tulis.The
printf
hanya format setiap koordinat, satu per baris.Ekspresi sed yang dibangun kemudian menghapus semua
x9
koordinat dan kemudian mencetak garis genap atau ganjil atau keduanya, sesuai dengan input skrip.sumber
JavaScript (SpiderMonkey 30+),
90858382 byteMengembalikan string kotak yang dipisahkan koma. Versi yang kompatibel untuk 99 byte:
Bekerja dengan menghitung semua 64 nama kuadrat, kemudian menguraikannya dalam basis 19 untuk melihat apakah mereka adalah modulo 2 terang atau gelap.
sumber
JavaScript (ES6), 82
87 98Fungsi anonim mengembalikan string kotak yang dipisahkan ruang.
UJI
sumber
Batch, 192 byte
sumber
Pyth,
4839 byteCoba di sini!
Masih lebih lama dari solusi Pyth lainnya, tapi saya rasa saya tidak bisa mengalahkan ini dengan algoritma saya.
Penjelasan
Pertama kita membuat daftar semua kotak di papan tulis dan menugaskannya
Y
. Kemudian kami memfilter daftar ini sehingga hanya kotak cahaya yang tersisa dan menetapkan daftar iniJ
. Setelah itu kami mengevaluasi input dan mencetak:Y
jika inputboth
J
jika inputlight
Y-J
jika inputnya adalahdark
Menentukan apakah bujur sangkar berfungsi sebagai berikut:
18
untuka8
, dll.x%2 == y%2
)sumber
Python 2,
737170 byteSaya masih agak bingung apakah fungsi oke untuk pertanyaan itu, karena tantangannya menyebutkan "pemisah", tetapi karena ada banyak pengajuan fungsi lainnya, saya telah melakukan hal yang sama.
Mirip dengan jawaban Erwan ini tetapi dengan
banyaksedikit lebih Python 2-ness.(-2 byte terima kasih kepada @xnor)
sumber
s=="dark"
dans[0]=="d"
tetapi untuk pertahanan saya dalam percobaan pertama saya, saya menggunakans,*_=s
dan 4cmp
ord(s[_])&_
atauord(s[_])/_
.%
:) Terima kasih!PHP,
132126120108106 byteItu loop melalui cols (0-7) dan baris (1-8) dan memeriksa apakah jumlah keduanya ganjil / genap.
Diuji dengan PHP 5.6.4, jalankan:
php -d error_reporting=30709 -r '<CODE>' {dark|light|both}
sumber
$s==2
dengan$s-1
. Jika $ s = 2, dan -1, ini 1, yang benar dan akan berlanjut$c=0
bisa$c
, itu akan memberikan banyak pemberitahuan, tetapi setidaknya untuk gelap berfungsi dengan baik$s-1
tidak berhasil, tetapi seharusnya begitu. Terima kasih atas ide bagus ini! Saya akan men-debug itu nanti.$c
variabel tidak ditentukan ? Kedengarannya agak aneh dan tidak valid. Atau tidak?Vitsy ,
9082 bytePenjelasan dari baris pertama:
Penjelasan dari baris kedua:
Akan ada bonus mengikuti baris baru untuk 'gelap' dan 'keduanya'. Mengharuskan hanya 'gelap', 'keduanya', atau 'terang' yang akan dimasukkan.
Cobalah online!
sumber
PowerShell v3 +,
142129 byteMengambil input
$a
dan menetapkan dua variabel untuk jika kita akan output$d
ark atau$l
kotak ight berdasarkan huruf pertama dari input.Kemudian, kita loop lebih
a-h
dan1-8
dan menggunakan trik yang sama seperti pada Tentukan warna persegi catur untuk mengurai apakah itu sebuah variabel pembantu terang atau gelap persegi (pengaturan$q
dalam tes pertama) dan menambahkan persegi yang ke pipa jika sesuai. Setelah eksekusi, elemen-elemen pada pipeline adalah output satu per baris.Membutuhkan v3 atau yang lebih baru untuk
-in
operator.Sunting - Disimpan 13 byte dengan menghilangkan
switch
dan dengan mengubah urutan pengujian kesetaraansumber
Jolf, 48 byte
Bagi saya semuanya adalah bahasa Yunani ¯ \ _ (ツ) _ / ¯ Ini adalah pengubahan dari jawaban luar biasa edc65.
sumber
Perl, 69 + 3 = 72 byte
Untuk dijalankan
perl -p
, saya menambahkan 3 byte.Versi kurang golf (sedikit berbeda, karena operator babycart menyulitkan untuk memformat dengan baik):
Versi golf menggunakan
"@{[]}"
; versi komentar menggunakan@a=...; "@"
sehingga kode komentar masih dapat dijalankan.sumber
map$l.$_,1..8
-1grep$i=!$i||$b,map
lagi -1C ++, 132 byte
Mengambil input dengan baris perintah. Menggunakan pointer / modulo voodoo untuk kondisi cetak.
sumber
n
-loop itu perlu. Saya pikir bersarang untuk loop untuki
danj
akan memangkas beberapa byte. The(i+j)%2
pendekatan adalah benar-benar pintar. Saya tidak memikirkan itu.(i//8+i%8)%2
sama(i//8+i)%2
sehingga Anda dapat memenangkan beberapa byte jika Anda menghapus definisij=n%8
Jawa, 143
Hei, itu bukan jawaban terpanjang :)
Input diambil sebagai argumen baris perintah.
sumber
PHP,
9982 8279767473 byteMenggunakan penyandian ISO 8859-1.
Jalankan seperti ini (
-d
ditambahkan hanya untuk estetika):Ia bekerja seperti ini: variabel
$x
bertambah dari 1 menjadi 71, angka-angka sesuai dengan sel-sel seperti yang ditunjukkan di bawah ini.Oleh karena itu,
$x modulo 9
hasilkan nomor kolom dan$x / 9
hasilkan nomor baris, yang saya konversi menjadi huruf menggunakanchr
. Kode$z<c|$z>k^$x&1
menghasilkantrue
inputboth
($z<c
) dan dalam kasus masing-masinglight
ataudark
hanya untuk sel genap atau ganjil ($z>k ^ $x&1
). Hasil dari ekspresi ini menentukan apakah koordinat sel kemudian akan dicetak. Akhirnya, jika$x modulo 9
hasilnya0
, saya melewatkan sel yang tidak ada itu.1817 byte (memperbaiki bug) dengan hanya memiliki 1 loop, mengubah nomor menjadi char, bukan sebaliknyaxor
.125
ekspresi$x/9+69.9
untuk mendapatkan nomor baris yang benar sebelum mengkonversi ke char~ß
untuk menghasilkan spasisumber
JavaScript ES6,
187160159 byteSaya mungkin kehilangan sesuatu yang jelas sangat menyakitkan.Baiklah. Tidak harus meratakan array membantu.Mengembalikan array 2D.
Coba di sini:
Tampilkan cuplikan kode
sumber
Ruby, 85
Saya pikir ada cara yang lebih pendek tentang ini, tetapi ini adalah penggunaan yang lucu
.upto
.sumber
R,
12994 byteSaya tahu saya bisa menghasilkan papan yang lebih baik :). Pada dasarnya ini membangun papan terbalik, memfilter referensi grid di mana warna tidak cocok dengan input. Output dipisahkan oleh ruang.
Tidak disatukan
Uji
sumber
Oracle SQL 11.2,
192180 byteTidak bermain golf
Tampilan v menghasilkan koordinat setiap kotak. Jika jumlah koordinatnya genap maka kuadratnya hitam, kalau tidak putih.
sumber
Rust,
263259244 BytesFormulir yang Diperluas:
sumber
MATL , 31 byte
Cobalah online!
sumber
CJam, 29
Hanya solusi cepat dan kotor: p
Cobalah online
Penjelasan:
sumber
Haskell,
1331161051009891 byteIni adalah usaha pertama saya di golf Haskell.
Dengan bantuan Michael Klein, kami berhasil mendapatkannya di bawah 100 karakter!
sumber
c>0
untukc==1
danc<1
untukc==0
? Menghemat dua byte.f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
i
tidak memberi kita garis-garis diagonal. Beberapa menyelesaikan ini dengani+i`div`8
(sepertix+y
). Yang lain mulai dengan['1'..'9']
dan[0..71]
kemudian mempertahankan hanyai`mod`9<8
hasilnya nanti, untuk 96 byte. Namun, hibrida dari dua pendekatan kami ini berjalan dengan baik pada 91 byte:l=[0..7];f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
Mathematica 133 byte
Metode 1 : 108 byte. Ini membangun papan sebagai tabel, dengan label di setiap sel, dan mengembalikan diagonal atau pita terang atau gelap sesuai kebutuhan.
Metode 2 : 133 byte. Membuat array dan memilih sesuai dengan sifat genap jumlah nomor baris + jumlah kolom setiap sel.
sumber
JS, 197 byte
sumber
Python (3.5),
1061009692 bytegunakan trik MegaTom
(i+j)%2
untuk memenangkan 6 byteCobalah di repl.it
Hasil
Versi sebelumnya
sumber
C ++, 119 Bytes
Berdasarkan trik MegaTom.
sumber
C (gcc) , 112 byte
Cobalah online!
Jika a == 1, maka sebuah persegi akan selalu hitam jika "keanehan" dari baris dan kolom sama, yaitu keduanya ganjil atau keduanya genap. Yang sebaliknya berlaku untuk kotak putih, di mana baris dan kolom akan selalu berbeda dalam keanehan.
Setelah itu, itu hanya masalah menggabungkan baris dan kolom loop, serta berkonsultasi dengan tabel diutamakan operator sampai tingkat yang cukup dimengerti telah tercapai.
sumber