Vẽ chuỗi S


27

Lý lịch

Khi tôi còn trẻ, tôi được dạy một phương pháp vẽ hình chữ "S" kỳ lạ, mà tôi (cùng với các bạn cùng lớp) thấy hấp dẫn. Hôm nay, tôi đã khám phá lại nó, và do cách tiếp cận công thức của nó để vẽ nó, nghĩ rằng nó có thể dẫn đến một thách thức thú vị: P

Vẽ chữ "S"

Chữ S có thể được rút ra bằng cách làm theo các bước đơn giản sau:

Đầu tiên, vẽ 2 hàng ba hàng dọc như vậy

| | |

| | |

Tiếp theo, kết nối dòng trên cùng bên trái với dòng giữa dưới và giữa trên cùng với dòng dưới cùng bên phải để sản xuất

| | |
 \ \
| | |

Cuối cùng, vẽ một đỉnh và đáy trên hình ảnh đang vẽ để nó trông giống như

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

Như bạn có thể thấy, điều này dẫn đến hình dạng "S". Tuy nhiên, khi được mở rộng (vẽ nó với hơn 2 hàng), nó tạo ra một mô hình rất thú vị. Nhiệm vụ của bạn là tái tạo mô hình thú vị này.

Bài tập

Cho một số nguyên trong đó n >= 2, đầu ra S với ncác hàng được tạo từ nó. Đầu ra có thể được trả về từ một hàm và đầu vào có thể được lấy theo các phương thức tiêu chuẩn. Trailing / khoảng trắng hàng đầu cho cả hình ảnh tổng thể, cũng như từng dòng, là tốt. Tuy nhiên, không gian dòng hàng đầu phải nhất quán để "không bị hỏng. Bạn có thể xuất dưới dạng danh sách các dòng.

Các trường hợp thử nghiệm

input
output
---

2

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

---

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

---

10

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

Đây là một để mã ngắn nhất chiến thắng! Chúc may mắn,


13
Wikipedia gọi Smát S , và kêu gọi một phiên bản vô hạn của mộtS Chain
Stephen

Chúng ta có thể xuất ra như một danh sách các dòng không?
Ông Xcoder

@ Mr.Xcoder bạn có thể
caird coinheringaahing

@Stephen 10 phút googling và điều này đã không đi lên. Tôi sẽ chỉnh sửa tên của câu hỏi
caird coinheringaahing

@cairdcoinheringaahing Tôi đã tìm kiếm hình ảnh, đó có thể là nó: P
Stephen

Câu trả lời:



10

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

Hai byte ít hơn và xuất hiện giống như perl nhờ Barodus. Bạn không nghĩ đến việc sử dụng int? cho null

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

Hãy thử trực tuyến!


1
Nếu đây là một câu trả lời của câu trả lời C # hiện có, tôi sẽ không bao giờ có thể nói được.
Hoàn

Bạn có thể giải thích những gì new string[n+1]không? Tôi chưa bao giờ thấy nó trước đây.
Ian H.

Tạo một chuỗi các chuỗi trống AFAIK. Tôi đã sử dụng hack với chuỗi.Join, còn gọi là tham gia {"", "", "", ""} với dấu phân cách "\ \ n | | | \ n \"
đại từ của tôi là monicareinstate

@someone Woah, tôi chưa bao giờ thừa nhận thủ thuật này trước đây. Thật tuyệt! (Cũng là xấu của tôi, tôi mặc dù đó new string[n+1]là một loại hàm tạo chuỗi phức tạp và không phải là khai báo mảng -.-)
Ian H.

6

Python 3 , 48  56 59 61  byte

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

Hãy thử trực tuyến!


Bạn có thể lưu 2 byte bằng cách bỏ ẩn các dấu gạch chéo đơn.
L3viathan

@ L3viathan Chỉ cần cập nhật quá
Ông Xcoder


@ L3viathan Điều đó không đúng. Thêm \ \.
Ông Xcoder

Trên TIO: có. Trong thiết bị đầu cuối của tôi: không.
L3viathan

6

05AB1E , 27 26 byte

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

Hãy thử trực tuyến!

Phiên bản 27 byte thay thế

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

Hãy thử trực tuyến!

Giải trình

'^                             # 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
Mã của bạn trông hơi giống một con voi đối với tôi :)
Wojowu

Nghĩa đen là câu trả lời của tôi gần với câu trả lời của bạn như thế nào: '^…/ \©IF„| ûû„\ û}\®R'v).Ckhông cần nhìn.
Bạch tuộc ma thuật Urn

6

Japt , 34 25 23 byte

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

Kiểm tra nó trực tuyến! Đầu ra như một mảng các dòng; -Rcờ được thêm vào để tham gia vào dòng mới. (Cảm ơn @Shaggy)

Đầu tiên Thứ hai cố gắng, có thể là có thể làm tốt thêm ...

Làm thế nào nó hoạt động

" ^ /{ ç'\²  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"

Đập than và buộc SOGL? Làm tốt lắm
Xù xì

Nhân tiện, bạn có thể xuất ra một mảng các dòng, để bạn có thể bỏ 2 ký tự cuối cùng.
Xù xì

@Shaggy Thật tuyệt, giờ chúng ta đang chiến thắng!
Sản xuất ETH

Gần đây chúng tôi đã làm rất tốt :)
Shaggy

6

SOGL V0.12 , 26 25 18 byte

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

Hãy thử nó ở đây!

Sử dụng chiến lược tương tự như câu trả lời Japt của ETHproductions

Giải trình:

..‘           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 " "cái quái gì được xây dựng
Steven H.

1
@StevenHewitt đó thực sự là hai phần mềm tích hợp, nhưng tôi đã kết hợp chúng lại với nhau (như tôi làm với những thứ khác) bởi vì tôi không cần phải tách những thứ được sử dụng cùng nhau
dzaima

5

JavaScript (ES6), 60 byte

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

Kiểm tra đoạn trích


1
57: n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'(sử dụng backticks và dòng mới theo nghĩa đen)
edc65

5

Than , 27 26 25 byte

-1 byte nhờ Carlos Alejo. -1 byte chỉ nhờ ASCII.

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng. # than-verbose-obfucation


1
Bạn có thể lưu 1 byte chỉ bằng cách gọi Print (thay vì thêm chuỗi) và sử dụng \r: `^ ⸿ / × \ | | | ⸿ \ Iθ / v`. Phiên bản dài dòng .
Charlie

À ... tôi sẽ phải nhớ \rnhư là cách để có được những dòng mới theo cách lành mạnh. Cảm ơn!
hoàn toàn là


@ Chỉ ASCII: P -
hoàn toàn là


3

Trên thực tế , 49 byte

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

Hãy thử trực tuyến!

Giải trình:

"| | |"@α;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"»

Hãy thử trực tuyến!

…| |                         # 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

Đã lưu 24 byte nhờ i cri everytim !
Đã lưu 4 byte nhờ Kevin Cruijssen !

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

Hãy thử trực tuyến!

Như thường lệ, lặp lại chuỗi trong C # là một nỗi đau.



@icrieverytim Ahhh, tất nhiên, đó là cách tốt hơn.
Ian H.

Bạn có thể thay đổi --n>=0để n-->0s+="/\n v";return s;để return s+"/\n v";tiết kiệm một số byte.
Kevin Cruijssen

1
@KevinCruijssen Cảm ơn, đã sửa!
Ian H.

3

Võng mạc , 38 byte

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

Hãy thử trực tuyến!

In một cột của không gian hàng đầu và trên không gian dấu trên mỗi dòng.

Giải trình

Tiết kiệm byte chính đến từ việc bỏ các khoảng trắng trong tất cả các phần bằng chữ và chèn chúng vào cuối. Hình này có cấu trúc sao cho không bao giờ có hai khoảng trắng cạnh nhau, vì vậy nếu chúng ta loại bỏ tất cả chúng, chúng ta gần như có thể sửa hình bằng cách chèn một khoảng trắng ở mọi vị trí ở cuối:

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

trở thành:

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

Điều đó gần như đúng, ngoại trừ thụt đầu dòng. Các ^vđang thiếu hai không gian. Điều đó thực sự dễ khắc phục hơn, bởi vì nếu chúng ta chỉ cần chèn một khoảng trắng rõ ràng trước mỗi cái đó, thì điều đó sẽ dẫn đến hai khoảng trắng bổ sung ở cuối. Các dòng với dấu gạch chéo là khó khăn hơn bởi vì chúng chỉ cần một không gian bổ sung. Để khắc phục điều này, chúng tôi chèn một ký tự giữ chỗ ở đó ( x). Khi chúng tôi chèn khoảng trắng ở cuối, chúng tôi không chỉ chèn chúng cho mỗi kết quả trống, nhưng chúng tôi tùy ý khớp với khoảng đó x. Điều đó có nghĩa là thay vì chèn một khoảng trắng ở phía trước x, xchính nó sẽ được thay thế. Và sau đó vẫn sẽ có một trận đấu trống ngay sau x. Điều đó có nghĩa là, mọixthêm chính xác một không gian mà không thay đổi bất cứ điều gì khác. Vì vậy, những gì chúng tôi muốn thiết lập là đây:

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

sẽ cho chúng ta kết quả mong muốn. Vì vậy, đây là mã:

.+
$*

Chuyển đổi đầu vào thành unary.

1
¶|||¶x\\

Chuyển đổi từng 1dòng thành hai dòng với |||x\\(và một nguồn cấp dữ liệu hàng đầu).

^
 ^¶x/\

Chèn hai dòng đầu tiên với ^x/\.

.$
/¶ v

Sửa lỗi cuối cùng x\\bằng cách biến cái cuối cùng \thành /và nối thêm một dòng với v.

x?
 

Thay thế mỗi xhoặc kết hợp trống bằng một khoảng trắng.


Cách tiếp cận gọn gàng. Tôi đã cố gắng tìm ra cách sử dụng các không gian tham gia cho giải pháp Pip của mình, nhưng nó không hoạt động do số lượng không gian hàng đầu khác nhau trên các hàng khác nhau.
DLosc


2

Bình thường, 40 byte

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

Khá giống với Steven Hewitt, nhưng được phát triển độc lập.

Dùng thử trực tuyến

Giải trình

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

Võng mạc , 45 byte

Đây là một giải pháp khá đơn giản.

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

Dùng thử trực tuyến

Nếu nghệ thuật có thể được lập chỉ mục 1 thay vào đó, thì nó sẽ ngắn hơn một chút (44 byte):

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

2

Pip , 45 42 33 byte

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

Hãy thử trực tuyến!

Giải trình

Mã này thực sự đơn giản, mặc dù các dòng mới làm cho nó khó đọc hơn. Đây là một cách tốt hơn để xem cấu trúc:

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

Phần tử lặp lại trong chuỗi S là

   \
| | |
 \

Lấy điều này như một chuỗi ký tự và lặp lại alần này (trong đó alà đối số dòng lệnh đầu tiên). Sau đó, thêm tiền tố:

  ^
 /

và nối thêm hậu tố:

   /
  v

và in.

(Tôi thích cách kết thúc này trông giống như một chương trình> <>.)


Điều này trông giống như Công chúa không gian Lumpy từ thời gian phiêu lưu :)
YSC



1

Excel, 60 byte

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

Bạn nên xem xét việc kiểm tra xem đây có phải là một đa âm với Google Sheets không
Taylor Scott

1

PowerShell , 83 , 57 byte

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

Hãy thử trực tuyến!

Đề xuất của mỗi @ admBorkBork,

  • giản thể for bằng cách sử dụng một phạm vi số.
  • Đã thay thế ; các chuỗi và kết hợp.
  • Loại bỏ một định nghĩa biến không cần thiết.

Bạn có thể chơi golf forvòng lặp của bạn rất nhiều bằng cách sử dụng 1..--$args[0]|%{ }.
admBorkBork

Ngoài ra, bạn có thể sử dụng các dòng mới theo nghĩa đen giữa các chuỗi liền kề để tiết kiệm ";"và rẻ hơn để loại bỏ $shoàn toàn. 57 byte
admBorkBork

Nhếch nhác. Tôi thích lưu dòng mới. Buồn cười là tôi đã bỏ lỡ 1..$argscơ hội. Tôi không chắc chắn những gì nghi thức chính xác trên trang web này. Tôi có thay đổi câu trả lời của tôi và ghi có cho bạn không, hoặc bạn có đăng giải pháp của mình dưới dạng câu trả lời riêng không?
root

Chỉnh sửa trong các thay đổi và cung cấp tín dụng là nghi thức đúng đắn. Chào mừng đến với PPCG.
admBorkBork


1

Thạch , 32 byte

Cổng nhàm chán của giải pháp Python của Lynn .

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

Hãy thử trực tuyến!

Giải trình:

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  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

Trên thực tế , 30 byte

Điều này hoạt động theo nguyên tắc tương tự như câu trả lời Japt của ETHproductions , trong đó các khoảng trắng thừa được thêm vào sau đó và toàn bộ chuỗi được chia thành các hàng 5 để in ngầm. Hãy thử trực tuyến!

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

Ungolfing

            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.

Công việc tốt đẹp vượt trội Mego bằng ngôn ngữ của mình!
caird coinheringaahing

1

Thạch , 25 23 byte

Điều này hoạt động theo nguyên tắc tương tự như câu trả lời Japt của ETHproductions , trong đó các khoảng trắng thừa được thêm vào sau đó và toàn bộ chuỗi được chia thành các chuỗi có độ dài 5 trước khi in. Hãy thử trực tuyến!

Chỉnh sửa: Tôi biết có một cách để tham gia đầu và cuối chuỗi S theo cách chơi gôn. Nhờ Erik, Outgolfer cho -2 byte.

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

Ungolfing

                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

Than , 25 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã.


Thật buồn cười là câu trả lời Char than khác có cùng số byte bằng cách sử dụng một cách tiếp cận hoàn toàn khác. Tôi thích bạn hơn, mặc dù. Cái kia gần với mã hóa cứng, nhưng thực ra bạn đang sử dụng sức mạnh của Char than.
Kevin Cruijssen

@KevinCruijssen Bạn nói sức mạnh, nhưng đó thực sự nên được in theo đường chéo; thật đáng buồn là điều tốt nhất tôi có thể làm là 29 byte:↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
Neil


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.