Schreiben Sie ein Programm, das eine Ganzzahl N über stdin oder die Befehlszeile aufnimmt.
Wenn N 0 ist, muss der einzelne Buchstabe O
auf stdout gedruckt werden.
Wenn N positiv ist , muss diese horizontale ASCII -Doppelhelix mit einer Breite von N Segmenten gedruckt werden.
Wenn N 1 ist, ist die Ausgabe:
/\
O O
\/
Wenn N 2 ist, ist die Ausgabe:
/\ /\
O / O
\/ \/
Wenn N 3 ist, ist die Ausgabe:
/\ /\ /\
O / / O
\/ \/ \/
Wenn N 4 ist, ist die Ausgabe:
/\ /\ /\ /\
O / / / O
\/ \/ \/ \/
Das Muster wird für größeres N genauso fortgesetzt. Beachten Sie, dass der Schrägstrich ( /
) an allen Stellen verwendet werden muss, an denen sich die Helixen kreuzen, mit Ausnahme der O
Enden.
Wenn N negativ ist , muss diese vertikale ASCII-Doppelhelix (gezeichnet - N Segmente hoch) gedruckt werden.
Wenn N -1 ist, ist die Ausgabe:
O
/ \
\ /
O
Wenn N -2 ist, ist die Ausgabe:
O
/ \
\ /
\
/ \
\ /
O
Wenn N -3 ist, ist die Ausgabe:
O
/ \
\ /
\
/ \
\ /
\
/ \
\ /
O
Wenn N -4 ist, ist die Ausgabe:
O
/ \
\ /
\
/ \
\ /
\
/ \
\ /
\
/ \
\ /
O
Das Muster wird für kleinere N genauso fortgesetzt. Beachten Sie, dass Schrägstriche ( \
) an allen Stellen verwendet werden müssen, an denen sich die Helixen kreuzen, mit Ausnahme der O
Enden.
Einzelheiten
- Anstelle eines Programms können Sie eine Funktion schreiben, die N als Ganzzahl verwendet und das Ergebnis normal ausgibt oder als Zeichenfolge zurückgibt.
- Die Ausgabe für ein beliebiges N kann optional eine nachgestellte Newline enthalten.
- Jede Ausgabezeile für ein beliebiges N kann optional 4 oder weniger nachgestellte Leerzeichen enthalten.
- Es sollte niemals ein führendes Leerzeichen geben, das nicht Teil des angegebenen Musters ist.
- Der kürzeste Code in Bytes gewinnt.
quelle
<spc>O<spc>
oder zu drucken\nO\n
. Ist unnötig führendes Leerzeichen erlaubt?print "."
Zoomen Sie hinein, um die Helix zu sehen. * nodnod *Antworten:
CJam,
56 55 53 5250 BytesSchau dir diese Größe an! Die Hauptschuldigen sind
N = 0
Sonderfall und die\
statt/
in der vertikalen Helix.So funktioniert es:
Der Code ist in drei Teile gegliedert:
X0>"\/"=" / \\\ / "+
gibt entweder"/ / \\\ / "
oder"\ / \\\ / "
was entscheidend ist, da die Helix einfach aus alternierendem besteht"/ \"
und"\ /"
durch entweder" / "
oder verbunden wird" \ "
. Wenn Sie beispielsweise die Eingabe als "Eingabe" betrachten2
, lautet die letzte wiederholte Zeichenfolge"/ / \\ / / / \\ / "
(ohne Escapezeichen). Dies hat offensichtlich/
am Anfang einen zusätzlichen Platz und am Ende einen zusätzlichen Platz.2
die gewünschte letzte Zeichenfolge ohne Zeilenumbrüche" O / \\\ / / / \\\ / O"
, aber nach dem obigen Punkt haben wir nur"/ / \\\ / / / \\\ / "
. Also entfernen wir das erste Zeichen, fügen ein Leerzeichen und'O
am Anfang und'O
am Ende ein weiteres hinzu . Dann haben wir es endlich in Teile von 3 geteilt'O
(für Eingabe 0 Fall)Probieren Sie es hier online aus
quelle
JavaScript (ES6), 126
132 133Bei Verwendung einer Zeichenfolge mit Vorlagen werden Zeilenumbrüche gezählt.
Mehr lesbar
quelle
n=>(
macht das? Ich habe diesen Operator noch nie gesehen oder benutzt.Pyth, 52 Bytes
Demonstration.
Erläuterung:
Der erste Abschnitt
M[Jj"/\\"*hGdjP*G+*2dH*2\O_J)
definiert eine Funktiong
, die zwei Eingaben akzeptiert. Die erste EingabeG
ist die Anzahl der zu verwendenden Wiederholungen. Dies ist der absolute Wert der Eingabe. Die zweite EingabeH
ist das Zeichen, das in der Mitte der Spiralen platziert werden soll.Die Funktion gibt eine Liste mit 3 Elementen zurück, die aus den 3 Zeilen der positiven Spirale und den 3 Spalten der negativen Spirale besteht.
Das erste Element ist definiert durch
Jj"/\\"*hGd
.*hGd
ist die Zeichenfolge vonG+1
Leerzeichen. Verbindetj"/\\"*hGd
diese Zeichenfolge mit"/\"
als Begrenzer. DasJ
am Anfang speichert den resultierenden Wert für die zukünftige Verwendung.Das zweite Element ist
jP*G+*2dH*2\O
. Wir beginnen mit+*2dH
. Dies sind zwei Leerzeichen, gefolgt vom Eingabezeichen. Dann wiederholen wir diese ZeichenfolgeG
mal mit*G
. Dann entfernen wir das letzte Zeichen mitP
. Zum Schluss umgeben wir diesen String mit zweiO
Zeichen, mitj ... *2\O
.Das dritte Element wird mit erzeugt
_J
. Dies ist einfach die Umkehrung der ersten Zeile.Der letzte Abschnitt
?jb?gQ\/>Q0msdCg_Q\\Q\O
wählt zwischen drei verschiedenen Möglichkeiten, positiv, negativ und null. Die erste Wenn-Dann-BedingungQ
ist der Eingang. Die zweite Bedingung ist>Q0
, ob der Eingang positiv ist.Wenn
Q
Null ist\O
, wird das ZeichenO
gedruckt.Wenn
Q
ungleich Null ist, setzen wir das Ergebnis des zweiten Ternärs in Zeilenumbrüche und drucken es mitjb
. WennQ
positiv ist, ist die Liste verbunden und gedrucktgQ\/
,g(Q,"/")
.Wenn
Q
negativ, ist die Liste verbunden und gedrucktmsdCg_Q\\
. Wir beginnen mitg_Q\\
, was istg(-Q,"\")
. Dann transponieren wir die Zeilen und Spalten mitC
.msd
wandelt die resultierenden Tupel von Zeichen in Zeichenfolgen um, die in Zeilenumbrüchen verbunden und gedruckt werden können.quelle
Python 2, 118
Erstellt die vertikale Doppelhelix aus einer Liste von Zeichenfolgen und transponiert sie, um die horizontale zu erhalten. Ich bin sicher, es könnte verbessert werden.
quelle
Java,
500488 BytesMein erster Versuch, und leider ist es 10 * länger als der aktuelle Anführer :(. Hat jemand irgendwelche Tipps (außer eine andere Sprache zu benutzen)?
quelle
import System.*
etwas speichern, um zu schreibenSystem
?import static java.lang.System.*;
oder er könnte den Standardausgabestream als Variable speichern (obwohl ich nicht weiß, ob er in diesem Fall speichern oder behindern würde, nicht überprüft).sc
Variable entfernen, da sie nur einmal aufgerufen wird. Spart 14 Bytes.class M{public static void main(String[]a){int n=new Integer(new java.util.Scanner(System.in).next()),i=n;if(n>0){for(;i-->0;)o(" /\\");o("\no");for(i=n;i-->1;)o(" /");o(" o\n");for(i=0;i++<n;)o(" \\/");}else if(n<0){o(" o \n");for(i=0;i++<~n;)o("/ \\\n\\ /\n \\ \n");o("/ \\\n\\ /\n o \n");}else o("o\n");}static<T>void o(T s){System.out.print(s);}}
( 352 Bytes ) Probieren Sie es online aus.n->{int i=n;if(n>0){for(;i-->0;)o(" /\\");o("\no");for(i=n;i-->1;)o(" /");o(" o\n");for(i=0;i++<n;)o(" \\/");}else if(n<0){o(" o \n");for(i=0;i++<~n;)o("/ \\\n\\ /\n \\ \n");o("/ \\\n\\ /\n o \n");}else o("o\n");};<T>void o(T s){System.out.print(s);}
Probieren Sie es online aus.Haskell, 156 Bytes
Sie können es dann schreiben als:
quelle
1<2
stattdessen schreiben oder ähnlichesTrue
und ein Byte speichern.C #,
242241238230222219 BytesAngeregt durch Martins Kommentar , hier ist mein erster Versuch in etwa so:
Besser lesbar:
quelle
C #
199197196 BytesUngolfed-Version:
Die Idee ist, die horizontale Anzeige aus der vertikalen Anzeige aufzubauen, indem die transponierte Zeichenmatrix gerendert wird.
quelle
for(;m>0;--m)
umfor(;m-->0;)
in beiden Schleifen"\n/ \\\n\\ /\n "
könnte auch gemäß den Methoden in meiner Antwort gekürzt werden - dh verwenden@"..."
, wobei jedes "\\" zu "\" und jedes "\ n" zu einem tatsächlichen Zeilenumbruch wirdbool u
fürvar u
einen anderen ganzes Byte :)Python 3, 118 Bytes
Meine allererste Code-Golf-Einsendung, daher ist sie möglicherweise überhaupt nicht beeindruckend.
Verwendet nur den ternären Operator ... if ... else von Python, um die drei Szenarien zu trennen. Dadurch wird eine Zeichenfolge erstellt, bei der einige kleinere Zeichenfolgen eine bestimmte Anzahl zum Drucken wiederholt werden.
quelle
Julia, 229 Bytes
Oh man, das ist viel zu groß. Dies ist die mit Abstand längste Antwort. Ich könnte wahrscheinlich viel sparen, indem ich den String zurückgebe, anstatt ihn auszudrucken, oder indem ich den Matrixansatz ganz vermeide. Ich werde später damit experimentieren.
Dadurch wird eine Lambda-Funktion erstellt, die eine einzelne Ganzzahl annimmt und die entsprechend formatierte Doppelhelix ausgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=n->(...)
.Ungolfed + Erklärung:
Ein paar Beispiele:
quelle
Python 3, 135 Bytes
Probieren Sie es hier online aus
quelle
Perl,
91-97Das Transponieren erwies sich am Ende als zu teuer.
Vorherige Lösung:
Teste mich .
quelle
/^0/?O:etc
mit$_?etc:O
$".="\23"^"\\ / \\ \\ / "x abs."O ";print/-/?$":/^0/?O:map{reverse$/,$"=~/(.).{$_}$/mg}0..2
Schema, 379 Bytes
Mein erster Versuch, Code Golf zu spielen und leider einer der längsten. :(
Ungolfified:
quelle
Java, 282
Mein erster Ansatz mit besonders schönen Variablennamen:
Ich habe keine Ahnung, warum ich das tue. Muss eine Freizeitsache sein.
quelle
Java, 317
Mein erster Code Golf Versuch.
quelle
Python 3, 165 Bytes
Probieren Sie es hier online aus .
quelle
Perl,
193197187180166163B1 Byte Strafe für -n Kommandozeilenschalter. Laufen mit
echo 1|perl -M5.10.0 -n scratch.pl
:Mit Leerzeichen:
quelle
-M5.10.0
nicht zu Ihrer Byteanzahl beiträgt?say
ist praktisch für Code Golf ...PHP, 341
Ungolfed-Version
quelle
JAVA 377
384Bytesquelle
C ++
269262258quelle
R
228201Mein erster Versuch, Code Golf zu spielen. Ich denke, es funktioniert, aber es ist nicht subtil.
quelle
Groovy,
142134129125120118Endlich mit Python 2 verbunden!
quelle
Kohle ,
282422 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Drucken Sie den oberen
O
Rand aus und lassen Sie den Cursor eine Stelle nach unten und links.Drucken Sie die Saiten
/
,\
und ,\
und wiederholen Sie für den absoluten Zahlenwert des Eingangs.Gehe zurück über den letzten
\
.Nachdenken, um die rechte Seite der Helix zu erzeugen. Ich mache das hier, weil die
↗
sonst nicht eindeutig analysieren würden.Überschreibe den letzten
\
mit einemO
.Wenn die Eingabe positiv war, drehen Sie die Zeichenfläche.
quelle
Canvas ,
333230 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
C ++, 352
Nicht die kürzeste Antwort, aber die erste in C ++ bisher :)
Hier ist es in C ++ Shell mit Leerzeichen zu testen
quelle
Perl 156
Ziemlich direkter Versuch, mein zweiter Golf. Ich denke, Zeilenumbrüche zählen als 1 Byte, oder?
Nun, um herauszufinden, wie man all diese Ternaries zusammenfügt. Ich habe viel Raum für Verbesserungen mit denen
:'';
überall.quelle
C 189 Bytes
Mit Leerzeichen und Zeilenumbrüchen:
Einige Anmerkungen zum Ansatz:
quelle
Perl, 184 Bytes
Ich dachte, das würde viel kürzer werden! Es gibt wahrscheinlich einige einfache Dinge, die ich tun kann, um ein paar Bytes zu sparen. Es ist fünf Jahre her, seit ich ernsthaft in Perl programmiert habe!
quelle
PHP, 155
quelle
J ,
67 59 5551 BytesProbieren Sie es online!
quelle