Ich bin passiv aggressiv und möchte meinen Chef beleidigen, ohne dass er es herausfindet


93

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.


4
Müssen die Zeilenumbrüche erst nach der satzenden Interpunktion auftreten? Oder könnte ich einen Zeilenumbruch vor dem eigentlichen jetzt oder vielleicht sogar innerhalb einer Abkürzung haben, solange der folgende Buchstabe in Großbuchstaben geschrieben ist? Trotzdem haben sich beleidigende Herausforderungen in der Vergangenheit hier nicht bewährt, aber Sie könnten vielleicht davonkommen, weil Sie nicht nach der Kreativität der Teilnehmer gefragt haben, um neue Obszönitäten zu finden.
Martin Ender

1
Zeilenumbruch vor Eigennamen ist völlig in Ordnung.
Christofer Ohlsson

3
@NateKerkhofs Ich denke, es ist rückwärts: Da die geheime Nachricht nur aus wenigen Zeichen in einer gesamten Nachricht besteht, denke ich, dass die Beleidigung die Bäume und die Nachricht der Wald ist. Wir hoffen wirklich, dass der Chef den Wald sieht, nicht die Bäume.
Joshua Taylor

11
War Arnold Schwarzeneggers Brief Ihre Inspiration?
200_success

57
Ich muss zugeben, dass ich es ein bisschen zweimal gemacht habe, als ich das in der Hot Questions-Liste gesehen habe. Als ich sah, dass es PCG und nicht The Workplace war, will ich nicht sagen, dass ich nicht ein bisschen enttäuscht war.
BenM

Antworten:


54

CJam, 56 53 Bytes

q_"DIEIINAAGGREASEFFIRE"{S@:A+S@+#:BA<AB>}%(!B)*\N*@?

Probieren Sie es online!

Wie es funktioniert

q_                     Read all input from STDIN and push a copy.
"DIEIINAAGGREASEFFIRE" Push the characters we're searching for in form of a
                       string. We'll try to prepend a linefeed to all of them.
                       Some characters are duplicated to prepend two linefeeds.
{                      For every character C in that string:
  S@                   Push ' ' and rotate the string on the stack on top of it.
  :A                   Save the string (initially the input) in A.
  +                    Prepend the space to A.
  S@+                  Construct the string " C".
  #                    Compute the index of " C" in the modified A.
  :B                   Save the index in the variable B.
  A<                   Push the substring of A up to the index.
  AB>                  Push the substring of A after the index.
}%
(                      Shift the first element of the resulting array.
!                      Compute the logical NOT. This pushes 1 if and only if the
                       array's first element is an empty string, which is true
                       if and only if the input string started with a D.
B)                     Push the last value of B and increment. If the last match
                       was successful and, therefore, all matches were successful,
                       B != -1, so B + 1 != 0.
*                      Compute the product of the two topmost items on the stack.
\                      Swap the resulting Booleanr with the array of substrings.
N*                     Join the array, separating by linefeeds.
@                      Rotate the input string on top of the stack.
?                      Select the joined array if the Boolean is 1 and the input
                       string otherwise.

14
Warum stimme ich so vielen Ihrer Antworten zu? Oh ja, weil sie verrückt sind.
Primo

Was macht es bei der Eingabe, die SEHR VERÄRGERTE Wörter in ALLEN GROSSBUCHSTABEN enthält?
Adam Davis

2
@AdamDavis: Das Voranstellen von Leerzeichen vor "C" und "A" stellt sicher, dass WÖRTER nicht durch Zeilenvorschübe unterbrochen werden.
Dennis

25

Perl - 60 Bytes

#!perl -p
$_=(join$/,$_=~('DIE\IN\A\GREASE\FIRE'=~s/./($&.*)/gr))||$_

Zähle den Shebang als einen.

Diese Lösung verwendet die innerste Zeichenfolge, um den folgenden regulären Ausdruck zu erstellen:

(D.*)(I.*)(E.*)(\.*)(I.*)(N.*)(\.*)(A.*)(\.*)(G.*)(R.*)(E.*)(A.*)(S.*)(E.*)(\.*)(F.*)(I.*)(R.*)(E.*)

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

#!perl -pl
$s=$_}for(map$s!~s/.*?(?=$_)//?$\='':$&,'DIEI.NA.G.REASEF.IRE$'=~/./g){

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 -lOption auf eine neue Zeile gesetzt wurde ) nicht festgelegt, und die Zeichenfolge wird unverändert ausgegeben.


Braucht der Shebang nicht einen absoluten Weg?
Celtschk

Warum die Punkte (DIEI.NA. ...?
Edc65

@celtschk Abhängig von Ihrem System und wie Sie das Skript aufrufen möchten. Aufgerufen als ./script.pl, dann höchstwahrscheinlich ja. Wenn aufgerufen als perl script.pl, dann nein.
Primo

1
@ edc65 Die .nach Iwird eine zusätzliche Newline einfügen vor I (weil es wieder an der gleichen Position übereinstimmt). Vielleicht ein bisschen kontraintuitiv.
Primo

2
@celtschk Die Schalter am shebang werden noch interpretiert. Sie können dies testen, indem Sie dem -MShebang 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 muss perl -pl script.pl- in seiner aktuellen Form läuft er wie es ist.
Primo

12

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

..(\;68=(>"IEIINAAGGREASEFFIRE"{1$.@?:^<n@^>}/](]^0<=

Unquished, kommentierte Version

.       # (Save input)
.(\;    # Get first character
68=(>   # If 'D', work with input; else, work with one-character string
"IEIINAAGGREASEFFIRE"
{       # For each character
 1$.@   # (Duplicate message twice)
 ?:^    # Find first index of character
 <n     # Extract part before index and add a newline
 @^>    # Extract part including and after index as new "message"
}/      # (Close loop)
](]^0<= # If last line was successfully matched, select result; else, select input

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 "":nEnde hinzufügt .


1
Sie scheinen nicht zu prüfen, ob das Zeichen das erste Zeichen eines Wortes ist. Zum Beispiel. "FIFA" sollte nur für F verwendet werden, nicht für "I" oder "A".
Dennis

@ Tennis Ich habe keinen Teil der Spezifikation gesehen, der dies erfordert. Aber wenn Sie sich diese Einschränkung auferlegt haben, scheint es, als würde dies die überlegene Golffähigkeit festigen, wenn Sie dies von Ihrer Lösung streichen.
Runer112

1
So interpretierten m.buettner und ich die Frage (ich müsste mir die anderen Antworten genauer ansehen), aber Sie haben recht, es heißt nirgends, dass wir keine Worte brechen können.
Dennis

7

Rubin - 140

a="DIEINAGREASEFIRE";n=[4,6,7,13];i=0;o='';s=ARGV[0]
s.chars.each{|c|
if c==a[i]
i+=1;o+="\n";o+="\n"if n-[i]!=n
end
o<<c
}
puts((i<16)?s:o)

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 iIndex 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]!=nwar ein guter Trick, um Zeichen zu speichern, wenn geprüft wurde, ob der aktuelle Index einen zusätzlichen Zeilenumbruch benötigt (im Vergleich zu n.include? i). Außerdem wurden einige Zeichen mithilfe von {}s gespeichert, do/endobwohl 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.


7

Perl, 184 Bytes

Kein spektakuläres Ergebnis für Perl, aber hier ist eine einfache Regex-Lösung

$_=<>;s/^(D.*) (I.*) (E.*) (I.*) (N.*) (A.*) (G.*) (R.*) (E.*) (A.*) (S.*) (E.*) (F.*) (I.*) (R.*) E/$1\n$2\n$3\n\n$4\n$5\n\n$6\n\n$7\n$8\n$9\n$10\n$11\n$12\n\n$13\n$14\n$15\nE/;print;

3
Sicherlich ist es möglich, den regulären Ausdruck im Code zu erstellen und eine Menge zu sparen?
Peter Taylor

@ PeterTaylor sicherlich, aber ich habe weder die Zeit noch Perl-Kenntnisse, um das jetzt zu tun. Vielleicht schaue ich heute später nach.
Martin Ender

Trotzdem schlägt es meine PERL-Antwort, die ich jetzt nicht veröffentlichen werde: p
Tal

Speichern Sie 4 Zeichen: print($_)== print. +1 Punkt für die Lesbarkeit: Es ist bemerkenswert leicht zu erkennen, was bei anderen Lösungen nicht genau der Fall ist.
Ole Tange,

Dies wird in Perl als einfach angesehen .
Lincoln Bergeson

6

JavaScript 116

Javascript Umsetzung der Idee von m-buettner

console.log((RegExp('^('+[...'DIE IN A GREASE FIRE$'].join('.*)(')+')').exec(z=prompt())||[,z]).slice(1).join('\n'))

Test - Schnipsel

z="Dear Boss, how are things? It has come to my attention that I received all the blame for the mishap last Friday. Not just the majority of it. Every last bit of it. Is it wrong for me to think that the rest of the team were at least in part responsible? After all, all six of us were involved from the get-go. Not that I think I should stand without blame. Not at all. All I'm saying is this: I do my best. I try hard. I improve constantly. And I am constantly taking responsibility. Generally speaking, I am very okay with taking full responsibility for my actions. But after this spring, it seems I get more than I deserve. Remember the Flakenhauser contract? Everything went down just about as smooth as one could have hoped. Or so it seemed at first. It was just at the very last minute that things fell apart. All of the team agreed that it was more akin to a freak accident than sloppy planning or mismanaged resources. Still, I - alone - took blame for it. Even though I said nothing then, my tolerance level for taking the blame took a serious dent then. From that point on, I have felt it necessary to always try twice as hard, just to escape scrutiny. And still, here we are again. In spite of all my accomplishments. Right where we always seem to end up these days. Every single project. It's becoming unbearable.";

T1.textContent = (RegExp('^('+[...'DIE IN A GREASE FIRE$'].join('.*)(')+')').exec(z)|| [,z]).slice(1).join('\n')

z='From that FIFA point on'
T2.textContent = (RegExp('^('+[...'DIE IN A GREASE FIRE$'].join('.*)(')+')').exec(z)|| [,z]).slice(1).join('\n')
pre { border: 1px solid black }
T1<pre id=T1></pre>
T2 (the FIFA test)<pre id=T2></pre>



Dies schlägt beim FIFATest fehl (OP-Kommentare)
Mwr247

@ Mwr247 schwer zu verstehen: welchen FIFA-Test hast du probiert?
EDC65

Versuchen Sie, das Test - String mit folgendem edit: From that FIFA point on. Es wird eine neue Zeile vor FAund vor dem Leerzeichen eingefügt FI.
Mwr247

@ Mwr247 nicht für mich. Getestet mit Firefox erhalte ich genau die gleiche Zeile, keine neuen Zeilen
edc65

4

Python3 ( 166 138)

Golf gespielt:

s='';o=input()
for n in o.split():s+=[n,'\n'+n.title()][n[0]==("DIEINAGREASEFIRE"*len(o))[s.count('\n')]]+' '
print([o,s][s.count('\n')==16])

Ungolfed-ish:

format_s = ''
unformat_s = input()
for n in unformat_s.split():
    format_s += [n, '\n' + n.title()][n[0] == ("DIEINAGREASEFIRE"*len(unformat_s))[format_s.count('\n')]] + ' '
print([unformat_s, format_s][format_s.count('\n') == 16])

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 counteingebaute und verkürzte Split-Anweisung ersetzt.


1

Python3 (165)

def c(m,h,l=[]):
 if h:s=m.rindex(h[0]);l=[m[s:]]+l;return c(m[:s],h[1:],l)
 return[m]+l
i=input()
try:print('\n'.join(c(i,"ERIF ESAERG A NI EID")))
except:print(i)

Ungolfed

def headings_remaining(headings): return len(headings) > 0
def head(s): return s[0]
def tail(s): return s[1:]
def prepend(l,e): l.insert(0, e)
def reverse(s): return s[::-1]

def chunk(message,headings,output_list=[]):
    if headings_remaining(headings):
        split_index = message.rindex(head(headings))
        message_init = message[:split_index]
        message_last = message[split_index:]

        prepend(output_list, message_last)
        return chunk(message_init, tail(headings), output_list)
    else:
        prepend(output_list, message)
        return output_list

input_message=input()
try:
    headings=reverse("DIE IN A GREASE FIRE")
    print('\n'.join(chunk(input_message,headings)))
except ValueError: # Couldn't keep splitting chunks because didn't find heading
    print(input_message)

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.


1

Ruby 115

n,a,c,i=[4,6,7,13],gets,'',0;a.chars{|x|x=='DIEINAGREASEFIRE'[i]?(i+=1;c+="\n"if n-[i]!=n;c+="\n#{x}"):c+=x};puts c

Ruby 95

a,c,i=gets,"",0;a.chars{|x|x=="DIEINAGREASEFIRE"[i]?(i+=1;c+="\n#{x}"):(c+=x)};puts c

1

J - 110 103 Bytes

Warum 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.

f=:[:>,&.>/@('IEIINAAGGREASEFFIRE'&t=:(}.@[t{.@[(}:@],(((0{I.@E.)({.;LF;}.)])>@{:))])`]@.(0=#@[))@< ::]

Erläuterung:

Ich bezeichne die Verwendung von Funktionen als [<left argument>] <function name> <right argument>z f <text>. Ich werde auch nicht jedes Detail erklären, da die Funktion ziemlich lang ist.

@ Wendet die rechte Funktion auf die linke Funktion an, z. f@g x == f(g(x))

t=:(}.@[t{.@[(}:@],(((0{I.@E.)({.;LF;}.)])>@{:))])']@.(0=#@[)ist eine rekursive Funktion <delimiters> t <boxed string>, die die Zeichenfolge nacheinander mit jedem Trennzeichen aufteilt. Schlägt fehl, wenn ein Trennzeichen nicht gefunden wird.

(((0{I.@E.)({.;LF;}.)])>@{:) Teilt den String von der linken Seite des Begrenzers und fügt einen Zeilenvorschub dazwischen ein.

>@{: holt den letzten String aus einer Liste (der noch nicht geteilt wurde)

0{I.@E. Ruft den Index ab, an dem geteilt werden soll. Schlägt fehl, wenn das Trennzeichen nicht vorhanden ist.

{.;LF;}. Verkettet die linke Seite des Split, den Zeilenvorschub und die rechte Seite des Split

}:@], verkettet die Ergebnisse der früheren Splits und das Ergebnis der letzten Funktion (letzte Bedeutung: Nachschlagen)

']@.(0=#@[)prüft, ob noch Begrenzer vorhanden sind und ruft ggf. die oben beschriebene Funktion (5 Zeilen) auf. Andernfalls kehrt zurück.

'IEIINAAGGREASEFFIRE'&Setzt das linke Argument von tauf diesen String

[:>,&.>/@ verbindet die Ergebnisse der Aufteilung

::] Wenn etwas fehlschlägt (ich habe die Suche nach dem geteilten Index zur Schwachstelle gemacht), geben Sie die ursprüngliche Zeichenfolge zurück.

Beispiele (zu lang?):

   f 'Dear Boss, how are things? It has come to my attention that I received all the blame for the mishap last Friday. Not just the majority of it. Every last bit of it. Is it wrong for me to think that the rest of the team were at least in part responsible? After all, all six of us were involved from the get-go. Not that I think I should stand without blame. Not at all. All I''m saying is this: I do my best. I try hard. I improve constantly. And I am constantly taking responsibility. Generally speaking, I am very okay with taking full responsibility for my actions. But after this spring, it seems I get more than I deserve. Remember the Flakenhauser contract? Everything went down just about as smooth as one could have hoped. Or so it seemed at first. It was just at the very last minute that things fell apart. All of the team agreed that it was more akin to a freak accident than sloppy planning or mismanaged resources. Still, I - alone - took blame for it. Even though I said nothing then, my tolerance lev...
Dear Boss, how are things? 
It has come to my attention that I received all the blame for the mishap last Friday. Not just the majority of it. 
Every last bit of it. 

Is it wrong for me to think that the rest of the team were at least in part responsible? After all, all six of us were involved from the get-go. 
Not that I think I should stand without blame. Not at all. 

All I'm saying is this: I do my best. I try hard. I improve constantly. And I am constantly taking responsibility. 

Generally speaking, I am very okay with taking full responsibility for my actions. But after this spring, it seems I get more than I deserve. 
Remember the Flakenhauser contract? 
Everything went down just about as smooth as one could have hoped. Or so it seemed at first. It was just at the very last minute that things fell apart. 
All of the team agreed that it was more akin to a freak accident than sloppy planning or mismanaged resources. 
Still, I - alone - took blame for it. 
Even though I said nothing then, my tolerance level for taking the blame took a serious dent then. 

From that point on, 
I have felt it necessary to always try twice as hard, just to escape scrutiny. And still, here we are again. In spite of all my accomplishments. 
Right where we always seem to end up these days. 
Every single project. It's becoming unbearable.
   f 'Die in a grease fire. It''s fun. Every time.'
Die in a grease fire. It's fun. Every time.
   f 'hai'
hai

1

JavaScript (ES6), 93 115 Byte

alert(prompt(x=[...'DIEI1NA1G1REASEF1IRE',i=0]).replace(/\b./g,a=>i<20&&a.match(x[i])?(+x[++i]?i++&&`

`:`
`)+a:a))

Ich bin immer replacedurch 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 sie i.

BEARBEITEN: Verpasst die Notwendigkeit, zwischen Wörtern neue Zeilen zu erstellen. Ich habe das jetzt getan, was es auf 115 bringt.


1

PHP, 328 Bytes

Gegeben eine Datei mit dem Namen 'G', die den Rohtext zu "enmessage" enthält

<?php
$a=implode(file("G"));$b=str_split('DIEINAGREASEFIRE');foreach(array_unique($b) as $c){foreach(str_split($a) as $h=>$d){if($c==$d)$l[$c][]=$h;}}$e=-1;$n=$a;foreach($b as $f=>$c){foreach($l as $j=>$m){if($c==$j){foreach($m as $k=>$h){if($h>$e){$n=substr($n,0,$h)."\n".$c.substr($a,$h+1);$e=$h+2;break 2;}}}}}echo nl2br($n);

Erklärung (~ ungolfed && kommentierter Code):

<?php
$string=implode(file("G"));          // raw text to deal with
$msg=str_split('DIEINAGREASEFIRE');  // hidden message (make it an array)

 // 2D array : [letters of the message][corresponding positions in txt]
foreach(array_unique($msg) as $letter) {
    foreach (str_split($string) as $pos=>$let) {
        if ($letter==$let) $l[$letter][]=$pos; //1 array per seeked letter with its positions in the string
    }
}

$currentPos=-1;
$newString=$string;
foreach ($msg as $key=>$letter) { // deal with each letter of the desired message to pass
    foreach($l as $cap=>$arrPos) {// search in letters list with their positions
        if($letter==$cap) {       // array of the current parsed letter of the message
            foreach($arrPos as $kk=>$pos) { // see every position
                if ($pos>$currentPos) {     // ok, use the letter at that position
                    $newString=substr($newString,0,$pos)."\n".$letter.substr($string,$pos+1); // add line break
                    $currentPos=$pos+2; // take new characters into account (\n)
                    break 2;            // parse next letter of the message
                }
            }
        }
    }
}                    /* (note that I could have added some other (random) line breaks management, so that
                      * the message is not TOO obvious... !*/
echo nl2br($newString);

1

PHP, 136 Bytes

for($f=" ".join(file(F));$c=DIEINAGREASEFIRE[$i++];){while(($p=strpos($f,$c,$p))&&$f[$p-1]>" ");$p?$f[$p-1]="\n":$i=20;}echo$i<20?$f:"";

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

for($f=" ".join(file(F));       // read input from file "F"
    $c=DIEINAGREASEFIRE[$i++];) // loop through insult characters:
{
    while(($p=strpos($f,$c,$p))     // find next position of $c
        &&$f[$p-1]>" ");            // ... preceded by a space
    $p?$f[$p-1]="\n"                // if found, replace the space with a newline
    :$i=20;                         // else break the loop
}
echo$i<20?$f                // if modified text has the full insult, print it
    :"";                    // else print nothing

0

Python - 190 Bytes

l,r="IExINxAxGREASExFIRE","\n";k=p=raw_input();y=i=0
for c in l:
    if c!="x":
        h=len(p);x=p[y:h].find(c)
        if x==-1:i+=1
        p=p[0:x+y-1]+r+p[x+y:h];y=x+y;r="\n"
    else:r=r+r
if i!=0:p=k

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:

letters,return="IExINxAxGREASExFIRE","\n"
input1=input2=raw_input()
lastpos=sanity=0

for char in letters:
    if char != "x":
        inputlength=len(input1)
        charposition=input1[lastpos:inputlength].find(char)
        if charposition==-1:
            sanity+=1
        input1=input1[0:position+lastpos-1]+return+input1[position+lastpos:inputlength]
        lastpos=position+lastpos
        return="\n"
    else:return=return+return
if sanity!=0:
    input1=input2

Ich würde mich über Ihr Feedback freuen! Ich freue mich zu lernen.


Ich habe eine Bearbeitung mit ein paar Tricks angeboten. Fragen Sie mich einfach, ob einer von ihnen eine Erklärung benötigt. Beachten Sie, dass es viel mehr Golf geben könnte, aber das überlasse ich Ihnen. :)
Siehe auch

@TheRare Danke! Ich mag die Zeile "i = + x <0", die Sie in Ihrer Bearbeitung angeboten haben, im Gegensatz zu meiner Zeile "if x == - 1: i + = 1". Nur um sicherzugehen, dass ich es richtig lese, ist dies eine der ternären Sachen, über die ich letzte Nacht gelesen habe, richtig? Grundsätzlich heißt es: "Wenn x kleiner als 0 ist (-1 wird zurückgegeben, wenn das Zeichen nicht gefunden werden kann): füge x zu i hinzu." Also erfüllt es die Überprüfung der geistigen Gesundheit trotzdem mit -1 oder weniger für einen Wert, oder? Stellen Sie sicher, dass ich das richtig lese, denn das spart viel Platz!
0xhughes

Tatsächlich fügt sie x<0an i. 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+
siehe auch

Probieren Sie was True == 1gibt. :)
Siehe auch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.