Die Herausforderung
Ihre Aufgabe ist es, ein Programm zu erstellen, das beliebige Zeichenfolgeneingaben akzeptiert und diese in einem quadratischen Format ausgibt. Leere Zeichenfolgen sollten eine leere Zeichenfolge zurückgeben.
Beispiele
Angesichts der Eingabe:
golf
Ihr Programm sollte folgendes ausgeben:
golf
o l
l o
flog
Eingang:
123
Ausgabe:
123
2 2
321
Eingang:
a
Ausgabe:
a
Eingang:
Hello, world!
Ausgabe (beachten Sie den Abstand zwischen, und w - die Lücke ist nicht nur ein Zeilenumbruch):
Hello, world!
e d
l l
l r
o o
, w
w ,
o o
r l
l l
d e
!dlrow ,olleH
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in jeder Sprache.
code-golf
string
code-golf
number
sequence
combinatorics
code-golf
tips
javascript
code-golf
kolmogorov-complexity
fibonacci
restricted-time
code-golf
ascii-art
code-golf
string
text-processing
code-golf
sequence
set-partitions
code-golf
kolmogorov-complexity
natural-language
code-golf
string
code-golf
math
code-challenge
restricted-source
code-golf
code-golf
number
base-conversion
cops-and-robbers
encryption
code-challenge
quine
optimized-output
king-of-the-hill
python
SpookyGengar
quelle
quelle
Antworten:
Kohle ,
75 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 2 Bytes dank @CarlosAlejo gespeichert. Erläuterung:
(Mehrere Richtungen zum Reflect-Befehl werden nicht gleichzeitig, sondern nacheinander ausgeführt.)
quelle
θ‖B↙↘
. Probieren Sie es online!ReflectOverlap
stattReflectButterfly
zu vermeiden Flipping Zeichen. :-)MATL ,
201611 BytesProbieren Sie es bei MATL online!
BEARBEITEN: Der Code funktioniert in Version 20.2.1, die der Herausforderung vorausgeht. Der Link verwendet diese Version. (In 20.2.2 wäre der Code kürzer, aber er datiert die Herausforderung nach).
Erläuterung
quelle
Jelly ,
29 2217 BytesHolzkohle
wird+ d diese Punktzahl abprallen ...Ein monadischer Link, der eine Liste von Zeichen aufnimmt und zurückgibt. oder ein vollständiges Programm, das das Ergebnis druckt.
Probieren Sie es online!
Wie?
quelle
'Hello'
"Spooky's""123"
usw. (Python wird zur Interpretation von Eingaben verwendet).C 109 Bytes
Probieren Sie es online!
Bemerkenswerte Tricks:
Anstatt Bytes zu verschwenden
strlen
, nehmen wir einfach die Länge des Strings und drucken gleichzeitig die erste Zeile:Dies funktioniert, weil
printf
die Anzahl der geschriebenen Bytes zurückgegeben wird.Für die mittleren Zeilen müssen wir die Zeichenfolge durchlaufen, aber sowohl das erste als auch das letzte Zeichen ausschließen. Dies wird mit der Bedingung erreicht
(was kürzer ist als
(++s)[1]
), wodurch das erste Zeichen übersprungen wird, weil++
es sich in der Bedingung befindet, und das letzte Zeichen übersprungen wird, indem angehalten wird, wenn das Zeichen hinter dem aktuellen Zeichen liegt'\0'
(anstatt angehalten zu werden'\0'
).Im Körper der ersten Schleife,
Wir drucken das aktuelle Zeichen und dann das entsprechende "gespiegelte" Zeichen (verfolgen
j
, was in die Negative geht, was zu der merkwürdigen Situation des Indizierens in eine Zeichenkette mit einer negativen Zahl führt), das auf eine Längei
mit Leerzeichen aufgefüllt ist (woi
ist das ?) bequemstrlen(s) - 1
).Der umgekehrte Ausdruck in der letzten Zeile ist ziemlich einfach. Der einzige Trick ist der
*s*~i--
, der der kürzeste Weg ist, umi+2
Iterationen des Schleifenkörpers zu erhalten (was nicht davon abhängti
; alles, wofüri
verwendet wird, ist zu zählen). Der funky-*s*
Teil stellt sicher, dass die Schleife nicht ausgeführt*s
wird'\0'
, wenn dies der Fall ist , was bei Eingabe von Länge 1 der Fall ist .quelle
Oktave, 40 Bytes
Probieren Sie es online!
Es ist meine Antwort, aber gepostet nach @ Luis MATL Antwort
quelle
Haskell ,
8478 BytesProbieren Sie es online! Verbrauch:
f "test"
. Gibt eine Liste von Zeilen zurück.Edit: -6 Bytes dank Dianne!
quelle
reverse
.r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
ist 78 Bytes.Python 2 ,
89818886 BytesProbieren Sie es online!
quelle
R , 113 Bytes
Probieren Sie es online!
quelle
05AB1E ,
17161519 BytesProbieren Sie es online!
Erläuterung
Beispiel mit
input = golf
Der Fix für 1-Buchstaben-Eingabe war ziemlich teuer.
Ich denke, ein anderer Ansatz könnte jetzt besser sein.
quelle
Python 2 ,
9988 Bytes-4 Bytes dank musicman523.
Probieren Sie es online!
Gibt eine Liste von Zeichenfolgen zurück.
quelle
s
unds[::-1]
in denjoin
Mathematica, 128 Bytes
quelle
C 96 Bytes
Bonusversion (122 Bytes):
quelle
Swift 3 ,
215199 BytesProbieren Sie es online aus
quelle
Python 3, 88 Bytes
quelle
l+1 and
könnte umgeschrieben werdenl+1and
, um ein Byte zu sparen.0or
, in dem Python nicht analysiert werden kann, weil0o
es sich um ein oktales Präfix handelt.JavaScript (ES8),
108112 BytesWeniger golphed
Vielen Dank an Justin Mariner für das Speichern vieler Bytes, die dann alle aufgebraucht waren und die Null- oder Einzelzeichenprüfung hinzugefügt haben, die zur Erfüllung der Herausforderung erforderlich war. Du bekommst das :-(
quelle
`+s[i+1].padEnd(s.length-1)+v,s)+`
und verwendenr.join``
.String.prototype.padStart
und Tags zu Vorlagenliteralen. Ich brauchte das, um den zusätzlichen(n=s.length-1)?(r=<...>+r.join``:s
und verwendenpadEnd(n)
. Wenn die Länge ist1
,length-1
ist0
(false).padEnd
ist ES2017.PHP , 118 Bytes
Probieren Sie es online!
quelle
APL , 58 Bytes
Mit
⎕IO←0
.Probieren Sie es online!
Wie?
c←≢⍵
- Länge der Zeichenfolger←⍳
- Reichweiteo←∘.⌈⍨
- äußeres Produkt mit Minimumo⌊⌽⊖
- Mit sich selbst um 180 o minimieren×
- multiplizieren mitx←∘....⍨r
- Außenprodukt des Sortiments mit((c-1)=⍺⌈⍵)∨0=⍺⌊⍵
- der Rahmen der Matrixx+
- füge den Rahmen hinzu(' ',⍵)[...]
- Holen Sie sich durch Index von der Zeichenfolge zu Leerzeichen verkettetquelle
⍉⊖⍉⊖
sein⌽⊖
?JavaScript (ES2017), 87 Byte
ES6-Version: 93 Byte
Weniger golfen
quelle
padEnd
ist ES2017.l+~i
diese Weise müssen Sie nicht zweimal 1 abziehen, sondern können 2 einmal abziehen.l-~-i
s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n`
abers=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n`
auch funktioniert.Java, 191 Bytes
quelle
(s)
kann gerecht seins
. Bei den Schleifen mit einzelnen Linien können die geschweiften Klammern entfernt werden. Sie könnten zurückkehren, anstatt zu drucken, wenn Sie dadurch Bytes sparen. Sie verwendenint i
in beiden Schleifen, ich kann nicht sagen, ob sie in verschiedenen Bereichen sind, aber es lohnt sich darauf hinzuweisen. Wenn Sie wie Variablen zusammen initialisieren, sparen Sie normalerweise Byte.for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}
->for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}
. Das nachgestellte Semikolon brauchen Sie nicht.C # (.NET Core) ,
179161 Bytes-18 Bytes dank TheLethalCoder
Probieren Sie es online!
Ich bin mir nicht sicher über die Regeln, ob dies benötigt wird, um Bytes zu zählen oder nicht:Bitte korrigiert mich jemand.Ungolfed:
quelle
using
in Ihre Byteanzahl einschließen . Wie Sie Linq verwendenToCharArray()
nur sein könnenToArray()
, brauchen Sie wirklich es vor demReverse()
obwohl? Da Sie es verwenden, müssenString
Sie es entweder vollständig qualifizieren oder die Verwendung einbeziehen. Dies kann jedoch leicht behoben werden, indem Sie es ebenfalls ändernstring
. Dasif
könnte kürzer sein als ein Ternärs+=l>1?if code:"";
. Sie können dasi++
aus der Schleife entfernen und es bei inkrementierend[i++]
.i
mitl
likeint l=s.Length-1,i=1;
. Und ich denke das könnte es sein!Netzhaut , 106 Bytes
Probieren Sie es online! Erläuterung:
Wenn mindestens zwei Zeichen vorhanden sind, duplizieren Sie die Eingabe.
Kehre das Duplikat um.
Drehen Sie die Saiten in Dreiecke. Das obere Dreieck beginnt mit der Eingabe und entfernt jedes Mal das erste Zeichen, während das untere Dreieck mit dem ersten Buchstaben der umgekehrten Eingabe beginnt und jedes Mal ein Zeichen hinzufügt.
Verbinden Sie die Dreiecke so, dass das letzte Zeichen die
/
Diagonale bildet .Ändern Sie alle Zeichen in Leerzeichen, wenn sie auf jeder Seite mindestens ein Zeichen vom Ende entfernt sind.
Löschen Sie alle verbleibenden Leerzeilen.
quelle
Python 3, 85 Bytes
Verwendung der Eingabe für die obere Reihe :)
quelle
Lua , 104 Bytes
Probieren Sie es online!
quelle
p
einmal benutzt ...Python 3, 106 Bytes
Eine funktionale Version ...
quelle
Python 2 , 100 Bytes
Probieren Sie es online!
quelle
Mathematica,
13891 BytesSie können es online ausprobieren, indem Sie Folgendes in die Wolfram Cloud Sandbox einfügen und auf "Zelle auswerten" klicken oder Umschalt + Eingabetaste oder Ziffernblock-Eingabetaste drücken:
quelle