Es war ein paar harte Monate bei der Arbeit und ich habe das Gefühl, ich möchte meinem Chef nur direkt ins Gesicht schreien. Ich bin jedoch nicht derjenige, der sich direkt mit Menschen auseinandersetzt, mit denen ich ein Problem habe. Ich möchte auch nicht meinen Job verlieren.
Hier ist eine Idee: Ich möchte ihn beleidigen können, ohne dass er es jemals herausfindet. Und ich habe den perfekten Weg erkannt: Ich brauche eine Art Software, die eine Beleidigung in einer ansonsten perfekten Nachricht verschlüsselt. Und da er bekanntermaßen keine Wälder vor lauter Bäumen sieht, weiß ich, wie:
Schreiben Sie mir ein Programm, das eine Zeichenfolge unbekannter Länge als Eingabe verwendet, aber keine Zeilenumbrüche enthält. Dies ist die Rohnachricht, die ich senden möchte.
Wenn möglich, geben Sie die Zeichenfolge zurück, die so formatiert ist, dass die Meldung "DIE IN A GREASE FIRE" die gesamte linke Spalte ausmacht. Mit neuen Absätzen, in denen Leerzeichen zwischen Wörtern eingefügt werden sollen. Jetzt, da ich sehr wütend bin, ist es genauso wichtig, dass jeder Buchstabe in Großbuchstaben geschrieben wird.
Sie dürfen die Zeichenfolge nicht auf andere Weise ändern, dh Sie dürfen nicht die gesamte Zeichenfolge in Großbuchstaben umwandeln.
Wenn die betreffende Zeichenfolge nicht auf diese Weise formatiert werden kann, müssen Sie die ursprüngliche Zeichenfolge zurückgeben. Liest die Eingabe von der Standardeingabe.
Es gelten die üblichen Regeln: Keine HTTP-Anfragen, keine Rücksprache mit Marvin von THGTTG usw.
Beispiel Eingabe:
Lieber Chef, wie geht es dir? Mir ist aufgefallen, dass ich am vergangenen Freitag die ganze Schuld für das Missgeschick bekommen habe. Nicht nur die Mehrheit davon. Jedes letzte Stück davon. Ist es falsch für mich zu glauben, dass der Rest des Teams zumindest teilweise dafür verantwortlich war? Immerhin waren wir alle sechs von Anfang an involviert. Nicht, dass ich denke, ich sollte ohne Schuld stehen. Überhaupt nicht. Ich sage nur: Ich gebe mein Bestes. Ich bemühe mich sehr. Ich verbessere mich ständig. Und ich übernehme ständig Verantwortung. Im Allgemeinen bin ich in Ordnung, wenn ich die volle Verantwortung für meine Handlungen übernehme. Aber nach diesem Frühling scheine ich mehr zu bekommen, als ich verdiene. Erinnerst du dich an den Flakenhauser-Vertrag? Alles lief so reibungslos, wie man es sich erhofft hätte. Zumindest schien es zuerst so. Gerade in letzter Minute brachen die Dinge auseinander. Das gesamte Team war sich einig, dass es eher ein Freak-Unfall war als eine schlampige Planung oder schlecht verwaltete Ressourcen. Trotzdem habe ich - allein - die Schuld dafür übernommen. Auch wenn ich damals nichts gesagt habe, hat sich meine Toleranz für die Übernahme der Schuld erheblich verschlechtert. Von diesem Zeitpunkt an hielt ich es für notwendig, immer doppelt so viel zu versuchen, nur um der Kontrolle zu entgehen. Und trotzdem sind wir wieder da. Trotz all meiner Erfolge. Genau dort, wo wir heutzutage immer zu landen scheinen. Jedes einzelne Projekt. Es wird unerträglich. nur um der Kontrolle zu entkommen. Und trotzdem sind wir wieder da. Trotz all meiner Erfolge. Genau dort, wo wir heutzutage immer zu landen scheinen. Jedes einzelne Projekt. Es wird unerträglich. nur um der Kontrolle zu entkommen. Und trotzdem sind wir wieder da. Trotz all meiner Erfolge. Genau dort, wo wir heutzutage immer zu landen scheinen. Jedes einzelne Projekt. Es wird unerträglich.
Beispielausgabe:
Lieber Chef, wie geht es dir?
Mir ist aufgefallen, dass ich am vergangenen Freitag die ganze Schuld für das Missgeschick bekommen habe. Nicht nur die Mehrheit davon.
Jedes letzte Stück davon.Ist es falsch für mich zu glauben, dass der Rest des Teams zumindest teilweise dafür verantwortlich war? Immerhin waren wir alle sechs von Anfang an involviert.
Nicht, dass ich denke, ich sollte ohne Schuld stehen. Überhaupt nicht.Ich sage nur: Ich gebe mein Bestes. Ich bemühe mich sehr. Ich verbessere mich ständig. Und ich übernehme ständig Verantwortung.
Im Allgemeinen bin ich in Ordnung, wenn ich die volle Verantwortung für meine Handlungen übernehme. Aber nach diesem Frühling scheine ich mehr zu bekommen, als ich verdiene.
Erinnern Sie sich an den Flakenhauser-Vertrag.
Alles lief so reibungslos, wie man es sich erhofft hätte. Zumindest schien es zuerst so. Gerade in letzter Minute brachen die Dinge auseinander.
Das gesamte Team war sich einig, dass es eher ein Freak-Unfall war als eine schlampige Planung oder schlecht verwaltete Ressourcen.
Trotzdem habe ich - allein - die Schuld dafür übernommen.
Auch wenn ich damals nichts gesagt habe, hat sich meine Toleranz für die Übernahme der Schuld erheblich verschlechtert.Von diesem Zeitpunkt an hielt ich es für notwendig, immer doppelt so viel zu versuchen, nur um der Kontrolle zu entgehen. Und trotzdem sind wir wieder da.
Trotz all meiner Erfolge.
Genau dort, wo wir heutzutage immer zu landen scheinen.
Jedes einzelne Projekt. Es wird unerträglich.
Das ist Code Golf. Kürzester Code gewinnt.
Antworten:
CJam,
5653 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Perl - 60 Bytes
Zähle den Shebang als einen.
Diese Lösung verwendet die innerste Zeichenfolge, um den folgenden regulären Ausdruck zu erstellen:
Das ähnelt dem regulären Ausdruck, der in der Lösung von m.buettner verwendet wird . Der generierte reguläre Ausdruck wird dann mit der Eingabe abgeglichen. In einem Listenkontext wird ein Array zurückgegeben, das jede der Übereinstimmungsgruppen enthält, die durch eine neue Zeile verbunden sind (der Grund für die Gruppe "
(\.*)
Keine Übereinstimmung" ist das Einfügen einer zusätzlichen neuen Zeile). Wenn es keine Übereinstimmung gibt, wird stattdessen die ursprüngliche Zeichenfolge ausgegeben.Perl - 73 Bytes
Ich zähle den Shebang als zwei.
Dadurch wird die Zeichenfolge an den entsprechenden Begrenzern aufgeteilt und die Teile in einem Array gesammelt. Wenn einer von ihnen nicht übereinstimmt, wird das Trennzeichen für Ausgabedatensätze (das mit der
-l
Option auf eine neue Zeile gesetzt wurde ) nicht festgelegt, und die Zeichenfolge wird unverändert ausgegeben.quelle
./script.pl
, dann höchstwahrscheinlich ja. Wenn aufgerufen alsperl script.pl
, dann nein..
nachI
wird eine zusätzliche Newline einfügen vorI
(weil es wieder an der gleichen Position übereinstimmt). Vielleicht ein bisschen kontraintuitiv.-M
Shebang die Option hinzufügen , die mit dem schwerwiegenden Fehler abbricht:Too late for "-M" option at line 1.
Aber der Hauptgrund, warum ich ihn dort abgelegt habe, ist, dass ich nicht erklären muss, wie er ausgeführt werden mussperl -pl script.pl
- in seiner aktuellen Form läuft er wie es ist.GolfScript, 53 Bytes
Sieht so aus, als hätten Dennis und ich ziemlich ähnliche Dinge parallel erfunden ... Aber hier ist mein Versuch.
Klicken Sie auf die Links vor jedem Codeblock, um ihn online zu testen. Leider können Sie mit dem Online-Interpreter keinen Code ausführen, der länger als 1024 Zeichen ist. Daher musste ich den Testeingang etwas "komprimieren". Aber es funktioniert immer noch.
Gequetschte Version
Unquished, kommentierte Version
Ein Punkt, den Dennis angesprochen hat: Alle GolfScript-Programme drucken automatisch eine letzte neue Zeile. Ob dies meine aktuelle Lösung ungültig machen sollte oder nicht, weiß ich nicht. Ich glaube, es würde 4 Zeichen kosten, um die letzte Zeile zu unterdrücken, indem man sie gegen
"":n
Ende hinzufügt .quelle
Rubin - 140
Keine regulären Ausdrücke . Gleichzeitig werden die Zeichen in der ARGV [0] -Eingabe und eine Zeichenfolge durchlaufen, die Zeichen enthält, an denen wir anbrechen müssen, um die Nachricht in der linken Spalte zu erstellen. Wollte ursprünglich Leerzeichen nach den Buchstaben setzen, die eine neue Zeile benötigen, stellte jedoch fest, dass es etwas kürzer war, die Indizes, an denen der Zeilenumbruch eingefügt werden soll, fest zu codieren.
Sobald alles gesagt und getan ist, wird überprüft, ob der
i
Index so oft erhöht wurde, dass alle Buchstaben durchlaufen wurden, die unterbrochen werden mussten. Wenn nicht, drucken wir einfach die ursprüngliche Zeichenfolge aus. Wenn ja, geben wir ihnen das formatierte.n-[i]!=n
war ein guter Trick, um Zeichen zu speichern, wenn geprüft wurde, ob der aktuelle Index einen zusätzlichen Zeilenumbruch benötigt (im Vergleich zun.include? i
). Außerdem wurden einige Zeichen mithilfe von{}
s gespeichert,do/end
obwohl es sich um einen mehrzeiligen Block handelt, und es wurde eine ternäre Bedingung für die endgültigen Puts verwendet, um Zeichen zu speichern, wenn bestimmt wurde, welches ausgegeben werden soll.Nicht die kürzeste, aber ich dachte, es wäre ordentlich, auf reguläre Ausdrücke zu verzichten.
quelle
Perl, 184 Bytes
Kein spektakuläres Ergebnis für Perl, aber hier ist eine einfache Regex-Lösung
quelle
print($_)
==print
. +1 Punkt für die Lesbarkeit: Es ist bemerkenswert leicht zu erkennen, was bei anderen Lösungen nicht genau der Fall ist.JavaScript 116
Javascript Umsetzung der Idee von m-buettner
Test - Schnipsel
quelle
FIFA
Test fehl (OP-Kommentare)From that FIFA point on
. Es wird eine neue Zeile vorFA
und vor dem Leerzeichen eingefügtFI
.Python3 (
166138)Golf gespielt:
Ungolfed-ish:
Obwohl mir die Verwendung des Lambdas etwas gefällt, hat diese massenhafte Anzahl der verwendeten Variablen und die etwas unübersichtliche Entwicklung den gegenteiligen Effekt. Regex war vielleicht auch eine gute Idee. Hay ho, zumindest funktioniert es :).
Bearbeiten: Lambda-Variable durch
count
eingebaute und verkürzte Split-Anweisung ersetzt.quelle
Python3 (165)
Ungolfed
Erläuterung
chunk
Teilt das Ende der Nachricht, die die letzte Überschrift enthält, rekursiv ab und stellt sie einer Liste voran.Vorsichtsmaßnahme: Dies funktioniert nicht, wenn in Ihrem Brief aus irgendeinem Grund überhaupt keine Leerzeichen zwischen zwei vorgeschlagenen Überschriften stehen, was in einem Brief an Ihren Chef jedoch unwahrscheinlich erscheint.
quelle
Ruby 115
Ruby 95
quelle
J -
110103 BytesWarum hat J keine guten Funktionen, um mit Strings umzugehen, sondern nur Array-Funktionen? Ich werde das überarbeiten, wenn ich etwas Kluges herausfinde.
Bearbeiten: Verkürzte und feste Ausgabe (hatte vorher zusätzliche Leerzeichen) und Überprüfung. Ich habe auch die Erklärung verbessert.
Erläuterung:
Beispiele (zu lang?):
quelle
JavaScript (ES6),
93115 ByteIch bin immer
replace
durch die Zeichenfolge gegangen, mit einer Übereinstimmung für/\b./g
, um nur Zeichen zu finden, die entweder auf ein Leerzeichen folgten oder mit der Zeichenfolge begannen. Dann überprüfte ich jedes Zeichen, um festzustellen, ob es mit dem aktuellen Index in dem gesuchten Array übereinstimmte, und fügte eine neue Zeile davor hinzu, falls dies der Fall war, und erhöhte siei
.BEARBEITEN: Verpasst die Notwendigkeit, zwischen Wörtern neue Zeilen zu erstellen. Ich habe das jetzt getan, was es auf 115 bringt.
quelle
PHP, 328 Bytes
Gegeben eine Datei mit dem Namen 'G', die den Rohtext zu "enmessage" enthält
Erklärung (~ ungolfed && kommentierter Code):
quelle
PHP, 136 Bytes
wenn die ganze Beleidigung gestellt werden kann; druckt den modifizierten String mit einem führenden Leerzeichen oder Zeilenumbruch; leere Ausgabe, wenn nicht. Laufen Sie mit
-r
.Nervenzusammenbruch
quelle
Python - 190 Bytes
Ungolfed
Dies ist mein erster Golfversuch :) Trotzdem habe ich mich darauf konzentriert, einige großartige Codierungstechniken zu erlernen. Ich habe mich darauf konzentriert, find zu verwenden und dann ein paar Zeichen zu verbinden, um die entsprechenden Zeichen zu finden und die Ausgabe zu formatieren.
Variablen -
lr = l sind zugewiesene Zeichen, die wir als Leitfaden für die Erstellung unseres neuen formatierten Absatzes verwenden. r wird das neue Zeilenzeichen für uns im Abstand der neuen Ausgabe zugewiesen.
k, p = Der eingegebene Absatz. K wird verwendet, um zum Original zurückzukehren, da es während der Ausführung des Skripts nicht neu zugewiesen wird. Ich überprüfe mit x, um zu wissen, wann eine doppelte neue Zeile aus Abstandsgründen hinzugefügt werden soll.
y, i = y ist eine Art "Cursor", verfolgt die letzte Position, an der ein Zeichen gefunden wurde, damit wir zu Spleißzwecken den Absatz korrekt durchgehen Setzen Sie den Absatz (die Variable p) über die Variable k auf die ursprüngliche Eingabe zurück.
h = Eingabelänge, die wir beim Spleißen verwenden.
x = Die Position des aktuellen Zeichens, das durch C dargestellt wird und auch zum Spleißen verwendet wird.
c = Zeichen in l, nach denen iteriert und gesucht werden soll.
Der folgende Code wurde umformuliert und aus dem ursprünglichen Code herausgebrochen, um die Lesbarkeit zu gewährleisten:
Ich würde mich über Ihr Feedback freuen! Ich freue mich zu lernen.
quelle
x<0
ani
. In Python ist True gleich 1 und False gleich 0. Wenn x also -1 ist, wird 1 addiert, und ansonsten ist 0.i+=
gleichi=i+
True == 1
gibt. :)