Latar Belakang
Ketika saya masih muda, saya diajari metode menggambar bentuk "S" yang aneh, yang menurut saya (bersama teman-teman sekelas) saya menarik. Hari ini, saya menemukannya kembali, dan karena pendekatan formulanya untuk menggambarnya, saya pikir itu bisa mengarah pada tantangan yang menarik: P
Menggambar "S"
S dapat ditarik dengan mengikuti langkah-langkah sederhana ini:
Pertama, gambarkan 2 baris dari tiga garis vertikal seperti itu
| | |
| | |
Selanjutnya, hubungkan garis kiri atas dengan garis tengah bawah dan tengah atas dengan garis kanan bawah untuk menghasilkan
| | |
\ \
| | |
Terakhir, gambarkan bagian atas dan bawah pada gambar yang saat ini digambar sehingga tampak seperti
^
/ \
| | |
\ \
| | |
\ /
v
Seperti yang Anda lihat, ini menghasilkan bentuk "S". Namun ketika diperpanjang (menggambar dengan lebih dari 2 baris), itu menghasilkan pola yang sangat menarik. Tugas Anda adalah mereproduksi pola yang menarik ini.
Tugas
Diberikan bilangan bulat di mana n >= 2
, output S dengan n
baris harus dibuat darinya. Output dapat dikembalikan dari suatu fungsi, dan input dapat diambil dalam metode standar. Mengejar / memimpin spasi putih untuk gambar keseluruhan, serta setiap baris, tidak masalah. Namun, spasi di depan harus konsisten sehingga "tidak rusak. Anda dapat menampilkan sebagai daftar baris.
Uji kasus
input
output
---
2
^
/ \
| | |
\ \
| | |
\ /
v
---
8
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
---
10
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
Ini adalah kode-golf sehingga kode terpendek menang! Semoga berhasil,
S
para Keren S , dan panggilan versi terbatas dari paraS Chain
Jawaban:
Python 2 , 47 byte
Cobalah online!
sumber
C # (.NET Core) ,
7369666462 byteDua byte lebih sedikit dan penampilan seperti perl berkat Barodus. Tidak terpikir untuk menggunakan int? untuk nulls.
Cobalah online!
sumber
new string[n+1]
fungsinya? Saya belum pernah melihatnya sebelumnya.new string[n+1]
itu adalah semacam konstruktor string yang rumit dan bukan deklarasi array -.-)Python 3 , 48
56 59 61byteCobalah online!
sumber
\ \
.05AB1E ,
2726 byteCobalah online!
Alternatif 27 byte alternatif
Cobalah online!
Penjelasan
sumber
'^…/ \©IF„| ûû„\ û}\®R'v).C
tanpa melihat.Japt ,
342523 byteUji secara online! Output sebagai array garis;
-R
bendera ditambahkan untuk bergabung di baris baru. (Terima kasih @Shaggy)Upaya KeduaPertama, mungkin bisa ditingkatkan ...Bagaimana itu bekerja
sumber
SOGL V0.12 ,
262518 byteCoba Di Sini!
Menggunakan strategi yang sama dengan jawaban Japt ETHproductions
Penjelasan:
sumber
push "|" and " "
apa-apaan itu builtinJavaScript (ES6), 60 byte
Cuplikan Tes
Tampilkan cuplikan kode
sumber
n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'
(menggunakan backticks dan baris baru literal)Arang ,
272625 byte-1 byte terima kasih kepada Carlos Alejo. -1 byte berkat ASCII saja.
Cobalah online! Tautan adalah untuk versi verbose. # charcoal-verbose-obfucation
sumber
\r
: `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Versi verbal .\r
sebagai cara untuk mendapatkan baris baru dengan cara yang waras. Terima kasih!Perl 5 ,
3937 byteCobalah online!
Dicukur dua byte dengan saran @DomHastings
sumber
Sebenarnya , 49 byte
Cobalah online!
Penjelasan:
sumber
05AB1E , 38 byte
Cobalah online!
sumber
C (gcc) , 82 byte
Cobalah online!
sumber
C # (.NET Core) ,
1017773 byteDisimpan 24 byte berkat i cri everytim !
Disimpan 4 byte berkat Kevin Cruijssen !
Cobalah online!
Seperti biasa, pengulangan string dalam C # itu menyebalkan.
sumber
--n>=0
ken-->0
dans+="/\n v";return s;
untukreturn s+"/\n v";
menyimpan beberapa byte.Retina , 38 byte
Cobalah online!
Mencetak kolom spasi terdepan dan pada spasi tambahan di setiap baris.
Penjelasan
Penghematan byte utama berasal dari menghilangkan spasi di semua bagian literal dan memasukkannya di akhir. Angka tersebut terstruktur sedemikian sehingga tidak pernah ada dua non-spasi di sebelah satu sama lain, jadi jika kita hanya menghapus semuanya, kita hampir dapat memperbaiki bentuk dengan memasukkan spasi di setiap posisi di akhir:
menjadi:
Itu hampir benar, kecuali untuk lekukan. The
^
danv
hilang dua ruang. Itu sebenarnya lebih mudah untuk diperbaiki, karena jika kita hanya menyisipkan ruang eksplisit di depan masing-masing, itu akan menghasilkan dua ruang tambahan di akhir. Garis dengan garis miring lebih rumit karena hanya membutuhkan satu ruang tambahan. Untuk memperbaiki ini, kami menyisipkan karakter placeholder di sana (x
). Saat kami menyisipkan spasi di akhir, kami tidak hanya menyisipkannya untuk setiap kecocokan kosong, tetapi kami juga mencocokkannyax
. Itu berarti alih-alih memasukkan spasi di depanx
,x
itu sendiri akan diganti. Dan kemudian masih akan ada pertandingan kosong tepat setelahx
. Itu artinya setiapx
menambahkan tepat satu ruang tanpa mengubah apa pun. Jadi yang ingin kita atur adalah ini:yang akan memberi kita hasil yang diinginkan. Jadi, inilah kodenya:
Konversikan input ke unary.
Konversikan masing
1
- masing menjadi dua baris dengan|||
danx\\
(dan linefeed terkemuka).Ulangi dua baris pertama dengan
^
danx/\
.Perbaiki final
x\\
dengan mengubah yang terakhir\
menjadi/
dan menambahkan baris denganv
.Ganti setiap
x
kecocokan atau kosongkan dengan spasi.sumber
Pyth, 46 byte
Suite uji.
sumber
%" ^\n / %s/\n v"*Q"\\\n| | |\n \
Pyth, 40 byte
Cukup mirip dengan milik Steven Hewitt, tetapi dikembangkan secara mandiri.
Cobalah secara Online
Penjelasan
sumber
Pyth,
333231 byteTerima kasih Pak Xcoder untuk satu byte.
Cobalah online: Demonstrasi atau Test Suite
sumber
Retina , 45 byte
Ini adalah solusi yang cukup sederhana.
Cobalah online
Jika karya seni bisa diindeks 1 sebagai gantinya, itu akan menjadi sedikit lebih pendek (44 byte):
sumber
Pip ,
454233 byteCobalah online!
Penjelasan
Kode ini sangat sederhana, meskipun baris baru membuatnya lebih sulit untuk dibaca. Berikut cara yang lebih baik untuk melihat struktur:
Elemen berulang dalam rantai-S adalah
Ambil ini sebagai string literal dan ulangi
a
kali (di manaa
argumen baris perintah pertama). Kemudian tambahkan awalan:dan tambahkan sufiks:
dan cetak.
(Saya suka bagaimana ini akhirnya tampak seperti program> <>.)
sumber
MATL ,
474443 byte-3 byte terima kasih kepada Giuseppe
Cobalah online!
sumber
' ^' ' / \ 'XK'| | |'XJ`' \ \'JGq@-]KP' v'
adalah 44 byte.Haskell, 53 byte
Cobalah online!
sumber
Excel, 60 byte
sumber
PowerShell ,
83, 57 byteCobalah online!
Saran Per @ AdmBorkBork,
for
dengan menggunakan rentang angka.;
dan string gabungan.sumber
for
melakukan banyak golf dengan menggunakan1..--$args[0]|%{ }
.";"
dan lebih murah untuk menghilangkan$s
seluruhnya. 57 byte1..$args
kesempatan. Saya tidak yakin etiket yang benar di situs ini. Apakah saya membuat perubahan pada jawaban saya dan menghargai Anda, atau apakah Anda memposting solusi Anda sebagai jawaban terpisah?AsciiDots , 88 byte
Cobalah online!
sumber
Jelly , 32 byte
Membosankan port solusi Python Lynn .
Cobalah online!
Penjelasan:
sumber
Sebenarnya , 30 byte
Ini bekerja pada prinsip yang sama dengan jawaban Japt ETHproductions , di mana ruang tambahan ditambahkan kemudian, dan seluruh string dibagi menjadi baris 5 untuk pencetakan implisit. Cobalah online!
Tidak melakukanolf
sumber
Jelly ,
2523 byteIni bekerja pada prinsip yang sama dengan jawaban Japt ETHproductions , di mana ruang tambahan ditambahkan kemudian, dan seluruh string dibagi menjadi string dengan panjang 5 sebelum mencetak. Cobalah online!
Sunting: Saya tahu ada cara untuk bergabung dengan bagian atas dan bawah S-chain dengan cara yang lebih golf. Berkat Erik the Outgolfer untuk -2 byte.
Tidak melakukanolf
sumber
“\|||\”ẋ“ ^ /“/ v”jKs5Y
Arang , 25 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode.
sumber
↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
bash, 67 byte
Cobalah online
sumber
Java 8,
9376 bytePort @IanH. Jawaban C # .NET setelah saya memutarnya sedikit lebih.
Coba di sini.
sumber
string
vsvar
bagian.n->
vsn=>
;)