Я пасивний агресивний і хочу ображати мого начальника, не знаючи його


93

Минуло грубо кілька місяців на роботі, і я відчуваю, що мені просто хочеться кричати прямо на обличчя мого начальника. Я, однак, не один, щоб прямо протистояти людям, з якими я маю проблеми. Я також не хочу втрачати роботу.

Тож ось ідея: я хочу вміти його ображати, не знаючи ніколи. І я зрозумів ідеальний спосіб: мені потрібне якесь програмне забезпечення, яке кодує образу всередині інакше ідеального повідомлення. І бачачи, як він, як відомо, не бачить лісів для дерев, я думаю, що я знаю, як:

Напишіть мені програму, яка приймає як введення рядок невідомої довжини, але не містить розривів рядків. Це буде необроблене повідомлення, яке я хочу надіслати.

Якщо можливо, поверніть рядок, відформатований таким чином, що повідомлення "ВМЕРТЕ В ПОЖАРОМУ ПОЖАРІ" складає весь лівий стовпець. З новими абзацами, де мають пробіли між словами. Тепер, як я дуже злий, не менш важливо, щоб кожна літера була великою літерою.

Ви не можете змінювати рядок будь-яким іншим способом, тобто ви не можете перетворити всю рядку у великі регістри.

Якщо відповідний рядок неможливо відформатувати таким чином, ви повинні повернути початкову рядок. Прочитайте вхід зі стандартного вводу.

Діють звичайні правила: Ніяких HTTP-запитів, ніяких консультацій з Марвіном від THGTTG ​​тощо.

Приклад введення:

Шановний шефе, як справи? Мені подобається, що я минулу п’ятницю взяв на себе всю провину за неспроможність. Не лише більшість. Кожен останній шматочок. Чи неправильно я вважати, що решта команди хоч частково відповідала? Зрештою, усі шестеро були причетні до початку роботи. Не те, що я думаю, що я повинен стояти без вини. Зовсім ні. Все, що я говорю, це: я роблю все можливе. Я дуже стараюся. Я постійно вдосконалююсь. І я постійно беру на себе відповідальність. Взагалі кажучи, я дуже гаразд приймаю повну відповідальність за свої дії. Але після цієї весни, здається, я отримую більше, ніж я заслуговую. Пам'ятаєте договір Флакенгаузера? Все пройшло так само гладко, як можна було сподіватися. Або так здавалося спочатку. Саме в ту саму хвилину речі розпалися. Усі команди погодилися, що це більше схоже на випадок аварії, ніж неохайне планування чи неправильне управління ресурсами. І все-таки я - одна - взяла на це вину. Незважаючи на те, що я тоді нічого не говорив, мій рівень толерантності до вини взяв на себе серйозну задуму. З цього моменту я вважав за потрібне завжди намагатися вдвічі більше, щоб уникнути ретельної перевірки. І все-таки ось ми знову. Незважаючи на всі мої досягнення. Там, де ми, здається, завжди закінчуємо ці дні. Кожен окремий проект. Це стає нестерпно. просто уникнути пильного вивчення. І все-таки ось ми знову. Незважаючи на всі мої досягнення. Там, де ми, здається, завжди закінчуємо ці дні. Кожен окремий проект. Це стає нестерпно. просто уникнути пильного вивчення. І все-таки ось ми знову. Незважаючи на всі мої досягнення. Там, де ми, здається, завжди закінчуємо ці дні. Кожен окремий проект. Це стає нестерпно.

Приклад виводу:

Шановний шефе, як справи?
Мені подобається, що я минулу п’ятницю взяв на себе всю провину за неспроможність. Не лише більшість.
Кожен останній шматочок.

Чи неправильно я вважати, що решта команди хоч частково відповідала? Зрештою, усі шестеро були причетні до початку роботи.
Не те, що я думаю, що я повинен стояти без вини. Зовсім ні.

Все, що я говорю, це: я роблю все можливе. Я дуже стараюся. Я постійно вдосконалююсь. І я постійно беру на себе відповідальність.

Взагалі кажучи, я дуже гаразд приймаю повну відповідальність за свої дії. Але після цієї весни, здається, я отримую більше, ніж я заслуговую.
Згадайте договір Флакенгаузера.
Все пройшло так само гладко, як можна було сподіватися. Або так здавалося спочатку. Саме в ту саму хвилину речі розпалися.
Усі команди погодилися, що це більше схоже на випадок аварії, ніж неохайне планування чи неправильне управління ресурсами.
І все-таки я - одна - взяла на це вину.
Незважаючи на те, що я тоді нічого не говорив, мій рівень толерантності до вини взяв на себе серйозну задуму.

З цього моменту я вважав за потрібне завжди намагатися вдвічі більше, щоб уникнути ретельного контролю. І все-таки ось ми знову.
Незважаючи на всі мої досягнення.
Там, де ми, здається, завжди закінчуємо ці дні.
Кожен окремий проект. Це стає нестерпно.

Це код гольфу. Найкоротший код виграє.


4
Чи повинні відбуватися розриви рядків лише після пунктуації, що закінчується реченням? Або я можу зробити перерву рядка перед деяким правильним зараз або, можливо, навіть у абревіатурі, якщо наступна літера є великим регістром? Незважаючи на це, виклики, пов'язані з образою, не минули тут раніше, але, можливо, вам вдасться відійти, тому що ви не просили творчості учасників у пошуку нових непристойностей.
Мартін Ендер

1
Розрив рядків перед власними іменниками ідеально чудовий.
Крістофер Олссон

3
@NateKerkhofs Я думаю, що це назад: оскільки секретне повідомлення - це лише кілька символів у цілому повідомленні, я думаю, що образа - це дерева, а повідомлення - це ліс. Ми дуже сподіваємось, що начальник бачить ліс, а не дерева.
Джошуа Тейлор

11
Чи був лист Арнольда Шварценеггера вашим натхненням?
200_успіх

57
Я мушу визнати, що я трохи подвоївся, коли побачив це у списку гарячих питань. Коли я побачив, що це PCG, а не The Workplace ... ну ... я не скажу, що я трохи не розчарувався.
БенМ

Відповіді:


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
Чому я вважаю, що я підтримую стільки ваших відповідей? О так, бо вони божевільні.
примо

Що це робиться для введення, який містить ВСІ КАРТІ слова?
Адам Девіс

2
@AdamDavis: Заздалегідь додаючи пробіли на "C" і "A", переконайтеся, що WORDS не буде порушено рядками каналів.
Денніс

25

Perl - 60 байт

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

Порахувавши шебанг як один.

Це рішення використовує найпотужніший рядок, щоб створити наступний регулярний вираз:

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

що схоже на регулярний вираз, який використовується в розчині m.buettner . Потім згенерований регулярний вирівнювання співставляється з вхідним. У контексті списку це поверне масив, що містить кожну із груп відповідностей, які об'єднані новим рядком (причиною груп "нічого не відповідати" (\.*)є вставлення додаткового нового рядка). Якщо збігу немає, натомість виводиться початковий рядок.


Perl - 73 байти

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

Порахувавши шебанг як два.

Це розділяє рядок на відповідні роздільники і збирає фрагменти в масив. Якщо будь-який з них не збігається, роздільник записів виводу (який був встановлений у новій лінії з -lопцією) не встановлений, і тому рядок виводиться немодифікованим.


Хіба шебангу не потрібен абсолютний шлях?
celtschk

чому крапки (DIEI.NA. ...?
edc65

@celtschk Можливо, залежно від вашої системи та способу виклику сценарію. Закликано як ./script.pl, то, швидше за все, так. Якщо викликається як perl script.pl, то ні.
примо

1
@ Edc65 .після того, як Iбуде вставити додатковий символ нового рядка , перш ніж I (бо він відповідає знову в тому ж положенні). Можливо, трохи контрінтуїтивне.
примо

2
@celtschk Перемикачі на шебанг все ще будуть інтерпретуватися. Ви можете перевірити це, додавши -Mпараметр до shebang, який помре з фатальною помилкою: Too late for "-M" option at line 1.Але головна причина, коли я його розміщую, я теж уникаю необхідності пояснювати, що це потрібно запускати як perl -pl script.pl- у його теперішній формі він працює як є.
примо

12

GolfScript, 53 байти

Схоже, ми з Денісом паралельно придумали досить схожі речі ... Але ось моя спроба.

Клацніть посилання перед кожним блоком коду, щоб спробувати його в Інтернеті. На жаль, онлайн-інтерпретатор не дозволить запустити код розміром більше 1024 символів, тому мені довелося виконати деяке ... "стиснення" тестового вводу. Але це все одно працює.

Нарізаний варіант

..(\;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, а не для "Я" або "А".
Денніс

@Dennis Я не бачив жодної частини специфікації, яка цього вимагає. Але якщо ви накладете це обмеження на себе, зняття цього з рішення, схоже, це зміцнить його чудову гольф-властивість.
Runer112

1
Ось так ми і m.buettner інтерпретували це питання (я повинен би детальніше розглянути інші відповіді), але ви праві, це ніде не говорить, що ми не можемо зламати слова.
Денніс

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)

У цьому немає регексів . Він одночасно пересуває символи на вході ARGV [0], і рядок, що містить символи, на які нам потрібно перерватись, щоб скласти повідомлення з лівого стовпця. Спочатку збирався вставляти пробіли після букв, які повинні мати новий рядок, але виявив, що жорсткий код індексів, на які потрібно вставити розрив рядка, був трохи коротшим.

Після того, як все сказано і зроблено, він перевіряє, чи iіндекс збільшився достатньо разів, щоб пройти кожну букву, яка потребує перелому. Якщо цього немає, ми просто роздруковуємо оригінальний рядок. Якщо є, ми надаємо їм відформатований.

n-[i]!=nбув акуратним трюком для збереження символів під час перевірки того, чи є поточний індекс тим, що потребує додаткового розриву рядка (порівняно з n.include? i). Також збережено деякі символи, використовуючи {}s замість того, щоб do/endбути багаторядковим блоком, і використала потрійну умову на остаточному шасі, щоб зберегти символи при визначенні, який з них виводити.

Не найкоротший, але я думав, що було б акуратно обійтися без регулярних виразів.


7

Perl, 184 байти

Не вражаючий бал для Perl, але ось просте рішення для регулярного виведення

$_=<>;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
Невже можна створити регулярний вираз в коді і зберегти тону?
Пітер Тейлор

@ PeterTaylor, звичайно, але я не маю ні часу, ні знань Perl, щоб зробити це зараз. Можливо, я сьогодні погляну.
Мартін Ендер

Тим не менш, це переможе мою відповідь PERL, яку я зараз не буду турбувати: p
Tal,

Збережіть 4 символи: print($_)== print. +1 бал за читаність: Надзвичайно легко зрозуміти, що відбувається, а не для інших рішень.
Оле Танге

Це вважається простим в Perl?
Лінкольн Бергесон

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тесту (коментарі до ОП)
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])

Негольдовані:

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вбудований та скорочений роздільний оператор.


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)

Безумовно

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 рекурсивно розбиває кінець повідомлення, що містить останній заголовок, і попередньо додає його до списку.

Caveat: це не спрацює, якщо між двома запропонованими заголовками у вашому листі з якихось причин немає пробілів, але це неправдоподібно в листі вашому начальнику.


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.

EDIT: Відсутність необхідності створювати нові рядки між словами. Я це зробив зараз, і це доводить до 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:"";

якщо можна образити всю образу; друкує модифікований рядок із провідним пробілом або рядком рядка; порожній вихід, якщо ні. Бігайте з -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

Пітон - 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

Безумовно

Це моя перша спроба гольфу :) Шукаю навчитися чудовим методам кодування незалежно, я просто зосередився на використанні знаходження, а потім деякого сплайсингу рядків, щоб знайти відповідні символи та відформатувати вихід.

Змінні -

lr = l присвоєні символи, які ми будемо використовувати в якості нашої інструкції для створення нашого нового форматованого абзацу. r призначений новий для нас символ рядка в проміжку нового виводу.

k, p = абзац введення. K використовується для повернення до оригіналу, оскільки він не призначається під час виконання сценарію. Я перевіряю проти x, щоб знати, коли потрібно додати подвійний новий рядок для проміжків.

y, i = y - це "курсор" сортування, відслідковує останню позицію, яку знайшов персонаж, тому ми правильно знаходимо через абзац для цілей сплайсингу, i це перевірка розумності, якщо ми не вдарили всіх наших символів поверніть абзац (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+=Це те саме, щоi=i+
seequ

Спробуйте, що True == 1дає. :)
seequ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.