Dalam catur, Forsyth-Edwards Notation , lebih umum disebut "FEN", adalah cara tekstual papan transkrip. Ini menggambarkan masing-masing dari delapan baris papan (disebut "peringkat" dalam catur) dari atas ke bawah dari perspektif White. Potongan ditulis sebagai K (raja), Q (ratu), R (benteng), B (uskup), N (ksatria), dan P (gadai). Potongan hitam menggunakan huruf-huruf ini dalam huruf kecil, dan potongan putih menggunakan huruf-huruf ini dalam huruf besar. Ruang kosong ditandai dengan angka dari 1 hingga 8 yang menunjukkan berapa banyak ruang kosong berturut-turut. Pangkat yang benar-benar kosong adalah 8
, satu benteng hitam di kolom paling kanan (disebut "file" dalam catur) 7r
, dan dua pion putih di setiap ujung baris akan menjadi PP4PP
. Peringkat dipisahkan oleh a/
. Biasanya ada informasi lain yang ditambahkan, menunjukkan sisi yang bergerak, Castling dan en passant hak, jumlah bergerak, dan jam halfmove, tapi kami akan mengabaikan mereka untuk tujuan tantangan ini.
Memasukkan
Sebuah string FEN, dari baris perintah atau STDIN, sesuka Anda. Anda dapat mengasumsikan bahwa string ini selalu valid.
Keluaran
Menulis ke STDOUT representasi seni sederhana ASCII dari papan seperti yang sebenarnya akan muncul:
- Potongan diwakili oleh karakter mereka di FEN
- Kotak kosong diwakili oleh spasi
- Potongan dan kotak dipisahkan oleh pipa
|
dan ada pipa di setiap sisi papan
Jadi papan kosong, ditulis seperti 8/8/8/8/8/8/8/8
dalam FEN, akan muncul sebagai
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
Posisi awal permainan catur ditulis sebagai rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, dan akan muncul sebagai
|r|n|b|q|k|b|n|r|
|p|p|p|p|p|p|p|p|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|P|P|P|P|P|P|P|P|
|R|N|B|Q|K|B|N|R|
Posisi akhir dari Anderssen-Kieseritzky 1851 , yang disebut "The Immortal Game" di komunitas catur, ditulis sebagai r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1
, dan program Anda ketika diumpankan bahwa input akan menghasilkan:
|r| |b|k| | | |r|
|p| | |p|B|p|N|p|
|n| | | | |n| | |
| |p| |N|P| | |P|
| | | | | | |P| |
| | | |P| | | | |
|P| |P| |K| | | |
|q| | | | | |b| |
+1
untuk tantangan yang menarik.-2
karena menerima jawaban yang salah tanpa alasan yang baikJawaban:
Perl, 28 byte
Termasuk +2 untuk
-lp
Berikan masukan pada STDIN
fen.pl
:Sebenarnya di liga beberapa bahasa golf ...
Perhatikan bahwa versi berbasis file membutuhkan baris terakhir dalam file sehingga satu benar-benar 29 byte. Tetapi versi commandline tidak memerlukan baris baru tambahan dan oleh karena itu kode ini dihitung sebagai 28 byte:
sumber
Retina, 13 byte
Cobalah online!
Penjelasan
Bagian pertama (perhatikan spasi tambahan):
adalah untuk mengonversi a ke jumlah ruang tertentu. Retina memiliki
$*
fitur untuk diulang. Cara kerjanya adalah:<num>$*<char>
jika tidak ada<num>
, Retina akan menganggap$&
atau string yang cocok, dalam hal ini nomor yang cocok.Bagian selanjutnya:
cukup sederhana, itu menggantikan semua
/
dengan¶
yang baris baru.Bagian terakhir berfungsi sama:
Ini akan menggantikan semuanya (karenanya mengapa tidak ada pada baris pertama) dengan
|
. Menempatkan di|
mana - mana.sumber
S`/
tahap kedua.Ruby -
75827876756259585756 byteDisimpan beberapa byte berkat Ventero
Biarkan saya jelaskan (dengan
\n
mengganti baris literal):Ini secara implisit mengembalikan nilai string, dengan masing-masing
/
diganti dengan baris baru (secara default,$/
berisi baris baru)Ini sangat sederhana; itu hanya string yang berisi pipa, interpolasi string, dan pipa lain. Interpolasi string dievaluasi
Ini menggantikan setiap angka dengan banyak ruang. Saya dapat menyimpan beberapa byte dengan juga menemukan baris baru di sini; karena
hex
mengembalikan 0 jika string bukan angka yang valid, ketika ia menemukan baris baru - yaitu baris di akhir hasilgets
- menggantikannya dengan string 0 panjang, secara efektif menghapusnya. Tanpa ini, akan ada pipa trailing.$&
adalah variabel ajaib yang mewakili teks lengkap dari pencocokan variabel terbaru, yang memungkinkan saya menyimpan byte dengan menghilangkan|d|
. Saya dapat menyimpan byte lain dengan menggunakan.hex
alih-alih.to_i
, yang berfungsi karena setiap angka kurang dari 9, yang berarti bahwa hex dan desimal memiliki nilai yang sama.Ini menempatkan pipa di antara setiap karakter. Perhatikan bahwa inilah yang menempatkan pipa di kedua sisi garis (kecuali yang pertama dan terakhir) karena garis miring, yang akhirnya berubah menjadi garis baru melalui
tr
, dihitung sebagai karakter, dan karena itu dikelilingi oleh pipa. The?|
hanya berarti "string satu karakter"|"
".Dan ... itu saja. Ini adalah program sederhana yang sangat memalukan. Itu hanya menggunakan banyak trik sintaksis yang licik.
sumber
puts"|#{gets.gsub(/\d|\n/){' '*$&.hex}.chars*?|}|".split'/'
(tentu saja, ganti\n
dengan baris baru literal lagi).Pyth -
242221 byteTest Suite .
sumber
Pyth, 23 byte
Cobalah online!
Bagaimana itu bekerja:
sumber
JavaScript ES7,
8070 byteMerupakan fungsi anonim yang menerima string sebagai input.
Appraoch 80-byte ES6 saja.
Penjelasan
Kami menggunakan pemahaman array untuk mengulang daftar:
Ini setara dengan:
Jika itu angka, kita punya jumlah spasi itu. Jika a
/
, kami memiliki baris baru. Kalau tidak, kita punya karakter. Kemudian, kami bergabung dengan pemahaman tanpa membuat string.Kemudian, kami membuat array dengan panjang 3
[,...that,"\n"]
....
memecah pemahaman gabungan menjadi karakter. Bergabung dengan ini menghasilkan hasilnya.sumber
[x for(x of a)]
) adalah ES7.Julia, 62 byte
Ini adalah fungsi anonim yang menerima string dan mengembalikan array string. Untuk menyebutnya, tetapkan ke variabel.
Pendekatan ini sama seperti di QPaysTaxes' pintar Ruby jawabannya . Kami mengganti setiap digit dalam input dengan banyak spasi, tempat di
|
antara setiap karakter,|
tempelkan ke depan dan belakang, dan pisahkan menjadi larik/
.Cobalah online!
sumber
05AB1E , 21 byte
Kode:
Juga 21 byte:
'|¹9GNNð×:}S'|«JJ'/¶:
.Menggunakan pengodean CP-1252 . Cobalah online! .
sumber
JavaScript (ES6),
696762 byteKoma ekstra membuat nilai kosong di pemisahan luar yang membuat karakter awal dan akhir
|
. Anda memerlukan dua koma trailing karena trailing koma adalah opsional di akhir daftar, jadi yang pertama masih merupakan bagian dari item sebelumnya.Sunting: Disimpan 5 byte berkat @ user81655.
sumber
/[\d/]/g,c=>+c?` `.repeat(c):`\n`
bekerjaRetina ,
5045 byteIni menyenangkan haha. Tidak hanya saya seorang noob di Retina, tetapi juga di regex secara umum ... Ini mungkin bisa bermain golf banyak , jadi saya akan melakukan riset lebih lanjut.
Kode:
Cobalah online!
sumber
$*
fungsi :)Jolf, 28 byte
Ganti
♣
dengan karakter\x05
, atau coba di sini!sumber
Python 3.5, 112 byte:
Cobalah online! (Ideone)
sumber
C, 252 byte
Detail coba online
sumber
JavaScript (FireFox 30+), 61
Menggunakan pemahaman array yang bukan standar EcmaScript lagi
Uji
sumber
Lua, 106 Bytes
Tidak disatukan
sumber
print((...):gsub(".",function(c)return(c:find("%d")and("| "):rep(c)or c=="/"and"|\n"or"|"..c)end).."|")
print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("/","|\n"):gsub("([^%d%s|])","|%1").."|")
untuk byte-count yang sama.print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("([^%d |])","|%1"):gsub("/","\n").."|")
is 101 bytesR (keluar dari kompetisi)
Maaf jika tidak pantas memposting ini, tapi saya pikir itu keren bahwa saya kebetulan memiliki fungsi yang sebenarnya berfungsi untuk pertanyaan ini tanpa mengedit! Ia mencetak keluaran unicode daripada ascii. Saya tidak ingat mengapa saya menulisnya, tetapi itu bukan untuk menjawab tantangan.
sumber
Haskell, 110 Bytes
Tidak Disatukan:
sumber
Java 7,
190184 byteDetail coba online
sumber
Pyke,
2520 bytePenjelasan:
Coba di sini!
sumber
Python, 84 byte
Penjelasan:
sumber
> <>, 64 byte
4 byte terbuang karena masalah penyelarasan, tidak yakin bagaimana cara membuatnya. ¯ \ _ (ツ) _ / ¯
sumber