ถนน (ง่าย) ถึงรหัส


30

การป้อนข้อมูล:

  • จำนวนเต็มซึ่งรับประกันได้ว่าจะ\n3
  • จำนวนเต็มซึ่งเป็นหนึ่งใน[-1,0,1]d[1,0,1]

เอาท์พุท:

ถนนขนาดซึ่งอยู่ในทิศตะวันตกเฉียงเหนือถ้า ; ทิศเหนือถ้า ; หรือทิศทางที่ภาคตะวันออกเฉียงเหนือถ้า 1 ถนนจะกว้างสามช่องเสมอ (หรือห้าทั่วไปถ้าเรารวมเส้นขอบด้านนอกด้วย) นอกจากนี้จะมีเส้นคั่นถนนที่ส่วนล่างและหลังจากนั้นจะสลับกันในขณะขึ้นไปnd=1d=0d=1

ตัวอย่างบางส่วน:

อินพุต: เอาท์พุท:n=7,d=1

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

อินพุต: เอาต์พุต:n=4,d=1

\   \
 \ \ \
  \   \
   \ \ \

กฏท้าทาย:

  • จำนวนช่องว่างนำหน้า / ต่อท้ายและ / หรือบรรทัดใหม่ใด ๆ เป็นที่ยอมรับได้ตราบใดที่พิมพ์ถนนที่ต้องการบนหน้าจอ
  • แทนตัวเลือกคุณจะได้รับอนุญาตให้ใช้ตัวเลือกหรือแทน นอกจากนี้คุณสามารถเลือกตัวเลือกใดตัวเลือกหนึ่งจากสามตัวเลือกที่จะจับคู่กับสามทิศทาง (ให้แน่ใจว่าจะพูดถึงตัวเลือกที่คุณเคยใช้ถ้ามันแตกต่างจากสำหรับตามลำดับที่ใช้ในการอธิบายความท้าทายนี้!)[1,0,1][0,1,2][1,2,3][1,0,1][north-west, north, north-east]
  • รูปแบบผลลัพธ์ที่เหมาะสมใด ๆ เป็นที่ยอมรับ โดยทั่วไปแล้วแน่นอนว่าจะพิมพ์ไปที่ STDOUT แต่การส่งคืนเป็นสตริงหรือรายการอักขระ 2D ก็ใช้ได้เช่นกัน

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

ตัวอย่างสองตัวอย่างข้างต้นและ:

อินพุต: เอาต์พุต:n=10,d=0

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

3
หัวข้อทางเลือก: "Mad Max Code Warrior"
akozi

1
ตัวอย่างแรกไม่ถูกต้องใช่ไหม มันมีแถบกลางบนเส้นคี่ทุกเส้นแทนที่จะเป็นทุกเส้นคู่
moonheart08

2
@ moonheart08 ไม่บรรทัดล่างสุดจะมีเส้นคั่นถนนเสมอไม่ว่าจะเป็นอินพุตหรือคี่ หลังจากนั้นก็สลับกันในขณะที่ขึ้นไปด้านบน ฉันได้แก้ไขข้อความเล็กน้อยเพื่อหวังให้ชัดเจนยิ่งขึ้น
Kevin Cruijssen

โอ้ฉันผิด Alright ขอบคุณสำหรับการชี้แจง
moonheart08

คำตอบ:


2

Canvasขนาด23 22 ไบต์

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

ลองที่นี่!

ใช้ทิศทางเข้าเป็น 0, 1 และ 2

คำอธิบาย:

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

คุณจะช่วยเพิ่มคำอธิบายได้ไหม? :)
Kevin Cruijssen

1
@KevinCruijssen ได้เพิ่ม
dzaima

16

Python 2 , 79 78 73 72 ไบต์

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

ลองออนไลน์!

ใช้[1,0,-1]สำหรับ[north-west, north, north-east]

-1 ไบต์ขอบคุณนีล


3
Jeez สิ่งที่ฉันจะไม่ให้สำหรับการแบ่งแบบ Python ใน Kotlin
Adam

i%2*c or' 'บันทึกเป็นไบต์
Neil

7

Python 2 , 66 ไบต์

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

ลองออนไลน์!

ใช้d=-1สำหรับ NE d=0สำหรับ N และd=1สำหรับ NW ใช้ประโยชน์จากช่องว่างนำที่ได้รับอนุญาต กฎที่ว่าส่วนล่างของถนนมีตัวคั่นทำให้มันยากที่จะได้สิทธิ์ที่เท่าเทียมกัน มันทำได้โดยการแบ่ง(s*n)[n:]ส่วนในช่วงครึ่งหลังของ2nทางเลือกระหว่างช่องว่างและตัวละครบนท้องถนน


6

1. Python 3.5, 122 120 bytes

สคริปต์ใช้สองพารามิเตอร์: 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)

เอาท์พุท:

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

คำอธิบาย

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

แก้ไข: -2 ไบต์ขอบคุณ Kevin Cruijssen


3
คำตอบที่ดี! :) สองสิ่งเล็ก ๆ ที่จะกอล์ฟ: n-1-iสามารถn+~i( เคล็ดลับที่เกี่ยวข้อง ) และสามารถj%2==0 j%2<1หากคุณยังไม่ได้เห็นเคล็ดลับสำหรับการเล่นกอล์ฟใน Pythonและเคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา>อาจเป็นที่น่าสนใจในการอ่าน
Kevin Cruijssen

1
ขอบคุณ :) ฉันยังไม่เห็นสิ่งนี้n+~iแต่ดูมีประโยชน์ ขอขอบคุณสำหรับการเน้นโค้ด
Rene

ยินดีต้อนรับคุณ! สนุกกับการพักผ่อนและเล่นกอล์ฟกับคำตอบมากมาย :) โอ้และมีวันหยุดสุดสัปดาห์ที่ดี
Kevin Cruijssen

j%2*" "or cบันทึกอีกสองสามไบต์
Neil

5

PowerShell , 88 82 80 74 71 ไบต์

ขอบคุณ -8 ไบต์สำหรับ Mazzy
-6 ไบต์ขอบคุณ AdmBorkBork และ Mazzy
-3 ไบต์ขอบคุณ AdmBorkBork

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

ลองออนไลน์!

ใช้ [0,1,2] สำหรับ NW, NE, N ใช้dเป็นดัชนีรายการสองครั้งแรกเพื่อรับวิธีการเว้นวรรค (ลดรายการเมื่อใช้ 2 ซึ่งส่งกลับ 0) แล้วตัวละครที่จะใช้เมื่อวาดเส้น ต่อท้ายรายการไปยังสตริงของช่องว่าง (ซึ่งมีช่องว่างระหว่างสมาชิกเมื่อต่อท้ายด้วยเช่นนี้) ซึ่งสร้างถนน สลับระหว่างเลนเปิดหรือเส้นประด้วยคณิตศาสตร์โมดูโล


1
80 ไบต์หากใช้ [0,1,2] สำหรับ [NW, NE, N]
mazzy

1
@mazzy Smart ฉันลืมเกี่ยวกับการตกลงมาอย่างตั้งใจ
Veskah

1
แนวคิดที่ยอดเยี่ยมพร้อม array.toString จาก AdmBorkBork! ขอบคุณ 74 bytes
mazzy

3
71 ไบต์โดยการทำดัชนีส่วนตรงกลางเป็นสตริงแทนที่จะเป็นอาร์เรย์
AdmBorkBork


5

Charcoal , 33 29 23 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ตอนนี้ข้อผิดพลาด Charcoal พื้นฐานทั้งหมดดูเหมือนจะได้รับการแก้ไขแล้วฉันสามารถโฆษณารหัสที่เหมาะสม คำอธิบาย:

↶N

หมุนทิศทางเคอร์เซอร์ทวนเข็มนาฬิกาตามอินพุตแรกดังนั้น 1 จะเปลี่ยนเป็นทิศตะวันออกเฉียงเหนือ 2 ทิศเหนือและ 3 ทิศตะวันตกเฉียงเหนือ

Nη

ป้อนความยาวของถนน

⊘⊕ηUE¹¦¹

พิมพ์ความยาวครึ่งหนึ่งของถนนแล้วยืดให้แยกถนน

F⟦²±²⟧«Jι⁰η

พิมพ์ด้านข้างของถนน

@KevinCruijssen ต่อมาส่งคำถามที่ยากขึ้นซึ่งถูกลบ แต่ผู้ใช้ที่มีตัวแทนมากพอสามารถดูได้ที่นี่: ถนน (ยาก) ถึงรหัสเคล็ดลับการยืดที่ฉันใช้ในคำตอบนี้ไม่สามารถใช้ได้กับคำถามนั้นดังนั้นแทนที่จะเป็นฉัน เขียนโปรแกรม47 45-byte ต่อไปนี้:

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

F³«

วนรอบด้านข้างและตัวคั่น

J×ι⊘⊕θ⁰

ข้ามไปที่จุดเริ่มต้นของด้านข้าง

≔…⟦¹ ⟧⊕﹪ι²ι

สร้างอาร์เรย์ที่มี a 1และช่องว่าง แต่ลบช่องว่างอีกครั้งถ้าเราวาดข้างแทนที่จะเป็นตัวคั่น

Fη«

วนซ้ำไปตามแต่ละส่วนของถนน

↶§κ⁰

หมุนทิศทางเคอร์เซอร์ตามนั้น

F⊖§κ¹

วนซ้ำน้อยกว่าความยาวของส่วนถนน ...

§ιⅉ

... และพิมพ์องค์ประกอบสลับของอาร์เรย์ การสลับสามารถทำได้โดยการทำดัชนีแบบวนขึ้นในอาร์เรย์ด้วยพิกัด Y ของเคอร์เซอร์

P§ιⅉ

พิมพ์แถวสุดท้ายของส่วนถนนนี้ แต่ไม่ต้องเลื่อนเคอร์เซอร์ ...

... เพื่อให้เคอร์เซอร์สามารถเลื่อนขึ้นพร้อมสำหรับหัวข้อถัดไปแทน

↷§κ⁰

หมุนทิศทางเคอร์เซอร์ไปด้านหลังพร้อมสำหรับหัวข้อถัดไป


4

Kotlin , 96 92 ไบต์

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

ยอมรับ [0, 1, 2] แทน [-1, 0, 1]

มันทำงานคล้ายกับโซลูชั่นในภาษาอื่น ๆ แต่น่าเสียดายที่ Kotlin ไม่ได้ส่องแสงในที่นี้

val c=“\\|/“; ดึงข้อมูล char เพื่อใช้ในการสร้างถนนโดยการใช้ประโยชน์จากข้อเท็จจริงที่ Kotlin ปฏิบัติกับ Strings เหมือน Array of chars (เท่าที่ควรดู Java ของคุณ)

ลองออนไลน์!


สวัสดียินดีต้อนรับสู่ PPCG! มีปัญหาเล็กน้อยในผลลัพธ์ของคุณ เส้นที่เปลี่ยนแปลงในจุดกึ่งกลางของถนนควรเริ่มต้นด้วยบรรทัดที่ด้านล่างเพื่อป้อนค่าแบบคู่แทนที่จะเป็นที่ด้านบน คุณสามารถเปรียบเทียบผลลัพธ์ของคุณ4กับตัวอย่างของฉัน4เพื่อดูความแตกต่างที่ฉันหมายถึง ผมไม่ทราบว่า Kotlin ที่ดี แต่ผมคิดว่าคุณสามารถแก้ได้ (และกอล์ฟ 4 ไบต์ในเวลาเดียวกัน) โดยการเปลี่ยนไป[(it+1)%2] [it%2]:) นอกจากนั้นมันเป็นคำตอบที่ดีดังนั้น +1 จากฉัน
Kevin Cruijssen

เยี่ยมมากขอบคุณมากสำหรับการต้อนรับและช่วยเหลือ! ฉันจะเปลี่ยนมัน
อดัม

4

รหัส TSQL, 171 117 ไบต์

ฉันรู้ว่านี่อาจเขียนได้สั้นกว่ามาก

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

ข้อความค้นหา TSQL ขนาด 137 ไบต์

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ไม่จำเป็นถ้าฐานข้อมูลของคุณเป็น master อยู่แล้ว ผู้ใช้บางคนมีฐานข้อมูลเริ่มต้นที่แตกต่างกัน

สคริปต์เมื่อทดลองใช้จะแตกต่างกันเล็กน้อย ฉันต้องแทนที่ space ascii-32 ด้วย ascii-160 ช่องว่างไม่แสดง

ลองดู

ทำการปรับแต่งและตระหนักว่าฉันสามารถแทนที่

สั่งซื้อโดย 1/0

กับ

สั่งโดย @


2
ทำไมorder by 1/0จึงไม่ทำให้เกิดการหารด้วยศูนย์ข้อผิดพลาด?
HoneyBadger

because 1/0 is not being calculated. where exists(select 1/0) will have the same effect
t-clausen.dk

Moved my question to StackOverflow
HoneyBadger

3

JavaScript (ES8),  90 87  85 bytes

Takes input as (direction)(length). Expects 0 for North-West, 1 for North or 2 for North-East.

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

Try it online!


JavaScript (ES6), 90 bytes

This one draws the output character by character with a little more maths instead of the .padStart() method.

Takes input as (direction)(length). Expects 1 for North-West, 2 for North or 3 for North-East.

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)

Try it online!


3

Jelly,  31  30 bytes

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

A dyadic Link accepting the length on the left and the negated-direction* on the right which yields a 2d array of characters.
* [north-west, north, north-east]=[1, 0, -1]

Try it online! (footer calls the Link, joins with newline characters and prints the result)

How?

⁶ẋẋƤḂ};€ị“\/|”ẋ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 bytes

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))

Try it online!

First two lines taken from @TFeld.


1
Hi there, welcome to PPCG! I'm afraid submissions will have to be either a function taking parameters, or a full program taking arguments or input from STDIN. Snippets like you're using right now aren't allowed I'm afraid. You could add a leading D,N=input() (and use Python 2 instead of 3) to fix this. Or you could change it to a lambda function taking these two parameters.
Kevin Cruijssen

1
Nice solution. Got it to 122 using " ".join(..) rather ran .format
akozi

1
i%2*c or' ' saves a few more bytes, although I did notice that the separator is wrong for odd length roads.
Neil






1

Swift 4.2, 112 108 bytes

-4 bytes thanks to Sriotchilism O'Zaic

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

[0,1,2] instead of [-1,0,1].

Try it online!

Explanation

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

Determines the street sign to use. (I bet this can be shortened somehow)

(0..<n).map{

Iterates over the length of the street.

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

Adds the spaces in front of the street.

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

Adds the middle sign to every other line.

My very first one ☝️, I'm happy about any optimization advices. Learned mostly from that thread: Tips for golfing in Swift.


1
Welcome to the site! It seems like you forgot to remove the space in between in and " " in your code even though you have removed it in your examples.
Wheat Wizard

1
I don't know swift but it looks like for your interpolations on the ends of the strings (\(c) in both cases). You would save bytes by just concatenating the c to the string. Try it online!
Wheat Wizard

1
Thanks, you are right! saved us 3 bytes 🚀
palme

1

Perl 6, 66 bytes

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

Try it online!

Returns a list of lines.

Explanation

->\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 bytes

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

Try it online!

UPDATE: Thank you, Kevin, for pointing out that my original submission was missing spaces between the road edges and markers (i.e., 3-width roads instead of 5-width.) That said, there might be a shorter fix for that than c+' '+...+' '+c.

Directional information: -1, 0, 1 maps to { north-west, north, north-east }

Arguments: this reads command-line arguments such as 4 -1 (a four row road, slanted to the north-west).

Additional note: This was tested locally with Ruby v2.6.1, and it appears that Try It Online uses Ruby v2.5.3. I have no reason to think it would not work with all other Ruby versions.


Hi there, welcome to PPCG! The directions and altering roads are correct in your output, so well done. There is just one minor error in the current output: the road should be three spaces wide instead of 1. Currently your road is ||| or |<sp>|, but it should be |<sp>|<sp>| or |<sp><sp><sp>| (where <sp> is a space). I don't know Ruby, but It seems you can solve it by changing c+[' ',c][i%2]+c to c+' '+[' ',c][i%2]+' '+c. :)
Kevin Cruijssen

Ah good catch! Thanks for pointing that out, @KevinCruijssen.
Spencer D


1

Japt -R, 40 bytes

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

Try it online!

Explanation:

Æ=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

There seems to be a minor mistake in the output. Currently the road separator for even inputs starts at the top instead of the bottom. Everything else looks ok, so I hope it's not too hard of a fix.
Kevin Cruijssen

@KevinCruijssen Ah, thanks for catching that. Before I update my answer, can you confirm that this solution is okay?
Oliver

Yep, that looks completely correct. :)
Kevin Cruijssen

1
@KevinCruijssen Added an explanation since I know you like those :P
Oliver

Thanks, appreciated. :) I indeed always like to have explanation for golfing languages. I sometimes already have trouble understanding the JavaScript answers, let alone the golfed language of JS. ;)
Kevin Cruijssen

1

Stax, 23 bytes

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

Run and debug it

Input is two integers separated by a space.
The first is d. -1 specifies north-east. 0 for north. 1 for north-west. The second parameter is n. These two values will get implicitly parsed from input and placed on the input stack with n on top. Additionally d will be accessible from the stax's x register since it's the first implicitly parsed value.

For example, input "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

Run this one


Would you mind adding an explanation? :)
Kevin Cruijssen

1
@KevinCruijssen: Not at all.
recursive

0

perl -M5.010 -Mfeature=signatures, 97 bytes

sub f($n,$d){$x=qw[| / \\][$d];say" "x($d<1?$_*-$d:$n-$_),$x,$",($n-$_)%2?$":$x,$",$x for 1..$n;}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.