Der (einfache) Weg zum Code

30

Eingang:

  • Eine ganze Zahl , die garantiert .n3
  • Eine ganze Zahl , die einer von .d[-1,0,1]

Ausgabe:

Eine Straße der Größe , die in nordwestlicher Richtung verläuft, wenn ; eine Nordrichtung, wenn ; oder eine Nordostrichtung, wenn . Die Straße wird immer drei Felder breit sein (oder im Allgemeinen fünf, wenn wir die Außengrenzen einbeziehen). Außerdem befindet sich im unteren Bereich eine Trennlinie, die sich abwechselt, während Sie nach oben fahren.nd=-1d=0d=1

Einige Beispiele:

Eingabe: Ausgabe:n=7,d=1

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

Eingabe: Ausgabe:n=4,d=-1

\   \
 \ \ \
  \   \
   \ \ \

Herausforderungsregeln:

  • Eine beliebige Anzahl von führenden / nachfolgenden Leerzeichen und / oder Zeilenumbrüchen ist zulässig, sofern die erforderliche Straße irgendwo auf dem Bildschirm gedruckt wird.
  • Anstelle der Optionen Sie auch die Optionen oder verwenden. Sie können auch auswählen, welche der drei Optionen welcher der drei Richtungen zugeordnet werden soll. (Achten Sie darauf , zu erwähnen , welche Optionen Sie verwendet haben , wenn sie sich von der für jeweils die in dieser Herausforderung Beschreibung verwendet wird!)[-1,0,1][0,1,2][1,2,3][-1,0,1][north-west, north, north-east]
  • Jedes vernünftige Ausgabeformat ist akzeptabel. Am häufigsten wird es natürlich in STDOUT gedruckt, aber es ist auch in Ordnung, es als Zeichenfolge oder 2D-Zeichenliste zurückzugeben.

Allgemeine Regeln:

  • Das ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
  • Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
  • Standardlücken sind verboten.
  • Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
  • Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.

Testfälle:

Die beiden obigen Beispiele und:

Eingabe: Ausgabe:n=10,d=0

|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
|   |
| | |
Kevin Cruijssen
quelle
3
Alternativer Titel: "Mad Max Code Warrior"
akozi
1
Ist das erste Beispiel nicht falsch? Es hat einen Mittelstreifen auf jeder ungeraden Linie anstatt auf jeder geraden Linie
moonheart08
2
@ moonheart08 Nein. In der unteren Zeile wird immer eine Trennlinie angezeigt, unabhängig davon, ob die Eingabe ungerade oder gerade ist. Danach wechselt es sich ab, während es nach oben geht. Ich habe den Text ein wenig geändert, um ihn hoffentlich klarer zu machen.
Kevin Cruijssen
Oh, also irre ich mich. In Ordung. Danke fürs klarstellen.
moonheart08

Antworten:

2

Canvas , 23 22 Bytes

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

Probieren Sie es hier aus!

Verwendet die Richtungseingänge 0, 1 und 2.

Erläuterung:

...‟    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
quelle
Würde es Ihnen etwas ausmachen, eine Erklärung hinzuzufügen? :)
Kevin Cruijssen
1
@KevinCruijssen hinzugefügt.
Dzaima
16

Python 2 , 79 78 73 72 Bytes

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

Probieren Sie es online!

Nimmt [1,0,-1]für[north-west, north, north-east]

-1 Byte, danke an Neil

TFeld
quelle
3
Meine Güte, was ich nicht für Python-ähnliche Schnitte in Kotlin geben würde
Adam
i%2*c or' 'Speichert ein Byte.
Neil
7

Python 2 , 66 Bytes

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

Probieren Sie es online!

Verwendet d=-1für NE, d=0für N und d=1für NW. Nutzt den Vorteil, dass führende Leerzeichen zulässig sind. Die Regel, dass das untere Segment der Straße mit einem Trennzeichen versehen ist, machte es schwierig, die richtige Parität zu erzielen. Dies wird dadurch erreicht, (s*n)[n:]dass die zweite Hälfte des 2nWechsels zwischen Leerzeichen und Straßencharakter geschnitten wird.

xnor
quelle
6

1. Python 3.5, 122 120 Bytes

Das Skript benötigt zwei Parameter: 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)

Ausgabe:

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

Erläuterung

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

edit: -2 bytes dank Kevin Cruijssen

Rene
quelle
3
Gute Antwort! :) Zwei Kleinigkeiten zum Golfen: n-1-iKann sein n+~i( relevanter Tipp ) und j%2==0kann sein j%2<1. Wenn Sie sie noch nicht gesehen haben, können sowohl Tipps zum Golfen in Python als auch Tipps zum Golfen in <allen Sprachen> interessant sein.
Kevin Cruijssen
1
Danke :) Ich habe das noch n+~inicht gesehen, aber es sieht hilfreich aus. Auch danke für Code Highlight.
Rene
Bitte! Genießen Sie Ihren Aufenthalt und golfen Sie viele Antworten. :) Oh, und ein schönes Wochenende.
Kevin Cruijssen
j%2*" "or cspart noch ein paar Bytes.
Neil
5

PowerShell , 88 82 80 74 71 Byte

-8 Bytes dank Mazzy
-6 Bytes dank AdmBorkBork und Mazzy
-3 Bytes dank AdmBorkBork

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

Probieren Sie es online!

Verwendet [0,1,2] für NW, NE, N. Verwendet dzweimal als Listenindex, um zuerst die Abstandsmethode zu erhalten (Entfernt die Liste, wenn 2 verwendet wird und gibt 0 zurück) und dann, welches Zeichen beim Zeichnen der Linien verwendet werden soll. Hängt eine Liste an die Zeichenfolge von Leerzeichen an (die als solche Leerzeichen zwischen den Elementen enthält), die die Straße erstellt. Wechselt auch zwischen einer offenen Fahrspur oder einem Strich, basierend auf Modulo-Mathematik.

Veskah
quelle
1
80 Bytes bei Verwendung von [0,1,2] für [NW, NE, N]
mazzy
1
@mazzy Smart. Ich habe völlig vergessen, absichtlich von einer Liste zu fallen.
Veskah
1
Tolle Idee mit array.toString von AdmBorkBork! Vielen Dank. 74 Bytes
mazzy
3
71 Bytes durch Indizieren des mittleren Teils in eine Zeichenfolge anstelle eines Arrays.
AdmBorkBork
5

Holzkohle , 33 29 23 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Jetzt, da alle der zugrunde liegenden Charcoal-Fehler behoben zu sein scheinen, kann ich den optimalen Code ankündigen. Erläuterung:

↶N

Drehen Sie den Cursor gemäß der ersten Eingabe gegen den Uhrzeigersinn, sodass 1 nach Nordosten, 2 nach Norden und 3 nach Nordwesten zeigt.

Nη

Geben Sie die Länge der Straße ein.

⊘⊕ηUE¹¦¹

Drucken Sie die halbe Länge der Straße und dehnen Sie sie dann aus, um den Straßentrenner zu erhalten.

F⟦²±²⟧«Jι⁰η

Drucken Sie die Straßenseiten.

@KevinCruijssen reichte anschließend eine härtere Version dieser Frage ein, die seitdem gelöscht wurde, aber Benutzer mit genügend Repräsentanten können sie hier sehen: Der (harte) Weg zum Code Der Dehnungstrick, den ich in dieser Antwort verwendet habe, ist auf diese Frage nicht anwendbar hat folgendes 47 45-Byte-Programm geschrieben:

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

F³«

Schlaufe über die Seiten und den Separator.

J×ι⊘⊕θ⁰

Zum Anfang der Seite springen.

≔…⟦¹ ⟧⊕﹪ι²ι

Erstellen Sie ein Array mit einem 1und einem Leerzeichen. Entfernen Sie das Leerzeichen jedoch erneut, wenn Sie die Seiten und nicht das Trennzeichen zeichnen.

Fη«

Überqueren Sie jeden Straßenabschnitt.

↶§κ⁰

Drehen Sie den Cursor entsprechend.

F⊖§κ¹

Überqueren Sie einen Abschnitt weniger als die Länge des Straßenabschnitts ...

§ιⅉ

... und drucke alternierende Elemente des Arrays. Die Abwechslung erfolgt durch zyklisches Indizieren in das Array mit der Y-Koordinate des Cursors.

P§ιⅉ

Drucken Sie die letzte Zeile dieses Straßenabschnitts aus, ohne den Cursor zu bewegen ...

... damit der Cursor stattdessen für den nächsten Abschnitt nach oben bewegt werden kann.

↷§κ⁰

Drehen Sie den Cursor zurück, um zum nächsten Abschnitt zu gelangen.

Neil
quelle
4

Kotlin , 96 92 Bytes

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

Akzeptiert [0, 1, 2] anstelle von [-1, 0, 1]

Es funktioniert ähnlich wie Lösungen in anderen Sprachen, aber Kotlin glänzt in dieser Sprache leider nicht wirklich.

val c=“\\|/“; Ruft das Zeichen für den Straßenbau ab, indem es die Tatsache ausnutzt, dass Kotlin Strings wie ein Array von Zeichen behandelt (wie es sich gehört, wenn man sich Java ansieht).

Probieren Sie es online!

Adam
quelle
Hallo, willkommen bei PPCG! Es gibt ein kleines Problem in Ihrer Ausgabe. Die sich ändernden Linien in der Mitte der Straße sollten mit einer Linie am unteren Rand für gerade Eingaben beginnen, anstatt am oberen Rand. Sie können Ihre Ausgabe für 4mit meinem Beispiel von vergleichen 4, um den Unterschied zu sehen, den ich meine. Ich weiß nicht , Kotlin so gut, aber ich denke , Sie lösen können (und Golf 4 Bytes zur gleichen Zeit) durch eine Änderung [(it+1)%2]an [it%2]. :) Abgesehen davon ist es eine nette Antwort, also +1 von mir.
Kevin Cruijssen
Super, vielen Dank für die Begrüßung und Hilfe! Ich werde es ändern
Adam
4

TSQL-Code, 171 117 Bytes

Ich erkannte, dass dies viel kürzer als Code geschrieben werden könnte.

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-Abfrage, 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 ist nicht erforderlich, wenn Ihre Datenbank bereits master ist. Einige Benutzer haben jedoch eine andere Standarddatenbank.

Skript beim Ausprobieren ist etwas anders. Ich musste das Leerzeichen ASCII-32 durch ASCII-160 ersetzen, die Leerzeichen wurden nicht angezeigt.

Versuch es

Einige Verbesserungen vorgenommen und festgestellt, dass ich ersetzen könnte

Bestellung von 1/0

mit

Sortieren nach @

t-clausen.dk
quelle
2
Wie kommt order by 1/0es, dass kein Fehler beim Teilen durch Null auftritt?
HoneyBadger
weil 1/0 nicht berechnet wird. wo vorhanden (1/0 auswählen) hat den gleichen Effekt
t-clausen.dk
Verschob meine Frage zu StackOverflow
HoneyBadger
3

JavaScript (ES8),  90 87  85 Bytes

(direction)(length)012

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

Probieren Sie es online!


JavaScript (ES6), 90 Byte

Dieser zeichnet die Ausgabe Zeichen für Zeichen mit etwas mehr Mathematik anstelle der .padStart()Methode.

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

Probieren Sie es online!

Arnauld
quelle
3

Jelly ,  31  30 Bytes

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

Ein dyadischer Link, der die Länge links und die negierte Richtung * rechts akzeptiert und ein 2d-Array von Zeichen ergibt.
*[north-west, north, north-east]=[1, 0, -1]

Probieren Sie es online! (Fußzeile ruft den Link auf, verbindet sich mit Zeilenumbrüchen und gibt das Ergebnis aus)

Wie?

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

Probieren Sie es online!

Die ersten beiden Zeilen stammen aus @TFeld.

Henry T
quelle
1
Hallo, willkommen bei PPCG! Ich befürchte, dass die Einreichungen entweder eine Funktion sein müssen, die Parameter übernimmt, oder ein vollständiges Programm, das Argumente oder Eingaben von STDIN entgegennimmt. Snippets, wie Sie sie gerade verwenden, sind leider nicht erlaubt. Sie können ein Leading hinzufügen D,N=input()(und statt 3 Python 2 verwenden), um dies zu beheben. Oder Sie können es in eine Lambda-Funktion ändern, die diese beiden Parameter verwendet.
Kevin Cruijssen
1
Gute Lösung. " ".join(..).format
Hab
1
i%2*c or' 'spart ein paar Bytes mehr, obwohl mir aufgefallen ist, dass das Trennzeichen für ungerade Straßenlängen falsch ist.
Neil
2

Python 2 , 93 Bytes

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

Probieren Sie es online!

ovs
quelle
Ändern, +' %s '+um ,'%s',2 Bytes zu speichern
TFeld
@TFeld In diesem Fall können Sie das Feld auch '%s'%vollständig entfernen .
Neil
2

J , 64 Bytes

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

Probieren Sie es online!

  • 1 Nordwesten
  • 2 Norden
  • 3 Nordosten

Ich werde später versuchen, Golf zu spielen

Galen Ivanov
quelle
1

Rot , 157 Bytes

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

Probieren Sie es online!

  • 1 Nordwesten
  • 2 Norden
  • 3 Nordosten
Galen Ivanov
quelle
1

Swift 4.2 , 112 108 Bytes

-4 Bytes dank 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] anstelle von [-1,0,1].

Probieren Sie es online!

Erläuterung

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

Bestimmt das zu verwendende Straßenschild. (Ich wette, das kann irgendwie gekürzt werden)

(0..<n).map{

Iteriert über die Länge der Straße.

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

Fügt die Leerzeichen vor der Straße hinzu.

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

Fügt jeder zweiten Zeile das mittlere Zeichen hinzu.

Schon beim ersten Mal freue ich mich über Optimierungshinweise. Meistens aus diesem Thread gelernt: Tipps zum Golfen in Swift .

palme
quelle
1
Willkommen auf der Seite! Anscheinend haben Sie vergessen, das Leerzeichen zwischen inund " "in Ihrem Code zu entfernen , obwohl Sie es in Ihren Beispielen entfernt haben.
Weizen-Zauberer
1
Ich weiß nicht schnell, aber es sieht aus wie für Ihre Interpolationen an den Enden der Saiten ( \(c)in beiden Fällen). Sie würden Bytes sparen, indem Sie nur cdie Zeichenfolge verketten . Probieren Sie es online!
Weizen-Zauberer
1
Danke, Sie haben recht! hat uns 3 Bytes gerettet 🚀
palme
1

Perl 6 , 66 Bytes

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

Probieren Sie es online!

Gibt eine Liste von Zeilen zurück.

Erläuterung

->\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
quelle
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}

Probieren Sie es online!

UPDATE: Vielen Dank, Kevin, dass Sie darauf hingewiesen haben, dass bei meiner ursprünglichen Übermittlung Leerzeichen zwischen den Straßenrändern und Markierungen fehlten (dh Straßen mit drei statt mit fünf Breiten). Es könnte jedoch eine kürzere Lösung dafür geben c+' '+...+' '+c.

Richtungsangaben: -1, 0, 1Karten zu{ north-west, north, north-east }

Argumente: Liest Befehlszeilenargumente wie 4 -1(eine vierreihige Straße, die nach Nordwesten geneigt ist).

Zusätzlicher Hinweis: Dies wurde lokal mit Ruby v2.6.1 getestet, und es scheint, dass Try It Online Ruby v2.5.3 verwendet. Ich habe keinen Grund zu der Annahme, dass es nicht mit allen anderen Ruby-Versionen funktionieren würde.

Spencer D
quelle
Hallo, willkommen bei PPCG! Die Anweisungen und Straßenänderungen sind in Ihrer Ausgabe korrekt, also gut gemacht. Es gibt nur einen kleinen Fehler in der aktuellen Ausgabe: Die Straße sollte statt 1 drei Leerzeichen breit sein. Derzeit ist Ihre Straße |||oder |<sp>|, aber es sollte |<sp>|<sp>|oder sein |<sp><sp><sp>|(wo <sp>ist ein Leerzeichen). Ich weiß nicht , Rubin, aber es scheint , dass Sie es durch eine Änderung lösen können c+[' ',c][i%2]+czu c+' '+[' ',c][i%2]+' '+c. :)
Kevin Cruijssen
Ah guten Fang! Vielen Dank für den Hinweis, @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);}

Probieren Sie es online!

Nimmt dals eines von 0, 1oder 2.

Olivier Grégoire
quelle
108 Bytes Übernimmt die Eingabe -1 für Nordwesten, 1 für Nordosten und 0 für Norden.
Verkörperung der Ignoranz
1

Japt -R , 40 Bytes

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

Probieren Sie es online!

Erläuterung:

Æ=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
quelle
Es scheint einen kleinen Fehler in der Ausgabe zu geben. Derzeit beginnt der Straßentrenner für gerade Eingaben oben und nicht unten. Alles andere sieht in Ordnung aus, also hoffe ich, dass es nicht zu schwierig ist, das Problem zu beheben.
Kevin Cruijssen
@ KevinCruijssen Ah, danke, dass du das verstanden hast. Können Sie bestätigen, dass diese Lösung in Ordnung ist, bevor ich meine Antwort aktualisiere ?
Oliver
Ja, das sieht völlig richtig aus. :)
Kevin Cruijssen
1
@ KevinCruijssen Hinzugefügt eine Erklärung, da ich weiß, dass Sie diese mögen: P
Oliver
Danke, sehr geschätzt. :) Ich habe in der Tat immer gerne Erklärungen für Golfsprachen. Ich habe manchmal schon Probleme, die JavaScript-Antworten zu verstehen, geschweige denn die Golfsprache von JS. ;)
Kevin Cruijssen
1

Stax , 23 Bytes

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

Führen Sie es aus und debuggen Sie es

Die Eingabe besteht aus zwei durch ein Leerzeichen getrennten Ganzzahlen.
Der erste ist d. -1 gibt Nordosten an. 0 für Norden. 1 für Nordwesten. Der zweite Parameter ist n. Diese beiden Werte werden implizit von der Eingabe analysiert und mit noben auf dem Eingabestapel abgelegt . Zusätzlich dist der Zugriff über das stax- xRegister möglich, da dies der erste implizit analysierte Wert ist.

Zum Beispiel "1 7" eingeben

            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

Führen Sie dieses aus

rekursiv
quelle
Würde es Ihnen etwas ausmachen, eine Erklärung hinzuzufügen? :)
Kevin Cruijssen
1
@ KevinCruijssen: Überhaupt nicht.
rekursiver
0

Perl -M5.010 -Mfeature = Signaturen, 97 Bytes

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

quelle