Jalan (Mudah) ke Kode

30

Memasukkan:

  • Integer , yang dijamin sebagai .n3
  • Integer , yang merupakan salah satu .d[1,0,1]

Keluaran:

Jalan dengan ukuran , yang akan berada di arah barat laut jika ; arah utara jika ; atau arah timur laut jika . Jalan akan selalu menjadi tiga ruang lebar (atau lima secara umum jika kita akan memasukkan batas luar). Selain itu, akan ada garis pemisah jalan di bagian bawah, dan setelah itu bergantian saat naik ke atas.nd=-1d=0d=1

Beberapa contoh:

Input: Output:n=7,d=1

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

Input: Output:n=4,d=-1

\   \
 \ \ \
  \   \
   \ \ \

Aturan tantangan:

  • Jumlah ruang depan / belakang dan / atau baris baru dapat diterima, asalkan mencetak jalan yang diperlukan di suatu tempat di layar.
  • Alih-alih opsi Anda juga diperbolehkan menggunakan opsi atau . Anda juga dapat memilih mana dari tiga opsi peta yang mana dari tiga arah. (Pastikan menyebutkan opsi mana yang Anda gunakan jika berbeda dari untuk masing - masing yang digunakan dalam deskripsi tantangan ini!)[-1,0,1][0,1,2][1,2,3][-1,0,1][north-west, north, north-east]
  • Format output yang masuk akal dapat diterima. Yang paling umum tentu saja untuk mencetaknya ke STDOUT, tetapi mengembalikannya sebagai string atau daftar karakter 2D juga baik-baik saja.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
  • Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.

Kasus uji:

Dua contoh di atas, dan:

Input: Output:n=10,d=0

|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
Kevin Cruijssen
sumber
3
Judul alternatif: "Mad Max Code Warrior"
akozi
1
Bukankah contoh pertama salah? Ini memiliki strip tengah pada setiap garis ganjil daripada setiap garis genap
moonheart08
2
@ moonheart08 Tidak. Yang bawah akan selalu memiliki garis pemisah jalan, apakah inputnya ganjil atau genap. Setelah itu bergantian saat naik ke atas. Saya telah memodifikasi teks sedikit agar mudah-mudahan membuatnya lebih jelas.
Kevin Cruijssen
Oh, jadi saya salah. Baik. Terima kasih telah mengklarifikasi.
moonheart08

Jawaban:

2

Kanvas , 23 22 byte

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

Coba di sini!

Menggunakan input arah 0, 1 dan 2.

Penjelasan:

...‟    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
dzaima
sumber
Maukah Anda menambahkan penjelasan? :)
Kevin Cruijssen
1
@KevinCruijssen menambahkan.
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

Cobalah online!

Dibutuhkan [1,0,-1]untuk[north-west, north, north-east]

-1 byte, terima kasih kepada Neil

TFeld
sumber
3
Astaga, apa yang tidak akan saya berikan untuk memotong seperti Python di Kotlin
Adam
i%2*c or' 'menghemat satu 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

Cobalah online!

Penggunaan d=-1untuk NE, d=0untuk N, dan d=1untuk NW. Mengambil keuntungan dari ruang utama diizinkan. Aturan bahwa bagian bawah jalan memiliki pemisah membuatnya sulit untuk mendapatkan paritas yang tepat; itu dicapai dengan mengiris (s*n)[n:]mengambil paruh kedua dari 2npergantian antara ruang dan karakter jalan.

Tidak
sumber
6

1. Python 3.5, 122 120 byte

Script mengambil dua params: 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)

keluaran:

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

Penjelasan

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

sunting: -2 byte terima kasih kepada Kevin Cruijssen

Ren
sumber
3
Jawaban bagus! :) Dua hal kecil untuk golf: n-1-ibisa n+~i( tip relevan ) dan j%2==0bisa j%2<1. Jika Anda belum melihatnya, Tips untuk bermain golf dengan Python dan Tips untuk bermain golf di <semua bahasa> mungkin menarik untuk dibaca.
Kevin Cruijssen
1
Terima kasih :) Saya n+~ibelum pernah melihat ini , tetapi terlihat sangat membantu. Juga terima kasih atas sorotan kode.
Rene
Sama-sama! Nikmati masa tinggal Anda dan bermain golf banyak jawaban. :) Oh, dan selamat menikmati akhir pekan.
Kevin Cruijssen
j%2*" "or cmenyimpan beberapa byte lagi.
Neil
5

PowerShell , 88 82 80 74 71 byte

-8 bytes berkat Mazzy
-6 bytes berkat AdmBorkBork dan Mazzy
-3 bytes berkat AdmBorkBork

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

Cobalah online!

Menggunakan [0,1,2] untuk NW, NE, N. Menggunakan dsebagai indeks daftar dua kali untuk pertama kali mendapatkan metode penspasian (Drops dari daftar saat menggunakan 2 yang mengembalikan 0) dan kemudian karakter yang digunakan ketika menggambar garis. Tambahkan daftar ke string ruang (yang secara bawaan memiliki ruang antara anggota ketika ditambahkan seperti itu) yang membangun jalan. Juga bertukar antara jalur terbuka atau tanda hubung berdasarkan modulo matematika.

Veskah
sumber
1
80 byte jika menggunakan [0,1,2] untuk [NW, NE, N]
mazzy
1
@ Mazzy Smart. Saya benar-benar lupa tentang sengaja jatuh dari daftar.
Veskah
1
Ide luar biasa dengan array.toString dari AdmBorkBork! Terima kasih. 74 byte
mazzy
3
71 byte dengan mengindeks bagian tengah ke dalam string daripada array.
AdmBorkBork
5

Arang , 33 29 23 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sekarang semua bug Arang yang mendasarinya sepertinya sudah diperbaiki, saya dapat mengiklankan kode yang optimal. Penjelasan:

↶N

Putar arah kursor berlawanan arah jarum jam sesuai dengan input pertama, sehingga 1 menjadi timur laut, 2 utara dan 3 barat laut.

Nη

Masukkan panjang jalan.

⊘⊕ηUE¹¦¹

Cetak setengah panjang jalan dan kemudian rentangkan memberikan pemisah jalan.

F⟦²±²⟧«Jι⁰η

Cetak sisi jalan.

@KevinCruijssen kemudian mengirimkan versi yang lebih sulit dari pertanyaan ini yang sejak dihapus tetapi pengguna dengan cukup rep dapat melihatnya di sini: Jalan (Keras) ke Kode Trik peregangan yang saya gunakan dalam jawaban ini tidak berlaku untuk pertanyaan itu, jadi alih-alih saya menulis program 47 45 byte berikut:

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

F³«

Loop di sisi dan pemisah.

J×ι⊘⊕θ⁰

Lompat ke awal sisi.

≔…⟦¹ ⟧⊕﹪ι²ι

Buat array yang berisi a 1dan spasi, tetapi hapus spasi lagi jika kita menggambar sisi daripada pemisah.

Fη«

Lewati setiap bagian jalan.

↶§κ⁰

Putar sesuai arah kursor.

F⊖§κ¹

Lewati satu kurang dari panjang bagian jalan ...

§ιⅉ

... dan cetak elemen bolak-balik array. Pergantian dicapai dengan pengindeksan siklik ke dalam array dengan koordinat Y dari kursor.

P§ιⅉ

Cetak baris terakhir dari bagian jalan ini, tetapi tanpa memindahkan kursor ...

... sehingga kursor dapat dipindahkan siap untuk bagian selanjutnya sebagai gantinya.

↷§κ⁰

Putar kembali posisi kursor ke bagian selanjutnya.

Neil
sumber
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")}}

Terima [0, 1, 2] alih-alih [-1, 0, 1]

Ini berfungsi mirip dengan solusi dalam bahasa lain, tetapi sayangnya Kotlin tidak benar-benar bersinar dalam bahasa ini.

val c=“\\|/“; mengambil char untuk digunakan dalam pembangunan jalan dengan mengambil keuntungan dari fakta bahwa Kotlin memperlakukan String seperti Array of chars (sebagaimana mestinya, melihat Anda Jawa)

Cobalah online!

Adam
sumber
Hai, selamat datang di PPCG! Ada masalah kecil dalam output Anda. Garis pengubah di tengah jalan harus dimulai dengan garis di bagian bawah untuk input genap, bukan di bagian atas. Anda dapat membandingkan hasil Anda 4dengan contoh saya 4untuk melihat perbedaan yang saya maksud. Saya tidak begitu mengenal Kotlin, tetapi saya pikir Anda dapat menyelesaikannya (dan golf 4 byte pada saat yang sama) dengan mengubahnya [(it+1)%2]menjadi [it%2]. :) Selain itu, ini jawaban yang bagus, jadi +1 dari saya.
Kevin Cruijssen
Luar biasa, terima kasih banyak atas sambutan & bantuannya! Saya akan mengubahnya
Adam
4

Kode TSQL, 171 117 byte

Saya menyadari ini bisa ditulis lebih pendek sebagai kode.

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

Permintaan 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

Master USE tidak diperlukan, jika database Anda sudah menjadi master. Namun beberapa pengguna memiliki database default yang berbeda.

Skrip saat mencobanya sedikit berbeda. Saya harus mengganti ruang ascii-32 dengan ascii-160, spasi tidak ditampilkan.

Cobalah

Membuat beberapa penyesuaian dan menyadari bahwa saya bisa menggantikannya

pesan sebelum 1/0

dengan

dipesan oleh @

t-clausen.dk
sumber
2
Kenapa order by 1/0tidak menyebabkan kesenjangan dengan kesalahan nol?
HoneyBadger
karena 1/0 tidak sedang dihitung. di mana ada (pilih 1/0) akan memiliki efek yang sama
t-clausen.dk
Pindah pertanyaan saya ke StackOverflow
HoneyBadger
3

JavaScript (ES8),  90 87  85 byte

(direction)(length)012

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

Cobalah online!


JavaScript (ES6), 90 byte

Yang ini menggambar karakter keluaran dengan karakter dengan lebih banyak matematika daripada .padStart()metode.

(direction)(length)123

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)

Cobalah online!

Arnauld
sumber
3

Jelly ,  31  30 byte

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

Tautan diad yang menerima panjang di kiri dan arah-dinegasikan * di sebelah kanan yang menghasilkan array karakter 2d.
*[north-west, north, north-east]=[1, 0, -1]

Cobalah online! (footer memanggil Link, bergabung dengan karakter baris baru dan mencetak hasilnya)

Bagaimana?

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

Cobalah online!

Dua baris pertama diambil dari @TFeld.

Henry T
sumber
1
Halo, selamat datang di PPCG! Saya khawatir pengiriman harus berupa parameter pengambilan fungsi, atau program lengkap yang mengambil argumen atau masukan dari STDIN. Cuplikan seperti yang Anda gunakan saat ini tidak diizinkan. Anda bisa menambahkan yang memimpin D,N=input()(dan menggunakan Python 2 bukannya 3) untuk memperbaikinya. Atau Anda bisa mengubahnya ke fungsi lambda dengan mengambil dua parameter ini.
Kevin Cruijssen
1
Solusi bagus Mendapatkannya ke 122 menggunakan " ".join(..)agak berlari.format
akozi
1
i%2*c or' 'menghemat beberapa byte lagi, meskipun saya perhatikan bahwa separator salah untuk jalan panjang yang aneh.
Neil
2

Python 2 , 93 byte

n,d=input();p=''
while n:g='|/\\'[d];n-=1;print['',' '*n,p][d]+g+' %s '%(g,' ')[n%2]+g;p+=' '

Cobalah online!

ovs
sumber
Mengubah +' %s '+untuk ,'%s',menyimpan 2 byte
TFeld
@TFeld Dalam hal ini Anda mungkin juga menghapus '%s'%sepenuhnya.
Neil
2

J , 64 byte

' \|/'{~(_2&|*[:i.[*1 _1{~3=])|."_1((5+[){."1(5,~[)|.@$]*#:@689)

Cobalah online!

  • 1 Barat Laut
  • 2 Utara
  • 3 Timur Laut

Akan mencoba golf nanti

Galen Ivanov
sumber
1

Merah , 157 byte

func[s d][p: pick"\|/"d set[a b]reduce pick[[4 1]0[5 + s -1]]d 
repeat n s[print pad/left form reduce pick[[p" "p][p p p]]odd?(n + pick[1 0]odd? s)a: a + b]]

Cobalah online!

  • 1 Barat Laut
  • 2 Utara
  • 3 Timur Laut
Galen Ivanov
sumber
1

Swift 4.2 , 112 108 byte

-4 byte, terima kasih kepada 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] bukannya [-1,0,1].

Cobalah online!

Penjelasan

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

Menentukan tanda jalan yang akan digunakan. (Aku yakin ini bisa disingkat entah bagaimana)

(0..<n).map{

Berputar-putar di sepanjang jalan.

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

Menambahkan spasi di depan jalan.

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

Menambahkan tanda tengah ke setiap baris lainnya.

Pertama saya ☝️, saya senang dengan saran optimasi apa pun. Belajar sebagian besar dari utas itu: Tips untuk bermain golf di Swift .

papa
sumber
1
Selamat datang di situs ini! Sepertinya Anda lupa menghapus spasi di antara indan " "dalam kode Anda meskipun Anda telah menghapusnya dalam contoh Anda.
Wheat Wizard
1
Saya tidak tahu cepat tetapi sepertinya interpolasi Anda di ujung string ( \(c)dalam kedua kasus). Anda akan menghemat byte hanya dengan menggabungkannya cke string. Cobalah online!
Wheat Wizard
1
Terima kasih, kamu benar! menyelamatkan kami 3 byte 🚀
palme
1

Perl 6 , 66 byte

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

Cobalah online!

Mengembalikan daftar garis.

Penjelasan

->\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
nwellnhof
sumber
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}

Cobalah online!

UPDATE: Terima kasih, Kevin, untuk menunjukkan bahwa kiriman asli saya kehilangan ruang antara tepi jalan dan spidol (yaitu, jalan 3-lebar, bukan 5-lebar.) Yang mengatakan, mungkin ada perbaikan yang lebih pendek untuk itu daripada c+' '+...+' '+c.

Informasi arah: -1, 0, 1peta ke{ north-west, north, north-east }

Argumen: ini membaca argumen baris perintah seperti 4 -1(jalan empat baris, miring ke barat laut).

Catatan tambahan: Ini diuji secara lokal dengan Ruby v2.6.1, dan tampaknya Try It Online menggunakan Ruby v2.5.3. Saya tidak punya alasan untuk berpikir itu tidak akan berfungsi dengan semua versi Ruby lainnya.

Spencer D
sumber
Halo, selamat datang di PPCG! Arah dan mengubah jalan benar dalam output Anda, dilakukan dengan sangat baik. Hanya ada satu kesalahan kecil dalam output saat ini: jalan harus lebar tiga ruang, bukan 1. Saat ini jalan Anda |||atau |<sp>|, tetapi harus |<sp>|<sp>|atau |<sp><sp><sp>|(di mana <sp>ada ruang). Saya tidak tahu Ruby, tetapi sepertinya Anda dapat menyelesaikannya dengan mengubah c+[' ',c][i%2]+cke c+' '+[' ',c][i%2]+' '+c. :)
Kevin Cruijssen
Ah tangkapan yang bagus! Terima kasih telah menunjukkannya, @KevinCruijssen.
Spencer D
1

Java (JDK) , 116 byte

d->n->{for(int c="\\|/".charAt(d),i=n;i-->0;)System.out.printf("%"+(d<1?n-i:d>1?i+1:1)+"c%2c %c%n",c,i%2<1?c:32,c);}

Cobalah online!

Diambil dsebagai salah satu dari 0, 1atau 2.

Olivier Grégoire
sumber
108 bytes Mengambil input -1 untuk barat laut, 1 untuk utara-timur, dan 0 untuk utara.
Perwujudan Ketidaktahuan
1

Japt -R , 40 byte

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

Cobalah online!

Penjelasan:

Æ=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
Oliver
sumber
Tampaknya ada kesalahan kecil dalam output. Saat ini pemisah jalan untuk input genap dimulai di bagian atas, bukan bagian bawah. Semuanya terlihat ok, jadi saya harap ini tidak terlalu sulit untuk diperbaiki.
Kevin Cruijssen
@KevinCruijssen Ah, terima kasih sudah menangkapnya. Sebelum saya memperbarui jawaban saya, dapatkah Anda mengonfirmasi bahwa solusi ini baik-baik saja?
Oliver
Yap, itu terlihat sepenuhnya benar. :)
Kevin Cruijssen
1
@KevinCruijssen Menambahkan penjelasan karena saya tahu Anda menyukai mereka: P
Oliver
Terima kasih, dihargai. :) Saya memang selalu ingin memiliki penjelasan untuk bahasa golf. Terkadang saya sudah kesulitan memahami jawaban JavaScript, apalagi bahasa golf JS. ;)
Kevin Cruijssen
1

Stax , 23 byte

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

Jalankan dan debug itu

Input adalah dua bilangan bulat yang dipisahkan oleh spasi.
Yang pertama adalah d. -1 menentukan timur laut. 0 untuk utara. 1 untuk barat laut. Parameter kedua adalah n. Kedua nilai ini akan diuraikan secara implisit dari input dan ditempatkan pada tumpukan input dengan ndi atas. Selain itu dakan dapat diakses dari register stax xkarena ini adalah nilai yang diuraikan secara implisit pertama.

Misalnya, masukan "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

Jalankan yang ini

rekursif
sumber
Maukah Anda menambahkan penjelasan? :)
Kevin Cruijssen
1
@KevinCruijssen: Tidak sama sekali.
Rekursif
0

perl -M5.010 -Mfeature = tanda tangan, 97 byte

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

sumber