Schreiben Sie ein Programm oder eine Funktion, die eine positive Ganzzahl (über stdin, Befehlszeile oder Funktionsargument) einliest und eine Zeichenfolge aus so vielen kleinen Dreiecken ausgibt oder zurückgibt, die nebeneinander angeordnet sind.
/\
/__\
Dieses einzige Dreieck ist die Ausgabe, wenn die Eingabe ist 1
.
Wenn der Eingang ist 2
, ist der Ausgang
____
/\ /
/__\/
Wenn der Eingang ist 3
, ist der Ausgang
____
/\ /\
/__\/__\
Wenn der Eingang ist 4
, ist der Ausgang
________
/\ /\ /
/__\/__\/
Und so weiter. Ihr Programm muss Eingaben bis zu 2 16 - 1 = 65535 unterstützen.
Einzelheiten
- Das linke Dreieck zeigt immer nach oben.
- Möglicherweise sind nachgestellte Leerzeichen vorhanden, es dürfen jedoch keine unnötigen führenden Leerzeichen vorhanden sein.
- Es kann eine optionale nachgestellte Newline geben.
- Beachten Sie, dass
1
die Ausgabe zwei Zeilen lang ist, ansonsten jedoch drei. Dies ist erforderlich. - Die kürzeste Übermittlung in Bytes gewinnt.
SQL,
182175173187 BytesNicht, dass dies jemals die kürzeste sein wird, aber es ist immer noch amüsant, zu versuchen, sql zu minimieren;) lol Ich habe dies in Oracle 11 getan, dies sollte jedoch grundlegendes SQL sein. [edit] Wie bereits erwähnt, habe ich die Regel when input = 1 nicht angewendet - nur 2 Zeilen anzeigen. Ich kann mir keinen besseren Weg vorstellen, dies zu tun, aber ich habe ein paar Bytes durch Modifizieren der v-Logik gespart;) Das Hinzufügen von 2 im Voraus spart ein paar Bytes, da ich es später nicht wiederholen muss [/ edit]
[edit1] entfernt einige unnötige Leerzeichen [/ edit1] [edit2] geändert && i zu nur & i. Es reduziert 2 Zeichen, zwingt den Benutzer jedoch, die Anzahl der Dreiecke zweimal einzugeben ...: PI erkannte, dass meine "guten Codierungsgewohnheiten" mit && 2 Byte kosteten !! Der Horror!! [/ edit2]
Erläuterung (Hinweis: Ich verwende && 1 in dieser Erklärung, sodass nur eine Eingabeaufforderung angezeigt wird. Die obige & 1 spart Code-Platz, fordert jedoch mehrere Eingabeaufforderungen auf;))
Ausgabe
quelle
from
? Wenn ja, sparen Sie ein Byte.Python 2,
8988878583 benannt / 81 unbenannt(Danke an @orlp für ein Byte und @xnor für weitere drei)
Dies ist eine Funktion, die eine Ganzzahl aufnimmt
n
und die Dreiecke nach dem zeilenweisen Ansatz als Zeichenfolge zurückgibt.zB
print f(10)
gibtFür die erste Zeile verwenden
(n>1)*
wir anstelle von1%n*
, da1%n
ist 0 ifn == 1
und 1 ifn > 1
.quelle
" /\\ "
in" /\ "
."\n".join()
for 3-Elementen, auch wenn die Liste zum bedingten Entfernen des ersten Elements verwendet wird. Vielleicht ist sowasb*(x+"\n")+y+"\n"+z
kürzer?JavaScript (ES6), 101
109Viel zu lang
Erläuterung
Fettpfeil zur Funktionsdefinition verwenden. Außerdem kein
{}
Block: Der Funktionskörper ist ein einzelner Ausdruck, der den Rückgabewert darstellt.f=(a,b,c)=>expr
ist äquivalent zuInnerhalb eines einzelnen Ausdrucks können Sie keine Anweisungen wie
if
odervar
, aber verwenden?:
funktionieren gut anstelle vonif else
w
der Funktion der zweite (nicht verwendete) Parameterz
Wir können die
f
Funktion als umschreibenTest in der Firefox / FireBug-Konsole
Ausgabe
quelle
w
n=>(n>1?' '+'____'.repeat(n/2)+'\n':'')+' /\\ '.repeat(n).slice(0,n*2+2-n%2)+'\n'+'/__\\'.repeat(n).slice(0,n*2+1+n%2)
auf 119 gekommen (absichtlich ohne Template-Strings usw., um Ihrer Antwort zu entsprechen).CJam,
555351 BytesIch habe versucht, meine Python-Antwort zu portieren, und es stellte sich heraus, dass sie kürzer war als die anderen CJams.
Permalink .
quelle
Haskell
155153139131 BytesIch fand einen etwas anderen Ansatz, der sich als kürzer als meine ursprüngliche Methode herausstellte. Mein ursprünglicher Versuch ist unten erhalten. Golftipps sind nach wie vor willkommen.
Danke an Nimi für die Golftipps.
Vorheriger Versuch
197179 Bytesquelle
(mod n 2)==0
isteven n
oder eine bessere Nutzungodd n
und die tauschenthen
undelse
Teil. Diesconcat.take(div n 2).repeat
liegttake(4*div n 2).cycle
daran, dass alle Listenelemente die Länge 4 haben. Weisen Sie Funktionen mit langen Namen Kurznamen zu, z . B.z=zipWith
- und verwenden Sie dannz
. Sie können ein paar Räume rausschmeißen...repeat""else[...
.foldr z["","",""]
istfoldr1 z
, weil die zu faltende Liste niemals leer ist. Anstelle von könnenall(==' ')
Sie==" "
(<- zwei Leerzeichen dazwischen) verwenden, da bei n = 1 die leere Zeile entfernt wird und hier die erste Zeile ist" "
. Die erste Definitiont
kann in einer einzigen Zeile geschrieben werden:t n|odd...
.CJam,
7368636260 BytesDas braucht auf jeden Fall etwas Golf ...
Teste es hier.
Erläuterung
quelle
Julia, 115 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl akzeptiert und die Dreiecke druckt. Um es zu nennen, geben Sie ihm einen Namen, z
f=n->(...)
.Ungolfed + Erklärung:
Beispielausgabe:
Ich bin ziemlich verblüfft, dass das so lang ist. Ich bin mir sicher, dass es viele Möglichkeiten zum Golfen gibt, aber sie sind mir im Moment nicht klar. Lassen Sie mich wissen, wenn Sie Vorschläge haben oder weitere Erklärungen wünschen!
quelle
CJam,
68 6260 BytesSoweit ich sehen kann, ist dies ein völlig anderer Ansatz als die andere CJam-Lösung. Dies kann viel Golf gespielt werden.
Probieren Sie es hier online aus
quelle
C # 190
Ungolfed
quelle
while
Schleife zu verwenden, sondern einefor
Schleife. In diesem Fall können Sie 2 Bytes einsparen, indem Sie die Definition vonm
in die for-Schleifeninitialisierung aufnehmen undb=!b
als letztes, was auch immer es heißt. Sie können auch Einsparungen durch den Austauschstring
undbool
mitvar
. Sie brauchen auch nicht die "()" umn>1
Klauseln, und in ders+=
Klausel können Sie das Nicht-Kurzschließen verwenden,&
anstatt&&
dass es keine Nebenwirkungen oder Dereferenzen gibt, die schief gehen. Schließlich1>0
ist kürzer alstrue
;)C #,
257183 BytesBearbeiten: Dank der Tipps von @VisualMelon, 74 Bytes gespeichert.
Ich weiß, dass es nicht die beste Sprache ist, in der man Golf spielen kann, aber ich bin hauptsächlich daran interessiert, die verschiedenen Nuancen von C # kennenzulernen, anstatt den Wettbewerb zu gewinnen. Dies ist im Grunde ein Port dieser Pyth-Antwort.
Ich denke, die for-Loops könnten weiter golfen werden, aber ich bin mir angesichts der darin eingebetteten tertiären Aussagen nicht ganz sicher, wie.
Beispiel (1, 2, 3, 10):
Ungolfed:
quelle
s+=
ist Ihr Freund , wenn Sie eine niedrige Byteanzahl möchten . In der Tat, Sie sind für Schleifen können ein bisschen kompakter gemacht werden. Die Freude / der Schrecken der++
und--
-Operatoren bedeutet, dass Sie den größten Teil der Arbeit in der bedingten Prüfung erledigen könnenfor(i=0;i++<=t;)
(diese prüft, ob siei
kleiner oder gleich istt
und erhöht sie dann). Es empfiehlt sich, dieint i
äußere for-Schleife zu definieren und wiederzuverwenden, und da Sie garantieren können, dassi
sie niemals negativ ist,i%2==0
kann sie gegen eine ausgetauscht werdeni%2<1
. Mit diesen Änderungen wird leicht eine Unter-200-Byte-Bewertung erreicht.Enumerable
normalerweise eineusing System.Linq
Direktive erfordert , und ich denke, es ist allgemein beabsichtigt, dass solche Klauseln enthalten sind. In diesem Fall kann jedoch der einzige LINQ ersetzt werden,var s=" "+string.Join("____",new string[1+t/2])+n;
der keinen LINQ enthält und kürzer als der aktuelle Code ist. Er verbindet viele Nullzeichenfolgen mit dem, was uns wirklich wichtig ist, "____" (1 + t / 2) weil wir einen anderen Null-String brauchen, um vorher auf ein anderes "____" zu passen). Die Variablen
wird als "\ r \ n" deklariert.Console.Write
anstelle vonConsole.WriteLine
Java, 185
Erläuterung
quelle
C # -
151146141138Inspiriert von der Antwort von @ bacchusbeale
Ungolfed
quelle
new String
ist eine neue für mich! Sie scheinen Ihret=""
von der Golf-Version vermisst zu haben , obwohl eine bessere Sache zu tun wäre,t
als "\ n" zu initialisieren . Sie können durch Anhängen ein paar Bytes speichern ,t
wo Sie drehenb
, das Speichern der „{}“ auf der for-Schleife:t+=(b=!b)?"/":"__\\"
.t
vors
und fügen Siet
auf den String statt"\n"
;)Gehen,
156144Ungolfed:
Der einzige wirkliche Trick hier (und es ist nicht einmal ein guter Trick) ist die Verwendung von 3 Akkus, damit ich die Lösung auf 1 Schleife zusammenfassen kann.
Der Code kann hier ausgeführt werden: http://play.golang.org/p/urEO1kIjKv
quelle
c += `__\`
anstelle vonif i<n{c+="_"}
> <> (Fisch) ,
215183156 BytesBearbeiten: Notepad ++ gab mir 5 zusätzliche Bytes aufgrund von CR, also entsprechend geändert zählen
Etwas mehr Golf, aber es ist mein erstes Fischprogramm.> _ <Die Anforderung, für 1 Dreieck keine leere erste Zeile zu haben, hat die Größe des Programms verdoppelt.
Kann unter http://fishlanguage.com/ getestet werden (Int auf dem ersten Stack für die Länge)
Erläuterung:
quelle
perl
109108106Ich denke, das ist in Ordnung für mein erstes Golfspiel. Ich habe Vynces Abschnitt für die erste Zeile verwendet und den Rest meines Codes, um das Problem mit der neuen Zeile mit einem Dreieck zu überwinden.
Nun, um zu sehen, ob ich es kürzen kann :)
Edit : Leerzeichen
Edit 2 : ersetzt
"\n"
durch$/
quelle
C89, 150
Eine ungolfed Version:
Die Ausgabe:
Der Stack läuft über, wenn ich eintrete
65535
(aber nicht, wenn du mit compilierst-O3
!), Aber theoretisch sollte es funktionieren ;-)edit: program erfüllt nun die Anforderung, dass nur zwei Zeilen ausgegeben werden sollen, wenn
1
an das Programm edit 2 übergeben wird: useint*
stattchar*
quelle
main
alsmain(c,v)**v;
ob das funktioniert.c
odern
als globale Variable speichern können, damit Sie diesen Parameter nicht übergeben müssenr()
. Ich glaube nicht, dass Ihre Antwort mitNote that for 1 the output is two lines long but otherwise it's three. This is required.
error: expected declaration specifiers before ‘*’ token main(c,v)**v;{
n
oderc
das ist auch kürzer.int**
?C ++ stdlib, 194 Bytes
Testprogramm:
quelle
Bash,
166127125119105 BytesIn einer Funktion:
Mit einigen Präsentationen:
Darf rendern (wenn du figlet installiert hast ):
Speichern Sie 2 Zeichen, wenn Sie eine Eingabe von einer Variablen anstelle von
$1
103 vornehmenIn die Schleife:
Wird (ungefähr) gleich rendern:
quelle
Kohle , 27 Bytes (nicht konkurrierend)
Nicht konkurrierend, weil die Sprache die Herausforderung datiert.
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Generieren Sie eine Liste abwechselnder Längenbits
n
und durchlaufen Sie diese.Zeichnen,
____
ohne den Cursor zu bewegen.Zeichnen Sie auf dem ersten und jedem zweiten Dreieck die linke
/
Seite.Zeichnen Sie die
\
Seite, ohne den Cursor zu bewegen.Zeichnen Sie im zweiten und in jedem zweiten Dreieck
\
erneut die linke Seite, um den Cursor zu bewegen.Zeichnen Sie im zweiten und in jedem zweiten Dreieck die rechte
/
Seite, ohne den Cursor zu bewegen.quelle
PowerShell ,
11695 BytesEin großes Dankeschön an Mazzy und ASCII-Only für die Einsparung von 21 Bytes
Probieren Sie es online!
Wenn für n = 1 keine leere Zeile zulässig ist, entspricht dies
1410 Byte. Diese Lösung istziemlich hirntotjetzt viel schlauer mit einer minimalen Menge von wiederholtem Code. Banker's Rounding ist immer noch der eigentliche Teufel.quelle
C, 368 Bytes
Es ist mehr, wenn Sie die
#include
Aussagen zählen, aber sie wurden auf gcc kompiliert, wenn auch mit Warnungen, ohne sie. Ich weiß, dass es bei weitem nicht die kürzeste ist, aber ich mag es immer noch, dass ich es in C gemacht habe.quelle
#define p(c)printf(c)
ist kürzer als Ihre Funktion. Sie können Rückgabetypen für Funktionen weglassen (standardmäßigint
). Sie können die Funktion auch in diesemC89
Stil definierenmain(c,v)char**v;{}
. Das ist dieint main(int c, char** v){}
Perl (einfach)
131125120ziemlich einfacher erster Durchgang:
oh wer braucht explizite int?
quelle
Prolog, 126 Bytes
Rufe wie auf
$3
.Besser lesbar:
Beispiel:
quelle
C #: 1 Zeile LINQ, 198 Bytes
quelle
Netzhaut , 88 Bytes (nicht konkurrierend)
Nicht konkurrierend, weil die Sprache die Herausforderung datiert.
Probieren Sie es online! Erläuterung:
Ersetzen Sie die Eingabe durch ein Paar Dreiecke.
Multiplizieren Sie die Dreiecke mit der ursprünglichen Eingabe.
Teilen Sie die Dreiecke durch 2.
Entfernen Sie das übrig gebliebene halbe Dreieck.
Entfernen Sie die erste Zeile, wenn sie jetzt leer ist.
quelle
Perl 6 , 83 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine Zahl annimmt und eine Zeichenfolge zurückgibt.
quelle
C (GCC) ,
117115 Bytes-2 dank ceilingcat.
Alle diese Klammern deuten darauf hin, dass etwas weniger Klobiges möglich ist.
Probieren Sie es online!
quelle
05AB1E , 37 Bytes
Probieren Sie es online aus oder überprüfen Sie die ersten 10 Ausgänge .
Erläuterung:
quelle
Java 11, 122 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle