(Łatwa) droga do kodu

30

Wkład:

  • Liczba całkowita n , której gwarantowanie wynosi 3 .
  • Liczbą całkowitą d , która jest jedną z [1,0,1] .

Wydajność:

Droga o rozmiarze n , która będzie w kierunku północno-zachodnim, jeżeli d=1 ; kierunek północny, jeśli d=0 ; lub w kierunku północno-wschodnim, jeżeli d=1 . Droga zawsze będzie miała trzy pola szerokości (lub ogólnie pięć, jeśli uwzględnimy granice zewnętrzne). Ponadto na dolnym odcinku będzie znajdować się linia oddzielająca drogę, a następnie naprzemiennie podczas jazdy w górę.

Kilka przykładów:

Dane wejściowe: n=7,d=1
wyjściowe:

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

Dane wejściowe: n=4,d=1 wyjściowe:

\   \
 \ \ \
  \   \
   \ \ \

Zasady konkursu:

  • Dopuszczalna jest dowolna liczba wiodących / końcowych spacji i / lub nowych linii, o ile drukuje wymaganą drogę gdzieś na ekranie.
  • Zamiast opcji [1,0,1] możesz również użyć opcji [0,1,2] lub [1,2,3] . Możesz także wybrać, która z trzech opcji mapuje na który z trzech kierunków. (Upewnij się, wspominając, które opcje już stosowane, jeżeli różni się ono od [1,0,1] o [north-west, north, north-east]! Odpowiednio, który jest używany w tym opisie prowokacji)
  • Dopuszczalny jest każdy rozsądny format wyjściowy. Najczęstszym jest oczywiście wydrukowanie go do STDOUT, ale zwracanie go jako łańcucha lub listy znaków 2D jest również w porządku.

Główne zasady:

  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach.
    Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania.
  • Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
  • Domyślne luki są zabronione.
  • Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
  • Zalecane jest również dodanie wyjaśnienia do odpowiedzi.

Przypadki testowe:

Dwa powyższe przykłady oraz:

Wejście: n=10,d=0
Wyjście:

|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
Kevin Cruijssen
źródło
3
Alternatywny tytuł: „Mad Max Code Warrior”
akozi
1
Czy pierwszy przykład nie jest nieprawidłowy? Ma środkowy pasek na każdej nieparzystej linii zamiast na każdej parzystej linii
moonheart08
2
@ moonheart08 Nie. Dolna linia zawsze będzie miała linię oddzielającą drogę, niezależnie od tego, czy dane wejściowe są nieparzyste, czy parzyste. Potem naprzemiennie przechodzi w górę. Zmodyfikowałem trochę tekst, aby, mam nadzieję, uczynić go bardziej zrozumiałym.
Kevin Cruijssen
Och, więc się mylę. W porządku. Dzięki za wytłumaczenie.
moonheart08

Odpowiedzi:

2

Płótno , 23 22 bajtów

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

Wypróbuj tutaj!

Wykorzystuje wejścia kierunkowe 0, 1 i 2.

Wyjaśnienie:

...‟    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
źródło
Czy mógłbyś dodać wyjaśnienie? :)
Kevin Cruijssen
1
Dodano @KevinCruijssen.
dzaima
16

Python 2 , 79 78 73 72 bajty

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

Wypróbuj online!

trwa [1,0,-1]do[north-west, north, north-east]

-1 bajt, dzięki Neilowi

TFeld
źródło
3
Jezu, czego nie dałbym za pokrojone w Pythona krojenie w Kotlinie
Adam
i%2*c or' 'zapisuje bajt.
Neil
7

Python 2 , 66 bajtów

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

Wypróbuj online!

Używa d=-1NE, d=0N i d=1NW. Wykorzystuje dozwolone wiodące miejsca. Zasada, że dolny odcinek drogi ma separator, utrudniała wyrównanie parzystości; osiąga się to poprzez krojenie (s*n)[n:]w drugiej połowie 2nnaprzemiennie przestrzeni i charakteru drogi.

xnor
źródło
6

1. Python 3.5, 122 120 bajtów

Skrypt ma dwa parametry: 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)

wydajność:

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

Wyjaśnienie

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

edycja: -2 bajty dzięki Kevin Cruijssen

Rene
źródło
3
Niezła odpowiedź! :) Dwie małe rzeczy do gry w golfa: n-1-imoże być n+~i( odpowiednia wskazówka ) i j%2==0może być j%2<1. Jeśli jeszcze ich nie widziałeś, zarówno Porady dotyczące gry w golfa w Pythonie, jak i Porady dotyczące gry w golfa w <wszystkich językach> mogą być interesujące.
Kevin Cruijssen
1
Dziękuję :) Jeszcze tego n+~inie widziałem , ale wygląda na pomocny. Dziękujemy również za wyróżnienie kodu.
Rene
Nie ma za co! Życzymy miłego pobytu i gry w golfa wielu odpowiedzi. :) Och, i miłego weekendu.
Kevin Cruijssen
j%2*" "or coszczędza kolejną parę bajtów.
Neil
5

PowerShell , 88 82 80 74 71 bajtów

-8 bajtów dzięki Mazzy
-6 bajtów dzięki AdmBorkBork i Mazzy
-3 bajtów dzięki AdmBorkBork

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

Wypróbuj online!

Używa [0,1,2] dla NW, NE, N. Używa ddwukrotnie jako indeksu listy, aby najpierw uzyskać metodę odstępów (usuwa listę z listy przy użyciu 2, która zwraca 0), a następnie znak, którego należy użyć podczas rysowania linii. Dołącza listę do ciągu spacji (który wewnętrznie ma spacje między elementami, gdy jest dołączany jako taki), który tworzy drogę. Również zamiana między otwartą linią lub kreską w oparciu o matematykę modulo.

Veskah
źródło
1
80 bajtów, jeśli używa [0,1,2] dla [NW, NE, N]
mazzy
1
@mazzy Smart. Zupełnie zapomniałem o celowym wypadaniu z listy.
Veskah
1
Niesamowity pomysł z array.toString od AdmBorkBork! Dzięki. 74 bajty
mazzy
3
71 bajtów przez indeksowanie środkowej części w ciągu zamiast w tablicy.
AdmBorkBork
5

Węgiel drzewny , 33 29 23 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Teraz, gdy wszystkie podstawowe błędy Charcoala wydają się naprawione, mogę reklamować optymalny kod. Wyjaśnienie:

↶N

Obróć kursor w kierunku przeciwnym do ruchu wskazówek zegara zgodnie z pierwszym wejściem, tak aby 1 zmienił się na północny wschód, 2 na północ i 3 na północny zachód.

Nη

Podaj długość drogi.

⊘⊕ηUE¹¦¹

Wydrukuj połowę drogi, a następnie rozciągnij ją, dając separator drogi.

F⟦²±²⟧«Jι⁰η

Wydrukuj boki drogi.

@KevinCruijssen przesłał następnie trudniejszą wersję tego pytania, która została usunięta, ale użytkownicy z wystarczającą liczbą przedstawicieli mogą to zobaczyć tutaj: (Trudna) droga do kodu Trik rozciągający, którego użyłem w tej odpowiedzi, nie ma zastosowania do tego pytania, więc zamiast tego napisał następujący 47 45-bajtowy program:

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

F³«

Pętla po bokach i separator.

J×ι⊘⊕θ⁰

Przejdź na początek boku.

≔…⟦¹ ⟧⊕﹪ι²ι

Stwórz tablicę zawierającą a 1i spację, ale usuń spację ponownie, jeśli rysujemy boki zamiast separatora.

Fη«

Pętlę nad każdym odcinkiem drogi.

↶§κ⁰

Obróć odpowiednio kursor.

F⊖§κ¹

Pętla jest mniejsza o jeden odcinek niż długość odcinka drogi ...

§ιⅉ

... i drukuj naprzemienne elementy tablicy. Przemianę uzyskuje się poprzez cykliczne indeksowanie do tablicy za pomocą współrzędnej Y kursora.

P§ιⅉ

Wydrukuj ostatni rząd tego odcinka drogi, ale bez przesuwania kursora ...

... aby kursor mógł zostać przesunięty w górę, gotowy do następnej sekcji.

↷§κ⁰

Obróć kierunek kursora z powrotem gotowy do następnej sekcji.

Neil
źródło
4

Kotlin , 96 92 bajtów

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

Akceptuje [0, 1, 2] zamiast [-1, 0, 1]

Działa podobnie do rozwiązań w innych językach, ale niestety Kotlin tak naprawdę nie błyszczy w tym.

val c=“\\|/“; pobiera char do wykorzystania w budowaniu dróg, wykorzystując fakt, że Kotlin traktuje struny jak tablicę znaków (tak jak powinno, patrząc na ciebie Java)

Wypróbuj online!

Adam
źródło
Cześć, witamy w PPCG! W twoich wynikach jest niewielki problem. Linie zmieniające się na środku drogi powinny zaczynać się od linii na dole dla równomiernych danych wejściowych, zamiast na górze. Możesz porównać swoje wyniki 4z moim przykładem, 4aby zobaczyć różnicę, którą mam na myśli. Nie znam tak dobrze Kotlina, ale myślę, że możesz go rozwiązać (i jednocześnie grać w 4 bajty), zmieniając [(it+1)%2]na [it%2]. :) Poza tym to fajna odpowiedź, więc +1 ode mnie.
Kevin Cruijssen
Wspaniale, wielkie dzięki za powitanie i pomoc! Zmienię to
Adam
4

Kod TSQL, 171 117 bajtów

Uświadomiłem sobie, że można to napisać znacznie krócej jako kod.

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

Zapytanie TSQL, 137 bajtów

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 nie jest konieczne, jeśli baza danych jest już masterem. Niektórzy użytkownicy mają jednak inną domyślną bazę danych.

Skrypt podczas wypróbowywania jest nieco inny. Musiałem zastąpić spację ascii-32 ascii-160, spacje nie zostały pokazane.

Wypróbuj to

Dokonałem kilku poprawek i zdałem sobie sprawę, że mogę go wymienić

zamów przez 1/0

z

Zamów przez @

t-clausen.dk
źródło
2
Dlaczego order by 1/0to nie powoduje błędu dzielenia przez zero?
HoneyBadger
ponieważ 1/0 nie jest obliczana. gdzie istnieje (wybierz 1/0) będzie miało ten sam efekt
t-clausen.dk
Przeniesiłem moje pytanie do StackOverflow
HoneyBadger
3

JavaScript (ES8),  90 87  85 bajtów

(direction)(length)012

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

Wypróbuj online!


JavaScript (ES6), 90 bajtów

Ten rysuje postać wyjściową znak po znaku z nieco większą ilością matematyki zamiast .padStart()metody.

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

Wypróbuj online!

Arnauld
źródło
3

Galaretka ,  31  30 bajtów

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

Dyadyczny link akceptujący długość po lewej stronie i negowany kierunek * po prawej stronie, który daje tablicę 2d znaków.
*[north-west, north, north-east]=[1, 0, -1]

Wypróbuj online! (stopka wywołuje łącze, łączy się ze znakami nowej linii i drukuje wynik)

W jaki sposób?

⁶ẋẋƤḂ};€ị“\/|”ẋ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
źródło
2

Python 2, 127 bajtów

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

Wypróbuj online!

Pierwsze dwie linie zaczerpnięte z @TFeld.

Henry T.
źródło
1
Cześć, witamy w PPCG! Obawiam się, że zgłoszenia będą musiały być albo funkcją pobierającą parametry, albo pełnym programem pobierającym argumenty lub dane wejściowe ze STDIN. Obawiam się, że fragmenty, których używasz teraz, są niedozwolone. Możesz dodać wiodący D,N=input()(i użyć Python 2 zamiast 3), aby to naprawić. Możesz też zmienić go na funkcję lambda, biorąc te dwa parametry.
Kevin Cruijssen
1
Niezłe rozwiązanie. Dostałem go do 122 używając " ".join(..)raczej ran.format
akozi
1
i%2*c or' 'oszczędza jeszcze kilka bajtów, chociaż zauważyłem, że separator jest zły dla dróg o nieparzystej długości.
Neil
2

Python 2 , 93 bajty

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

Wypróbuj online!

ovs
źródło
Zmiana +' %s '+na ,'%s',oszczędność 2 bajtów
TFeld
@TFeld W takim przypadku równie dobrze możesz usunąć '%s'%całkowicie.
Neil
2

J , 64 bajty

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

Wypróbuj online!

  • 1 północny zachód
  • 2 północy
  • 3 Północny wschód

Spróbuje później zagrać w golfa

Galen Iwanow
źródło
1

Czerwony , 157 bajtów

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

Wypróbuj online!

  • 1 północny zachód
  • 2 północy
  • 3 Północny wschód
Galen Iwanow
źródło
1

Swift 4.2 , 112 108 bajtów

-4 bajty dzięki 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] zamiast [-1,0,1].

Wypróbuj online!

Wyjaśnienie

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

Określa znak drogowy, którego należy użyć. (Założę się, że można to jakoś skrócić)

(0..<n).map{

Iteruje na całej długości ulicy.

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

Dodaje spacje przed ulicą.

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

Dodaje środkowy znak do każdej innej linii.

Mój pierwszy ☝️, cieszę się z wszelkich porad dotyczących optymalizacji. Nauczyłem się głównie z tego wątku: Wskazówki dotyczące gry w golfa w Swift .

palme
źródło
1
Witamy na stronie! Wygląda na to, że zapomniałeś usunąć przestrzeń pomiędzy ini " "w kodzie, mimo że usunąłeś go w swoich przykładach.
Wheat Wizard
1
Nie znam szybkiego, ale wygląda to na twoje interpolacje na końcach łańcuchów ( \(c)w obu przypadkach). Zaoszczędziłbyś bajty, łącząc cłańcuch z ciągiem znaków. Wypróbuj online!
Wheat Wizard
1
Dzięki, masz rację! zapisał nam 3 bajty 🚀
palme
1

Perl 6 , 66 bajtów

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

Wypróbuj online!

Zwraca listę linii.

Wyjaśnienie

->\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
źródło
1

Rubinowy , 90 bajtów

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

Wypróbuj online!

AKTUALIZACJA: Dziękuję, Kevin, za zwrócenie uwagi na to, że w moim pierwotnym zgłoszeniu brakowało spacji między krawędziami drogi a znacznikami (tj. Drogi o szerokości 3 zamiast 5 szerokości). To powiedziawszy, może być krótsza poprawka niż c+' '+...+' '+c.

Informacje kierunkowe: -1, 0, 1odwzorowuje na{ north-west, north, north-east }

Argumenty: odczytuje argumenty wiersza poleceń, takie jak 4 -1(czterorzędowa droga, nachylona w kierunku północno-zachodnim).

Dodatkowa uwaga: Zostało to przetestowane lokalnie za pomocą Ruby v2.6.1 i wygląda na to, że Try It Online używa Ruby v2.5.3. Nie mam powodu sądzić, że nie zadziała ze wszystkimi innymi wersjami Rubiego.

Spencer D.
źródło
Cześć, witamy w PPCG! Kierunki i zmieniające się drogi są prawidłowe w Twoich wynikach, więc dobrze zrobione. Jest tylko jeden drobny błąd w bieżącym wyjściu: droga powinna mieć szerokość trzech spacji zamiast 1. Obecnie twoja droga jest |||lub |<sp>|, ale powinna być |<sp>|<sp>|lub |<sp><sp><sp>|(gdzie <sp>jest spacja). Nie znam Ruby, ale wygląda na to, że możesz go rozwiązać, zmieniając c+[' ',c][i%2]+cna c+' '+[' ',c][i%2]+' '+c. :)
Kevin Cruijssen
Ach, dobry chwyt! Dzięki za zwrócenie na to uwagi, @KevinCruijssen.
Spencer D
1

Java (JDK) , 116 bajtów

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

Wypróbuj online!

Staje djako jeden 0, 1lub 2.

Olivier Grégoire
źródło
108 bajtów Pobiera dane wejściowe -1 dla północnego zachodu, 1 dla północnego wschodu i 0 dla północy.
Wcielenie nieznajomości
1

Japt -R , 40 bajtów

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

Wypróbuj online!

Wyjaśnienie:

Æ=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
źródło
Wydaje się, że jest niewielki błąd w danych wyjściowych. Obecnie separator drogi dla parzystych danych wejściowych zaczyna się na górze zamiast na dole. Wszystko inne wygląda dobrze, więc mam nadzieję, że nie jest to zbyt trudne.
Kevin Cruijssen
@KevinCruijssen Ah, dzięki za złapanie tego. Przed mogę zaktualizować moją odpowiedź, można potwierdzić, że rozwiązanie to jest w porządku?
Oliver,
Tak, to wygląda całkowicie poprawnie. :)
Kevin Cruijssen
1
@KevinCruijssen Dodano wyjaśnienie, ponieważ wiem, że Ci się podobają: P
Oliver,
Dziękuję, docenione. :) Rzeczywiście zawsze lubię mieć wyjaśnienie języków golfowych. Czasami mam już problemy ze zrozumieniem odpowiedzi na JavaScript, nie mówiąc już o golfowym języku JS. ;)
Kevin Cruijssen
1

Stax , 23 bajty

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

Uruchom i debuguj

Dane wejściowe to dwie liczby całkowite oddzielone spacją.
Pierwszy to d. -1 określa północno-wschodni. 0 dla północy. 1 dla północnego zachodu. Drugi parametr to n. Te dwie wartości zostaną domyślnie przeanalizowane z danych wejściowych i umieszczone na stosie wejściowym z nna górze. Dodatkowo dbędą dostępne z xrejestru stax, ponieważ jest to pierwsza wartość domyślnie przeanalizowana.

Na przykład wpisz „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

Uruchom ten

rekurencyjny
źródło
Czy mógłbyś dodać wyjaśnienie? :)
Kevin Cruijssen
1
@KevinCruijssen: Wcale nie.
rekurencyjny
0

perl -M5.010 -Mfeature = podpisy, 97 bajtów

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

źródło