Bei sportlichen Wettbewerben werden die Sieger häufig auf dem Podium präsentiert, wobei die Person mit dem ersten Platz auf dem höchsten Platz in der Mitte, die Person mit dem zweiten Platz auf der mittleren Höhe links und die Person mit dem dritten Platz auf dem niedrigsten und dem höchsten Platz steht auf der rechten Seite. Wir werden das hier mit einigen speziellen Verbesserungen nachbilden.
Die Podien sind unten dargestellt:
@---@
| @ |
@---@| | |
| @ || | |
| | || | |@---@
| | || | || @ |
Dies wird die Grundlage für diese Herausforderung bilden. Der nächste Schritt besteht darin, die Podien so breit zu machen, dass sie zu den darauf befindlichen Personen passen (druckbare ASCII-Zeichenfolgen). Wir möchten jedoch eine ästhetische Schönheit sicherstellen (da dies eine fantastische Fotomöglichkeit ist), daher muss jedes Podium dieselbe Breite haben und die Breite muss ungerade sein. Zusätzlich wollen die Leute (offensichtlich) in der Mitte des Podiums stehen, daher müssen die Saiten so gut wie möglich zentriert sein. (Sie können entweder nach links oder nach rechts ausrichten, und es muss nicht konsistent sein.) Die oben genannten Podien sind die Mindestgröße und gelten als 3
breit.
Wenn beispielsweise die Eingabe ["Tom", "Ann", "Sue"]
den ersten, zweiten bzw. dritten Platz darstellt, werden die folgenden Podien ausgegeben:
Tom
@---@
Ann | @ |
@---@| | |
| @ || | | Sue
| | || | |@---@
| | || | || @ |
Wenn dies jedoch der Anne
Fall ist Ann
, müssen wir zur nächsten Größe aufsteigen 5
und die Zeichenfolgen so gut wie möglich zentrieren. Hier werde ich so ausrichten, dass der "zusätzliche" Buchstabe von Anne
links von der Mitte ist, aber Sie können wählen, auf welche Seite ausgerichtet werden soll.
Tom
@-----@
Anne | @ |
@-----@| | |
| @ || | | Sue
| | || | |@-----@
| | || | || @ |
Lassen Sie uns für einige längere Namen gehen. Wie wäre es mit ["William", "Brad", "Eugene"]
:
William
@-------@
Brad | @ |
@-------@| | |
| @ || | | Eugene
| | || | |@-------@
| | || | || @ |
Hier sehen wir, dass Brad
es viel Leerzeichen Eugene
gibt und William
genau richtig passt.
Für einen längeren Testfall, wie wäre es mit ["A", "BC", "DEFGHIJKLMNOPQRSTUVWXYZ"]
:
A
@-----------------------@
BC | @ |
@-----------------------@| | |
| @ || | | DEFGHIJKLMNOPQRSTUVWXYZ
| | || | |@-----------------------@
| | || | || @ |
Schließlich haben wir den kleinstmöglichen Input, so etwas wie ["A", "B", "C"]
:
A
@---@
B | @ |
@---@| | |
| @ || | | C
| | || | |@---@
| | || | || @ |
- Die Ein- und Ausgabe kann auf jede bequeme Weise erfolgen .
- Die Eingabe ist garantiert nicht leer (dh Sie erhalten niemals
""
einen Namen). - Sie können es an STDOUT drucken oder als Funktionsergebnis zurückgeben.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Beliebige Leerzeichen sind zulässig, sofern die Zeichen richtig ausgerichtet sind.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Antworten:
JavaScript (ES8), 196 Byte
Probieren Sie es online!
quelle
Groovy ,
187,176,156, 150 BytesProbieren Sie es online!
(Hinweis: Der tio groovy-Interpreter konnte keine Indizierungslisten mit Long-Werten verarbeiten, obwohl Groovy 2.5.6 dies kann. Daher wird die tio-Antwort
*.toShort()
anstelle von verwendet*.toLong()
ein Byte.)Definiert einen Abschluss,
f
der aufgerufen werden kann über:woher
f
eine Zeichenfolge zurückgegeben.Erläuterung:
Den Code nicht verschleiern, wir haben:
f={n->
- Abschluss f mit einem In-Parameter definierenn
m=n*.size().max()|1
- finde max name len, binär oder ungerade nummerh=' '*(m/2)
- h enthält Bodenflächen (m / 2), die später verwendet werdena=...
- Erstellt eine Kodierungsliste mit Elementen:@---@
muster, gepolstert nach len| @ |
muster, gepolstert nach len| | |
muster, gepolstert nach len'307...'*.toLong().sum{a[it]}
- Verwenden Sie Hinweise in der Codierungsliste, um das Ergebnis zu erstellen..sum
verwendet die Tatsache, dass String + String in Groovy gültig ist.'3073...'*.toLong()
den*.
Spread-Operator zum Aufrufen verwendettoLong()
jedes Zeichen und eine Liste von Zahlen zurückzugeben.a
eingebettet, die Zeilen entfernt usw. wurde.quelle
Canvas , 45 Bytes
Probieren Sie es hier aus!
Erläuterung:
Missbrauch "und es muss nicht konsequent sein", was es ziemlich unverständlich macht.
quelle
Python 2 ,
197190 BytesProbieren Sie es online!
-6 Bytes dank Andrew Dunai
quelle
x,y,p='@| '
undp
anstelle von' '
Python 2 , 157 Bytes
Probieren Sie es online!
quelle
Kohle , 63 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Berechnen Sie die Anzahl der Felder in jeder Hälfte eines Podiums.
Schleife über jeden Ort. Beachten Sie, dass die Eingabe in der Reihenfolge 2., 1., 3. erwartet wird.
Positionieren Sie an den Anfang der Zeile, die den Text enthalten soll.
Geben Sie den Text mit genügend Abstand aus, um ihn zu zentrieren.
Holen Sie sich die Höhe des Podiums.
Ziehe das Podium.
Alternativer Ansatz, auch 63 Bytes:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Berechnen Sie die Anzahl der Felder in jeder Hälfte eines Podiums.
Schleife über jeden Ort. Beachten Sie, dass die Eingabe in der Reihenfolge 2., 1., 3. erwartet wird.
Positionieren Sie an den Anfang der Zeile, die den Text enthalten soll.
Geben Sie den Text mit genügend Abstand aus, um ihn zu zentrieren.
Geben Sie auch die Spitze des Podiums aus, indem Sie
-
s zwischen die Zeichen der Zeichenfolge einfügen@-@
, um die richtige Breite zu erreichen.Drucken Sie den Rest des Podiums aus, indem Sie den
|
entsprechenden Abstand zwischen den Buchstaben "s" festlegen, mit der Ausnahme, dass sich das mittlere Zeichen "a"@
in der ersten Zeile befindet.quelle
R
308302299-6 Bytes dank @JAD
-3 Bytes dank @Guiseppe, jetzt bin ich unter 300
Es gibt wahrscheinlich eine bessere Möglichkeit, das Layout zu erstellen. Ich sollte versuchen, welche Optionen ich für Datenrahmen habe.
Probieren Sie es online aus
quelle
i=max(1,nchar(a)%/%2)
. Das Generierenmatrix
und Verwenden vonwrite
kann kürzer sein (als adata.frame
). Ich empfehle die Verwendung vonformat
mitj="c"
, um Dinge automatisch zu rechtfertigen, und diesstrrep
ist auch in diesem Fall hilfreich. Vielleicht versuchen Sie es im golfR Chatroom , um Ideen zu sammeln ?strrep
. Ich muss das untersuchen.Sauber , 209 Bytes
Probieren Sie es online!
quelle
Python 2 , 188 Bytes
Probieren Sie es online!
-5 danke an TFeld .
quelle
PHP, 147 Bytes
93 Bytes von meiner ursprünglichen Idee entfernt
<?=
:Nimmt Namen von Kommandozeilenargumenten. Laufen Sie mit
-nr
oder versuchen Sie es online .Benötigt PHP 7; liefert Warnungen in PHP 7.2 (und vermutlich später). Im TiO finden Sie eine +5-Byte-Korrektur.
Kartierung:
Nervenzusammenbruch:
Das Pre-Increment für
$i
erspart mir Tricks für die Newlines.Das Leerzeichen für
6
kann auch leer sein. also habe ich das gemacht.Aber
$argv[0]
für die Top Border Saite zu verwenden-
war das schönste Golf, das es je gab. (und 9 Bytes gespart!)quelle
Los, 436 Bytes
Go ist fürchterlich zum Golfen. Aber:
Heruntergebrochen:
quelle
Java 8,
399394373 BytesDiese Lösung ist wahrscheinlich viel zu lang, aber es ist eine Lösung :)
5 Bytes durch direkte Iteration in der angegebenen Reihenfolge gespeichert (a = 1,0,2 anstelle von q = 0,1,2; a = f (q))21 Bytes gespart dank @KevinCruijssen:Wie @KevinCruijssen vorschlug, könnte man auch
var
anstelle von verwendenString
Java 10+ auch etwas mehr Bytes einsparen. Ich mache das nicht aus dem einfachen Grund, weil ich Java 10 noch nicht besitze: D Außerdem könnten Lambdas verwendet werden. Dies würde jedoch nur die Anzahl der Bytes verringern, wenn wir die Zuweisung zu einerFunction<String[],String>
Variablen weglassen würden .In erweiterter Form:
Die Eingabe muss als
String
-array der Länge 3 angegeben werden. Ein Beispiel sieht folgendermaßen aus:Ausgabe:
quelle
var
stattString
; füllte das Längenfeld mit einer for-each-Schleife; geändertif(m%2==0)m++;if(m==3)m=5;
zum+=m%2<1?m==2?3:1:0
für den gleichen Effekt; alles geändert%nr==0
zu%nr<1
; änderte das%(m-1)
zu%~-m
; Legen Sie alles in die Schlaufe selbst, damit die Klammern{}
entfernt werden können.m-l[a]>>1
statt(m-l[a])/2
undi<k+2?" ":j%~-m<1?"|":j==m/2?i==k+2?"@":"|"
statti>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" "
C (GCC)
302293292289287 Bytes-6 byte dank ceilingcat
Führen Sie es hier aus
Ungolfed und Explained (technisch gesehen kann man nach Backslashes in Makros keine Kommentare haben, so dass dies nicht funktioniert)
Hier ist die Vorwahl
und Ausgabe
quelle
for(;i--;memset(D+1,45,w))w=w<(L[i]=strlen(N[i]))?L[i]|1:w;
stattdessen vorfor(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);
PowerShell für Windows,
231223 ByteProbieren Sie es online!
Eingabe ist Array
@('second','first','third')
. Abgerollte Version:quelle
Stax , 43 Bytes
Führen Sie es aus und debuggen Sie es
quelle