Saya ingin selimut yang terlihat seperti ini. Setiap strip melewati, di bawah, melewati, di bawah. Bisakah Anda mencetaknya?
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
Mengejar spasi di akhir setiap baris dan mengikuti baris baru dapat diterima.
Ingat, ini adalah kode-golf , jadi kode dengan byte paling sedikit menang.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika ada yang ingin Anda sertakan beberapa nomor di header (misalnya karena skor Anda adalah jumlah dari dua file atau Anda ingin daftar juru hukuman bendera secara terpisah), memastikan bahwa skor aktual adalah terakhir nomor dalam header:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
sumber
Jawaban:
Python 2, 84 byte
Berkat Sp3000 untuk 6 byte dari mengubah operasi aritmatika menjadi operasi bitwise.
sumber
i+~j>>2&1^i+j>>1&2^i&4
mungkin?Pyth, 36 byte
Cobalah online: Peragaan
Penjelasan:
Kami dapat menentukan simbol dengan memeriksa 3 kondisi:
Jika kita mengartikannya
[A,B,C]
sebagai angka biner, kita mendapatkan pemetaan berikut:Kita juga bisa menginterpretasikan
[A,B,C]
sebagai angka desimal dan melakukan pencarian indeks modular dalam string. Ini tidak membuat perbedaan karena10 mod 8 = 2
.Sekarang ke kode:
V24
iteratesN
(row-idx) berakhir[0, 1, ..., 23]
.sm...48
memetakan angkad
(kolom-idx)[0, 1, ..., 47]
ke karakter dan mencetak string gabungan.++BNd
menghasilkan daftar[N, N+d]
,+...t-Nd
tambahkanN-d-1
. Jadi kita sudah mendapatkan daftarnya[N, N+d, N-d-1]
.m<3%k8
memeriksa setiap nomor yang dihitungk
, jika3 < k % 8
, jadi ini memberikan daftar dengan ketentuan[A, B, C]
.i...T
mengubahnya menjadi angka desimal dan kemudian@" \// \/\\"
melakukan pencarian dalam string.Kode kurang lebih sama di Python2: 98 byte :
sumber
Perl, 209 + 17 = 226 byte
Jalankan dengan
-mList::Util=max -M5.010
(bendera kedua gratis). Ini tidak memenangkan kompetisi jumlah byte, tetapi inilah solusi saya.Dapat dibaca:
Secara prosedural menghasilkan setiap segmen, kemudian mengulangi pola 6 kali, lalu mengeluarkan total hasil 3 kali.
sumber
Python 3,
174172138 byteMenemukan pola terkecil yang dapat saya temukan di selimut (pola "di bawah" dan "di atas"), memasukkannya ke dalam daftar dan menambahkan beberapa pemahaman daftar dan manipulasi string untuk membongkar semuanya. Mengganti semua backslash yang lolos dengan "b" dan menggantinya kembali nanti untuk menghemat beberapa byte.
Terima kasih kepada Oliver untuk bermain golf 2 byte!
Mengambil 34 byte off dengan mengubah pola - seluruh pola untuk selimut sekarang dalam satu daftar, jadi hanya satu untuk loop diperlukan untuk membuka pola.
sumber
0*6
danu*6
print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
Python 2,
171170168 byteTidak cantik dan tidak pintar. Cukup tetapkan variabel untuk grup string yang paling sering digunakan lalu gabungkan dan cetak hasilnya 3 kali. Dapat mencoba dan bermain golf lebih lama jika saya tidak menemukan pendekatan yang lebih baik.
1 byte disimpan dengan menggunakan input mentah pada tugas. Terima kasih @ nedla2004
-2 dengan menetapkan beberapa variabel tetapi masih bukan pesaing serius
sumber
*6
di setiap elemen tuple. Ada ide?exec r"print'\n'.join(d);"*3
.SOML , 106 byte
versi yang tidak bersaing menggunakan fungsi yang baru saja saya tambahkan: (
836766 byte)penjelasan:
sumber
Ruby, 75 byte
Lebih baik bermain golf, menggunakan pencarian string 8-byte tunggal yang diindeks oleh j & 4 selain parameter lainnya, daripada string 4-byte yang dapat dimodifikasi.
Ruby, 81 byte
Mencetak karakter garis diagonal berdasarkan karakter. Karakter yang benar dipilih dari string 4 karakter tergantung pada ada / tidaknya setiap untai. Karakter tumpang tindih bervariasi tergantung pada untai mana yang di atas.
Berkomentar
sumber
Perl,
132131113 byteTidak Disatukan:
sumber
05AB1E , 37 byte
Menggunakan pengodean CP-1252 .
Cobalah online!
Penjelasan
Menggunakan trik mod-8 yang secara ahli dijelaskan dalam jawaban kasar Jakube .
sumber
Python,
245236234233230216212198195 byteOK, lebih lama dari jawaban terakhir saya (dan yang lainnya) tetapi akan tertarik dengan umpan balik tentang pendekatan ini.
Edit
-9 karena @ nedla2004 lebih banyak menguasai daripada saya
-2 dengan mengambil lambda di luar loop dan kehilangan 2 spasi indent
-1 dengan menggunakan
in' '*3
alih-alihin 0,1,2
karena saya tidak menggunakanh
. itu hanya sebuah penghitung.-3 Mengapa, mengapa, mengapa saya meninggalkan baris baru dan 2 indentasi antara yang kedua untuk dan hasil cetak ??? Itu terlambat. Akan mengunjungi lagi besok.
-14 Dapat benar-benar kehilangan lambda sepenuhnya dan hanya menyertakan basis 3 decoder langsung setelah pernyataan cetak. Terlihat berantakan tapi bagaimanapun, ini kode golf :)
-4 Tidak ada titik pengaturan variabel untuk daftar integer. Cukup gunakan langsung di loop kedua.
-14 dan tidak ada titik menggunakan loop luar. Cukup gandakan integer tuple dengan 3 (tanpa malu-malu dicuri dari @ nedla2004 hingga di bawah 200 :))
-3 Disimpan 3 dengan membuat \ = 0, / = 1 dan spasi = 2. Ini membuat daftar bilangan bulat lebih pendek karena tiga dari angka 3 basis sekarang memiliki 0 di depan
Bagaimana cara kerjanya (dan itu terjadi)
Karena hanya 3 karakter yang digunakan:
l adalah daftar dari 8 pola berulang sebagai setara bilangan bulat dari representasi basis 3 mereka dengan asumsi bahwa "" = 0, "\" = 1 dan "/" = 2
LambdaKode pertama setelah pernyataan cetak adalah konverter ringan dari integer ke string 3 basisLoop pertama loop 3 kali dan yang kedua mencetak setiap baris dengan karakter dasar 3 dikalikan 6 dan diganti dengan /, \ atau spasi.
Saya yakin saya bisa menggunakan regex alih-alih ganti yang bersarang () tapi saya terlalu lelah untuk mencoba sekarang. Ini hanya percobaan dan lebih lama dari upaya Python saya sebelumnya tetapi telah diposting hanya untuk setiap komentar pada pendekatan (dan juga karena saya belum pernah bekerja di basis 3 sebelumnya dan saya sangat menikmati bekerja di konverter).
sumber
Ruby, 135 bytes
puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3
The number array corresponds to each component of each line, translated to base 3:
= 0,
\
= 1,/
= 2, then converted to decimal. The gsub() calls are too big, though.And, just now, I saw @ElPedro's answer. :-( Just coincidence.
sumber
e.to_s(3).rjust(8,"0")
→("%8s"%e.to_s(3))
;gsub("0"," ").gsub("1","\\")..gsub("2","/")
→tr("013"," \\/")
;"\n"
→$/
;.join
→*""
. Anda juga dapat menyimpan byte dengan membagi semua nomor dalam array oleh 4 dan menggantie
dengan(e*4)
.tr("021"," /\\")
.PHP
157126 byteTaking the changes @Titus lists in the comments... I'm annoyed I missed point 1 which I should have caught, but I didn't know strtr() existed which is where most of the savings come - nice work Titus!
BARU:
TUA:
Because all the backslashes need escaping it saves quite a bit of space to pack them up as different character and replace them for output, and then once I'm calling str_replace() it makes sense to use it as often as possible.
sumber
-r
. Gunakan lima langkah ini untuk menyimpan 30 byte lainnya: ideone.com/wt4HGB 1) gunakan$a[...]
langsung sebagaistr_replace
parameter alih-alih menugaskannya. 2)strtr
bukannyastr_replace
. 3) Gunakan digit alih-alih huruf. 4) Sertakan tugas dalam gema. 5) Jangan ditugaskan$a
, gunakan saja.Python 2,
169161165160155154152Berdasarkan jawaban @ ElPedro, dengan sedikit peningkatan. Untuk melihat penjelasannya, lihat jawaban mereka . Ini adalah Python 2, meskipun tampaknya ada tanda kurung di dekat
print
.Disimpan 8 byte dengan menggunakan variabel untukItu hanya berfungsi untuk string, dan menggunakan fungsi untuk itu akan lebih lama.replace
.Disimpan 4 byte dengan melihat bahwa @ElPedro menyadari bahwa mereka tidak perlu l, dan saya juga tidak.
Disimpan 5 byte dengan tidak membalik
range(8)
, dan bukannya menggunakan+=
untuk menambahkan ke r, menambahkan r ke akhir digit baru. Coba gunakan repl.itDisimpan 5 byte dengan mencuri daftar nilai baru @ ElPedro.
Disimpan 1 byte dengan menghapus ruang antara
in
dan(
.Disimpan 2 byte dengan menghapus variabel a.
sumber
in
dan(
di dalam untuk pertamaa=3**i
. Cukup gunakanfor i in range(8):r=
x / 3 ** i% 3+r
untuk menyimpan pasangan. operator diutamakan mengurus sisanya :)PHP, 184 byte
Keluaran:
sumber
Batch, 152 byte
Pemrosesan string dalam Batch menyebalkan, jadi ini mungkin pendekatan terbaik. Panggilan-dan-jatuh-melalui sangat sedikit lebih pendek dari
for
loop bersarang . Setidaknya saya tidak perlu mengutip garis miring terbalik saya!sumber
APL, 110 byte
Saya baru mengenal APL, jadi ini solusi sederhana.
Inilah pendekatan saya: perhatikan bahwa setelah 8 baris pertama selimut, polanya berulang. Karena itu saya hanya perlu mendefinisikan 8 baris pertama, dan kemudian saya bisa mengulanginya 3 kali. Perhatikan juga bahwa setiap baris berulang setelah 8 karakter pertama. Oleh karena itu untuk mendefinisikan satu baris saya hanya perlu mendefinisikan 8 karakter pertama dan kemudian mengulanginya 8 kali.
Inilah solusi yang tidak diserap:
Saya mencatat di atas bahwa D adalah kebalikan dari B, E adalah kebalikan dari A, dan H adalah kebalikan dari F. Dalam kode aktual saya, saya mengambil keuntungan dari ini dengan tidak mendefinisikan D, F, atau H dan menggunakan fungsi kebalikan
⊖
:24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F
sumber
Ruby, 132 byte
jawaban yang sangat sederhana.
sumber
Haskell, 96 byte
sumber