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,

caird coinheringaahing
sumber
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!

kata ganti saya adalah monicareinstate
sumber
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

Python 3 , 48  56 59 61  byte

lambda k:'  ^\n / %s/\n  v'%('\\\n| | |\n \ '*k)

Cobalah online!

Tuan Xcoder
sumber
Anda dapat menyimpan 2 byte dengan melepaskan ls backslash yang hilang.
L3viathan
@ L3viathan Baru saja memperbarui juga
Tn. Xcoder
56 byte; tidak yakin apakah ini permainan yang adil ; tidak bekerja pada TIO
L3viathan
@ L3viathan Itu tidak benar. Ekstra \ \.
Tn. Xcoder
Di TIO: ya. Di terminal saya: tidak.
L3viathan
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
Emigna
sumber
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"
Produksi ETH
sumber
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
dzaima
sumber
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

Justin Mariner
sumber
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

benar-benar manusiawi
sumber
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
25 byte
ASCII
@ Khusus ASCII: P -
totallyhuman
4

Perl 5 , 39 37 byte

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

Cobalah online!

Dicukur dua byte dengan saran @DomHastings

Xcali
sumber
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
Mego
sumber
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
Riley
sumber
3

C (gcc) , 82 byte

f(n){for(puts("  ^\n / \\");--n;puts("| | |\n \\ \\"));puts("| | |\n \\ /\n  v");}

Cobalah online!

Cleblanc
sumber
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.

Ian H.
sumber
77 byte
totallyhuman
@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.

Martin Ender
sumber
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, 46 byte

"  ^
 / \\"
+*j[jd*\|3" \ \\"k))Q" \ /
  v

Suite uji.

Steven H.
sumber
36 byte:%" ^\n / %s/\n v"*Q"\\\n| | |\n \
Mr. Xcoder
31 byte .
Tn. Xcoder
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.

sumber
2

Pyth, 33 32 31 byte

Terima kasih Pak Xcoder untuk satu byte.

%"  ^
 / %s/
  v"*tj\|_B" \\
| 

Cobalah online: Demonstrasi atau Test Suite

Jakube
sumber
Jawaban yang sangat bagus! Anda dapat menurunkannya hingga 32 byte .
Tn. Xcoder
2
31 byte , sebenarnya.
Tn. Xcoder
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
 \¶| | |¶
mbomb007
sumber
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> <>.)

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

MATL , 47 44 43 byte

-3 byte terima kasih kepada Giuseppe

'  ^' ' / \ 'XK'| | |'XJGq:"' \'thJ]KP'  v'

Cobalah online!

Cinaski
sumber
' ^' ' / \ 'XK'| | |'XJ`' \ \'JGq@-]KP' v'adalah 44 byte.
Giuseppe
1

Excel, 60 byte

="  ^
 / \
"&REPT("| | |
 \ \
",A1-1)&"| | |
 \ /
  v"
Wernisch
sumber
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.
akar
sumber
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
Kamerad SparklePony
sumber
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.
Sherlock9
sumber
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.
Sherlock9
sumber
“\|||\”ẋ“ ^ /“/ v”jKs5Y
Erik the Outgolfer
1

Arang , 25 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode.

Neil
sumber
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
1

bash, 67 byte

printf -v a %\*s $1 \ ;echo '  ^
 / '"${a// /\\
| | |
 \\ }"'/
  v'

Cobalah online

Nahuel Fouilleul
sumber
0

Java 8, 93 76 byte

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

Port @IanH. Jawaban C # .NET setelah saya memutarnya sedikit lebih.

Coba di sini.

Kevin Cruijssen
sumber
Ini lucu bagaimana ini hampir persis sama mengharapkan untuk stringvs varbagian.
Ian H.
@IanH. Dan yang n->vs n=>;)
Kevin Cruijssen