Gambarlah S-Chain


27

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 nbaris 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 sehingga kode terpendek menang! Semoga berhasil,


13
Wikipedia menyebut Spara Keren S , dan panggilan versi terbatas dari paraS Chain
Stephen

Bisakah kita menampilkan sebagai daftar baris?
Tn. Xcoder

@ Mr.Xcoder Anda boleh
caird coinheringaahing

@Stephen 10 menit googling dan ini tidak muncul. Saya akan mengedit nama pertanyaan
caird coinheringaahing

@cairdcoinheringaahing Saya mencari gambar, mungkin itu: P
Stephen

Jawaban:



10

C # (.NET Core) , 73 69 66 64 62 byte

Dua byte lebih sedikit dan penampilan seperti perl berkat Barodus. Tidak terpikir untuk menggunakan int? untuk nulls.

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Cobalah online!


1
Jika ini adalah golf dari jawaban C # yang ada, saya tidak akan pernah tahu. Bagus :-)
ETHproduksi

Bisakah Anda menjelaskan apa new string[n+1]fungsinya? Saya belum pernah melihatnya sebelumnya.
Ian H.

Membuat array string AFAIK kosong. Saya telah menggunakan retasan dengan string.Join, alias gabung {"", "", "", ""} dengan separator "\ \ n | | | n \"
kata ganti saya adalah monicareinstate

@ seseorang Woah, saya tidak pernah mengakui trik ini sebelumnya. Benar-benar keren! (Juga buruk saya, saya pikir new string[n+1]itu adalah semacam konstruktor string yang rumit dan bukan deklarasi array -.-)
Ian H.


6

05AB1E , 27 26 byte

…^
/ð"\
| | |
\ "I×…/
vJ.c

Cobalah online!

Alternatif 27 byte alternatif

'^…/ \©IF…| |û…\ \}\®R'v».c

Cobalah online!

Penjelasan

'^                             # push "^"
  …/ \©                        # push "/ \" and store a copy in register
       IF                      # input times do:
         …| |û                 # push "| | |"
              …\ \             # push "\ \"
                  }            # end loop
                   \           # discard top of stack (the extra "\ \")
                    ®R         # push "/ \" reversed = "\ /"
                      'v       # push "v"
                        »      # join stack on newlines
                         .c    # center each row

5
Kode Anda terlihat seperti gajah bagi saya :)
Wojowu

Sungguh MENAKUTKAN seberapa dekat jawaban saya dengan Anda: '^…/ \©IF„| ûû„\ û}\®R'v).Ctanpa melihat.
Magic Octopus Mm

6

Japt , 34 25 23 byte

" ^ /{ç'\²i|³1}/ v"¬¸ò5

Uji secara online! Output sebagai array garis; -Rbendera ditambahkan untuk bergabung di baris baru. (Terima kasih @Shaggy)

Upaya Kedua Pertama , mungkin bisa ditingkatkan ...

Bagaimana itu bekerja

" ^ /{ ç'\²  i |³  1}/ v"¬ ¸  ò5
" ^ /{Uç'\p2 i'|p3 1}/ v"q qS ò5   Ungolfed
                                   Implicit: U = input number
        '\p2                       Repeat a backslash twice, giving "\\".
             i     1               Insert at index 1
              '|p3                   3 vertical bars. This gives "\|||\".
      Uç                           Make U copies of this string. U = 2: "\|||\\|||\"
" ^ /{              }/ v"          Insert this into this string.    " ^ /\|||\\|||\/ v"
                         q qS      Split into chars; join on spaces."  ^   / \ | | | \ \ | | | \ /   v"
                              ò5   Split into rows of length 5.    ["  ^  "," / \ ","| | |"," \ \ ","| | |"," \ / ","  v"]
                                   Joining on newlines gives "  ^  
                                                               / \ 
                                                              | | |
                                                               \ \
                                                              | | |
                                                               \ /
                                                                v"

Mengalahkan Arang dan mengikat SOGL? Kerja bagus!
Shaggy

Ngomong-ngomong, Anda bisa menampilkan larik garis, sehingga Anda dapat membuang 2 karakter terakhir.
Shaggy

@Shaggy Bagus sekali, sekarang kita menang!
ETHproduksi

Kami telah melakukan dengan baik belakangan ini :)
Shaggy

6

SOGL V0.12 , 26 25 18 byte

°I-‘*"∑ūCƨΩ)¹‘@∑5n

Coba Di Sini!

Menggunakan strategi yang sama dengan jawaban Japt ETHproductions

Penjelasan:

..‘           push "\|||\"
   *          repeat input times
    "..‘      push " ^ /ŗ/ v ", with ŗ replaced with POP. The reason why there's a trailing
              space is because otherwise it didn't have enough repeating characters to compress
        @∑    join with spaces
          5n  split to line lengths of 5

2
push "|" and " "apa-apaan itu builtin
Steven H.

1
@ SevenHewitt mereka sebenarnya dua built-in, tapi saya bergabung bersama (seperti yang saya lakukan dengan hal-hal lain) karena saya tidak berpikir itu tidak perlu untuk memisahkan hal-hal yang akan digunakan bersama segera
dzaima

5

JavaScript (ES6), 60 byte

n=>`  ^
 / \\
${`| | |
 \\ \\
`.repeat(n-1)}| | |
 \\ /
  v`

Cuplikan Tes


1
57: n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'(menggunakan backticks dan baris baru literal)
edc65

5

Arang , 27 26 25 byte

-1 byte terima kasih kepada Carlos Alejo. -1 byte berkat ASCII saja.

  ^⸿ / ×\⸿| | |⸿ \ N/⸿  v

Cobalah online! Tautan adalah untuk versi verbose. # charcoal-verbose-obfucation


1
Anda dapat menyimpan 1 byte hanya dengan memanggil Print (alih-alih menambahkan string) dan menggunakan \r: `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Versi verbal .
Charlie

Ah ... Aku harus ingat \rsebagai cara untuk mendapatkan baris baru dengan cara yang waras. Terima kasih!
totallyhuman


@ Khusus ASCII: P -
totallyhuman

4

Perl 5 , 39 37 byte

say"  ^
 / ".'\
| | |
 \ 'x<>."/
  v"

Cobalah online!

Dicukur dua byte dengan saran @DomHastings


Jika Anda menggunakan tanda kutip tunggal, Anda tidak perlu melarikan diri dari garis miring terbalik untuk -2! :)
Dom Hastings

3

Sebenarnya , 49 byte

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"

Cobalah online!

Penjelasan:

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"
"| | |"@α                                          push a list containing n copies of the vertical lines
         ;lD" \ \"@α                               push a list containing n-1 copies of the diagonal connections
                    @Z♂i                           interleave
                        i                          flatten
                         "  v"" \ /"))             make the bottom
                                      " / \""  ^"  make the top

3

05AB1E , 38 byte

…| |ûU"  ^
 / \"XI<F„ \2×X}" \ /
  v"»

Cobalah online!

…| |                         # Push "| |"
    û                        # Palindromize
     U                       # Store in X
      "..."X                 # Push the top three rows
            I<F      }       # One less than input times do:
               „ \           #   Push " \"
                  2×         #   Concatenate that with itself
                    X        #   Push "| | |"
                      "..."  # Push the last two rows
                           » # Join stack with newlines


3

C # (.NET Core) , 101 77 73 byte

Disimpan 24 byte berkat i cri everytim !
Disimpan 4 byte berkat Kevin Cruijssen !

n=>{var s="  ^\n / ";for(;n-->0;s+="\\\n| | |\n \\ ");return s+"/\n  v";}

Cobalah online!

Seperti biasa, pengulangan string dalam C # itu menyebalkan.



@icrieverytim Ahhh, tentu saja, itu jauh lebih baik.
Ian H.

Anda dapat mengubah --n>=0ke n-->0dan s+="/\n v";return s;untuk return s+"/\n v";menyimpan beberapa byte.
Kevin Cruijssen

1
@KevinCruijssen Terima kasih, sudah diperbaiki!
Ian H.

3

Retina , 38 byte

.+
$*
1
¶|||¶x\\
^
 ^¶x/\
.$
/¶ v
x?
 

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:

^
/\
|||
\\
|||
\/
v

menjadi:

 ^ 
 / \ 
 | | | 
 \ \ 
 | | | 
 \ / 
 v 

Itu hampir benar, kecuali untuk lekukan. The ^dan vhilang 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 mencocokkannya x. Itu berarti alih-alih memasukkan spasi di depan x, xitu sendiri akan diganti. Dan kemudian masih akan ada pertandingan kosong tepat setelah x. Itu artinya setiapxmenambahkan tepat satu ruang tanpa mengubah apa pun. Jadi yang ingin kita atur adalah ini:

 ^
x/\
|||
x\\
|||
x\/
 v

yang akan memberi kita hasil yang diinginkan. Jadi, inilah kodenya:

.+
$*

Konversikan input ke unary.

1
¶|||¶x\\

Konversikan masing 1- masing menjadi dua baris dengan |||dan x\\(dan linefeed terkemuka).

^
 ^¶x/\

Ulangi dua baris pertama dengan ^dan x/\.

.$
/¶ v

Perbaiki final x\\dengan mengubah yang terakhir \menjadi /dan menambahkan baris dengan v.

x?
 

Ganti setiap xkecocokan atau kosongkan dengan spasi.


Pendekatan yang rapi. Saya mencoba mencari cara untuk menggunakan join-on-spasi untuk solusi Pip saya, tetapi tidak cukup berhasil karena perbedaan jumlah ruang terdepan pada baris yang berbeda.
DLosc


2

Pyth, 40 byte

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v

Cukup mirip dengan milik Steven Hewitt, tetapi dikembangkan secara mandiri.

Cobalah secara Online

Penjelasan

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v
K" / \ ""                                 Set K = " / \ "
        "  ^"                       "  v  Draw the end points.
             K                    _K      Draw the slants.
                         *Q]*3"| "        Draw the vertical bars...
              j+b+*2+d\\b                 ... interspersed with slants.


2

Retina , 45 byte

Ini adalah solusi yang cukup sederhana.

.+
$*
^1
  ^¶ /x
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

Cobalah online

Jika karya seni bisa diindeks 1 sebagai gantinya, itu akan menjadi sedikit lebih pendek (44 byte):

.+
  ^¶ /x$0$*1
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

2

Pip , 45 42 33 byte

"  ^
 / "."\
| | |
 \ "Xa."/
  v"

Cobalah online!

Penjelasan

Kode ini sangat sederhana, meskipun baris baru membuatnya lebih sulit untuk dibaca. Berikut cara yang lebih baik untuk melihat struktur:

"prefix" . "repeated" X a . "suffix"

Elemen berulang dalam rantai-S adalah

   \
| | |
 \

Ambil ini sebagai string literal dan ulangi akali (di mana aargumen baris perintah pertama). Kemudian tambahkan awalan:

  ^
 /

dan tambahkan sufiks:

   /
  v

dan cetak.

(Saya suka bagaimana ini akhirnya tampak seperti program> <>.)


Ini terlihat seperti Putri Luar Angkasa Kental dari Adventure Time :)
YSC



1

Excel, 60 byte

="  ^
 / \
"&REPT("| | |
 \ \
",A1-1)&"| | |
 \ /
  v"

Anda harus mempertimbangkan memeriksa untuk melihat apakah ini polyglot dengan Google Sheets
Taylor Scott

1

PowerShell , 83 , 57 byte

"  ^
 / \"
1..--$args[0]|%{"| | |
 \ \"}
"| | |
 \ /
  v"

Cobalah online!

Saran Per @ AdmBorkBork,

  • Disederhanakan fordengan menggunakan rentang angka.
  • Diganti ;dan string gabungan.
  • Menghapus definisi variabel yang tidak perlu.

Anda dapat formelakukan banyak golf dengan menggunakan 1..--$args[0]|%{ }.
AdmBorkBork

Anda juga dapat menggunakan baris baru literal antara string yang berdekatan untuk menghemat ";"dan lebih murah untuk menghilangkan $sseluruhnya. 57 byte
AdmBorkBork

Licin. Saya suka save baris baru. Lucu bahwa saya melewatkan 1..$argskesempatan. 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?
root

Mengedit perubahan dan memberi kredit adalah etiket yang tepat. Selamat datang di PPCG.
AdmBorkBork


1

Jelly , 32 byte

Membosankan port solusi Python Lynn .

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”

Cobalah online!

Penjelasan:

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”    Example input: 5
“\¶| | |¶ \ ”                       Literal string "\¶| | |¶ \ " (¶ = newline). Result: "\¶| | |¶ \ "
             ẋ                      Repeat as many times as the (implicit) input. Result: "\¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
              ṭ                     Tack that on the end of...
               “  ^¶ / ”            ...the string "  ^¶ / ". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
                        ;           Append...
                         “/¶  v”    The string "/¶  v". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ /¶  v"
                                    Implicit print

1

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!

"\|||\"*" ^ /"+"/ v"@+#' j5@╪i

Tidak melakukanolf

            Implicit input.
"\|||\"*    Add the middle portion and multiply that by the input.
" ^ /"+     Append the top.
"/ v"@+     Append the bottom.
#           Convert into a list of strings
' j         Join with spaces.
5@╪         Split into a list of length-5 strings.
i           Flatten list onto the stack for implicit printing with newlines.

Pekerjaan bagus mengalahkan Mego dalam bahasanya sendiri!
caird coinheringaahing

1

Jelly , 25 23 byte

Ini 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.

“\|||\”ẋ“ ^ /“/ v”jKs5Y

Tidak melakukanolf

                Left argument: n
“\|||\”ẋ        Repeat the middle portion n times.
“ ^ /“/ v”j     Append the top and bottom.
K               Join with spaces.
s5              Split into a list of length-5 strings.
Y               Print the strings with linefeeds.

“\|||\”ẋ“ ^ /“/ v”jKs5Y
Erik the Outgolfer

1

Arang , 25 byte

↘^\¶/¶G→⁵↓⊕⊗N←⁵|¶ \↗¶\¶v/

Cobalah online! Tautan adalah untuk mengucapkan versi kode.


Lucu bagaimana jawaban Arang lainnya adalah byte-count yang sama dengan menggunakan pendekatan yang sama sekali berbeda. Aku lebih suka milikmu. Yang lain dekat dengan hard-coded, tetapi milik Anda sebenarnya menggunakan kekuatan Charcoal.
Kevin Cruijssen

@KevinCruijssen Anda mengatakan kekuatan, tetapi itu harus benar-benar dicetak secara diagonal; sayangnya yang terbaik yang bisa saya lakukan di sana adalah 29 byte:↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
Neil


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.