Ben pasif bir saldırganım ve patronuma öğrenmeden hakaret etmek istiyorum


93

İş yerinde birkaç ay geçti ve ben sadece patronumun yüzüne doğru bağırmak istiyormuş gibi hissediyorum. Bununla birlikte, bir sorunum olan insanlarla doğrudan yüzleşecek biri değilim. Ben de işimi kaybetmek istemiyorum.

İşte bir fikir: Ben hiç öğrenmeden ona hakaret edebilmek istiyorum. Mükemmel yolu farkettim: Tamamen kusursuz bir mesajın içinde hakaret kodlayan bir çeşit yazılıma ihtiyacım var. Ve ağaçlar için orman göremediğini bildiğini düşünüyorum, sanırım nasıl olduğunu biliyorum:

Girdi olarak bilinmeyen uzunlukta bir dize alan ancak satır sonu olmayan bir program yazın. Bu göndermek istediğim ham mesaj olacak.

Mümkünse, "SIRTILMIŞ BİR YANGIN DIE" mesajı, tüm sol sütunu oluşturan şekilde biçimlendirilmiş dizgiyi geri gönderin. Kelimeler arasında boşluk bırakılması gereken yeni paragraflarla. Şimdi, çok kızdığım için, her harfin büyük harf olması aynı derecede önemlidir.

Dize başka bir şekilde değiştiremezsiniz, yani tüm dizeyi büyük harf karakterlere dönüştüremezsiniz.

Söz konusu dize bu şekilde biçimlendirilemiyorsa, orijinal dizgiyi döndürmeniz gerekir. Standart girişten girişi okuyun.

Normal kurallar geçerlidir: HTTP isteği yok, THGTTG'den Marvin'e danışmanlık yok, vb.

Örnek giriş:

Sevgili Patron, işler nasıl? Geçen cuma talihsizlikle ilgili tüm suçu benim aldığımı farkettim. Sadece çoğunluğu değil. Her son parçası. Takımın geri kalanının en azından kısmen sorumlu olduğunu düşünmem yanlış mı? Ne de olsa, altı kişiyiz de başından beri karıştı. Sanırım suçsuz durmak zorundayım. Bir şey değil. Tek söylediğim bu: Elimden gelenin en iyisini yapıyorum. Çok çalışıyorum Sürekli gelişiyorum. Ve sürekli sorumluluk alıyorum. Genel olarak konuşursak, eylemlerimin sorumluluğunu üstlenmekte çok iyiyim. Fakat bu bahardan sonra hakettiğimden daha fazlasını alıyorum. Flakenhauser sözleşmesini hatırladın mı? Her şey umduğu gibi pürüzsüzdü. Ya da ilk başta gibiydi. Sadece son dakikada işler düştü. Takımın tamamı, özensiz planlama veya yanlış yönetilen kaynaklardan daha garip bir kazaya benzer olduğunu kabul etti. Yine de, ben - yalnız - bunun için suç aldım. O zaman hiçbir şey söylemesem de, suçu üstlenmeye yönelik tolerans seviyem ciddi bir engel aldı. Bu noktadan sonra, sadece incelemeden kaçmak için her zaman iki kat daha fazla denemenin gerekli olduğunu hissettim. Ve yine de, yine buradayız. Tüm başarılarıma rağmen. Tam bu günlerde her zaman bitiyor gibiyiz. Her proje. Dayanılmaz hale geliyor. sadece incelemeden kaçmak için. Ve yine de, yine buradayız. Tüm başarılarıma rağmen. Tam bu günlerde her zaman bitiyor gibiyiz. Her proje. Dayanılmaz hale geliyor. sadece incelemeden kaçmak için. Ve yine de, yine buradayız. Tüm başarılarıma rağmen. Tam bu günlerde her zaman bitiyor gibiyiz. Her proje. Dayanılmaz hale geliyor.

Örnek çıktı:

Sevgili Patron, işler nasıl?
Geçen cuma talihsizlikle ilgili tüm suçu benim aldığımı farkettim. Sadece çoğunluğu değil.
Her son parçası.

Takımın geri kalanının en azından kısmen sorumlu olduğunu düşünmem yanlış mı? Ne de olsa, altı kişiyiz de başından beri karıştı.
Sanırım suçsuz durmak zorundayım. Bir şey değil.

Tek söylediğim bu: Elimden gelenin en iyisini yapıyorum. Çok çalışıyorum Sürekli gelişiyorum. Ve sürekli sorumluluk alıyorum.

Genel olarak konuşursak, eylemlerimin sorumluluğunu üstlenmekte çok iyiyim. Fakat bu bahardan sonra hakettiğimden daha fazlasını alıyorum.
Flakenhauser sözleşmesini hatırlayın.
Her şey umduğu gibi pürüzsüzdü. Ya da ilk başta gibiydi. Sadece son dakikada işler düştü.
Tüm ekip, bunun özensiz planlama veya yanlış yönetilen kaynaklardan daha garip bir kazaya benzer olduğunu kabul etti.
Yine de, ben - yalnız - bunun için suç aldım.
O zaman hiçbir şey söylemesem de, suçu üstlenmeye yönelik tolerans seviyem ciddi bir aldatmaca aldı.

Bu noktadan itibaren, sadece incelemeden kaçmak için her zaman iki kat daha fazla denemenin gerekli olduğunu hissettim. Ve yine de, yine buradayız.
Tüm başarılarıma rağmen.
Tam bu günlerde her zaman bitiyor gibiyiz.
Her proje. Dayanılmaz hale geliyor.

Bu kod golfü. En kısa kod kazanır.


4
Satır sonları yalnızca cümle biten noktalama işaretlerinden sonra mı gerçekleşmeli? Ya da şu anda uygun bir şey olmadan önce ya da bir kısaltma dahilinde, aşağıdaki harf büyük harf olduğu sürece, bir satır sonu verebilir miyim? Bu söylendiğine göre hakaretle ilgili zorluklar geçmişte pek iyi geçmedi, ancak kaçabilirsin çünkü katılımcıların yeni müstehcenliklerin ortaya çıkmasında yaratıcılığını istemedin.
Martin Ender

1
Doğru isimlerden önce satır sonları tamamen iyi.
Christofer Ohlsson

3
@NateKerkhofs Ben geriye doğru olduğunu düşünüyorum: Gizli mesaj tüm iletide sadece birkaç karakter olduğundan, hakaretin ağaçlar olduğunu ve mesajın orman olduğunu düşünüyorum. Patronun ağaçları değil ormanı göreceğini umuyoruz.
Joshua Taylor


57
Bunu Sıcak Sorular listesinde gördüğümde iki kat daha fazla yaptığımı itiraf etmeliyim. PCG olduğunu ve The Workplace olmadığını gördüğümde ... şey ... hayal kırıklığına uğratmadığımı söyleyemem.
BenM

Yanıtlar:


54

CJam, 56 53 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

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
Neden kendimi bu kadar çok cevabınızı olumlu buluyorum? Oh evet, çünkü deliler.
primo

ALL CAPS içindeki ÇOK ANGRY kelimesini içeren giriş ne yapar?
Adam Davis

2
@AdamDavis: “C” ve “A” 'ya boşluk hazırlamak WORDS'in satır beslemeleri tarafından kesilmemesini sağlar.
Dennis

25

Perl - 60 bayt

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

Shebang'ı bir olarak sayıyorum.

Bu çözüm, aşağıdaki regex'i oluşturmak için en içteki dizeyi kullanır:

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

m.buettner'ın çözümünde kullanılan regex'e benzer . Üretilen regex daha sonra girişe karşı eşleştirilir. Bir liste bağlamında, bu, yeni bir satırla birleştirilen eşleşme gruplarının her birini içeren bir dizi döndürür ('hiçbir şey eşleşmeyen' grubunun nedeni (\.*), ek bir yeni satır eklemektir). Eşleşme yoksa, orijinal dize çıkar.


Perl - 73 bayt

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

Shebang'ı iki olarak saymak.

Bu, dizeyi uygun sınırlayıcılara böler ve parçaları bir dizide toplar. Bunlardan herhangi biri eşleşmezse, çıktı kayıt ayırıcısı (bu -lseçenekle yeni bir satıra ayarlanmış olan) ayarlanamaz ve bu nedenle dize değiştirilmemiş olarak çıkar.


Shebang'ın mutlak bir yola ihtiyacı yok mu?
celtschk

neden noktalar (DIEI.NA. ...?
edc65

@celtschk Belki, sisteminize ve komut dosyasını nasıl çağırmayı düşündüğünüze bağlı olarak. Olarak çağrıldı ./script.pl, sonra büyük olasılıkla evet. Olarak çağrılırsa perl script.pl, hayır.
primo

1
@ edc65 .sonra Iek bir yeni satır ekler önce I (bu aynı pozisyonda yeniden eşleştiği için). Belki biraz karşı sezgisel.
primo

2
@celtschk Shebang üzerindeki anahtarlar hala yorumlanacaktır. Bunu -Mölümcül hatayla ölecek olan shebang'a bir seçenek ekleyerek test edebilirsiniz : Too late for "-M" option at line 1.Ama oraya koyduğum asıl sebep perl -pl script.pl, şu anki haliyle, çalıştırılması gerektiği şeklinde açıklamak zorunda kalmaktan da kaçınıyorum. olduğu gibi kullanıldı.
primo

12

GolfScript, 53 bayt

Görünüşe göre Dennis ve ben paralel olarak benzer şeylerle karşılaştık ... Ama işte benim girişimim.

Çevrimiçi olarak denemek için her kod bloğundan önceki bağlantılara tıklayın. Maalesef, çevrimiçi tercüman 1024 karakterden daha büyük kod çalıştırmanıza izin vermez, bu yüzden test girişinde ... "sıkıştırma" yapmak zorunda kaldım. Ama yine de çalışıyor.

Squished versiyonu

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

Tamamlanmamış yorum

.       # (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

Dennis'in yükselttiği bir nokta: Tüm GolfScript programları otomatik bir son yeni satır yazdırır. Bunun benim çözümümü olduğu gibi geçersiz kılması gerekip gerekmediğinden emin değilim. Son satırın "":nsonunu yakın bir yere ekleyerek bastırmanın 4 karaktere mal olacağını düşünüyorum .


1
Karakterin bir kelimenin ilk karakteri olup olmadığını kontrol edemezsiniz. Örneğin. "FIFA", "I" veya "A" için değil, yalnızca F için kullanılmalıdır.
Dennis

@Dennis Bunu gerektiren şartnamenin herhangi bir bölümünü görmedim. Ancak, kendinize bu kısıtlamayı koyarsanız, çözümünüzden kaldırmak, üstün golf oynamak için sağlamlaşacak gibi görünüyor.
Runer112

1
Bu nasıl mbuettner ve ben soruyu yorumladık (diğer cevaplara daha yakından bakmalıyım), ama haklısın, kelimeleri kıramayacağımız bir yer yok.
Dennis

7

Yakut - 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)

Bunda regexes yok . Aynı anda ARGV [0] girişindeki karakterleri ve sol sütun mesajımızı yapmak için kırmamız gereken karakterleri içeren bir dizgiyi yürür. Başlangıçta yeni bir satırın olması gereken harflerden sonra boşluk bırakacaktı ancak satır sonunun ekleneceği dizinleri zorlamanın biraz daha kısa olduğunu fark ettin.

Her şey söylendiğinde ve yapıldığında, iendeksin kırılması gereken her harfin üzerinden geçmesi için yeterince zaman geçtiğini kontrol eder. Eğer yoksa, sadece orijinal dizgenin çıktısını alırız. Eğer varsa, onlara formatı verdik.

n-[i]!=nGeçerli dizinin fazladan bir satır sonu gerektirmesi gerekip gerekmediğini kontrol ederken karakterleri kurtarmak için temiz bir numaraydı (karşılaştırıldığında n.include? i). Ayrıca , çok satırlı bir blok olmasına rağmen {}s'yi kullanarak bazı karakterleri kaydettik do/endve sonuçta hangisinin çıkacağını belirlerken karakterleri kaydetmek için son sıradaki üçlü koşulu kullandık.

En kısa değil, ancak düzenli ifadeler olmadan yapmanın düzgün olacağını düşünmüştüm.


7

Perl, 184 bayt

Perl için muhteşem bir skor değil, ama işte basit bir regex çözümü

$_=<>;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
Elbette regex kodunu oluşturmak ve bir ton kaydetmek mümkün mü?
Peter Taylor

@PeterTaylor kesinlikle, ama şu anda bunu yapmak için ne zamanım ne de Perl bilgim yok. Bugün daha sonra bir göz atabilirim.
Martin Ender

Buna rağmen PERL cevabımı atıyor, ki şu anda göndermeyi zahmet etmeyeceğim: p
Tal

4 karakter kaydedin: print($_)== print. Okunabilirlik için +1 puan: Neyin olup bittiğini görmek, diğer çözümler için tam olarak uygun olmayan durumları görmek için oldukça kolaydır.
Ole Tange

Bu Perl'de basit olarak kabul edilir ?
Lincoln Bergeson,

6

JavaScript 116

M-buettner fikrinin Javascript uygulaması

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

Test pasajı

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>



Bu FIFAtestte başarısız olur (OP yorumları)
Mwr247

@ Mwr247 anlamak zor: Ne FIFA testi denediniz?
edc65

Aşağıdaki düzenleme test dizesi deneyin: From that FIFA point on. Önce FAve önce boşluktan önce yeni bir satır koyar FI.
Mwr247

@ Mwr247 benim için değil. Firefox ile test edildi, aynı çizgiyi aldım, içinde yeni satır yok
edc65

4

Python3 ( 166 138)

golfed:

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-imsi:

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])

Lambda kullanımı beni biraz memnun etse de, bu kitle değişkenlerinin sayısı ve biraz dağınık gelişme ters etki yaratıyor. Regex de iyi bir fikir olabilirdi. Hay ho, en azından işe yarıyor :).

Düzenleme: Yerleşik lambda değişkeni countyerleşik ve kısaltılmış split deyimi.


1

Piton3 (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)

açıklama

chunk tekrarlı bir şekilde son başlığı içeren mesajın sonunu ayırır ve bir listeye hazırlar.

Uyarı: Bu, mektubunuzda önerilen iki başlık arasında herhangi bir nedenden ötürü boşluk kalmaması durumunda işe yaramaz, ancak patronunuza bir mektupta görünmesi olası değildir.


1

Yakut 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 bayt

J neden dizeleri işlemek için iyi işlevlere sahip değil, sadece dizi işlevlerine sahip? Akıllıca bir şey bulursam bunu gözden geçireceğim.

Düzenleme: Kısaltılmış ve sabit çıktı (daha önce fazladan boşluk vardı) ve kontrol. Ben de açıklamayı geliştirdim.

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

Açıklama:

İşlev kullanımını [<left argument>] <function name> <right argument>örneğin olarak göstereceğim f <text>. Ayrıca her ayrıntıyı açıklamayacağım çünkü işlev oldukça uzun.

@ sağ işlevi sola uygular, örn. f@g x == f(g(x))

t=:(}.@[t{.@[(}:@],(((0{I.@E.)({.;LF;}.)])>@{:))])']@.(0=#@[)<delimiters> t <boxed string>dizeyi her sınırlayıcıyla sırayla bölen özyinelemeli bir işlevdir . Bazı sınırlayıcı bulunmazsa başarısız olur.

(((0{I.@E.)({.;LF;}.)])>@{:) dizgiyi sınırlayıcının solundan ayırır ve aralarına bir satır besleme ekler.

>@{: Listedeki son dizgiyi (henüz bölünmemiş olanı) alır

0{I.@E. sınırlayıcı yoksa, dizinin ayrılması için başarısız olur.

{.;LF;}. bölünmenin sol tarafını, satır beslemesini ve bölmenin sağ tarafını birleştirir

}:@], önceki bölümlerin sonuçlarını ve son işlevin sonuçlarını birleştirir (son anlam: arama)

']@.(0=#@[)herhangi bir sınırlayıcı kaldığını kontrol eder ve varsa yukarıda açıklanan işlevi (5 satır) çağırır. Aksi takdirde döner.

'IEIINAAGGREASEFFIRE'&tdize sol argümanını ayarlar

[:>,&.>/@ bölme sonuçlarını birleştirir

::] Bir şey başarısız olursa (bölünmüş dizini aramayı zayıf nokta yaptım), orijinal dizeyi döndürün.

Örnekler (çok uzun?):

   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 bayt

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

`:`
`)+a:a))

Ben sadece bir boşluk izleyen ya da dizgiyi başlatan karakterleri bulmak replaceiçin bir eşleşme ile /\b./gdizgiyi gezerdim. Sonra, aradığım dizideki geçerli dizine uyup uymadığını görmek için her bir karakteri kontrol ettim ve öyleyse daha önce bir yeni satır ekledim ve artırdım i.

EDIT: Kelimeler arasında yeni satırlar oluşturma gereğini kaçırdı. Bunu şimdi yaptım, bu 115'e çıkardı.


1

PHP, 328 bayt

Ham metni içeren "G" adlı bir dosyaya "enmessage" verilir.

<?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);

Açıklama (~ ungolfed && yorum kodu):

<?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 bayt

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:"";

Bütün hakaret konulabilirse; değiştirilmiş dizgiyi satır boşluk veya satır sonu ile yazdırır; değilse boş çıktı. İle koş -r.

Yıkmak

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 Bayt

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

Bu benim ilk golf denemem :) :) Bazı harika kodlama tekniklerini öğrenmek için bakıyorum, ne olursa olsun, sadece bulmayı ve sonra uygun karakterleri bulmak ve çıktıyı biçimlendirmek için bazı karakter dizgilerini kullanmaya odaklandım.

Değişkenler -

lr = l yeni biçimlendirilmiş paragrafımızı oluşturmak için kılavuzumuz olarak kullanacağımız karakterlere atanır. Yeni çıktının aralarında bizim için yeni çizgi karakteri r verilir.

k, p = Giriş paragrafı. K, betiğin çalıştırılması sırasında atanmamış olduğundan orijinali geri döndürmek için kullanılır. Boşluk amacıyla ne zaman yeni bir satır ekleyeceğimi bilmek için x'e karşı denetlerim.

y, i = y bir tür imlecidir, karakterin bulunduğu son pozisyonu izler, böylece paragraf boyunca ekleme amaçları için doğru buluruz, aklı başında kontrol ederiz paragrafı (p değişkeni) k değişkeni üzerinden orijinal girişine döndürün.

h = Eklemede kullandığımız girdi uzunluğu.

x = Eklemek için kullanılan, C ile temsil edilen mevcut karakterin konumu.

c = Yinelemek ve aramak için l cinsinden karakterler.

Aşağıdaki kod yeniden okunur ve olup bitene kadar okunabilir olması için orijinal koddan çıkarılır:

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

Geri bildiriminiz için teşekkür ederiz! Öğrenmek istiyorum.


İçinde bazı hileler içeren bir düzenleme teklif ettim. Sadece herhangi birinin bir açıklamaya ihtiyacı olup olmadığını sor. Daha çok golf oynayabileceğini unutmayın, ancak bunu size bırakacağım. :)
seequ

@TheRare Teşekkürler! Düzenlemenizde sunduğunuz "i = + x <0" satırını, "eğer x == - 1: i + = 1" satırının aksine seviyorum. Sadece doğru okuduğuma emin olmak için, bu dün gece hakkında okuduğum üçlü şeyden biri değil mi? Temel olarak, "eğer x 0'dan küçükse (karakteri bulamadığında -1 döndürür): i'ye x ekleyin" Doğru mu? Demek ki, akıl sağlığı kontrolünü bir değer için -1 veya daha az olanla karşılar, değil mi? Bunu doğru okuduğumdan emin olmak istiyorum, çünkü bu harika bir yer koruyucu!
0xhughes

Aslında ekler x<0için i. Python'da True, 1 ile aynıdır ve False, 0 ile aynıdır. Öyleyse, x -1 ise, 1 ekler ve aksi takdirde 0 i+=ile aynıdıri=i+
seequ,

Ne True == 1verirse dene . :)
seequ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.