Schreiben Sie ein Programm in einer beliebigen Sprache, die Eingaben aus stdin liest und eine leicht geänderte Ausgabe an stdout ausgibt. Das Programm sollte einige Zeichen aus der Eingabe und Ausgabe mit einem möglichst großen Präfix ausleihen, *language-name* is awesome!
gefolgt von einer neuen Zeile und dem Rest der Eingabe.
- Die Eingabe enthält keine Großbuchstaben.
- Wenn das erste Zeichen des Sprachnamens nicht in der Zeichenfolge enthalten ist, sollte nur das Zeilenumbruchzeichen ausgeliehen werden.
- Wenn die Eingabe kein Zeilenumbruchzeichen enthält, wird die Eingabe unverändert ausgegeben.
- Es spielt keine Rolle, welche der verfügbaren Charaktere Sie ausleihen.
Ich benutze \n
als Zeilenvorschubzeichen ( 0x0a
), um beim Schreiben Platz zu sparen. Das echte Programm sollte sich nur um das echte Newline-Zeichen kümmern, nicht um die \n
Zeichenfolge.
Beispiel: Python.
Eingang: abcdefghijklmnopqrstuvwxyz\n0123456789
Ausgang: python\nabcdefgijklmqrsuvwxz0123456789
Da die Eingabe keine Leerzeichen nicht hat, können wir nicht weiter , obwohl wir genügend Zeichen für das nächste Wort haben: is
.
Beispiel: C.
Eingabe: i don't see anything!
Ausgabe: i don't see anything!
C wurde in der Zeichenfolge nicht gefunden, daher war keine Änderung möglich. Es ist auch kein Newline-Zeichen vorhanden.
Beispiel: C ++.
input: i don't\nsee anything!
output: \ni don'tsee anything!
C wurde nicht in der Zeichenfolge gefunden, daher war keine Änderung möglich.
Beispiel: Obj-C.
input: objectively, clojure is amazing.\nq.e.d.
output: obj\nectively, clojure is amazing.q.e.d.
Die Eingabe enthält genügend Zeichen zum Schreiben, obj
aber das -
fehlt.
Die Byteanzahl Ihres Quellcodes abzüglich der Byteanzahl des Namens Ihrer Sprachen, utf-8-codiert (falls möglich), ist Ihre Punktzahl. niedrigste Gewinne!
i don't\nsee anything!
als Testfall aufnehmen?Antworten:
Pyth, 37 Bytes
Der Quellcode ist 41 Bytes lang. Probieren Sie es online aus.
Wie es funktioniert
quelle
Python, 186 - 6 = 180
Probieren Sie es online aus
quelle
Python, 146 Bytes
quelle
Ceylon, 235 - 6 = 229
void a(){variable value i="";variable value r="\nceylon is awesome!";while(exists l=process.readLine()){i=i+"\n"+l;}i=i.rest;for(j->c in r.indexed){if(c in i){i=i.replaceLast(c.string,"");}else{r=r[0:j];break;}}print(r.rest+r[0:1]+i);}
Hier ist eine formatierte und kommentierte Version:
Es verwendet,
replaceLast
anstattreplaceFirst
weil es kürzer ist.Einige Beispiele für Ein- und Ausgaben im gleichen Format wie in der Frage:
abcdefghijklmnopqrstuvwxyz\n0123456789
→ceylon\nabdfghijkmpqrstuvwxz0123456789
i don't see anything!
→i don't see anything!
i don't\nsee anything!
→\ni don't see anything!
objectively, closure is amazing.\nq.e.d.
→ceylon is a\nobjectivel, sureiamzng.\q..d.
quelle
JavaScript (ES6) 90 (100-10)
Als Funktion, die die angeforderte Ausgabe zurückgibt. Die Implementierung mit E / A ist schwierig, da STDIN
prompt()
normalerweise keine Zeilenumbrüche innerhalb der Eingabezeichenfolge akzeptiert.Als eine Funktion mit realer Ausgabe (unter Verwendung von
alert
) ist die Byteanzahl 107Testen Sie die Ausführung des folgenden Snippets in einem EcmaScript 6-kompatiblen Browser (Implementierung des Spread-Operators und der Pfeilfunktion - ich verwende FireFox).
quelle
Perl, 72 - 4 = 68 Bytes
Beinhaltet 2 Schalter.
Erläuterung :
"\nperl is awesome"
Entfernen Sie für jedes Zeichen in der Zeichenfolge das entsprechende Zeichen aus der Eingabezeichenfolge ($_
), bis ein Zeichen gefunden wird, das in nicht vorhanden ist$_
. Es werden die übereinstimmenden Zeichen gespeichert,$p
denen das Präfix vorangestellt wird,$_
das dann gedruckt wird.Der
-0
Schalter liest die gesamte Eingabe ein und nicht zeilenweise, und der-p
Schalter macht das Lesen der Eingabe und das Drucken der Ausgabe implizit.quelle
JavaScript (ES7),
101107 - 10 = 97Es war früher kürzer und hat sogar an allen vier Testfällen gearbeitet, aber anscheinend habe ich eine Regel verpasst, also ...
Funktioniert in Firefox 42 einwandfrei. Dies begann ursprünglich mit 119 Bytes, aber ein Trick aus der Antwort von @ edc65 trug dazu bei, es erheblich zu verkürzen. Ich denke, es gibt noch Raum für Verbesserungen. Wie immer sind Vorschläge willkommen!
quelle
obj
->job
sollte nicht geändert werden (Regel 3)is awesome
und es würde immer noch bei allen vier funktionieren. Ich werde das so schnell wie möglich beheben.