Die Herausforderung ist einfach: Drucken Sie das letzte, mittlere und erste Zeichen des Quellcodes Ihres Programms in dieser Reihenfolge.
Das mittlere Zeichen ist unter der Annahme einer Quelllänge von n
Zeichen und einer 1-Indizierung wie folgt definiert :
- Wenn
n
gerade, geben Sie dasn/2
-te undn/2 + 1
-te Zeichen aus. (abcdef == cd
) - Wenn
n
ungerade ist, wird das(n-1)/2 + 1
-te Zeichen gedruckt . (abcde == c
)
Regeln
- Geben Sie ohne Eingabe das letzte, mittlere und erste Zeichen in Ihrem Quellcode im Formular aus
[last][middle][first]
. Dies wird 3-4 Zeichen lang sein. - Die Ausgabe darf keine nachgestellten Leerzeichen enthalten. Wenn Whitespace jedoch ein erstes, mittleres oder letztes Zeichen ist, muss es als solches gedruckt werden.
- Der Quellcode muss aus
n >= 3
Zeichen bestehen. - Der Code muss aus
>= 3
eindeutigen Zeichen bestehen. - Standardlücken sind verboten.
- Dies ist Code-Golf , also gewinnt die kürzeste Lösung in Zeichen .
Proben
# Form: [code] --> [output]
xyz --> zyx
abcd --> dbca
1 --> # not allowed: too short
abcde --> eca
aaabb --> # not allowed: not enough unique characters
System.out.print("S;pr"); --> ;prS
this is a test --> ts t
123[newline]45 --> 53[newline]1
121
für sehr viele Sprachen.-
für das\n1-
Negieren verwendet und implizit mit einem Zeilenvorschub druckt, ist dies ein Drei-Byte-Wert. Meine Suche war bisher erfolglos.Antworten:
JavaScript,
97 BytesAusgänge:
NaN
Probieren Sie es online!
quelle
Gras , 17 Bytes
Probieren Sie es online!
-2 Bytes dank jimmy23013.
Ausgänge
www
. Grass ignoriert alle Zeichen außerw
,W
undv
. Die beidenV
s werden also ignoriert; Sie sind dazu da, um sicherzustellen, dass das mittlere Zeichen a ist.w
Ich habe keine Ahnung, wiev
oderW
in Grass ausgegeben werden soll. Ich hätte stattdessen ein anderes Zeichen verwenden könnenV
, aberV
die Ästhetik des Codes bleibt erhalten.quelle
x
s (oder ein anderes Nicht-Grass-Zeichen, das Grass ignoriert) hinzugefügt , um ein Zeichen anw
die richtige Stelle zu verschieben.wWWwww wWWwWWWww
V
s geändert, weil ich es schöner finde. ;-)Brainfuck , 17 Bytes
Probieren Sie es online!
Bei nicht druckbaren Dateien kann dies auf 7 Byte reduziert werden:
␀..␀_.␀
quelle
U
als Anweisung verwendet. Funktionell ist der Code so-[>+<---]>.
, dass die erwartete Ausgabe wäre.--
, die er nicht ausgibt.U
s und dieser Interpreter ignoriert sie glücklich. Sollte jede Antwort, die Kommentare oder mehrere Leerzeichen enthält (oder etwas anderes, das für die Sprache nicht unbedingt von Bedeutung ist), nicht gezählt werden?U-[>+<-UU--]>...U
? In der aktuellen Form zeigt der Code nur ein Uÿ-.ÿ..ÿ
? Das ist druckbar und kurz.Shakespeare-Programmiersprache , 119 Bytes
Probieren Sie es online!
Druckt drei Leerzeichen. Ohne Druckfelder:
Shakespeare-Programmiersprache , 227 Byte
Probieren Sie es online!
Wie meine Zeilenumbruchsfreie INTERCAL-Antwort ist diese so aufgebaut, dass das letzte Zeichen des Programms mit dem mittleren Zeichen identisch ist (obwohl es in diesem Fall nicht auch das erste ist), indem die zweite Hälfte des Codes bis dahin nicht mehr golfen wird Spiel. (Ich bin nicht sicher, ob ich 46 in weniger Bytes hätte konstruieren können oder nicht, oder ob ich andere Teile der ersten Hälfte mehr hätte Golf spielen können.)
quelle
!
Python 2 ,
1311 BytesUm das Leerzeichen deutlich zu machen:
Probieren Sie es online!
-2 Bytes dank wastl!
quelle
RProgN 2 , 3 Bytes
Probieren Sie es online!
Ich denke das ist gültig?
quelle
1
und bin0
auf einen Stapel geschoben, dann ein impliziter Pop-Print am Ende des Programms? Ja, es ist gültig[quine]
Herausforderungen gesehen, bevor die Quine-Regeln geändert wurden.tac
unter Linux.05AB1E ,
75 BytesAusgänge
R \n
.-2 Bytes, indem Sie sich von @Neils Batch-Antwort inspirieren lassen , also stimmen Sie ihm auch zu!
Probieren Sie es online aus.
5 Bytes Alternative von @Grimy :
Ausgänge
12\n
.Probieren Sie es online aus.
Anfängliche 7- Byte- Antwort:
Ausgänge
?«'
.Probieren Sie es online aus.
Erläuterung:
quelle
PHP , 9 Bytes
Probieren Sie es online!
quelle
<?
Tag als Text ausgibt , können Sie eine der trivialen 4-Byte-Lösungen verwenden1231
- alles ohne Sonderzeichen als erstes und letztes, alle anderen 2 Zeichen in der Mitte. Ihre Antwort ist möglicherweise die kürzeste echte Code- PHP-Antwort.Gelee , 5 Bytes
Probieren Sie es online!
Die Ausgabe besteht aus zwei unterschiedlichen Zeichen, der Code enthält jedoch auch ein drittes Zeichen.
Triviale 4-Byte-Version:
quelle
121
auch eine triviale Antwort?Excel, 9 Bytes
So viele Klammern.
Hinweis: Das zurückgegebene mittlere Zeichen kann tatsächlich ein beliebiges Zeichen sein, da es sich um die Mitte des Codes handelt.
quelle
"
. Gut gemacht!Ruby , 6 Bytes
Probieren Sie es online!
Dies gibt
" "
plus eine Newline aus. Der Code endet mit einem"
, die beiden mittleren Zeichen sindund
"
und beginnt mit einer neuen Zeile.quelle
DOS / Windows Batch Language, 9 Bytes
quelle
Ruby ,
119 BytesProbieren Sie es online!
quelle
Batch, 9 Zeichen
Das mittlere und das letzte Zeichen sind beide
h
, und dannecho
wird standardmäßig eine neue Zeile gedruckt, die das erste Zeichen des Skripts ist.quelle
PowerShell, 3 Byte
Funktioniert nur unter Microsoft Windows.
Die Ausgabe ist leider 8 Bytes in UTF-16. Aber die Frage besagt, dass die Zeichen ausgegeben werden und nicht die Bytes. Möglicherweise ist UTF-16 nur eine der unterstützten Möglichkeiten, die Zeichen in PowerShell darzustellen. Sie werden nicht anders als in einer ASCII-Datei interpretiert.
quelle
0x0a != 0x0d != 0x31
:)Bash (
1511 Zeichen)was druckt aus
|rev
quelle
echo<space>e<space><space>e
Willen Ausgabee<space>e<newline>
statte<space>e
, so habe ich es abgelehnt. Der Zeilenumbruch ist Teil der Ausgabe, weshalb GrzegorzOledzki die-n
Option verwendet. Versuchen Sieecho -n e-e
Online vs versuchenecho e e
Online . Und nochmal, bitte bearbeite nicht die Antwort anderer Leute. Wenn Sie einen Golfvorschlag haben, hinterlassen Sie einen Kommentar.printf pfp
, aber nur, weil wir aufgrund dieser Definition des mittleren Zeichens zwei Leerzeichen brauchen, sonst wären es 10 ...ArnoldC , 61 Bytes
Probieren Sie es online!
Triviale Antwort in ArnoldC. Das 31. Byte ist das Leerzeichen direkt vor dem Zeichenfolgenliteral.
quelle
Unterlast ,
9 Bytes,7 BytesDanke an Khuldraeseth na'Barya für die verbesserte Lösung!
Soweit ich das beurteilen kann, ist dies jetzt nicht mehr zu verbessern, da:
Probieren Sie es online!
quelle
Shakespeare Programming Language ,
163153 Bytes-10 Bytes dank Jo King.
Probieren Sie es online!
Meine erste SPL-Antwort! Ausgänge
!BB
.Es gibt eine andere SPL-Antwort von Unrelated String; In dieser Antwort geben sie nur Leerzeichen in 119 Bytes oder Nicht-Leerzeichen in 227 Bytes aus. Dieser kommt dazwischen und gibt auch Nicht-Leerzeichen aus.
Hier werden zwei Tricks angewendet:
!
.
!
.
B
, daher ist der Wiedergabetitel,B
und ich brauche das zweite "Big", um "Big" zu sein, was funktioniert, da bei SPL die Groß- und Kleinschreibung nicht berücksichtigt wird.Da ich dieses Kapital
B
und ein Ausrufezeichen am Ende brauchte, beschloss ich, Ajax immer lauter durch die Szene rufen zu lassen.quelle
CJam , 7 Bytes
Probieren Sie es online!
quelle
0 1 0
ist kürzer und hat auch drei verschiedene Zeichen (ich möchte meinen Jelly-Ansatz nicht erneut veröffentlichen: P).Befunge-93 , 7 Bytes
Probieren Sie es online!
Erläuterung
Ausgabe ist
0 .
quelle
APL (Dyalog Unicode) ,
54 BytesVollständige Programme.
Bohrlösung von J.Sallé:
Gibt diese Nummer aus. Eine viel interessantere Lösung:
Probieren Sie es online!
APL ignoriert führende Nullen, daher ist dies einfach ein skaliertes Format für 10 × 10¹ = 100.
quelle
Chef , 447 Bytes
Probieren Sie es online!
Eine ernste Vorlage,
196177 Bytesdanke an A__
Probieren Sie es online!
quelle
Python 3,
19 Bytes13 BytesDie Druckfunktion hängt standardmäßig eine neue Zeile an, sodass der Code mit einer neuen Zeile beginnt. Das letzte Zeichen des Codes ist ein ")", das wird also zuerst gedruckt. Um die Anzahl der Zeichen ungerade zu machen, wird vor dem Argument der Druckfunktion ein Leerzeichen eingefügt. Bitte entschuldigen Sie die Unverschämtheit des Codes.
Ausgänge:
)(\n
Probieren Sie es online aus.
quelle
print
und ein Leerzeichen innerhalbprint
nach")("
. Ausgaben:)(
mit einer neuen Zeile am Ende.end
der Druckfunktion nicht zählt.Leerzeichen ,
3129 Bytes-2 Bytes dank @RobinRyder .
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Enthält ein No-Op
a
(kann ein beliebiges Nicht-Leerzeichen sein), um die Länge ungerade zu machen. Es wird vor der ersten Hälfte des Programms hinzugefügt, sodass das mittlere Zeichen ebenfalls ein Leerzeichen ist, da das mittlere Zeichen eine neue Zeile geworden wäre, wenn es sich in der zweiten Hälfte des Programms befunden hätte. Alle Nicht-Whitespace-Zeichen werden in Whitespace-Programmen ignoriert.quelle
Haskell , 17 Bytes
Probieren Sie es online!
quelle
MathGolf ,
54 Bytes-1 Byte mit der einfachen Lösung von @ErikTheOutgolfer in seiner Jelly-Antwort , die für jede Sprache mit impliziter Ausgabe ohne Zeilenumbruch funktioniert.
Probieren Sie es online aus.
Ursprüngliche 5- Byte- Antwort:
Ausgänge
x ù
.Probieren Sie es online aus.
Erläuterung:
quelle
Brain-Flak , 11 Bytes
Probieren Sie es online!
Erläuterung
Wir müssen 3 Dinge auf den Stapel legen. Der schnellste Weg, dies zu tun, besteht darin, 3 Einsen (oder Nullen) auf den Stapel zu schreiben. Jetzt, da
(Code Punkt 1) in Brain-Flak nichts tut, können wir diese an den ersten mittleren und letzten Stellen zum Programm hinzufügen. Das fühlt sich ein bisschen betrogen an, also hier noch zwei Antworten, die meiner Meinung nach weniger betrogen sind.
Druckt geschweifte Klammern (31 Byte)
Probieren Sie es online!
Diese Antwort gibt geschweifte Klammern aus, damit die gedruckten Zeichen tatsächlich für den Code relevant sind. Sie enthält ein Füllzeichen, um die Länge ungerade zu machen, sodass nur 1 mittleres Zeichen gedruckt werden muss.
Enthält nur geschweifte Klammern (32 Byte)
Probieren Sie es online!
Dies ist ein geschweiftes Programm, bei dem sowohl die Quelle als auch (folglich) die Ausgabe vollständig geschweift sind (der Charakter, um den sich Brain-Flak eigentlich kümmert).
quelle
AsciiDots - 9 Bytes
Ausgabe:
.$.
Der Code beginnt mit a
.
, endet mit a.
und das mittlere Zeichen ist a$
. Das einfache Anführungszeichen in der Mitte legt den Punktdruckmodus so fest, dass Zeichen direkt in den Ausgabestream eingelesen werden.Es ist möglich, dass dies kleiner gemacht werden könnte, aber ich fange an zu bezweifeln, dass es möglich ist. Um drei Zeichen zu drucken, muss das einfache Anführungszeichen verwendet werden, da das doppelte Anführungszeichen zur Ausgabe ein Ende der Zeichenfolge erfordern würde. Dies bedeutet jedoch, dass dem einfachen Anführungszeichen a) drei Zeichen folgen müssen und b) nicht das zentrale Zeichen sein darf. Um dies auf sieben Bytes zu reduzieren, überlegte ich, den Punktanfang als eines der gedruckten Zeichen wiederzuverwenden (ähnlich wie AsciiDots Quine-Programm). Ich fand jedoch, dass die kürzeste zum Drucken verfügbare Sequenz war
($'
das hätte vier Zeichen im Raum von drei oder drei Zeichen im Raum von vier drucken müssen. Ich habe auch einige alternative Methoden ausprobiert, wie zum Beispiel den Wert des Punktes (der 0 ist) als eines der Zeichen zu drucken. Es mag zwar ein System geben, das funktioniert, aber ich habe festgestellt, dass diese ziemlich komplex und groß sind. Daher denke ich, dass das Obige die kleinste Lösung ist. (Ich werde aktualisieren, wenn ich etwas kleiner finde)quelle
/'$'-.[newline]\.
Probieren Sie es online!MATLAB, 13
15BytesAusgänge
) d
Vorherige Version (15 Bytes, weniger strenge Ausgabe):
Ausgänge
'''
quelle
ans =\n '''\n
. Normalerweise ist das kein Problem, aber diese Herausforderung scheint einen strengeren Standard zu setzen. Aber dann kann ich die Herausforderung falsch interpretieren.