Zeichne eine S-Kette

27

Hintergrund

Als ich jünger war, wurde mir eine Methode beigebracht, eine seltsame "S" -Form zu zeichnen, die ich (zusammen mit meinen Klassenkameraden) faszinierend fand. Heute habe ich es wiederentdeckt und aufgrund seines formelhaften Ansatzes beim Zeichnen gedacht, dass es zu einer interessanten Herausforderung führen könnte: P

Zeichnen des "S"

Das S kann folgendermaßen gezeichnet werden:

Zeichnen Sie zunächst zwei Reihen mit drei vertikalen Linien

| | |

| | |

Verbinden Sie als nächstes die linke obere Linie mit der unteren Mittellinie und die mittlere obere Linie mit der rechten unteren Linie, um zu produzieren

| | |
 \ \
| | |

Zeichnen Sie zum Schluss oben und unten auf das aktuell gezeichnete Bild, damit es am Ende so aussieht

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

Wie Sie sehen, ergibt sich eine "S" -Form. Wenn es jedoch erweitert wird (Zeichnen mit mehr als 2 Zeilen), erzeugt es ein sehr interessantes Muster. Ihre Aufgabe ist es, dieses interessante Muster zu reproduzieren.

Aufgabe

Gibt eine Ganzzahl aus n >= 2, in der das S mit den daraus nzu erstellenden Zeilen ausgegeben wird . Die Ausgabe kann von einer Funktion zurückgegeben werden, und die Eingabe kann in Standardmethoden erfolgen. Das nachgestellte / führende Leerzeichen sowohl für das Gesamtbild als auch für jede Zeile ist in Ordnung. Führende Zeilenabstände müssen jedoch konsistent sein, damit "nicht unterbrochen wird. Sie können als Liste von Zeilen ausgeben.

Testfälle

input
output
---

2

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

---

8
  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

---

10

  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

Dies ist ein also gewinnt der kürzeste Code! Viel Glück,

Caird Coinheringaahing
quelle
13
Wikipedia nennt das Sdie Kühle S und fordert eine unendliche Version des einS Chain
Stephen
Können wir als Liste von Zeilen ausgeben?
Mr. Xcoder
@ Mr.Xcoder Sie können
Caird Coinheringaahing
@Stephen 10 Minuten googeln und dies kam nicht auf. Ich bearbeite den Namen der Frage
caird coinheringaahing 20.09.17
@cairdcoinheringaahing Ich habe nach Bildern gesucht, das könnte es gewesen sein: P
Stephen

Antworten:

10

C # (.NET Core) , 73 69 66 64 62 Bytes

Zwei Bytes weniger und ein perlartiges Erscheinungsbild dank Barodus. Haben Sie nicht daran gedacht, int zu verwenden? für Nullen.

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Probieren Sie es online!

Mein Pronomen ist monicareinstate
quelle
1
Wenn dies ein Golf der vorhandenen C # -Antwort wäre, hätte ich es nie sagen können. Gut gemacht :-)
ETHproductions
Kannst du erklären, was das new string[n+1]macht? Ich habe es noch nie gesehen.
Ian H.
Erstellt ein Array von leeren Zeichenfolgen AFAIK. Ich habe einen Hack mit string.Join verwendet, auch bekannt als beitreten { "", "", "", ""} mit Trennzeichen "\ \ n | | | \ n \"
mein Pronomen ist monicareinstate
@ jemand Woah, ich habe diesen Trick noch nie bestätigt. Wirklich cool! (Auch meine schlechte, ich dachte, das new string[n+1]war eine Art kniffliger String-Konstruktor und keine Array-Deklaration -.-)
Ian H.
6

05AB1E , 27 26 Bytes

…^
/ð"\
| | |
\ "I×…/
vJ.c

Probieren Sie es online!

Alternative 27-Byte-Version

'^…/ \©IF…| |û…\ \}\®R'v».c

Probieren Sie es online!

Erläuterung

'^                             # push "^"
  …/ \©                        # push "/ \" and store a copy in register
       IF                      # input times do:
         …| |û                 # push "| | |"
              …\ \             # push "\ \"
                  }            # end loop
                   \           # discard top of stack (the extra "\ \")
                    ®R         # push "/ \" reversed = "\ /"
                      'v       # push "v"
                        »      # join stack on newlines
                         .c    # center each row
Emigna
quelle
5
Ihr Code sieht für mich ein bisschen wie ein Elefant aus :)
Wojowu
Es ist buchstäblich beängstigend, wie nah meine Antwort bei Ihnen war: '^…/ \©IF„| ûû„\ û}\®R'v).Cohne hinzusehen .
Magic Octopus Urn
6

Japt , 34 25 23 Bytes

" ^ /{ç'\²i|³1}/ v"¬¸ò5

Online testen! Ausgänge als Array von Zeilen; -Rflag hinzugefügt, um in newlines beizutreten. (Danke @Shaggy)

Erster zweiter Versuch, könnte verbesserungsfähig sein ...

Wie es funktioniert

" ^ /{ ç'\²  i |³  1}/ v"¬ ¸  ò5
" ^ /{Uç'\p2 i'|p3 1}/ v"q qS ò5   Ungolfed
                                   Implicit: U = input number
        '\p2                       Repeat a backslash twice, giving "\\".
             i     1               Insert at index 1
              '|p3                   3 vertical bars. This gives "\|||\".
      Uç                           Make U copies of this string. U = 2: "\|||\\|||\"
" ^ /{              }/ v"          Insert this into this string.    " ^ /\|||\\|||\/ v"
                         q qS      Split into chars; join on spaces."  ^   / \ | | | \ \ | | | \ /   v"
                              ò5   Split into rows of length 5.    ["  ^  "," / \ ","| | |"," \ \ ","| | |"," \ / ","  v"]
                                   Joining on newlines gives "  ^  
                                                               / \ 
                                                              | | |
                                                               \ \
                                                              | | |
                                                               \ /
                                                                v"
ETHproductions
quelle
Holzkohle schlagen und SOGL binden? Ausgezeichnete Arbeit!
Shaggy
Sie können übrigens ein Array von Zeilen ausgeben, um die letzten beiden Zeichen zu löschen.
Shaggy
@ Shaggy Das ist großartig, jetzt gewinnen wir!
ETHproductions
Wir haben uns in letzter Zeit gut geschlagen :)
Shaggy
6

SOGL V0.12 , 26 25 18 Bytes

°I-‘*"∑ūCƨΩ)¹‘@∑5n

Probieren Sie es hier aus!

Verwendet dieselbe Strategie wie die Japt-Antwort von ETHproductions

Erläuterung:

..‘           push "\|||\"
   *          repeat input times
    "..‘      push " ^ /ŗ/ v ", with ŗ replaced with POP. The reason why there's a trailing
              space is because otherwise it didn't have enough repeating characters to compress
        @∑    join with spaces
          5n  split to line lengths of 5
dzaima
quelle
2
push "|" and " "Was zum Teufel ist das eingebaute
Steven H.
1
@StevenHewitt das sind eigentlich zwei eingebaute, aber ich habe sie zusammengefügt (wie ich es mit anderen Sachen tue), weil ich nicht glaube, dass es nicht notwendig ist, Sachen zu trennen, die bald zusammen benutzt werden
dzaima
5

JavaScript (ES6), 60 Byte

n=>`  ^
 / \\
${`| | |
 \\ \\
`.repeat(n-1)}| | |
 \\ /
  v`

Testschnipsel

Justin Mariner
quelle
1
57: n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'(mit Backticks und wörtlichen Zeilenumbrüchen)
edc65
5

Kohle , 27 26 25 Bytes

-1 Byte danke an Carlos Alejo. -1 Byte nur dank ASCII.

  ^⸿ / ×\⸿| | |⸿ \ N/⸿  v

Probieren Sie es online! Link ist zur ausführlichen Version. # Kohle-Verbose-Obfucation

total menschlich
quelle
1
Sie können 1 Byte speichern, indem Sie einfach Print aufrufen (anstatt die Zeichenfolgen hinzuzufügen) und \rFolgendes verwenden : `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Ausführliche Version .
Charlie
Ah ... ich muss mich daran erinnern, \rwie man Newlines auf vernünftige Weise bekommt. Vielen Dank!
Totalhuman
25 Bytes
ASCII
@ Nur ASCII: P -
totalhuman
4

Perl 5 , 39 37 Bytes

say"  ^
 / ".'\
| | |
 \ 'x<>."/
  v"

Probieren Sie es online!

Rasierte zwei Bytes mit @DomHastings Vorschlag

Xcali
quelle
Wenn Sie einfache Anführungszeichen verwenden, müssen Sie die Backslashes für -2 nicht umgehen! :)
Dom Hastings
3

Eigentlich 49 Bytes

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"

Probieren Sie es online!

Erläuterung:

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"
"| | |"@α                                          push a list containing n copies of the vertical lines
         ;lD" \ \"@α                               push a list containing n-1 copies of the diagonal connections
                    @Z♂i                           interleave
                        i                          flatten
                         "  v"" \ /"))             make the bottom
                                      " / \""  ^"  make the top
Mego
quelle
3

05AB1E , 38 Bytes

…| |ûU"  ^
 / \"XI<F„ \2×X}" \ /
  v"»

Probieren Sie es online!

…| |                         # Push "| |"
    û                        # Palindromize
     U                       # Store in X
      "..."X                 # Push the top three rows
            I<F      }       # One less than input times do:
               „ \           #   Push " \"
                  2×         #   Concatenate that with itself
                    X        #   Push "| | |"
                      "..."  # Push the last two rows
                           » # Join stack with newlines
Riley
quelle
3

C (gcc) , 82 Bytes

f(n){for(puts("  ^\n / \\");--n;puts("| | |\n \\ \\"));puts("| | |\n \\ /\n  v");}

Probieren Sie es online!

Cleblanc
quelle
3

C # (.NET Core) , 101 77 73 Bytes

24 Bytes gespart dank i cri everytim !
4 Bytes gespart dank Kevin Cruijssen !

n=>{var s="  ^\n / ";for(;n-->0;s+="\\\n| | |\n \\ ");return s+"/\n  v";}

Probieren Sie es online!

Wie üblich ist das Wiederholen von Saiten in C # ein Schmerz.

Ian H.
quelle
77 Bytes.
Totalhuman
@icrieverytim Ahhh, das ist natürlich viel besser.
Ian H.
Sie können --n>=0zu n-->0und s+="/\n v";return s;zu wechseln return s+"/\n v";, um einige Bytes zu speichern.
Kevin Cruijssen
1
@ KevinCruijssen Danke, behoben!
Ian H.
3

Retina , 38 Bytes

.+
$*
1
¶|||¶x\\
^
 ^¶x/\
.$
/¶ v
x?
 

Probieren Sie es online!

Druckt eine Spalte mit führenden Leerzeichen und nachgestellten Leerzeichen in jeder Zeile.

Erläuterung

Die Einsparungen bei den Hauptbytes ergeben sich aus dem Weglassen der Leerzeichen in allen Literalteilen und dem Einfügen am Ende. Die Abbildung ist so strukturiert, dass es nie zwei Nicht-Leerzeichen nebeneinander gibt. Wenn Sie also alle entfernen, können Sie die Form fast fixieren, indem Sie an jeder Stelle am Ende ein Leerzeichen einfügen:

^
/\
|||
\\
|||
\/
v

wird:

 ^ 
 / \ 
 | | | 
 \ \ 
 | | | 
 \ / 
 v 

Das ist bis auf die Einrückung fast richtig. Dem ^und vfehlen zwei Leerzeichen. Das ist tatsächlich einfacher zu beheben, denn wenn wir nur ein explizites Leerzeichen vor jedem von ihnen einfügen, ergeben sich am Ende zwei zusätzliche Leerzeichen. Die Linien mit den Schrägstrichen sind kniffliger, weil sie nur einen zusätzlichen Platz benötigen. Um dies zu beheben, fügen wir dort ein Platzhalterzeichen ein ( x). Wenn wir die Leerzeichen am Ende einfügen, fügen wir sie nicht nur für jede leere Übereinstimmung ein, sondern passen sie optional an x. Das heißt, anstatt ein Leerzeichen vor dem einzufügen x, wird das xselbst ersetzt. Und dann wird es direkt nach dem noch ein leeres Streichholz geben x. Das heißt, jederxFügt genau ein Leerzeichen hinzu, ohne etwas anderes zu ändern. Wir möchten also Folgendes einrichten:

 ^
x/\
|||
x\\
|||
x\/
 v

was uns das gewünschte Ergebnis geben wird. Also hier ist der Code:

.+
$*

Konvertieren Sie die Eingabe in Unary.

1
¶|||¶x\\

Wandeln Sie jede 1Zeile mit |||und x\\(und einem führenden Zeilenvorschub) in zwei Zeilen um .

^
 ^¶x/\

Fügen Sie die ersten beiden Zeilen mit ^und ein x/\.

.$
/¶ v

Befestigen Sie das Finale, x\\indem Sie das Letzte \in /eine Linie verwandeln und eine Linie mit der anfügen v.

x?
 

Ersetzen Sie jedes xoder leeres Streichholz durch ein Leerzeichen.

Martin Ender
quelle
Ordentlicher Ansatz. Ich habe versucht, eine Möglichkeit zu finden, Join-on-Spaces für meine Pip-Lösung zu verwenden, aber aufgrund der unterschiedlichen Anzahl von führenden Spaces in verschiedenen Zeilen hat dies nicht ganz funktioniert.
DLosc
2

Pyth, 46 Bytes

"  ^
 / \\"
+*j[jd*\|3" \ \\"k))Q" \ /
  v

Testsuite.

Steven H.
quelle
36 Bytes:%" ^\n / %s/\n v"*Q"\\\n| | |\n \
Mr. Xcoder
31 Bytes .
Mr. Xcoder
2

Pyth, 40 Bytes

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v

Ziemlich ähnlich wie Steven Hewitt, aber unabhängig entwickelt.

Probieren Sie es online

Erläuterung

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v
K" / \ ""                                 Set K = " / \ "
        "  ^"                       "  v  Draw the end points.
             K                    _K      Draw the slants.
                         *Q]*3"| "        Draw the vertical bars...
              j+b+*2+d\\b                 ... interspersed with slants.

quelle
2

Pyth, 33 32 31 Bytes

Danke Mr. Xcoder für ein Byte.

%"  ^
 / %s/
  v"*tj\|_B" \\
| 

Probieren Sie es online aus: Demo oder Test Suite

Jakube
quelle
Sehr nette Antwort! Sie können es auf 32 Bytes reduzieren .
Mr. Xcoder
2
31 Bytes in der Tat.
Mr. Xcoder
2

Netzhaut , 45 Bytes

Dies ist eine ziemlich einfache Lösung.

.+
$*
^1
  ^¶ /x
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

Probieren Sie es online aus

Wenn die Grafik stattdessen 1-indiziert werden könnte, wäre sie etwas kürzer (44 Byte):

.+
  ^¶ /x$0$*1
$
 \ /¶  v
1
 \x
x
 \¶| | |¶
mbomb007
quelle
2

Pip , 45 42 33 Bytes

"  ^
 / "."\
| | |
 \ "Xa."/
  v"

Probieren Sie es online!

Erläuterung

Der Code ist wirklich einfach, obwohl die Zeilenumbrüche das Lesen erschweren. Hier ist ein besserer Weg, um die Struktur zu sehen:

"prefix" . "repeated" X a . "suffix"

Das wiederholte Element in der S-Kette ist

   \
| | |
 \

Nehmen Sie dies als wörtliche Zeichenfolge und wiederholen Sie es amal (wobei adas erste Befehlszeilenargument ist). Dann stellen Sie das Präfix voran:

  ^
 /

und hänge das Suffix an:

   /
  v

und drucken.

(Ich mag, wie das irgendwie aussah wie ein> <> Programm.)

DLosc
quelle
Dies sieht aus wie Lumpy Space Princess aus Adventure Time :)
YSC
2

MATL , 47 44 43 Bytes

-3 Bytes dank Giuseppe

'  ^' ' / \ 'XK'| | |'XJGq:"' \'thJ]KP'  v'

Probieren Sie es online!

Cinaski
quelle
' ^' ' / \ 'XK'| | |'XJ`' \ \'JGq@-]KP' v'ist 44 Bytes.
Giuseppe
1

Excel, 60 Bytes

="  ^
 / \
"&REPT("| | |
 \ \
",A1-1)&"| | |
 \ /
  v"
Wernisch
quelle
Sie sollten prüfen, ob dies ein Polyglot mit Google Sheets
Taylor Scott
1

PowerShell , 83 , 57 Byte

"  ^
 / \"
1..--$args[0]|%{"| | |
 \ \"}
"| | |
 \ /
  v"

Probieren Sie es online!

Per @ AdmBorkBork's Vorschläge,

  • Vereinfacht fordurch einen Nummernkreis.
  • Ersetzte ;und kombinierte Saiten.
  • Eine unnötige Variablendefinition wurde entfernt.
Wurzel
quelle
Sie können Ihre forSchleife viel Golf spielen, indem Sie verwenden 1..--$args[0]|%{ }.
AdmBorkBork
Sie können auch wörtliche Zeilenumbrüche zwischen den benachbarten Zeichenfolgen verwenden, um zu sparen, ";"und es ist billiger, sie $svollständig zu entfernen . 57 Bytes
AdmBorkBork
Glatt. Ich mag die Newline speichern. Komisch, dass ich die 1..$argsGelegenheit verpasst habe . Ich bin mir nicht sicher, welche Etikette auf dieser Website richtig ist. Nehme ich Änderungen an meiner Antwort vor und schreibe Ihnen diese gut, oder veröffentlichen Sie Ihre Lösung als separate Antwort?
Root
Das Bearbeiten der Änderungen und das Anerkennen ist die richtige Etikette. Willkommen bei PPCG.
AdmBorkBork
1

Gelee , 32 Bytes

Langweilige Portierung von Lynns Python-Lösung .

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”

Probieren Sie es online!

Erläuterung:

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”    Example input: 5
“\¶| | |¶ \ ”                       Literal string "\¶| | |¶ \ " (¶ = newline). Result: "\¶| | |¶ \ "
             ẋ                      Repeat as many times as the (implicit) input. Result: "\¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
              ṭ                     Tack that on the end of...
               “  ^¶ / ”            ...the string "  ^¶ / ". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
                        ;           Append...
                         “/¶  v”    The string "/¶  v". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ /¶  v"
                                    Implicit print
Genosse SparklePony
quelle
1

Eigentlich 30 Bytes

Dies funktioniert nach demselben Prinzip wie die Japt-Antwort von ETHproductions , bei der später zusätzliche Leerzeichen hinzugefügt werden und die gesamte Zeichenfolge zum impliziten Drucken in 5er-Zeilen aufgeteilt wird. Probieren Sie es online!

"\|||\"*" ^ /"+"/ v"@+#' j5@╪i

Ungolfing

            Implicit input.
"\|||\"*    Add the middle portion and multiply that by the input.
" ^ /"+     Append the top.
"/ v"@+     Append the bottom.
#           Convert into a list of strings
' j         Join with spaces.
5@╪         Split into a list of length-5 strings.
i           Flatten list onto the stack for implicit printing with newlines.
Sherlock9
quelle
Netter Job, der Mego in seiner eigenen Sprache übertrifft!
Caird Coinheringaahing
1

Jelly , 25 23 Bytes

Dies funktioniert nach demselben Prinzip wie die Japt-Antwort von ETHproductions , bei der später zusätzliche Leerzeichen hinzugefügt werden und die gesamte Zeichenfolge vor dem Drucken in Zeichenfolgen der Länge 5 aufgeteilt wird. Probieren Sie es online!

Edit: Ich wusste, dass es eine Möglichkeit gibt, die Ober- und Unterseite der S-Kette auf eine golferische Art und Weise zu verbinden. Danke an Erik den Outgolfer für -2 Bytes.

“\|||\”ẋ“ ^ /“/ v”jKs5Y

Ungolfing

                Left argument: n
“\|||\”ẋ        Repeat the middle portion n times.
“ ^ /“/ v”j     Append the top and bottom.
K               Join with spaces.
s5              Split into a list of length-5 strings.
Y               Print the strings with linefeeds.
Sherlock9
quelle
“\|||\”ẋ“ ^ /“/ v”jKs5Y
Erik der Outgolfer
1

Holzkohle , 25 Bytes

↘^\¶/¶G→⁵↓⊕⊗N←⁵|¶ \↗¶\¶v/

Probieren Sie es online! Link ist eine ausführliche Version des Codes.

Neil
quelle
Komisch, wie die andere Antwort auf Holzkohle dieselbe Byteanzahl ist, indem ein völlig anderer Ansatz verwendet wird. Ich mag deine aber mehr. Der andere ist fast fest programmiert, aber der Ihre nutzt tatsächlich die Stärke von Charcoal.
Kevin Cruijssen
@ KevinCruijssen Du sagst Stärke, aber das sollte eigentlich diagonal gedruckt werden; Leider war das Beste, was ich tun konnte, 29 Bytes:↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
Neil
0

Java 8, 93 76 Bytes

n->{String r="  ^\n / ";for(;n-->0;r+="\\\n| | |\n \\ ");return r+"/\n  v";}

Hafen von @IanH. Antwort von C # .NET, nachdem ich ein bisschen mehr Golf gespielt habe.

Probieren Sie es hier aus.

Kevin Cruijssen
quelle
Es ist schon komisch, wie genau dies für den stringvs- varTeil zu erwarten ist .
Ian H.
@ IanH. Und die n->vs n=>;)
Kevin Cruijssen