Das Ziel dieser Herausforderung ist es, eine Eingabe und Ausgabe dieser Eingabe zu erhalten, jedoch mit umgekehrter Satzreihenfolge. Beispiel Eingabe:
Hello friend. What are you doing? I bet it is something I want to do too!
Beispielausgabe:
I bet it is something I want to do too! What are you doing? Hello friend.
Wie Sie den Beispielen entnehmen können, muss Ihr Programm mit Fragezeichen, Ausrufezeichen und Punkten umgehen. Sie können davon ausgehen, dass jeder Satz eine Interpunktion und ein Leerzeichen vor dem nächsten Satz enthält. Nachgestellte Leerzeichen / Zeilenumbrüche sind in Ordnung, solange sie lesbar sind. Kürzester Code gewinnt.
Viel Glück!
BEARBEITEN: Sie können davon ausgehen, dass der Satz keine Anführungszeichen oder Klammern enthält, aber wenn Sie dafür sorgen, dass Ihr Code mit beiden umgehen kann, erhalten Sie -5 Byte. Beispielausgabe für Parens / Quotes:
"Hello, " she said. (I didn't know what she was talking about.) --> (I didn't know what she was talking about.) "Hello, " she said.
"Hello!" she said. (I hesitated. How should I respond? This is too much!) I responded, "Hi there. How are you? What is your cat's name?" without thinking any more about it.
Antworten:
Julia,
4542 Bytes - 5 Bonus = 37Dadurch wird eine anonyme Funktion erstellt, die eine Zeichenfolge als Eingabe akzeptiert und die Zeichenfolge mit ihren Sätzen in umgekehrter Reihenfolge zurückgibt. Hiermit werden Sonderzeichen angemessen behandelt, obwohl doppelte Anführungszeichen und Dollarzeichen maskiert werden müssen, da sie sonst in Julia keine gültigen Zeichenfolgen sind.
Ungolfed + Erklärung:
Beispiele:
Und wenn Sie nicht gerne die ausgeblendeten Anführungszeichen in der Ausgabe betrachten:
3 Bytes beim regulären Ausdruck gespart dank Martin Büttner! Früher verwendete dies ein Lookbehind:
(?<=[.?!])
.quelle
CJam,
2322 BytesIch bin nicht sicher, ob dies für den Bonus geeignet ist oder nicht, aber hier ist die Lösung:
Code-Erweiterung (etwas veraltet) :
Probieren Sie es hier online aus
quelle
J
35,32Es kann fast mit Bonus-Eingaben umgehen, außer dass ich einzelne Apostrophe entfernen muss, also denke ich, dass es nicht zählt. (Auch meine erste Einreichung hier)
Verwendung:
quelle
Perl, 27/25
Oder von der Kommandozeile:
quelle
perl -nE 'say reverse/ |[^.?!]*.\)?/g'
, was Ihre Gesamtzahl auf 23PHP, 60
quelle
[?!.]\K
stattdessen den regulären Ausdruck verwenden?Bash + Coreutils, 40 Bytes
Dies liest von STDIN, so dass Eingaben von einer Datei umgeleitet oder einfach weitergeleitet werden können, zB:
quelle
(foo bar.)
als Einheit getauscht werden?Pip , 25 Bytes
Nach dem Anhängen eines Leerzeichens an die Eingabezeichenfolge finden wir alle Indizes von
.
,?
und!
, addieren 2 und verwenden den^@
Operator split-at, um die Zeichenfolge in Sätze zu unterteilen (jeweils mit einem nachgestellten Leerzeichen). Kehren Sie die Liste um und sie wird am Ende des Programms automatisch gedruckt. Voilà!Beispiel mit den Stufen der Hauptberechnung mit Eingabe
A! B? C. D!
:quelle
Retina ,
61343330 BytesDank an nutki für die Reduzierung um 24 Byte.
Wobei
<empty>
für eine Leerzeile steht. Dies setzt voraus, dass dies#
nicht Teil der Eingabe ist, aber wenn dies nicht legitim ist, könnte ich es gegen jedes andere Zeichen"
austauschen , einschließlich (das ich nur für den Bonus behandeln müsste) oder etwas Unbedruckbares. Sie können den Code wie-s
folgt in einer einzelnen Datei ausführen, wenn Sie das Flag verwenden, oder Sie können jede Zeile in eine separate Datei einfügen und sie alle an Retina übergeben.Dies mit einem einzigen Regex-Austausch rückgängig zu machen ist möglich, aber sehr umständlich. Selbst mit .NET-Bilanzgruppen benötigte ich ungefähr 90 Bytes, also versuchte ich es stattdessen in mehreren Schritten.
In der Netzhaut ist jedes Linienpaar eine Ersetzungsstufe, wobei die erste Linie das Muster und die zweite Linie die Ersetzung ist.
In dieser Phase wird der String einfach für die weitere Verarbeitung vorbereitet. Es geht a
#
als Marker voran . Dieser Marker zeigt an, dass alles davor bereits an der richtigen Stelle platziert wurde und alles danach noch verarbeitet werden muss.In dieser Phase werden die Sätze vertauscht, indem der letzte Satz vor dem Satz wiederholt verschoben wird
#
(der sich dabei durch die Zeichenfolge vorwärts bewegt). Das+`
weist Retina an, diese Phase zu wiederholen, bis sich die Ausgabe nicht mehr ändert. Als Beispiel sehen Sie hier, wie die Eingabefoo. bar! blah?
verarbeitet wird:Und zum Schluss entfernen wir einfach den Marker:
quelle
.+
=>$0 #
und wiederholt(.*?[.!?] )(.*#)
=>$2$1
?Java, 113
quelle
JavaScript (ES6) 47
45Wie es heißt, ist es eine einfache Regex-Übung. In Javascript:
quelle
Python 2, 62
Wird sich für den Bonus nicht verbessern, da es wahrscheinlich die Bytekosten nicht wert ist.
quelle
Matlab (93 Bytes)
quelle
Rubin 41
Die anderen Ruby-Antworten haben nicht genug WTF.
Dies funktioniert zumindest in Ruby 2. Wenn der Schalter
a
undF
in 1.8.7 funktioniert, können Sie wahrscheinlich$_=
drei Zeichen speichern.Kehrt jede Zeile auf stdin um und druckt auf stdout:
quelle
Ruby, 48 (42 ohne die Puts) Bytes
reverse_sentence.rb
Verwendung:
Ausgabe:
Kritik mehr als willkommen.
quelle
.join(" ")
=>*" "
k, 31
.
quelle
C # - LINQPAD - 93 - 5 = 88 Bytes
C # -Konsolenanwendung 189 - 5 = 184 Byte
Regex schamlos von Alex A. ausgepeitscht :)
quelle
namespace System
dann innerhalb diesesusing Linq;usingText.RegularExpressions
Speichers 2x einfügensystem
.Clojure - 44
71ZeichenVerbesserte und vereinfachte RE, unnötige Leerzeichen beseitigt.
Die Ausgabe ist eine Folge der Sätze in der Originalzeichenfolge, wobei die Reihenfolge der Sätze umgekehrt ist:
Input: "Hallo Freund. Was machst du? Ich wette, das ist etwas, was ich auch tun möchte!" Ausgabe: ("Ich wette, das ist etwas, was ich auch tun möchte!" "Was machst du?" "Hallo Freund.")
quelle
Rubin, 47
Dank an Martin Büttner für das Speichern einiger Charaktere.
quelle
gets
, um ein Byte zu speichern, mit drucken$><<
, um Byte zu speichern (kein Leerzeichen erforderlich) und die Zeichenfolge mit verbinden*''
, um zwei Bytes zu speichern.CJam, 21 Bytes
Dies funktioniert, indem die Leerzeichen nach
!
s,.
s und?
s in die Zahl 1 umgewandelt werden (weder das Zeichen 1 noch das Zeichen mit dem Codepunkt 1, sodass die Eingabe diese weiterhin enthalten kann), bei 1 geteilt wird, die Reihenfolge der resultierenden Blöcke umgekehrt und verbunden wird durch Leerzeichen.Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle