Drucken Sie eine beliebige Zeichenfolge in Form eines Dreiecks aus, in dem der Text entlang jeder Diagonale nach oben und unten verläuft. Zum Beispiel sollte eine Eingabe von "Hello World"
:
d
l
r d
o l
W r d
o l
o W r d
l o l
l o W r d
e l o l
H l o W r d
e l o l
l o W r d
l o l
o W r d
o l
W r d
o l
r d
l
d
Der Abstand zwischen den einzelnen Zeichen in einer Zeile muss mindestens 1 betragen, um das richtige Format beizubehalten.
code-golf
string
ascii-art
code-golf
string
abstract-algebra
code-golf
ascii-art
binary
fractal
code-golf
array-manipulation
sorting
permutations
code-golf
code-generation
code-golf
sequence
binary
code-golf
date
code-golf
array-manipulation
restricted-source
decision-problem
primes
code-golf
multi-threading
code-golf
array-manipulation
code-challenge
decision-problem
natural-language
test-battery
code-golf
array-manipulation
code-golf
array-manipulation
code-golf
code-golf
graph-theory
Machiavelli
quelle
quelle
H l o W r d
es sich um eine gültige mittlere Zeile handelt? Fragen, weil in Ihrem Beispiel jede Zeile 3 Leerzeichen zwischen den einzelnen Zeichen enthält.Antworten:
Kohle ,
107 BytesProbieren Sie es online!Probieren Sie es online! Links führen zur ausführlichen Version des Codes. Erläuterung:Zum ersten Mal musste ich denUE
Befehl verwenden.quelle
UE
...UE
..05AB1E ,
1087 BytesVielen Dank an Emigna für das Speichern von 2 Bytes!
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
¶«
. (bestätigte auch die Gültigkeit mit OP)â
inðâ
stattSð«
!Python 2 , 75 Bytes
Probieren Sie es online!
Ruud sparte 3 Bytes.
quelle
C
86787370 ZeichenProbieren Sie es online!
Erläuterung
Naive Implementierung: Zwei Zyklen, füllen von oben nach unten, von links nach rechts (99 Bytes):
Hier druckt puts () nur \ n in die Ausgabe. Lassen Sie uns Variablendeklarationen kombinieren und j ++ mit etwas (94 Bytes) kombinieren:
Gut. Die Variable j hat einen Bereich von 0 ... 2n; Lass es in -n ... n sein, das macht die Mathematik einfacher. Beachten Sie, dass der boolesche Ausdruck rechts von && immer den Wert 0 oder 1 hat. Dies bedeutet, dass wir && durch & ersetzen können. 91 Byte:
Und jetzt haben wir festgestellt, dass wir einen zusätzlichen Raum drucken. Und ja, wir brauchen printf () nicht, um nur ein einziges Symbol zu drucken. 86 Bytes:
Noch besser. Beachten Sie, dass die Bedingung i * i> = j * j dieselbe ist wie i> = abs (j), jedoch kürzer. Lassen Sie uns Puts () in den Inkrement-Ausdruck der Schleife verschieben. Und rate was? Eigentlich brauchen wir die Klammern um i + j nicht. 78 Bytes:
Wussten Sie, dass putchar () das gedruckte Zeichen zurückgibt? Verwenden wir XOR, um Zahlen auf Äquivalenz zu testen. Ersetzen wir das Leerzeichen durch den ASCII-Code 32. Denken Sie daran, dass der Code für das Zeilenende 13 ist. Und schließlich: Wussten Sie, dass GCC / Clang https://en.wikipedia.org/wiki/Elvis_operator unterstützt ? 73 Bytes:
Raten sie mal was Wir brauchen keine zwei für Schleifen. Wir können hässliches ~ i + j durch nur ij ersetzen. 70 Bytes:
Zukünftige Arbeit: Schleifenrichtung ändern? Dies kann bei richtiger Ausführung einige Bytes einsparen.
quelle
SOGL V0.12 ,
13109 BytesDies verwendet eine Funktion, die ich gerade hinzugefügt , aber vor einiger Zeit dokumentiert wurde.
Probieren Sie es hier aus!
In diesem Link
,
wird hinzugefügt, weil dies die Eingabe auf dem Stapel erwartet und{
hinzugefügt, weil sonst,
jedes Mal in der Schleife ausgeführt würdequelle
Haskell , 73 Bytes
Probieren Sie es online!
quelle
Gaia , 16 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
8683 Bytes-3 danke an officialaimm
Probieren Sie es online!
quelle
Gelee , 15 Bytes
Probieren Sie es online!
quelle
Oktave,
59635857 BytesProbieren Sie es online!
quelle
99
: gute Idee :-)Java, 292 Bytes (Entschuldigung)
quelle
boolean a=1<0,o=L%2>0;
.. 2. Wenn Sie nicht braucheni
, benutzen Sie diese Schleife:for(i=0;i++<n;)
. 3. Sie können loswerdeno
:j%2<L%2
dannj%2>L%2
. 4.d
Als Flip zu benutzen, braucht so viele Zeichen: einfach tunj<(x<0?-x:x)
. 5. Sie haben weit mehr Variablen als benötigt. 6. Sie brauchen kein vollständiges Programm: Ein Lambda oder eine Methode ist ausreichend. - Wenn Sie ein Golf-Java-Beispiel wünschen, überprüfen Sie meine Antwort .Haskell , 81 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) , 116 Byte
Probieren Sie es online!
Erläuterung
quelle
C ++, 135 Bytes
Okay, hier ist meine Aufnahme mit C ++:
Probieren Sie es online aus (ideone)!
quelle
Haskell ,
140137 BytesProbieren Sie es online!
Gespeicherte 3 Bytes an Challenger5
Ich finde das nicht optimal ...
f
erzeugt eine der Zeilen (m
= 0 oder 1 ist das Modulo der Zeilennummer,n
ist die Nummer der Zeile)g
interkaliert "ungerade" und "gerade" Linien und fügt dem Ergebnis einen Spiegel seiner selbst hinzu.quelle
f
eine Infix-Funktion (wie in(m#n)s=...
) anstelle einer Präfix-Funktion definieren.Pyth , 25 Bytes
Probieren Sie es hier aus.
quelle
Jelly , 18 Bytes
Probieren Sie es online!
quelle
Mathematica 105 Bytes
Vielleicht könnte ich noch ein oder zwei Bytes abschneiden, aber der zusätzliche Aufwand für die Zeichenanzahl beim Umgang mit Zeichenfolgen in Mathematica macht einfache Herausforderungen wie diese nicht wettbewerbsfähig.
quelle
J, 54 Bytes
Probieren Sie es online! (Beachten Sie, dass die Ausgabe auf TIO eine neue Zeile und drei Leerzeichen hat, aber nicht vom Funktionsaufruf stammt - es ist wahrscheinlich genau das, was der J-Interpreter automatisch macht).
Ich denke, die allgemeine Idee, dies zu lösen, ist richtig, aber es gibt kleine Dinge, die ich wahrscheinlich suboptimal mache und die das bytecount erweitern.
Vorherige Varianten
55 Bytes
56 Bytes
Erläuterung
Dies wird in einige Funktionen aufgeteilt. Außerdem war ich mit den letzten Teilen der Erklärung nicht so gründlich. Lassen Sie mich wissen, ob Sie eine bessere Erklärung für einen bestimmten Teil wünschen, und ich kann diese in bearbeiten.
dup
dupliziert jedes Zeichen so oft wie sein Index (plus eins) in der Zeichenfolgespace
Fügt Leerzeichen zwischen die einzelnen Zeichen einpad
füllt die Zeichen mit der richtigen Anzahl von Leerzeichen auftrans
transponiert die resultierende MatrixBeispielanruf:
Dup
Die Ergebnisse sind mit einem Kästchen versehen, um zu verhindern, dass J die Enden mit Leerzeichen auffüllt (da sie ungleich lang sind).
Beispielanruf:
Platz
Beispielanruf:
Pad
Grundsätzlich füllen Sie das erste Element mit der Länge 1, das zweite mit der Länge 2 usw. auf. Dadurch wird auch der Rahmen entfernt.
Beispielanruf:
Transponieren
Dies ist nur die eingebaute Funktion,
|:
die die Transponierung einer Matrix übernimmt.quelle
|:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))
. es könnte sicherlich weiter golfen werden. Dieser Teil-@i.@-@#
ist etwas niedrig hängende Frucht, höchstwahrscheinlichf=. <some tacit expression>
gibt dann5!:2 <'f'
eine Box-Visualisierung und5!:4 <'f'
gibt eine Baum-Visualisierung. In meinem Fall versuchen Sie, zuerst$"0~1+i.@#
mit einer Zeichenfolge zu arbeiten, dann führen Sie alles rechts davon aus|."0 1
, dann verstehen Sie das|."0 1
und alles links, außer der endgültigen Transponierung, führt nur die erforderlichen Rotationen aus.#
Hilfen hier, 26 Bytes mit|:@((-#)|."_1(1j1##)"0)~#\
JavaScript (ECMAScript 6), 161 Byte
Probieren Sie es online!
quelle
Perl 5 , 86 + 2 (-F) = 88 Bytes
Benutzte @ Doms Vorschläge und ein paar meiner eigenen Optimierungen, um die Byteanzahl zu senken.
Probieren Sie es online!
quelle
-aF
, um alle Buchstaben@F
einzufügen, und ein paar kleine Änderungen vorzunehmen (-F
zählt als 3, da danach ein Leerzeichen erforderlich ist): Probieren Sie es online aus!perl -e'code...'
undperl -eF 'code...'
? Auch-a
ist bei der Verwendung unnötig-F
, damit Byte geschnitten werden kann.-F
ein Argument akzeptiert, aber wir haben nicht ein in wollen passieren (-F
ermöglicht es uns , zu kontrollieren , was-a
spaltet auf, kein Argument, geteilt jedes Zeichen auf eigenem) , so ist es der Unterschied zwischenperl -ae '...'
undperl -aF -e '...'
. Standardmäßig ist die-a
Aufteilung aktiviert/\s+/
. Ich hoffe, das hilft zu klären!$#F
! Vergiss das immer!q / kdb + 55 Bytes
Lösung:
Beispiel:
Erläuterung:
MACHEN. ungolfed version ist 66 bytes:
Bonus:
So erhalten Sie die gleiche Ausgabe wie im Beispiel (74 Byte):
quelle