Schreiben Sie ein Programm oder eine Funktion, die eine nicht leere einzeilige Zeichenfolge enthält. Sie können davon ausgehen, dass es nur druckbares ASCII ohne Leerzeichen enthält.
Drucken Sie oder geben Sie eine ASCII-Kunst-Raute zurück, die einer Zitrone oder einer Limette ähnlich ist, die von den Präfixen der Schnur gebildet wird.
Angenommen, die Eingabezeichenfolge besteht aus n Buchstaben. Dann besteht eine solche Form aus 2n - 1 zusammengenähten ASCII - Kunstspalten, die jeweils aus 2n - 1 Zeilen bestehen. Ab 1 gerechnet, ist die k- te Spalte f (k) = min (k, 2n - k) Zeichen breit und enthält f (k) Kopien der ersten f (k) Zeichen der Eingabe, vertikal zentriert, mit einem einzelnen Leerzeichen Zeilen, die die Kopien trennen.
Wenn die Eingabe beispielsweise lautet Lemon
, sollte die Ausgabe wie folgt lauten:
Lemon
Lemo Lemo
Lem Lemon Lem
Le Lemo Lemo Le
L Lem Lemon Lem L
Le Lemo Lemo Le
Lem Lemon Lem
Lemo Lemo
Lemon
Wenn der Eingang lime
der Ausgang ist, sollte sein:
lime
lim lim
li lime li
l lim lim l
li lime li
lim lim
lime
Und das gleiche Muster wird für andere Eingaben befolgt:
a
a
Be
Be
B B
Be
/\
/\
/ /
/\
cat
cat
ca ca
c cat c
ca ca
cat
|||
|||
|| ||
| ||| |
|| ||
|||
.__.
.__.
.__ .__
._ .__. ._
. .__ .__ .
._ .__. ._
.__ .__
.__.
$tring
$tring
$trin $trin
$tri $tring $tri
$tr $trin $trin $tr
$t $tri $tring $tri $t
$ $tr $trin $trin $tr $
$t $tri $tring $tri $t
$tr $trin $trin $tr
$tri $tring $tri
$trin $trin
$tring
Zeilen in der Ausgabe können abschließende Leerzeichen enthalten, und es kann eine optionale abschließende neue Zeile geben.
Der kürzeste Code in Bytes gewinnt.
Antworten:
Matlab,
140 136 128124 BytesGrundsätzlich fängt man mit dem Mittelteil an und fügt dann die gekürzten / geänderten Fassungen schrittweise voran / an.
Danke für 8 Bytes @LuisMendo!
ZB für
MATLAB
wir bekommen:quelle
flip
: /Python 2,
121110 Bytes116 Bytes bei Verwendung von
raw_input
. Das Programm erstellt im Wesentlichen eine Maske basierend auf der Entfernung L1-Norm / Manhattan vom Zentrum sowie der Parität dieser Entfernung im Vergleich zur Parität der eingegebenen Länge.(Danke an @Lynn für -9 Bytes und ebnet den Weg für 2 weitere)
quelle
s
wird am Ende der langen Zeile verwendet, daher ist dies leider nicht möglichR
.R
macht den Code viel ordentlicher!MATL , 44 Bytes
Ich habe mich von @ flawrs Antwort inspirieren lassen (obwohl der Algorithmus nicht derselbe ist)
Die Eingabe ist eine Zeichenfolge mit einfachen Anführungszeichen.
Probieren Sie es online!
quelle
JavaScript (ES6), 132 Byte
Prüfung
quelle
Pyth, 32 Bytes
Demonstration
quelle
Gelee,
3226 BytesProbieren Sie es online!
BEARBEITEN: Dennis sparte 6 Bytes. Vielen Dank!
quelle
JavaScript,
187178 BytesEin bitweiser Ansatz. Die Funktion
m
definiert eine Maske, indem sie bei beginnt2 ** length
, z. B.00100
in binärer Form, undm(n) = m(n-1) << 1 | m(n-1) >> 1
für die erste Hälfte definiert. Interessanterweise kann die zweite Hälfte als definiert werdenm(n) = m(n-1) << 1 & m(n-1) >> 1
. (obwohl das Programm sich stattdessen dafür entscheidet,m(n) = m(2 * length - 1)
für die zweite Hälfte zu definieren ) Von hier aus können diese Masken verwendet werden, um durch Überprüfen zu bestimmen, ob ein Wort oder ein Leerzeichen erscheinen soll2 ** column & m(row)
. Natürlich ist es in JavaScript kürzer,2 ** something
mit1 << something
...Anmerkung: geschrieben, während Sie müde sind.
Mai hat mitziemlicher Sicherheit Fehler.quelle
Haskell, 109 Bytes
quelle
Brachylog , 46 Bytes
Probieren Sie es online!
Schreckliche Byteanzahl und wahrscheinlich schlechtere Vorgehensweise (ganz zu schweigen davon, dass Brachylog nicht speziell für ASCII-Grafiken entwickelt wurde), aber ich habe genug Zeit darauf verschwendet, um es trotzdem zu veröffentlichen.
Der einzig clevere Teil davon ist die Verwendung von
a₁
, um die vertikalen Räume mit der größten zuerst zua₀
erzeugen, während die Wortpräfixe mit der kleinsten zuerst erzeugt werden, undzz
um einzelne Räume zu Raumblöcken zu erweitern, die der Breite der Präfixe entsprechen.quelle
TSQL, 259 Bytes
Golf gespielt:
Ungolfed:
Geige
quelle
C 167 Bytes
Dieses Programm erwartet, dass der Eingabetext als erster Parameter an das Programm übergeben wird (über die Befehlszeile oder anderswo) und schreibt die Ausgabe nach stdout.
Dies ist mein erster Versuch, hier Codegolf zu spielen, da dies eine vernünftige Herausforderung zu sein schien. Es kann also wahrscheinlich mehr gespielt werden, als ich konnte, nur weil ich es getan habe.
Erläuterung
Es ist wichtig genug, die Verwendung von
(n < m) ? n : (m * 2) - n
in dem Programm mindestens zweimal zu notieren , um den invertierten Abstand von einer Mittenpositionm
in einem Bereichm * 2
mit der Eingabe zu erhaltenn
. Wenn es einen kürzeren Weg dafür gibt, könnte man es einfacher machen, da dieser Algorithmus für die Funktionsweise dieses Programms wichtig ist.quelle
C 137 Bytes
Nervenzusammenbruch:
Dies zeichnet jedes Element des 2n-1 x 2n-1-Gitters, wobei eine Maskenfunktion entscheidet, ob das aktuelle Element ein Leerzeichen oder ein Eingabewort sein soll (die Maske prüft, ob eine Rautenform und ein Schachbrettmuster vorliegen).
quelle