ฉันเป็นคนก้าวร้าวและต้องการดูถูกเจ้านายของฉันโดยที่เขาไม่รู้


93

มันเป็นเวลาไม่กี่เดือนที่ผ่านมาในการทำงานและฉันรู้สึกว่าฉันแค่อยากกรีดร้องให้กับเจ้านายของฉัน อย่างไรก็ตามฉันไม่ใช่คนที่เผชิญหน้ากับคนที่ฉันมีปัญหาโดยตรง ฉันยังไม่ต้องการตกงาน

ดังนั้นนี่เป็นความคิด: ฉันต้องการที่จะดูถูกเขาโดยที่เขาไม่เคยรู้ และฉันก็รู้วิธีที่สมบูรณ์แบบ: ฉันต้องการซอฟต์แวร์บางอย่างที่เข้ารหัสการดูถูกภายในข้อความที่ดีอย่างสมบูรณ์ และเมื่อเห็นว่าเขารู้ว่าไม่เห็นต้นไม้เป็นป่าฉันคิดว่าฉันรู้ได้อย่างไรว่า:

เขียนโปรแกรมที่ใช้ใส่สตริงที่มีความยาวไม่ทราบ แต่ไม่มีการแบ่งบรรทัด นี่จะเป็นข้อความดิบที่ฉันต้องการส่ง

หากเป็นไปได้ให้ส่งคืนสตริงที่จัดรูปแบบจนข้อความ "DIE IN A GREASE FIRE" ทำขึ้นคอลัมน์ซ้ายทั้งหมด ด้วยย่อหน้าใหม่ที่ควรเว้นวรรคระหว่างคำ ตอนนี้เมื่อฉันโกรธมากก็เป็นสิ่งสำคัญเท่าเทียมกันที่ตัวอักษรทุกตัวเป็นตัวพิมพ์ใหญ่

คุณไม่สามารถแก้ไขสตริงด้วยวิธีอื่น ๆ เช่นคุณไม่สามารถเปลี่ยนสตริงทั้งหมดเป็นอักขระตัวพิมพ์ใหญ่

หากสตริงที่มีปัญหาไม่สามารถจัดรูปแบบด้วยวิธีนี้คุณจะต้องส่งคืนสตริงเดิม อ่านอินพุตจากอินพุตมาตรฐาน

ใช้กฎปกติ: ไม่มีการร้องขอ HTTP ไม่มีการให้คำปรึกษาจาก Marvin จาก THGTTG ​​ฯลฯ

อินพุตตัวอย่าง:

เรียนบอสเป็นอย่างไรบ้าง มันมาถึงความสนใจของฉันที่ฉันได้รับความผิดทั้งหมดสำหรับอุบัติเหตุเมื่อวันศุกร์ที่ ไม่ใช่แค่ส่วนใหญ่เท่านั้น ทุกบิตสุดท้ายของมัน มันผิดหรือเปล่าที่ฉันคิดว่าส่วนที่เหลือของทีมมีส่วนรับผิดชอบอย่างน้อยที่สุด? ท้ายที่สุดพวกเราทั้งหกคนมีส่วนร่วมจากการเดินทาง ไม่ใช่ว่าฉันคิดว่าฉันควรยืนโดยไม่มีการตำหนิ ไม่ใช่เลย. ทั้งหมดที่ฉันพูดคือ: ฉันทำอย่างดีที่สุด ฉันพยายามอย่างหนัก ฉันปรับปรุงอย่างต่อเนื่อง และฉันก็รับผิดชอบตลอดเวลา โดยทั่วไปแล้วฉันก็โอเคกับความรับผิดชอบเต็มที่สำหรับการกระทำของฉัน แต่หลังจากฤดูใบไม้ผลินี้ดูเหมือนว่าฉันได้รับมากกว่าที่ฉันสมควรได้รับ จำสัญญา Flakenhauser ได้ไหม? ทุกอย่างลงไปอย่างราบเรียบเท่าที่เราจะคาดหวังได้ ในตอนแรกมันดูเหมือน ในนาทีสุดท้ายที่สิ่งต่าง ๆ พังทลายลง ทีมทั้งหมดเห็นด้วยว่ามันคล้ายกับอุบัติเหตุประหลาดมากกว่าการวางแผนที่เลอะเทอะหรือจัดการทรัพยากรที่ไม่ถูกต้อง ถึงกระนั้นฉันก็โดดเดี่ยว - โทษมัน แม้ว่าฉันจะไม่พูดอะไรเลยระดับความอดทนของฉันในการตำหนิก็เป็นปัญหาร้ายแรง จากจุดนั้นฉันรู้สึกว่าจำเป็นต้องพยายามอย่างหนักสองครั้งเสมอเพื่อหลบหนีการตรวจสอบข้อเท็จจริง และยังที่นี่เราเป็นอีกครั้ง ทั้งๆที่ความสำเร็จของฉันทั้งหมด ขวาที่เราดูเหมือนจะจบวันนี้ ทุกโครงการ มันทนไม่ไหว เพียงเพื่อหนีการตรวจสอบข้อเท็จจริง และยังที่นี่เราเป็นอีกครั้ง ทั้งๆที่ความสำเร็จของฉันทั้งหมด ขวาที่เราดูเหมือนจะจบวันนี้ ทุกโครงการ มันทนไม่ไหว เพียงเพื่อหนีการตรวจสอบข้อเท็จจริง และยังที่นี่เราเป็นอีกครั้ง ทั้งๆที่ความสำเร็จของฉันทั้งหมด ขวาที่เราดูเหมือนจะจบวันนี้ ทุกโครงการ มันทนไม่ไหว

ตัวอย่างผลลัพธ์:

เรียนบอสเป็นอย่างไรบ้าง
มันมาถึงความสนใจของฉันที่ฉันได้รับความผิดทั้งหมดสำหรับอุบัติเหตุเมื่อวันศุกร์ที่ ไม่ใช่แค่ส่วนใหญ่เท่านั้น
ทุกบิตสุดท้ายของมัน

มันผิดหรือเปล่าที่ฉันคิดว่าส่วนที่เหลือของทีมมีส่วนรับผิดชอบอย่างน้อยที่สุด? ท้ายที่สุดพวกเราทั้งหกคนมีส่วนร่วมจากการเดินทาง
ไม่ใช่ว่าฉันคิดว่าฉันควรยืนโดยไม่มีการตำหนิ ไม่ใช่เลย.

ทั้งหมดที่ฉันพูดคือ: ฉันทำอย่างดีที่สุด ฉันพยายามอย่างหนัก ฉันปรับปรุงอย่างต่อเนื่อง และฉันก็รับผิดชอบตลอดเวลา

โดยทั่วไปแล้วฉันก็โอเคกับความรับผิดชอบเต็มที่สำหรับการกระทำของฉัน แต่หลังจากฤดูใบไม้ผลินี้ดูเหมือนว่าฉันได้รับมากกว่าที่ฉันสมควรได้รับ
ระลึกถึงสัญญา Flakenhauser
ทุกอย่างลงไปอย่างราบเรียบเท่าที่เราจะคาดหวังได้ ในตอนแรกมันดูเหมือน ในนาทีสุดท้ายที่สิ่งต่าง ๆ พังทลายลง
ทีมทั้งหมดเห็นด้วยว่ามันคล้ายกับอุบัติเหตุประหลาดมากกว่าการวางแผนที่เลอะเทอะหรือจัดการทรัพยากรที่ไม่ถูกต้อง
ถึงกระนั้นฉันก็โดดเดี่ยว - โทษมัน
แม้ว่าฉันจะไม่ได้พูดอะไรเลยระดับความอดทนของฉันสำหรับการตำหนิก็เป็นปัญหาร้ายแรง

จากจุดนั้นฉันรู้สึกว่าจำเป็นที่จะต้องพยายามอย่างหนักสองครั้งเสมอเพื่อหลบหนีการตรวจสอบข้อเท็จจริง และยังที่นี่เราเป็นอีกครั้ง
ทั้งๆที่ความสำเร็จของฉันทั้งหมด
ขวาที่เราดูเหมือนจะจบวันนี้
ทุกโครงการ มันทนไม่ไหว

นี่คือรหัสกอล์ฟ รหัสที่สั้นที่สุดชนะ


4
ตัวแบ่งบรรทัดต้องเกิดขึ้นหลังจากเครื่องหมายวรรคตอนสิ้นสุดหรือไม่ หรือฉันจะมีตัวแบ่งบรรทัดก่อนที่จะมีบางตอนนี้หรืออาจจะอยู่ในตัวย่อตราบใดที่ตัวอักษรต่อไปนี้เป็นตัวพิมพ์ใหญ่? ที่ถูกกล่าวว่าความท้าทายที่ดูถูกเหยียดหยามไม่ได้ดีในอดีตที่ผ่านมา แต่คุณอาจจะได้รับไปเพราะคุณไม่ได้ถามความคิดสร้างสรรค์ของผู้เข้าร่วมในการมาด้วยความหยาบคายใหม่
Martin Ender

1
การทำลายเส้นก่อนคำนามที่ถูกต้องสมบูรณ์ดี
Christofer Ohlsson

3
@NateKerkhofs ฉันคิดว่ามันย้อนกลับ: เนื่องจากข้อความลับเป็นเพียงตัวละครไม่กี่ตัวในข้อความทั้งหมดฉันคิดว่าการดูถูกเป็นต้นไม้และข้อความคือป่า เราหวังว่าเจ้านายจะได้เห็นป่าไม่ใช่ต้นไม้
Joshua Taylor

11
เป็นตัวอักษร Arnold Schwarzenegger ของแรงบันดาลใจของคุณหรือไม่
200_success

57
ฉันต้องยอมรับว่าฉันทำสองครั้งเล็กน้อยเมื่อฉันเห็นสิ่งนี้ในรายการคำถามยอดนิยม เมื่อฉันเห็นมันเป็น PCG และไม่ใช่ที่ทำงาน ... ดี ... ฉันจะไม่พูดว่าฉันไม่ผิดหวังเล็กน้อย
BenM

คำตอบ:


54

CJam, 56 53 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร

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
ทำไมฉันถึงพบว่าตัวเองไม่ได้รับคำตอบมากมาย โอ้ใช่เพราะพวกมันบ้า
โม่

การป้อนข้อมูลที่มีคำศัพท์มากใน CAPS ทั้งหมดทำอะไรได้บ้าง
Adam Davis

2
@ AdamDavis: การเตรียมช่องว่างเป็น "C" และ "A" ทำให้แน่ใจว่า WORDS จะไม่ถูกทำลายโดย linefeeds
Dennis

25

Perl - 60 ไบต์

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

นับ Shebang เป็นหนึ่งเดียว

วิธีนี้ใช้สตริงภายในสุดเพื่อสร้าง regex ต่อไปนี้:

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

ซึ่งคล้ายกับ regex ที่ใช้ในการแก้ปัญหาของ m.buettner regex ที่สร้างขึ้นจะถูกจับคู่กับอินพุต ในบริบทรายการสิ่งนี้จะส่งคืนอาร์เรย์ที่มีกลุ่มการจับคู่แต่ละกลุ่มซึ่งถูกรวมเข้าด้วยกันด้วยการขึ้นบรรทัดใหม่ (เหตุผลสำหรับกลุ่ม 'ไม่มีอะไรที่ตรงกัน' (\.*)คือการแทรกขึ้นบรรทัดใหม่เพิ่มเติม) หากไม่มีการจับคู่สตริงเดิมจะถูกส่งออกแทน


Perl - 73 ไบต์

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

นับ Shebang เป็นสอง

สิ่งนี้จะแยกสตริงที่ตัวคั่นที่เหมาะสมและรวบรวมชิ้นส่วนในอาร์เรย์ หากใด ๆ ของพวกเขาล้มเหลวในการจับคู่แยกบันทึกการส่งออก (ซึ่งถูกกำหนดให้ขึ้นบรรทัดใหม่กับ-lตัวเลือก) จะไม่มีการตั้งค่าและดังนั้นสตริงที่เป็นเอาท์พุทที่ไม่ได้แก้ไข


Shebang นั้นต้องการเส้นทางที่สมบูรณ์ใช่ไหม
celtschk

ทำไมจึงเป็นจุด (DIEI.NA. ... ?
edc65

@celtschk อาจขึ้นอยู่กับระบบของคุณและวิธีที่คุณตั้งใจจะเรียกใช้สคริปต์ เรียกใช้./script.plแล้วน่าจะใช่ หากเรียกใช้เช่นperl script.plนั้นจะไม่
โม่

1
@ edc65 The .after Iจะแทรกบรรทัดใหม่เพิ่มเติมก่อนหน้า I (เพราะตรงกับอีกครั้งในตำแหน่งเดียวกัน) อาจจะเป็นเคาน์เตอร์ที่ใช้งานง่าย
โม่

2
@celtschk สวิตช์บน shebang จะยังคงถูกตีความ คุณสามารถทดสอบสิ่งนี้ได้โดยการเพิ่ม-Mตัวเลือกลงใน shebang ซึ่งจะตายด้วยข้อผิดพลาดร้ายแรง: Too late for "-M" option at line 1.แต่เหตุผลหลักที่ฉันใส่ไว้ที่นั่นฉันก็หลีกเลี่ยงที่จะต้องอธิบายว่ามันต้องทำงานเหมือนperl -pl script.pl- ในรูปแบบปัจจุบันมันทำงาน อย่างที่เป็น.
โม่

12

GolfScript, 53 ไบต์

ดูเหมือนเดนนิสกับฉันมาด้วยสิ่งที่คล้ายกันในแบบคู่ขนาน ... แต่นี่คือความพยายามของฉัน

คลิกที่ลิงค์ก่อนแต่ละบล็อครหัสเพื่อลองออนไลน์ น่าเสียดายที่ล่ามออนไลน์ไม่อนุญาตให้คุณเรียกใช้โค้ดที่มีขนาดใหญ่กว่า 1024 ตัวอักษรดังนั้นฉันจึงต้องทำการ ... "การบีบอัด" ของอินพุตทดสอบ แต่มันก็ยังใช้งานได้

รุ่น Squished

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

รุ่นที่ไม่มีความคิดเห็นมีความคิดเห็น

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

ประเด็นที่เดนนิสยกขึ้น: โปรแกรม GolfScript ทั้งหมดพิมพ์บรรทัดใหม่สุดท้ายอัตโนมัติ ไม่ว่าสิ่งนี้จะทำให้การแก้ปัญหาของฉันเป็นไปอย่างถูกต้องหรือไม่ฉันไม่แน่ใจ ฉันเชื่อว่ามันจะมีค่าใช้จ่าย 4 ตัวอักษรเพื่อปราบปรามการขึ้นบรรทัดใหม่สุดท้ายโดยการเพิ่ม"":nที่ไหนสักแห่งใกล้จะจบ


1
คุณดูเหมือนจะไม่ตรวจสอบว่าตัวละครเป็นตัวอักษรตัวแรกของคำ ตัวอย่างเช่น. "FIFA" ควรใช้สำหรับ F เท่านั้นไม่ใช่สำหรับ "I" หรือ "A"
Dennis

@Dennis ฉันไม่เห็นส่วนหนึ่งของข้อกำหนดที่ต้องการ แต่ถ้าคุณกำหนดข้อ จำกัด ดังกล่าวกับตัวเองการยกมันขึ้นมาจากทางออกของคุณดูเหมือนว่ามันจะทำให้ความแข็งแกร่งของกอล์ฟดีขึ้น
Runer112

1
นี่เป็นวิธีที่ m.buettner และฉันตีความคำถาม (ฉันต้องดูคำตอบอื่น ๆ อย่างละเอียด) แต่คุณพูดถูกมันไม่ได้พูดว่าเราไม่สามารถแยกคำได้
Dennis

7

ทับทิม - 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)

ไม่มี regexes ในนี้ มันจะเดินตัวอักษรพร้อมกันในอินพุต ARGV [0] และสตริงที่มีอักขระที่เราต้องเจาะเพื่อสร้างข้อความคอลัมน์ซ้ายของเรา เดิมทีจะติดช่องว่างหลังจากตัวอักษรที่ต้องมีการขึ้นบรรทัดใหม่ แต่พบว่ามันสั้นลงเล็กน้อยเพื่อ hardcode ดัชนีที่จะแทรกตัวแบ่งบรรทัด

เมื่อทุกคนพูดและทำแล้วมันจะตรวจสอบเพื่อดูว่าiดัชนีมีเวลาเพิ่มขึ้นเพียงพอที่จะผ่านตัวอักษรทุกตัวที่จำเป็นต้องทำลาย ถ้ายังไม่มีเราเพียงพิมพ์สตริงเดิม ถ้ามีเราจะจัดรูปแบบให้

n-[i]!=nเป็นเล่ห์เหลี่ยมเรียบร้อยในการบันทึกอักขระเมื่อตรวจสอบว่าดัชนีปัจจุบันเป็นดัชนีที่ต้องการการแบ่งบรรทัดพิเศษหรือไม่ (เทียบกับn.include? i) บันทึกอักขระบางตัวด้วยการใช้{}s แทนdo/endการเป็นบล็อกหลายบรรทัดและใช้เงื่อนไขที่ประกอบไปด้วยสุดท้ายทำให้การบันทึกอักขระเมื่อพิจารณาว่าตัวใดจะออก

ไม่ใช่ที่สั้นที่สุด แต่ฉันคิดว่ามันจะเรียบร้อยถ้าไม่มีการแสดงออกปกติ


7

Perl, 184 ไบต์

ไม่ใช่คะแนนที่น่าประทับใจสำหรับ Perl แต่นี่เป็นวิธีแก้ปัญหา regex อย่างง่าย

$_=<>;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
แน่นอนเป็นไปได้ที่จะสร้าง regex ในรหัสและบันทึกตันหรือไม่
Peter Taylor

@PeterTaylor แน่นอน แต่ฉันไม่มีเวลาหรือความรู้ Perl ที่จะทำตอนนี้ ฉันอาจจะดูในวันนี้
Martin Ender

ถึงกระนั้นมันก็ตอบรับ PERL ของฉันซึ่งฉันจะไม่รบกวนการโพสต์ในขณะนี้: p
Tal

บันทึก 4 ตัวอักษร: ==print($_) print+1 จุดอ่านง่าย: มันเป็นเรื่องง่ายที่จะเห็นสิ่งที่เกิดขึ้นซึ่งไม่ตรงกับกรณีสำหรับการแก้ปัญหาอื่น ๆ
Ole Tange

นี้ถือว่าง่ายใน Perl?
Lincoln Bergeson

6

JavaScript 116

การใช้งาน Javascript ของแนวคิด m-buettner

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

ตัวอย่างการทดสอบ

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>



สิ่งนี้ล้มเหลวในการFIFAทดสอบ (ความคิดเห็น OP)
Mwr247

@ Mwr247 ยากที่จะเข้าใจ: คุณลองทดสอบ FIFA อะไร
edc65

From that FIFA point onลองสตริงการทดสอบที่มีการแก้ไขต่อไปนี้: มันทำให้บรรทัดใหม่ก่อนและก่อนที่ช่องว่างก่อนFA FI
Mwr247

@ Mwr247 ไม่ใช่สำหรับฉัน ผ่านการทดสอบกับ Firefox ฉันจะได้รับบรรทัดที่แน่นอนเหมือนกันไม่มีบรรทัดใหม่ในนั้น
edc65

4

Python3 ( 166 138)

แข็งแรงเล่นกอล์ฟ:

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

แม้ว่าการใช้แลมบ์ดาจะทำให้ฉันพอใจบ้าง แต่จำนวนตัวแปรที่ใช้และการพัฒนาที่ค่อนข้างยุ่งก็มีผลในทางตรงกันข้าม Regex อาจเป็นแนวคิดที่ดีเช่นกัน อย่างน้อยมันก็ใช้ได้ดี :)

แก้ไข: แทนที่แลมบ์ดาตัวแปรด้วยcountคำสั่ง builtin และ shortened split


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)

คำอธิบาย

chunk แยกส่วนที่ซ้ำกันของข้อความที่มีส่วนหัวล่าสุดซ้ำ ๆ และนำไปไว้ในรายการ

ข้อแม้: สิ่งนี้จะไม่ทำงานหากไม่มีช่องว่างระหว่างสองหัวที่เสนอในจดหมายของคุณด้วยเหตุผลบางอย่าง แต่ดูเหมือนจะไม่น่าเป็นไปได้ในจดหมายถึงเจ้านายของคุณ


1

ทับทิม 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

ทับทิม 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 ไบต์

เหตุใด J จึงไม่มีฟังก์ชันที่ดีในการจัดการสตริง แต่มีเฉพาะฟังก์ชันอาเรย์เท่านั้น ฉันจะแก้ไขสิ่งนี้ถ้าฉันเข้าใจสิ่งที่ฉลาด

แก้ไข: เอาต์พุตที่สั้นและคงที่ (มีพื้นที่พิเศษก่อน) และตรวจสอบ ฉันปรับปรุงคำอธิบายให้ดีขึ้น

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

คำอธิบาย:

ฉันจะแสดงการใช้ฟังก์ชันเป็น [<left argument>] <function name> <right argument>f <text>เช่น ฉันจะไม่อธิบายทุกรายละเอียดเพราะฟังก์ชั่นค่อนข้างยาว

@ ใช้ฟังก์ชั่นที่เหมาะสมกับฟังก์ชั่นซ้ายเช่น f@g x == f(g(x))

t=:(}.@[t{.@[(}:@],(((0{I.@E.)({.;LF;}.)])>@{:))])']@.(0=#@[) เป็นฟังก์ชั่นวนซ้ำ <delimiters> t <boxed string>ที่แยกสตริงด้วยตัวคั่นทุกตัวตามลำดับ ล้มเหลวหากไม่พบตัวคั่นบางตัว

(((0{I.@E.)({.;LF;}.)])>@{:) แยกสตริงจากด้านซ้ายของตัวคั่นเพิ่มการป้อนบรรทัดระหว่างพวกเขา

>@{: รับสตริงสุดท้ายจากรายการ (อันที่ยังไม่ได้แยก)

0{I.@E. ทำให้ดัชนีแยกที่ไม่ผ่านถ้าตัวคั่นไม่มีอยู่

{.;LF;}. เชื่อมต่อด้านซ้ายของการแยกให้ป้อนบรรทัดและด้านขวาของการแยก

}:@], ตัดแบ่งผลลัพธ์ของการแบ่งก่อนหน้านี้และผลลัพธ์ของฟังก์ชันสุดท้าย (ความหมายสุดท้าย: ค้นหา)

']@.(0=#@[)ตรวจสอบว่ามีตัวคั่นเหลืออยู่หรือไม่และเรียกใช้ฟังก์ชันที่อธิบายไว้ข้างต้น (5 บรรทัด) หากมี มิฉะนั้นจะส่งคืน

'IEIINAAGGREASEFFIRE'& ตั้งค่าอาร์กิวเมนต์ซ้ายของ tสตริงนั้น

[:>,&.>/@ รวมผลลัพธ์ของการแยก

::] หากสิ่งใดล้มเหลว (ฉันทำการค้นหาดัชนีแยกเป็นจุดอ่อน) ให้ส่งคืนสตริงเดิม

ตัวอย่าง (ยาวเกินไป):

   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 ไบต์

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

`:`
`)+a:a))

ฉันเคยreplaceก้าวผ่านสายอักขระโดยมีการจับคู่/\b./gเพื่อค้นหาเฉพาะอักขระที่ตามเว้นวรรคหรือเริ่มต้นสตริง iแล้วฉันจะตรวจสอบตัวละครแต่ละตัวเพื่อดูว่ามันตรงกับดัชนีปัจจุบันในอาร์เรย์ผมกำลังมองหาและเพิ่มขึ้นบรรทัดใหม่ก่อนที่มันถ้ามันได้และเพิ่มขึ้น

แก้ไข: พลาดความจำเป็นในการสร้างบรรทัดใหม่ระหว่างคำ ฉันทำเสร็จไปแล้วซึ่งนำมาซึ่งมากถึง 115


1

PHP, 328 ไบต์

ให้ไฟล์ชื่อ 'G' ที่มีข้อความแบบดิบถึง "enmessage"

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

คำอธิบาย (~ ungolfed && รหัสความคิดเห็น):

<?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 ไบต์

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

ถ้าดูถูกทั้งสามารถวาง; พิมพ์สตริงที่ดัดแปลงด้วยช่องว่างนำหน้าหรือ linebreak เอาท์พุทที่ว่างเปล่าถ้าไม่ ทำงานด้วย-rทำงานด้วย

ชำรุด

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 ไบต์

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

นี่คือความพยายามครั้งแรกของฉันในการเล่นกอล์ฟ :) ฉันต้องการเรียนรู้เทคนิคการเขียนโค้ดที่ยอดเยี่ยมไม่ว่าฉันจะมุ่งเน้นไปที่การใช้การค้นหาแล้วต่อด้วยการต่อสายเพื่อค้นหาตัวอักษรที่เหมาะสมและจัดรูปแบบผลลัพธ์

ตัวแปร -

lr = l ถูกกำหนดอักขระที่เราจะใช้เป็นแนวทางของเราในการสร้างย่อหน้าที่จัดรูปแบบใหม่ของเรา r ถูกกำหนดให้อักขระบรรทัดใหม่สำหรับเราในการเว้นระยะเอาต์พุตใหม่

k, p = ย่อหน้าอินพุต K ใช้เพื่อเปลี่ยนกลับเป็นต้นฉบับเนื่องจากไม่ได้กำหนดใหม่ในระหว่างการทำงานของสคริปต์ ฉันตรวจสอบกับ x เพื่อทราบว่าเมื่อใดที่จะเพิ่มบรรทัดใหม่สองครั้งเพื่อวัตถุประสงค์ในการเว้นวรรค

y, i = y เป็น "เคอร์เซอร์" แปลก ๆ ติดตามตำแหน่งสุดท้ายที่พบตัวละครดังนั้นเราจึงค้นหาผ่านย่อหน้าอย่างถูกต้องเพื่อวัตถุประสงค์ในการต่อผมตรวจสอบสติถ้าเราไม่ตีตัวเราทั้งหมด เปลี่ยนย่อหน้า (p ตัวแปร) กลับไปเป็นอินพุตดั้งเดิมผ่านตัวแปร k

h = ความยาวอินพุตซึ่งเราใช้ในการต่อข้อมูล

x = ตำแหน่งของอักขระปัจจุบันที่แสดงด้วย C ซึ่งใช้สำหรับการประกบเช่นกัน

c = ตัวอักษรใน l เพื่อทำซ้ำและค้นหา

รหัสต่อไปนี้ถูกสร้างใหม่และแยกออกจากรหัสดั้งเดิมเพื่อให้สามารถอ่านได้ว่าเกิดอะไรขึ้น:

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

ฉันขอขอบคุณข้อเสนอแนะของคุณ! ฉันกำลังมองหาที่จะเรียนรู้


ฉันเสนอการแก้ไขโดยใช้ลูกเล่นบางอย่างในนั้น แค่ถามฉันว่ามีใครต้องการคำอธิบายบ้างไหม โปรดทราบว่ามันสามารถเล่นกอล์ฟได้ไกลขึ้นโดยมาก แต่ฉันจะทิ้งมันไว้กับคุณ :)
seequ

@TheRare ขอบคุณ! ฉันชอบบรรทัด "i = + x <0" ที่คุณเสนอในการแก้ไขซึ่งตรงข้ามกับบรรทัด "if x == - 1: i + = 1" ของฉัน เพียงเพื่อให้แน่ใจว่าฉันอ่านถูกแล้วนี่เป็นหนึ่งในสิ่งที่น่าเบื่อที่สุดที่ฉันอ่านเมื่อคืนนี้ใช่ไหม โดยทั่วไปแล้วจะอ่านว่า "ถ้า x น้อยกว่า 0 (-1 จะถูกส่งคืนเมื่อไม่พบถ่าน): เพิ่ม x ไปยัง i" ถูกต้อง? ดังนั้นมันจึงยังคงเป็นที่พอใจของการตรวจสอบสติด้วยค่า -1 หรือน้อยกว่าสำหรับค่าใช่มั้ย? ต้องการให้แน่ใจว่าฉันอ่านถูกต้องแล้วเพราะนั่นเป็นโปรแกรมรักษาพื้นที่ที่ยอดเยี่ยม!
0xhughes

จริงๆแล้วมันเพิ่มไปx<0 iใน python True เหมือนกับ 1 และ False เท่ากับ 0 ดังนั้นถ้า x เท่ากับ -1 จะเพิ่ม 1 และ 0 i+=จะเท่ากับ 0i=i+
seequ

ลองสิ่งที่True == 1ให้ :)
seequ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.