pb , 83 bytes
^<b[1]>>>w[B!0]{<w[B!0]{t[B]<b[T]>>}<b[0]<b[0]<[X]>>}w[B=0]{<}t[B]<[X]t[B+T]vb[T/2]
Während die Eingabezeichenfolge mindestens 3 Zeichen enthält, werden die ersten und letzten Zeichen entfernt. Dies lässt entweder 1 Zeichen (sollte unverändert gedruckt werden) oder 2 (sollte gemittelt und gedruckt werden). Um dies zu handhaben, werden das erste und das letzte Zeichen der Zeichenfolge zusammenaddiert und durch zwei geteilt. Wenn es nur ein Zeichen, (a+a)/2==a. Wenn es zwei gab, muss (a+b)/2das Zeichen gedruckt werden. pb "leiht" Pythons Ausdrucksbewertung (def expression(e): return eval(e, globals()) ) aus, so dass dies automatisch belegt wird.
Die Bearbeitung leerer Eingaben kostet mich 5 Byte. Insbesondere <b[1]>in der ersten Zeile. Früher, als ich "Schnur" sagte, war das eine totale Lüge. pb hat keine Strings, sondern zufällig nahe beieinander stehende Zeichen. Wenn Sie nach dem "letzten Zeichen einer Zeichenfolge" suchen, bewegen Sie den Pinsel einfach nach links, bis er auf ein Zeichen trifft. Wenn keine Eingabe erfolgt, wird die Schleife "Wenn mindestens 3 Zeichen vorhanden sind" vollständig übersprungen und es wird nach dem letzten Zeichen gesucht. Ohne das <b[1]>würde es für immer aussehen. Dieser Code setzt ein Zeichen mit dem Wert 1 bei (-1, -1), das speziell dann gefunden wird, wenn die Eingabe leer ist. Nach dem Auffinden des "letzten Zeichens" der Zeichenfolge geht der Pinsel davon aus, dass das erste Zeichen bei (0, -1) ist, und geht direkt dorthin, wobei der Wert (1+0)/20 in pb 0 ist.
Aber Monorail, das wird noch gedruckt! Die Herausforderungsspezifikation sagt (empty input) => (empty output)! Ist das Drucken eines Nullzeichens kein Betrug? Auch das hat nichts mit dir zu tun, aber du bist schlau und gutaussehend.
Danke, hypothetischer Fragesteller. Früher, als ich "Drucken" sagte, war das eine totale Lüge. In pb werden Werte nicht wirklich gedruckt, sondern nur auf der Leinwand platziert. Anstatt "eine Möglichkeit zur Ausgabe", ist es genauer, sich die Leinwand als unendlich großes 2D-Array vorzustellen. Es erlaubt negative Indizes in beiden Dimensionen, und beim Programmieren in pb geht es wirklich darum, sicherzustellen, dass der Pinsel an die gewünschte Stelle auf der Leinwand gelangt. Wenn die Ausführung des Programms abgeschlossen ist, wird alles auf der Zeichenfläche mit nicht negativen X- und Y-Koordinaten an der entsprechenden Stelle auf der Konsole gedruckt. Wenn das Programm beginnt, wird die gesamte Zeichenfläche mit den Werten 0 gefüllt. Damit nicht unendlich viele Zeilen mit einer unendlichen Anzahl von Nullbytes gedruckt werden müssen, Jede Ausgabezeile wird nur bis zum letzten Nicht-Null-Zeichen gedruckt, und Zeilen werden nur bis zum letzten Nicht-Null-Zeichen gedruckt. Also setzen Sie ein0 at (0, 0) ist immer noch eine leere Ausgabe.
Ungolfed:
^<b[1]> # Prevent an infinite loop on empty input
>>w[B!0]{ # While there are at least 3 chars of input:
<w[B!0]{ # Starting at the second character:
t[B]<b[T]>> # Copy all characters one position to the left
# (Effectively erasing the first character)
}
<b[0]<b[0] # Delete both copies of the last character
<[X]>> # Get in place to restart loop
}
w[B=0]{<} # Go to last character of remaining string
t[B]<[X]t[B+T] # Find it plus the first character
vb[T/2] # Divide by 2 and print