Dewan Monopoli
Untuk tantangan kode-golf ini, kami akan membangun Monopoly permainan papan.
Aturan:
- Jangan masukan.
- Keluarkan papan 11x11 di mana setiap karakter ASCII yang membentuk papan adalah huruf pertama dari setiap ruang versi AS dari papan Monopoli.
- Karakter harus dipisahkan oleh spasi.
Go
harus dimulai di kanan bawah.
String yang tepat untuk diproduksi adalah
F K C I I B A V W M G
N P
T N
C C
S P
P S
V C
S P
E L
S B
J C V C O R I B C M G
Perhatikan bahwa dari kanan bawah ke kiri bawah kotak adalah sebagai berikut:
G --> Go
M --> Mediterranean Avenue
C --> Community Chest
B --> Baltic Avenue
I --> Income Tax
...
J --> Jail
Sunting Wow! kalian benar-benar menyukai yang ini! :)
code-golf
string
ascii-art
kolmogorov-complexity
board-game
jacksonecac
sumber
sumber
Jawaban:
Retina , 74 byte
Baris ketiga ke terakhir dan terakhir harus berisi satu spasi.
Cobalah online!
Penjelasan
Ini menggantikan input (kosong) dengan string di baris kedua.
Ini adalah tahap split, yang membagi string di sekitar pertandingan regex
(._.)
(yaitu, setiap tiga karakter dengan_
di tengah). Alasan kami menempatkan seluruh regex dalam sebuah grup adalah karena tahapan yang dibagi juga mengembalikan hasil dari menangkap grup. Misalnya membelahabcd
sekitarbc
memberi[a, d]
, tapi membelah sekitarb(c)
memberi[a, c, d]
. Dengan cara ini kita mendapatkan semua._.
bagian pada garis yang terpisah tetapi juga bagian 11-karakter di awal dan akhir. Kami menggunakan_
opsi untuk menghilangkan hasil kosong antara setiap._.
pertandingan. Hasilnya adalah ini:Selanjutnya kami memproses garis bawah:
Ini menggantikan setiap garis bawah dengan sembilan
1
s. Alasan kami menggunakan1
s di sini daripada spasi segera adalah karena itu membuatnya lebih mudah untuk memasukkan ruang padding berikutnya.Ingatlah bahwa ada spasi di baris kedua. Ini memasukkan ruang di setiap posisi yang bukan batas kata, yaitu di mana-mana kecuali di awal dan akhir baris.
Dan akhirnya, kami mengganti semua
1
itu dengan spasi juga.sumber
(._.)
.Jelly , 44 byte
Cobalah online!
Ide
Jika kami menghapus setiap kolom kedua dan mengubah baris dengan kolom, kami mendapatkan papan berikut.
Sekarang, kita dapat memutar setiap kolom satu unit ke kanan, memindahkan semua ruang yang tersisa ke kanan.
Kemudian, kita menghapus ruang yang tersisa dan mengganti linefeeds dengan huruf D .
Sekarang, kami mengganti setiap huruf dengan indeks berbasis 1 di alfabet.
Kemudian, kami mengonversi larik digit ini dari bijective base 23 ke integer.
Sekarang, kami mengonversi bilangan bulat ini ke basis bijective 250 .
Akhirnya, kami menggunakan angka ini untuk mengindeks ke halaman kode Jelly .
Ini adalah data yang disandikan yang akan kami sertakan dalam program ( 29 byte ). Untuk menghasilkan output yang diinginkan, kita hanya perlu membalikkan langkah-langkah di atas.
Kode
sumber
z
) dengan filler.05AB1E ,
4847 byteTerima kasih kepada Emigna karena telah menghemat satu byte!
Penjelasan:
Pertama kompresi.
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•
adalah versi terkompresi dari nomor berikut:Setelah itu, ini dikonversi menjadi basis 33 , yang menghasilkan string berikut:
Nol diganti dengan 9 spasi , menggunakan kode berikut
¾9ð×:
. Setelah itu, kitaS
masukkan string menjadi karakter dan mengirisnya menjadi beberapa bagian 11 elemen (selesai dengan11ô
). Kami mendapatkan array 2 dimensi berikut:Kami mem-gridify array ini dengan
»
dan menampilkannya secara implisit.Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•33B¾9ð×:S11ô»
Python 2, 89 byte
Membuat templat
untuk menggantikan dalam huruf melalui pemformatan string. Templat menggunakan dua jenis garis:
l
11 salinan letter-plus-space, lalu baris baru. Ini juga digunakan untuk baris pertama dan terakhir. Ini memiliki ruang trailing.Python 3.5 dapat menyimpan byte dengan tuple unpacking
(*'...',)
.sumber
PowerShell v2 +,
13112311411099 byteIni hanya string literal dengan baris baru ditempatkan pada pipa, dengan sedikit
-replace
di ujungnya untuk mengubah0
menjadi19
spasi. Baris pertama dan terakhir hanya kata demi kata. Dengan hanya 10 ruang dan sedikit pengulangan, tidak ada cukup ruang untuk bermain golf. String ini ditinggalkan di jalur pipa, dan output melalui implisitWrite-Output
terjadi pada penyelesaian program.sumber
Javascript ES6 REPL ,
105102101 byteTidak banyak yang menarik terjadi di sini. Rekatkan di konsol untuk melihat hasil yang diinginkan
Disimpan 3 byte berkat @Arnauld
Disimpan 1 byte lagi berkat @Neil
Tampilkan cuplikan kode
sumber
1
s dengan spasi dan gunakan regexp ini sebagai gantinya:.replace(/.( ?)/g,`$& `+`$1`.repeat(17))
1
s dengan spasi dan gunakan fungsi ini sebagai gantinya:a=>a-1?a.repeat(18):a+' '
/// ,
10098 byteCobalah online!
Untuk beberapa alasan misterius, sepertinya ada spasi setelah
G
. Tanpa mereka, kode saya akan menjadi 96 byte.Berkat 42545 (ETHproductions) dan 56258 (daHugLenny) untuk mengurangi masing-masing 1 byte!
sumber
G
s pada baris pertama dan terakhir?Turtlèd , 72 byte
Cobalah online
>
memutar kura-kura,"foo"
menulis string di grid. Terakhir"
adalah elidablesumber
V ,
75, 62, 59 byteCobalah online!
Karena codel ini berisi karakter non-ASCII, berikut adalah hexdump:
Penjelasan. Pertama, kita memasukkan teks berikut:
Lalu, kita
<esc>
kembali ke mode normal. Pada titik ini, kursor berada pada baris ketiga pada baris terakhirG
. Mudahnya, ada perintah untuk menempatkan kita di kolom pertama dari garis tepat di atas kursor. Perintah itu-
. Kemudian, setelah kita berakhir di baris kedua (diN
), kita menjalankan loop berikut:Penjelasan:
Sekarang, buffer terlihat seperti ini:
Sekarang kita menggunakan regex terkompresi untuk mengganti setiap karakter dengan karakter itu dan spasi. Itu
Í./&
bagiannya. Ini diterjemahkan ke vim regex berikut:Yang berarti:
sumber
R,
149146 byteTidak begitu mengesankan tetapi juga tidak yakin bagaimana ini akan golf. Mengeksploitasi
paste
entah bagaimana adalah tebakan pertama saya. Bandingkan dengan teks mentah 241 byte.R-biola
sumber
Python 2, 108 byte
Sedikit berbeda dari jawaban python lainnya, tanpa menggunakan pengganti, hanya string yang bergabung.
sumber
Perl, 90 byte
Pendekatan yang cukup membosankan, tidak bisa memikirkan cara yang lebih baik untuk mengurangi ... Membutuhkan
-E
tanpa biaya tambahan. Menghasilkan ruang tambahan di akhir setiap baris. -2 byte terima kasih kepada @Dada !Pemakaian
sumber
perl -E 'say"FKCIIBAVWMG\nNZP\nTZN\nCZC\nSZP\nPZS\nVZC\nSZP\nEZL\nSZB\nJCVCORIBCMG"=~s/Z/$"x9/ger=~s/./$& /gr'
. (Ganti\n
dengan baris baru literal hingga 90).Jolf, 72 byte
Ganti semua
♣
dengan\x05
, atau coba di sini!Ini memberikan string yang diinginkan.
sumber
Java 7,
177165142131 byte-15 byte terima kasih kepada @BassdropCumberwubwubwub .
-11 byte terima kasih kepada @Numberknot .
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
String c(){String s=" ";return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace(""," ").replace("_",s);}
untuk 150 (perhatikan bahwa stackexchange menghilangkan spasi berlebihan)s
tetapi stackexchange menghapusnya. Inilah idenya , sekarang bahkan pada 142 bytes=" "
. Dalam hal ini memang lebih pendek. Dan.replace(""," ").replace("_",s);
bisa sebagai.replace("_",s).replace(""," ");
gantinya untuk -8 byte tambahanString c(){return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace("_"," ").replace(""," ");}
( 131 bytes )Befunge, 120 byte
Baris pertama memiliki string yang akan dicetak terbalik (sepertinya tidak, tetapi kode akan mundur pada baris itu). Baris kedua mencetak baris atas dan bawah. Baris ketiga dan sisi kiri dari baris keempat mencetak baris tengah, dan potongan kecil di kanan bawah melakukan hal yang menarik: memindahkan kursor kembali ke baris kedua untuk mencetak baris terakhir, tetapi setelah selesai, itu seri.
Seperti yang Anda lihat pada baris pertama, string dipisahkan oleh spasi untuk membedakan antara baris pertama, tengah, dan terakhir. Spasi dapat berupa hal lain, dan jika saya menggunakan karakter ASCII 0-9, saya bisa dengan mudah menyimpan 4 byte. $ Yang Anda lihat hanyalah karakter sampah yang harus ada di sana dan bisa diganti dengan apa pun kecuali ruang.
sumber
J,
7773 bytePerhatikan bahwa 43 byte, lebih dari setengah total, digunakan hanya untuk string
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
.Penjelasan
Pertama, buat daftar
Kemudian buat tabel waktunya
Kemudian uji kesetaraan dengan nol
Ratakan, temukan jumlah kumulatif, dan kalikan dengan elemen
Kemudian gabungkan dengan nol, pisahkan ke dalam daftar panjang 22, letakkan kepala setiap daftar, dan gunakan nilai sebagai indeks dalam string
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
sumber
(' ',@,.~]);._1';FKCIIBAVWMG;N_P;T_N;C_C;S_P;P_S;V_C;S_P;E_L;S_B;JCVCORIBCMG'rplc'_';9#' '
_11,@,.&' '\'FKCIIBAVWMGN_PT_NC_CS_PP_SV_CS_PE_LS_BJCVCORIBCMG'rplc'_';9#' '
Sebenarnya , 74 byte
Cobalah online!
Program ini bekerja dengan prinsip dasar yang sama dengan xnor's Python 2 answer .
Penjelasan (baris baru diganti dengan
\n
untuk kejelasan):sumber
C # 6,
192190 BytesTanpa ruang tambahan; tanpa membuntuti baris baru.
Solusi mudah. Mulai dengan string literal.
Replace
!
dengan 9 spasi. KemudianSplit
menjadi 11 string oleh~
, dan selanjutnya kechar
s (batinSelect
). Tambahkan spasi untuk setiap karakter, laluJoin
kembali ke 11 string. TerakhirJoin
oleh karakter baris baru.sumber
Ruby, 92
Program penuh, mencetak ke stdout menggunakan
$> <<
Ada 40 total surat untuk plot. Surat 10 hingga 28 bergantian antara diikuti oleh baris baru atau
' '*19
. Huruf-huruf awal dan kemudian dipisahkan oleh spasi tunggal.sumber
Perl,
115112 byteMenghasilkan output berikut:
Baris pertama dan terakhir dari output memiliki spasi tambahan. Kode menggunakan penggantian regex dan fakta bahwa jika objek tidak didefinisikan, mereka ditafsirkan sebagai string (mis. FKCIIBAVWMG diperlakukan sebagai "FKCIIBAVWMG". Tidak dapat mengambil tanda kutip dari baris terakhir karena baris sebelumnya sebelumnya, yang Saya tidak bisa menipu di tempat lain.
Edit 1: Disimpan 3 byte dengan mengganti
" "
dengan$"
, menghapus tanda kurung luar dan memasukkan spasi setelah cetak, dan menghapus tanda kurung di sekitar$"x19
dan menambahkan spasi setelah itu (sehingga.
tidak akan ditafsirkan sebagai desimal)sumber
s/(.)/\1 /
dapat diganti dengans/./$& /
. Jatuhkan titik koma terakhir. Gunakansay
sebagai gantinyaprint
(untuk itu Anda harus menambah-M5.010
atau menggunakan-E
alih-alih-e
, tetapi keduanya gratis (lihat di sini )). Baris baru literal alih-alih\n
.Arang , 66 byte
Cobalah online!
Box(21, 11, 'F K C I I B A V W M GPNCPSCPLBG M C B I R O C V C JSESVPSCTN')
.Tidak bersaing, 36 byte
sumber
Python 2, 116 Bytes
Cukup mudah, untuk alasan apa pun meskipun penggantian string sangat jelas, itu adalah hal terbaik yang bisa saya lakukan. Mungkin menggunakan
re
mungkin lebih pendek.sumber
print'F K C I I B A V W M G\nN@P\nT@N\nC@C\nS@P\nP@S\nV@C\nS@P\nE@L\nS@B\nJ C V C O R I B C M G'.replace('@',' '*19)
juga 116 byte tanpa menggunakan gabung jika Anda ingin lebih mudah. Bergantian,print' '.join('FKCIIBAVWMG!N@P!T@N!C@C!S@P!P@S!V@C!S@P!E@L!S@B!JCVCORIBCMG').replace('! ','\n').replace('@',' '*17)
adalah 115 byte jika trailing spasi dibolehkan. (Argumen untuk mengganti adalah '!', Bukan '!'.)Batch, 171 byte
sumber
Bahasa GameMaker, 148 byte
Saya tahu ini sangat mendasar, tetapi saya tidak berpikir ini bisa mengalahkan dalam GML ...
sumber
GDScript
, bahasa dariGodot
mesin game. Tapi, tidak yakin apakah itu akan baik-baik saja :)string_repeat(" ",19)
panjangnya sama dengan" "
.Pip , 64 byte
63 byte kode, +1 untuk
-S
bendera.Cobalah online!
Penjelasan
Operator yang digunakan:
.
(biner) menyatukan (mengoperasikan item-bijaksana pada daftar).X
(biner) string-mengalikan. (s
adalah variabel yang diinisialisasi ke" "
.)^
(Tidak diperhatikan) membagi string menjadi daftar karakter..*
adalah cara lain untuk membagi string menjadi karakter. Ini terdiri dari unary.
, yang merupakan no-op pada string, dipasangkan dengan*
operator-meta, yang memetakan operator unary untuk setiap item dalam operasinya (iterable). Menggunakan.*"..."
memungkinkan kita menyimpan byte lebih(^"...")
- tanda kurung akan diperlukan karena.
lebih diutamakan daripada^
.PE
menambahkan elemen ke daftar.AE
menambahkan elemen ke daftar.Dengan latar belakang itu, inilah langkah demi langkah kode:
Ketika hasil ini dicetak secara otomatis,
-S
bendera bergabung dengan sublists pada spasi dan daftar utama pada baris baru, memberikan hasil yang diinginkan.sumber
C,
171156 BytesMenghasilkan karakter baris baru yang tertinggal juga ... Mungkin bisa diturunkan sedikit lagi.
sumber
Perl 5,
9286 bytePenggunaan
sprintf
, bantalan dan operator pengulangan stringx
.sumber
\n
dengan baris baru literal, Anda tidak perlu spasi antarax
operator dan nomor yang mengikuti, dan akhirnya digantisplit//,xxx
denganxxx=~/./g
.Haskell,
128125114 byteCoba di sini
((:" ")=<<)
isconcatMap (\a -> [a,' '])
- pad dengan menambahkan spasi di belakang setiap huruf dalam inputnyasumber
Powershell, 95 byte
Terinspirasi oleh jawaban @ AdmBorkBork .
Penjelasan
Operator pengganti pertama membuat persegi panjang
11x11
.Operator pengganti kedua memasukkan spasi setelah setiap karakter. Hasilnya memiliki spasi tambahan.
sumber