CJam, 32 30 29 28 byte
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Uji di sini.
Saya mencoba untuk membantu Reto golf menjawab CJam tetapi berakhir dengan solusi yang tidak ada hubungannya dengan itu, jadi saya pikir saya mungkin sebaiknya mempostingnya sendiri.
Penjelasan
Ini memanfaatkan simetri keluaran. Secara khusus, fakta bahwa output sama dengan transposnya.
Pertama, kami membuat N+1
garis pertama , tetapi tanpa tepi kiri:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Sekarang kita punya array string yang mewakili kisi-kisi berikut:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
Transpos yang terlihat seperti ini:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Bersama-sama, ini memiliki semua karakter non-ruang yang kita butuhkan. Kita sekarang dapat menggunakan tip rad Dennis untuk menggabungkan dua kisi ASCII menjadi satu, dengan mengambil maksimum dari setiap pasangan karakter yang sesuai. Di semua posisi di mana kedua grid berbeda, satu akan memiliki ruang (atau tidak sama sekali) dan yang lainnya akan memiliki karakter yang kita cari. Ketika satu daftar dalam operasi vektor lebih panjang dari yang lain, elemen tambahan dari daftar panjang hanya akan disimpan, yang hanya apa yang kita cari. Dalam kasus lain, karakter non-spasi akan selalu menjadi maksimum dari dua karakter:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
.Python 2, 80 byte
sumber
Mathematica,
123122121 byteMungkin bisa bermain golf lebih lanjut.
sumber
Java - 141 byte
Bukan yang terpendek tentu saja, tetapi senang memiliki solusi Java:
Tidak disatukan
Memasukkan
Keluaran
sumber
Pyth, 30 Bytes
Coba di sini .
sumber
JavaScript,
128125123114 byteDe-golf (juga dikonversi menjadi ES5) + demo:
sumber
Ruby, 50 byte
Dalam program uji:
Lingkaran mencetak 2 baris untuk setiap iterasi dari i = 0 hingga i = n-1.
Baris kedua selalu
'\'
diikuti oleh insiden Ni'/ '
.Baris pertama sama dengan baris kedua dari iterasi sebelumnya, tetapi dengan yang
'\'
hilang (jadi kami menyimpan nilai inis
saat kami mencetak baris kedua dari iterasi sebelumnya.)Satu-satunya pengecualian adalah iterasi nol, yang ditangani dengan menginisialisasi
s
ke'/\'*n
.sumber
Javascript (ES6),
10710410098979190 bytePosting pertama di sini!
Dulu digunakan tapi sekarang digunakan , mirip dengan Ruby .
Array(len)
.
join(str)
String.repeat(len)
operator*(str,len)
Tidak Disatukan:
Terima kasih kepada:
107 => 104 byte: @insertusernamehere
97 => 90 byte: @ user81655
sumber
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
caranya.Python 2, 66 byte
Cukup mudah. Nilainya
n
adalah angka/
pada baris, danb
mengatakan apakah baris tersebut dimulai\
. Nilaib
bergantian antara 0 dan 1, dann
menurun setiap langkah kedua. Kondisi terminasi yang buruk berhenti ketikan=1, b=0
. Alternatifexec
loop akan memiliki masalah membutuhkan banyak pelarian"'\\\\'"
.Saya terkejut menemukan pendekatan ini lebih pendek daripada menggunakan nomor tunggal
k=2*n+b
. Ini adalah 68 byte:Strategi alternatif akan menghindari terpisah
print
untuk garis atas, tetapi saya tidak melihat cara yang ringkas.sumber
Minkolang 0,14 , 46 byte
Saya yakin ini bisa bermain golf, tapi sekarang jam 4 pagi dan saya harus tidur.
Coba di sini.
Penjelasan
sumber
Batch, 121 byte
Atau jika unary dapat diterima, 107 byte:
Aktifkan dengan jumlah 1s yang sesuai.
sumber
Matlab, 122 byte
sumber
Haskell, 99 byte
Dua solusi dengan panjang yang sama.
Panggil
f
.dan
sumber
Haskell, 96
Ini sebenarnya tidak kompetitif terhadap solusi Haskell yang ada karena menyimpan 5 karakter dengan mengembalikan alih-alih mencetak string. Saya mempostingnya hanya untuk menunjukkan bagaimana pendekatan pola infinite dibandingkan dengan pendekatan berbasis koordinat. Catatan:
p
dapat digarisbawahi tanpa perubahan panjang.[t n l|(n,l)<-...]
menghemat 2 lebih(map(uncurry t)$...)
.sumber
Ceylon, 100
Ini menampilkan "daftar argumen yang dinamai" untuk
join
(tanpa argumen apa pun yang disebutkan, tetapi sebagai pemahaman yang dapat diubah), dan beberapa kegunaanString.repeat
(salah satunya sebenarnya berarti "hanya untuk ganjili
").Diformat:
sumber
PHP, 117 byte
Asumsikan pemberitahuan dimatikan dan input diambil dari baris perintah.
Tidak Disatukan:
Komentar dipersilahkan :)
sumber