Con đường (dễ dàng) đến mã


30

Đầu vào:

  • Một số nguyên n , được đảm bảo là .3
  • Một số nguyên , là một trong .d[-1,0,1]

Đầu ra:

Đường có kích thước , sẽ theo hướng tây bắc nếu ; một hướng bắc nếu ; hoặc hướng đông bắc nếu . Con đường sẽ luôn rộng ba không gian (hoặc nói chung là năm nếu chúng ta bao gồm các đường viền bên ngoài). Ngoài ra, sẽ có một vạch phân cách đường ở phần dưới cùng, và sau đó xen kẽ trong khi đi lên.nd= =-1d= =0d= =1

Vài ví dụ:

Đầu vào: n= =7,d= =1
Đầu ra:

      / / /
     /   /
    / / /
   /   /
  / / /
 /   /
/ / /

Đầu vào: n= =4,d= =-1 Đầu ra:

\   \
 \ \ \
  \   \
   \ \ \

Quy tắc thử thách:

  • Bất kỳ số lượng không gian hàng đầu / dấu và / hoặc dòng mới đều được chấp nhận, miễn là nó in đường cần thiết ở đâu đó trên màn hình.
  • Thay vì các tùy chọn bạn cũng được phép sử dụng các tùy chọn hoặc thay thế. Ngoài ra, bạn có thể chọn bản đồ nào trong ba tùy chọn trên bản đồ trong ba hướng. (Hãy chắc chắn để đề cập đến tùy chọn mà bạn đã sử dụng nếu nó khác với cho tương ứng được sử dụng trong mô tả thách thức này!)[-1,0,1][0,1,2][1,2,3][1,0,1][north-west, north, north-east]
  • Bất kỳ định dạng đầu ra hợp lý đều được chấp nhận. Tất nhiên, phổ biến nhất là in nó sang STDOUT, nhưng trả lại nó dưới dạng danh sách chuỗi hoặc ký tự 2D cũng tốt.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
  • Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.

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

Hai ví dụ trên và:

Đầu vào: Đầu ra:n=10,d=0

|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |

3
Tiêu đề thay thế: "Mad Max Code Warrior"
akozi

1
Không phải là ví dụ đầu tiên không chính xác? Nó có một dải ở giữa trên mỗi dòng lẻ thay vì mỗi dòng chẵn
moonheart08

2
@ moonheart08 Không. Cái dưới cùng sẽ luôn có vạch phân cách đường, cho dù đầu vào là số lẻ hay số chẵn. Sau đó, nó xen kẽ trong khi đi lên. Tôi đã sửa đổi văn bản một chút để hy vọng làm cho nó rõ ràng hơn.
Kevin Cruijssen

Ồ, vậy là tôi sai rồi. Ổn thỏa. Cảm ơn đã làm rõ.
moonheart08

Câu trả lời:


2

Canvas , 23 22 byte

B}⁴H‟m↶⁷?/|∙/╋]\|∙\╋]}

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

Sử dụng các hướng đầu vào 0, 1 và 2.

Giải trình:

...‟    push "--¶¶- ¶¶--"
    m   mold the horizontal length to the 1st input - a horizontal road
     ↶  rotate counter-clockwise - so the separator is on the bottom
        also replaces the dashes with bars

⁷?     ]     ]}  switch over the 2nd input:
                 default case (input 2):
  /                pad with spaces to a "/" diagonal
   |∙/╋            replace "|" with "/"
                 case 0:
        \          pad with spaces to a "\" diagonal
         |∙\╋      replace "|" with ""

case 1 is empty, but because of a bug, the trailing "}" is still required

Bạn có phiền thêm một lời giải thích? :)
Kevin Cruijssen

1
@KevinCruijssen đã thêm.
dzaima

16

Python 2 , 79 78 73 72 byte

n,d=input()
c='|\/'[d]
i=n
while i:print' '*(n-i*d)+c,i%2*c or' ',c;i-=1

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

Đưa [1,0,-1]cho[north-west, north, north-east]

-1 byte, nhờ Neil


3
Trời ạ, những gì tôi sẽ không cung cấp cho việc cắt lát giống như Python trong Kotlin
Adam

i%2*c or' 'tiết kiệm một byte.
Neil

7

Python 2 , 66 byte

n,d=input()
s=' '+'|\/'[d]
for c in(s*n)[n:]:print' '*n+s,c+s;n+=d

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

Sử dụng d=-1cho NE, d=0cho N và d=1cho NW. Tận dụng lợi thế của không gian hàng đầu được cho phép. Quy tắc rằng đoạn dưới cùng của đường có dải phân cách khiến cho nó trở nên khó khăn để có được sự tương đương; nó đạt được bằng cách cắt lát (s*n)[n:]lấy nửa sau của sự 2nxen kẽ giữa không gian và nhân vật đường.


6

1. Python 3.5, 122 120 byte

Script có hai tham số: n, d.

d: 0, 1, 2 -> \ | /

tio.run

import sys;(n,d)=[*map(int,sys.argv[1:3])];c="\\|/"[d]
for i in range(n):j=n+~i;print(" "*(i,0,j)[d],c,c*(j%2<1)or" ",c)

đầu ra:

$ ./script.py 6 2
      /   /
     / / /
    /   /
   / / /
  /   /
 / / /
$ ./script.py 6 1
 |   |
 | | |
 |   |
 | | |
 |   |
 | | |
$ ./script.py 6 0
 \   \
  \ \ \
   \   \
    \ \ \
     \   \
      \ \ \

Giải trình

# parse input params
(n,d)=[*map(int,sys.argv[1:3])]

# select char for "road"
c="\\|/"[d]

# loop n-times
for i in range(n):

    # complement (how many lines to end)
    j=n+~i

    # print
    #   space i or 0 or j times
    #   road, center of road if j is even else space, road
    print(" "*(i,0,j)[d], c, c*(j%2<1) or " ", c)

chỉnh sửa: -2 byte nhờ Kevin Cruijssen


3
Câu trả lời tốt đẹp! :) Hai điều nhỏ để chơi golf: n-1-icó thể n+~i( mẹo liên quan ) và j%2==0có thể j%2<1. Nếu bạn chưa nhìn thấy chúng, Mẹo chơi gôn bằng PythonMẹo chơi gôn bằng <tất cả các ngôn ngữ> có thể rất thú vị để đọc qua.
Kevin Cruijssen

1
Cảm ơn bạn :) Tôi n+~ichưa thấy điều này , nhưng có vẻ hữu ích. Cũng cảm ơn cho mã nổi bật.
Rene

Không có gì! Tận hưởng kỳ nghỉ của bạn và chơi golf nhiều câu trả lời. :) Oh, và có một ngày cuối tuần tốt đẹp.
Kevin Cruijssen

j%2*" "or clưu một vài byte khác
Neil

5

PowerShell , 88 82 80 74 71 byte

-8 byte nhờ Mazzy
-6 byte nhờ vào admBorkBork và Mazzy
-3 byte nhờ vào admBorkBork

param($n,$d)$n..1|%{' '*($_,($n-$_))[$d]+($y='/\|'[$d])," $y"[$_%2],$y}

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

Sử dụng [0,1,2] cho NW, NE, N. Sử dụng dlàm chỉ mục danh sách hai lần để lần đầu tiên nhận được phương thức giãn cách (Loại bỏ danh sách khi sử dụng 2 trả về 0) và sau đó sử dụng ký tự nào khi vẽ các dòng. Nối một danh sách vào chuỗi khoảng trắng (trong đó có các khoảng trắng giữa các thành viên khi được thêm vào như vậy) sẽ tạo đường. Cũng hoán đổi giữa một làn đường mở hoặc một dấu gạch ngang dựa trên toán học modulo.


1
80 byte nếu sử dụng [0,1,2] cho [NW, NE, N]
mazzy

1
@mazzy Thông minh. Tôi hoàn toàn quên mất việc cố tình rơi ra một danh sách.
Veskah

1
Ý tưởng tuyệt vời với mảng.toString từ admBorkBork! Cảm ơn. 74 byte
mazzy

3
71 byte bằng cách lập chỉ mục phần giữa thành một chuỗi chứ không phải là một mảng.
admBorkBork


5

Than , 33 29 23 byte

↷NNη⊘⊕ηUE¹¦¹F⟦²±²⟧«Jι⁰η

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Bây giờ tất cả các lỗi Char than cơ bản dường như đã được sửa chữa, tôi có thể quảng cáo mã tối ưu. Giải trình:

↶N

Xoay hướng con trỏ ngược chiều kim đồng hồ theo đầu vào đầu tiên, sao cho 1 trở thành hướng đông bắc, 2 hướng bắc và 3 hướng tây bắc.

Nη

Nhập chiều dài của đường.

⊘⊕ηUE¹¦¹

In một nửa chiều dài của đường và sau đó kéo dài nó để phân cách đường.

F⟦²±²⟧«Jι⁰η

In hai bên đường.

@KevinCruijssen sau đó đã gửi một phiên bản khó hơn của câu hỏi này đã bị xóa nhưng người dùng có đủ đại diện có thể thấy nó ở đây: Đường (Mã cứng) Thủ thuật kéo dài tôi sử dụng trong câu trả lời này không áp dụng cho câu hỏi đó, vì vậy thay vào đó tôi đã viết chương trình 47 45 byte sau đây :

F³«J×ι⊘⊕θ⁰≔…⟦¹ ⟧⊕﹪ι²ιFη«↶§κ⁰F⊖§κ¹§ιⅉP§ιⅉ↑↷§κ⁰

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

F³«

Vòng qua các bên và dải phân cách.

J×ι⊘⊕θ⁰

Nhảy đến đầu của bên.

≔…⟦¹ ⟧⊕﹪ι²ι

Tạo một mảng chứa a 1và một khoảng trắng, nhưng xóa lại khoảng trắng nếu chúng ta vẽ các cạnh thay vì dấu phân cách.

Fη«

Vòng qua từng đoạn đường.

↶§κ⁰

Xoay hướng con trỏ tương ứng.

F⊖§κ¹

Vòng lặp trên một ít hơn chiều dài của đoạn đường ...

§ιⅉ

... và in các phần tử xen kẽ của mảng. Sự xen kẽ đạt được bằng cách lập chỉ mục theo chu kỳ vào mảng với tọa độ Y của con trỏ.

P§ιⅉ

In hàng cuối cùng của đoạn đường này, nhưng không di chuyển con trỏ ...

... để con trỏ có thể được di chuyển lên sẵn sàng cho phần tiếp theo thay thế.

↷§κ⁰

Xoay hướng con trỏ trở lại sẵn sàng cho phần tiếp theo.


4

Kotlin , 96 92 byte

{n,d->val c="\\|/"[d];(0..n-1).map{println(" ".repeat(n-it*(d-1))+ "$c ${" $c"[it%2]} $c")}}

Chấp nhận [0, 1, 2] thay vì [-1, 0, 1]

Nó hoạt động tương tự như các giải pháp trong các ngôn ngữ khác, nhưng thật không may, Kotlin không thực sự tỏa sáng trong ngôn ngữ này.

val c=“\\|/“; lấy char để sử dụng trong xây dựng đường bằng cách tận dụng thực tế là Kotlin đối xử với String giống như một mảng ký tự (như thường lệ, nhìn vào Java của bạn)

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


Xin chào, chào mừng đến với PPCG! Có một vấn đề nhỏ trong đầu ra của bạn. Các đường thay đổi ở trung tâm của con đường nên bắt đầu bằng một đường ở phía dưới cho các đầu vào chẵn, thay vì ở đầu. Bạn có thể so sánh kết quả đầu ra của bạn 4với ví dụ của tôi 4để thấy sự khác biệt mà tôi muốn nói. Tôi không biết rõ về Kotlin, nhưng tôi nghĩ bạn có thể giải quyết nó (và chơi golf 4 byte cùng một lúc) bằng cách thay đổi [(it+1)%2]thành [it%2]. :) Ngoài ra đó là một câu trả lời hay, vì vậy +1 từ tôi.
Kevin Cruijssen

Tuyệt vời, cảm ơn rất nhiều vì sự chào đón và giúp đỡ! Tôi sẽ thay đổi nó
Adam

4

Mã TSQL, 171 117 byte

Tôi nhận ra điều này có thể được viết ngắn hơn nhiều như mã.

DECLARE @n INT=7,@d INT=0

,@ INT=0a:PRINT
space(@n-@*@d)+stuff(replicate(substring('\|/',@d+2,1)+' ',3),3,@%2,space(@%2))SET
@+=1IF @n>@ GOTO a

Truy vấn TSQL, 137 byte

USE master
DECLARE @n INT=6,@ INT=-1

SELECT space(@n-y*@)+z+iif(y%2=1,z,'  ')+z 
FROM(SELECT top(@n)row_number()over(order
by @)y,' '+substring('\|/',@+2,1)z FROM spt_values)x

USE master là không cần thiết, nếu cơ sở dữ liệu của bạn đã thành chủ. Tuy nhiên, một số người dùng có cơ sở dữ liệu mặc định khác.

Script khi dùng thử thì hơi khác. Tôi đã phải thay thế không gian ascii-32 bằng ascii-160, các không gian không được hiển thị.

Dùng thử

Thực hiện một số điều chỉnh và nhận ra rằng tôi có thể thay thế

đặt hàng trước 1/0

với

đặt bởi @


2
Tại sao order by 1/0không gây ra sự phân chia bởi lỗi không?
HoneyBadger

bởi vì 1/0 không được tính toán. nơi tồn tại (chọn 1/0) sẽ có tác dụng tương tự
t-clausen.dk

Đã chuyển câu hỏi của tôi sang StackOverflow
HoneyBadger

3

JavaScript (ES8),  90 87  85 byte

Đưa đầu vào là (direction)(length). Mong đợi0 cho Tây Bắc, 1 cho Bắc hoặc 2 cho Đông Bắc.

d=>g=(n,w=n)=>n?(c='/|\\'[d]).padStart([n--,,w-n][d])+` ${n&1?' ':c} ${c}
`+g(n,w):''

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


JavaScript (ES6), 90 byte

Cái này vẽ ký tự đầu ra theo ký tự với một ít toán hơn thay vì .padStart()phương thức.

Đưa đầu vào là (direction)(length). Mong đợi1 cho Tây Bắc, 2 cho Bắc hoặc 3 cho Đông Bắc.

d=>n=>(g=x=>y?` /|\\
`[x+5?17+y%2*4>>--x+5-[,n+1-y,n,y][d]&1&&d:(x=n,y--,4)]+g(x):'')(y=n)

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


3

Thạch ,  31  30 byte

⁶ẋẋƤḂ};€ị“\/|”ẋ3KƊ}Ṛ⁹¡⁶-2¦€ÐeṚ

Liên kết dyadic chấp nhận độ dài ở bên trái và hướng phủ định * ở bên phải, tạo ra một mảng 2d ký tự.
*[north-west, north, north-east]=[1, 0, -1]

Hãy thử trực tuyến! (chân trang gọi Liên kết, tham gia với các ký tự dòng mới và in kết quả)

Làm sao?

⁶ẋẋƤḂ};€ị“\/|”ẋ3KƊ}Ṛ⁹¡⁶-2¦€ÐeṚ - Link: integer, L; integer, D
⁶                              - space character
 ẋ                             - repeat L times
     }                         - using the right argument (D):
    Ḃ                          -   mod 2 (0 if D = 0, 1 otherwise ...A would work too)
   Ƥ                           - for each prefix (of the list of spaces):
  ẋ                            -   repeat (D mod 2 times)
                  }            - using the right argument (D):
                 Ɗ             -   last three links as a monad:
        ị“\/|”                 -     index into "\/|" (1-indexed & modular)
              ẋ3               -     repeat three times - e.g. "\\\"
                K              -     join with spaces          "\ \ \"
      ;€                       - concatenate €ach (altered prefix with that list)
                     ¡         - repeat action...
                    ⁹          - ...number of times: right argument (-1 repeats 0 times)
                   Ṛ           - ...action: reverse (i.e. reverse if north-west)
                           Ðe  - for even indexes:
                         ¦€    -   sparse application for €ach...
                       -2      -   ...to indices: [-2] (the middle of the road)
                      ⁶        -   ...action: a space character
                             Ṛ - reverse

2

Python 2, 127 byte

n,d=input()
c='|/\\'[d]
for i in range(n):t=0if d==0else(i if d<0else n-i);print(' '*t+'{} {} {}'.format(c,' 'if i%2==0else c,c))

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

Hai dòng đầu tiên được lấy từ @TFeld.


1
Xin chào, chào mừng đến với PPCG! Tôi e rằng các bài nộp sẽ phải là một hàm lấy tham số hoặc là một chương trình đầy đủ lấy các đối số hoặc đầu vào từ STDIN. Đoạn trích như bạn đang sử dụng ngay bây giờ không cho phép tôi sợ. Bạn có thể thêm một hàng đầu D,N=input()(và sử dụng Python 2 thay vì 3) để sửa lỗi này. Hoặc bạn có thể thay đổi nó thành hàm lambda lấy hai tham số này.
Kevin Cruijssen

1
Giải pháp tốt đẹp. Có được nó đến 122 bằng cách sử dụng " ".join(..)khá chạy.format
akozi

1
i%2*c or' 'tiết kiệm thêm một vài byte, mặc dù tôi đã nhận thấy rằng dải phân cách sai cho các đường có chiều dài lẻ.
Neil






1

Swift 4.2 , 112 108 byte

-4 byte nhờ Sriotchilism O'Z cổ

let c=["\\","|","/"][d];(0..<n).map{print((0..<n-$0*(d-1)).map{_ in" "}.joined()+c+" \($0%2==0 ?c:" ") "+c)}

[0,1,2] thay vì [-1,0,1].

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

Giải trình

let c=["\\","|","/"][d]

Xác định biển báo đường phố để sử dụng. (Tôi cá là điều này có thể rút ngắn bằng cách nào đó)

(0..<n).map{

Lặp đi lặp lại trên chiều dài của đường phố.

(0..<n-$0*(d-1)).map{_ in" "}.joined()

Thêm không gian trước đường.

\($0%2==0 ?c:" ")"

Thêm dấu hiệu ở giữa cho mỗi dòng khác.

Người đầu tiên của tôi, tôi rất vui về bất kỳ lời khuyên tối ưu hóa nào. Học được chủ yếu từ chủ đề đó: Mẹo chơi golf trong Swift .


1
Chào mừng đến với trang web! Có vẻ như bạn đã quên xóa khoảng trắng ở giữa in" "trong mã của mình mặc dù bạn đã xóa nó trong các ví dụ của mình.
Phù thủy lúa mì

1
Tôi không biết nhanh chóng nhưng có vẻ như nội suy của bạn ở đầu chuỗi ( \(c)trong cả hai trường hợp). Bạn sẽ lưu byte bằng cách nối cchuỗi. Hãy thử trực tuyến!
Phù thủy lúa mì

1
Cảm ơn, bạn đã đúng! cứu chúng ta 3 byte 🚀
Palme

1

Perl 6 , 66 byte

->\n,\d{{(' 'x--$ *d%-+^n~(' ',<\ | />[d+1])[1,(n+$++)%2,1])xx n}}

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

Trả về một danh sách các dòng.

Giải trình

->\n,\d{                                                         }  # Block taking n, d
        {                                                       }   # Reset $ variables
         (                                                 )xx n    # Repeat n times
          ' 'x  # Space times
              --$ *d  # (-1,-2,-3,...) if d=1
                      # (0,0,0,...) if d=0
                      # (1,2,3,...) if d=-1
                    %-+^n  # modulo -~n = n+1
                         ~  # Concat
                          (' ',<\ | />[d+1])  # Space or line
                                            [1,(n+$++)%2,1]  # Alternate middle char

1

Ruby , 90 byte

n,a=*$*.map{|i|-i.to_i}
c='|\/'[a]
n.upto(-1){|i|puts' '*(i*a-n)+c+' '+[' ',c][i%2]+' '+c}

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

CẬP NHẬT: Cảm ơn bạn, Kevin, vì đã chỉ ra rằng bài dự thi ban đầu của tôi bị thiếu khoảng cách giữa các cạnh đường và điểm đánh dấu (nghĩa là đường 3 chiều thay vì 5 chiều.) Điều đó có thể có cách khắc phục ngắn hơn c+' '+...+' '+c .

Thông tin định hướng: -1, 0, 1bản đồ đến{ north-west, north, north-east }

Đối số: phần này đọc các đối số dòng lệnh, chẳng hạn như 4 -1(một con đường bốn hàng, nghiêng về phía tây bắc).

Lưu ý thêm: Điều này đã được thử nghiệm cục bộ với Ruby v2.6.1 và có vẻ như Try It Online sử dụng Ruby v2.5.3. Tôi không có lý do để nghĩ rằng nó sẽ không hoạt động với tất cả các phiên bản Ruby khác.


Xin chào, chào mừng đến với PPCG! Các hướng và đường thay đổi là chính xác trong đầu ra của bạn, vì vậy cũng được thực hiện. Có chỉ là một lỗi nhỏ trong sản lượng hiện nay: đường nên ba không gian rộng thay vì 1. Hiện nay con đường của bạn là |||hay |<sp>|, nhưng nó phải là |<sp>|<sp>|hoặc |<sp><sp><sp>|(nơi <sp>là một không gian). Tôi không biết Ruby, nhưng có vẻ như bạn có thể giải quyết nó bằng cách thay đổi c+[' ',c][i%2]+cthành c+' '+[' ',c][i%2]+' '+c. :)
Kevin Cruijssen

Ah bắt tốt! Cảm ơn bạn đã chỉ ra rằng, @KevinCruijssen.
Spencer D


1

Japt -R , 40 byte

Æ=Vg"|\\/";²i1S+iX%2?S:U)iSp[TZÊ-YY]gVÃw

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

Giải trình:

Æ=Vg"|\\/";²i1S+iX%2?S:U)iSp[TZÊ-YY]gVÃw
                                            // U = road size
                                            // V = direction
Æ                                     Ã     // Loop X through [0...U]
 =        ;                                 //   Set U to:
    "|\\/"                                  //       "|\/"
  Vg                                        //            [V]
           ²                                //  Double U
            i1          )                   //  Insert at index 1:
              S+                            //    " " +
                 X%2?S:U                    //         X%2?" ":U
                i                           //                  + " "
                         i                  //  Insert at index 0:
                          Sp                //    " " repeated this many times:
                            [TZÊ-YY]        //      [0,U.length - X,X]
                                    gV      //                        [V]
                                        w   // Reverse output

Dường như có một lỗi nhỏ trong đầu ra. Hiện tại dải phân cách cho các đầu vào chẵn bắt đầu ở phía trên thay vì phía dưới. Mọi thứ khác đều ổn, vì vậy tôi hy vọng nó không quá khó để sửa chữa.
Kevin Cruijssen

@KevinCruijssen Ah, cảm ơn vì đã nắm bắt được điều đó. Trước khi tôi cập nhật câu trả lời của mình, bạn có thể xác nhận rằng giải pháp này là ổn không?
Oliver

Đúng, điều đó có vẻ hoàn toàn chính xác. :)
Kevin Cruijssen

1
@KevinCruijssen Đã thêm một lời giải thích vì tôi biết bạn thích những điều đó: P
Oliver

Cảm ơn, đánh giá cao. :) Tôi thực sự luôn muốn có lời giải thích cho các ngôn ngữ golf. Đôi khi tôi đã gặp khó khăn trong việc hiểu các câu trả lời JavaScript, chứ chưa nói đến ngôn ngữ được đánh gôn của JS. ;)
Kevin Cruijssen

1

Stax , 23 byte

ù╒←∩♂2Ωⁿ¡├∩22♀Ç○=÷â╧δÖ↑

Chạy và gỡ lỗi nó

Đầu vào là hai số nguyên cách nhau bởi một khoảng trắng.
Đầu tiên là d. -1 chỉ định hướng đông bắc. 0 cho phía bắc. 1 cho tây bắc. Tham số thứ hai là n. Hai giá trị này sẽ được phân tích cú pháp ngầm từ đầu vào và được đặt trên ngăn xếp đầu vào với ntrên đầu. Ngoài ra dsẽ có thể truy cập được từ thanh ghi của stax xvì đây là giá trị được phân tích cú pháp ngầm đầu tiên.

Ví dụ: nhập "1 7"

            Main stack      Explanation
            ----------      -----------
;           [7]             peek from input stack
m                           map over integers [1..n] using the rest of the program
                            output each produced value implicitly
  ;         [1 7]           peek from input stack
  +         [8]             add
  .*"       [8 [42 34]]     2 character string literal with codepoints 42 and 34
  @         [42]            get the element at the specified modular index (8)
  0         [42 0]          literal zero
  "|\/"x@   [42 0 92]       get codepoint from string literal at input d (from x register)
  \         [42 [0 92]]     make pair
  :B        ['\ \ \ ']      encode in custom base; it's binary with custom codepoints
  _x*       ['\ \ \ ' 1]    (loop variable) * (input d)
  ;^        ['\ \ \ ' 1 8]  peek from input stack and increment
  %         ['\ \ \ ' 1]    modulus
  6+        ['\ \ \ ' 7]    add 6
  )         [' \ \ \ ']     left-pad to length

Chạy cái này


Bạn có phiền thêm một lời giải thích? :)
Kevin Cruijssen

1
@KevinCruijssen: Không hề.
đệ quy

0

perl -M5.010 -Mfeature = chữ ký, 97 byte

sub f($n,$d){$x=qw[| / \\][$d];say" "x($d<1?$_*-$d:$n-$_),$x,$",($n-$_)%2?$":$x,$",$x for 1..$n;}
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.