CJam, 32 30 29 28 Bytes
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Teste es hier.
Ich habe versucht, Reto bei der Beantwortung seiner CJam-Frage zu helfen, aber am Ende hatte ich eine Lösung, die nichts mit seiner zu tun hatte.
Erläuterung
Dies nutzt die Symmetrie des Ausgangs. Insbesondere die Tatsache, dass die Ausgabe mit der Transponierung identisch ist.
Zuerst erzeugen wir die ersten N+1
Zeilen, aber ohne den linken Rand:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Jetzt haben wir eine Reihe von Zeichenfolgen, die das folgende Raster darstellen:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
Die Umsetzung sieht so aus:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Zusammen haben diese alle nicht-Leerzeichen, die wir brauchen. Wir können jetzt Dennis 'rad-Tipp verwenden , um zwei ASCII-Gitter zu einem zu kombinieren, indem wir das Maximum von jedem entsprechenden Zeichenpaar nehmen. In allen Positionen, in denen sich die beiden Gitter unterscheiden, hat eines ein Leerzeichen (oder gar nichts) und das andere den Charakter, den wir suchen. Wenn eine Liste in einer vektorisierten Operation länger als die andere ist, werden die zusätzlichen Elemente der längeren Liste einfach beibehalten, und genau das ist, wonach wir suchen. In den anderen Fällen ist das Nicht-Leerzeichen immer das Maximum der beiden Zeichen:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
s entfernen .Python 2, 80 Bytes
quelle
Mathematica,
123122121 BytesKönnte wahrscheinlich weiter golfen werden.
quelle
Java - 141 Bytes
Natürlich nicht die kürzeste, aber schön, eine Java-Lösung zu haben:
Ungolfed
Eingang
Ausgabe
quelle
Pyth, 30 Bytes
Probieren Sie es hier aus .
quelle
JavaScript,
128125123114 BytesDe-Golf (auch auf ES5 umgestellt) + Demo:
quelle
Ruby, 50 Bytes
Im Testprogramm:
Die Schleife druckt 2 Zeilen für jede Iteration von i = 0 bis i = n-1.
Auf die zweite Reihe
'\'
folgen immer ni Vorkommen von'/ '
.Die erste Zeile ist die gleiche wie die zweite Zeile der vorherigen Iteration, jedoch mit dem
'\'
fehlenden (daher speichern wir diesen Wert in,s
wenn wir die zweite Zeile der vorherigen Iteration drucken.)Die einzige Ausnahme ist die Iteration Null, die bei der Initialisierung
s
auf behandelt wird'/\'*n
.quelle
Javascript (ES6),
10710410098979190 BytesErster Beitrag hier!
Verwendet zu verwenden
Array(len)
.
join(str)
aber jetzt verwendetString.repeat(len)
, ähnlich wie Ruby'soperator*(str,len)
.Ungolfed:
Dank an:
107 => 104 Bytes: @insertusernamehere
97 => 90 Bytes: @ user81655
quelle
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
Methode gezeigt haben.Python 2, 66 Bytes
Ziemlich einfach. Der Wert
n
ist die Nummer/
in der Zeile undb
gibt an, ob die Zeile mit beginnt\
. Der Wert vonb
wechselt zwischen 0 und 1 undn
nimmt mit jedem zweiten Schritt ab. Die hässliche Beendigungsbedingung hört auf, wennn=1, b=0
. Die Alternative einerexec
Schleife hätte das Problem, dass viele Fluchtwege erforderlich sind"'\\\\'"
.Ich war überrascht, dass dieser Ansatz kürzer war als die Verwendung einer einzelnen Zahl
k=2*n+b
. Das sind 68 Bytes:Eine alternative Strategie würde eine Trennung
print
für die oberste Zeile vermeiden , aber ich sah keinen prägnanten Weg.quelle
Minkolang 0,14 , 46 Bytes
Ich bin mir sicher, dass das Golf spielen könnte, aber es ist 4 Uhr morgens und ich muss ins Bett.
Probieren Sie es hier aus.
Erläuterung
quelle
Batch, 121 Bytes
Oder wenn unary akzeptabel ist, 107 Bytes:
Rufen Sie mit der entsprechenden Anzahl von 1s auf.
quelle
Matlab, 122 Bytes
quelle
Haskell, 99 Bytes
Zwei Lösungen gleicher Länge.
Rufen Sie an
f
.und
quelle
Haskell, 96
Dies ist im Vergleich zur vorhandenen Haskell-Lösung nicht konkurrenzfähig, da 5 Zeichen gespart werden, indem ein String zurückgegeben wird, anstatt gedruckt zu werden. Ich poste es nur, um zu zeigen, wie der Unendlichkeitsmusteransatz mit dem koordinatenbasierten Ansatz verglichen wird. Anmerkungen:
p
kann für keine Längenänderung inliniert werden.[t n l|(n,l)<-...]
spart 2 über(map(uncurry t)$...)
.quelle
Ceylon, 100
Dies beinhaltet eine "benannte Argumentliste" für
join
(ohne benannte Argumente, aber stattdessen ein iterierbares Verständnis) und mehrere VerwendungenString.repeat
(von denen eine tatsächlich "nur für ungerade enthalten" bedeuteti
" bedeutet).Formatiert:
quelle
PHP, 117 Bytes
Es wird davon ausgegangen, dass Benachrichtigungen deaktiviert sind und die Eingabe über die Befehlszeile erfolgt.
Ungolfed:
Kommentare sind willkommen :)
quelle