Это были тяжелые несколько месяцев на работе, и я чувствую, что просто хочу кричать прямо в лицо своему боссу. Однако я не из тех, кто напрямую сталкивается с людьми, с которыми у меня проблемы. Я также не хочу потерять свою работу.
Итак, вот идея: я хочу быть в состоянии оскорбить его, но он никогда не узнает. И я понял идеальный способ: мне нужно какое-то программное обеспечение, которое кодирует оскорбление внутри в остальном совершенно прекрасного сообщения. И, видя, как он знает, что не видит леса за деревьями, я думаю, что я знаю, как:
Напишите мне программу, которая принимает в качестве входных данных строку неизвестной длины, но не содержит разрывов строк. Это будет необработанное сообщение, которое я хочу отправить.
Если возможно, верните строку, отформатированную таким образом, чтобы сообщение «DIE IN A GREASE FIRE» составляло весь левый столбец. С новыми параграфами, где пробелы между словами должны идти. Теперь, когда я очень зол, одинаково важно, чтобы каждая буква была в верхнем регистре.
Вы не можете изменять строку любым другим способом, т.е. вы не можете превратить всю строку в символы верхнего регистра.
Если рассматриваемая строка не может быть отформатирована таким образом, вы должны вернуть исходную строку. Чтение ввода со стандартного ввода.
Применяются обычные правила: никаких HTTP-запросов, никаких консультаций с Marvin из THGTTG и т. Д.
Пример ввода:
Дорогой Босс, как дела? До моего сведения дошло, что я получил всю вину за неудачу в прошлую пятницу. Не только большинство из них. Каждый последний бит этого. Это неправильно для меня думать, что остальная часть команды была по крайней мере частично ответственна? В конце концов, все шесть из нас были вовлечены с самого начала. Не то чтобы я думал, что должен стоять без вины. Не за что. Все, что я говорю, это: я делаю все возможное. Я стараюсь изо всех сил. Я постоянно совершенствуюсь. И я постоянно беру на себя ответственность. Вообще говоря, я вполне согласен взять на себя полную ответственность за свои действия. Но после этой весны, кажется, я получаю больше, чем заслуживаю. Помните контракт с Flakenhauser? Все прошло так гладко, как можно было надеяться. Или так казалось на первый взгляд. Это было в самую последнюю минуту, что вещи развалились. Вся команда согласилась, что это было больше похоже на странную аварию, чем на неаккуратное планирование или неэффективное управление ресурсами. Тем не менее, я - один - взял вину за это. Даже тогда, когда я ничего не сказал, мой уровень терпимости к тому, чтобы взять на себя вину, тогда серьезно пошатнулся. С этого момента я чувствовал, что необходимо всегда стараться в два раза сильнее, просто чтобы избежать проверки. И все же, мы снова здесь. Несмотря на все мои достижения. Именно там, где мы, кажется, всегда оказываемся в эти дни. Каждый проект. Это становится невыносимым. просто чтобы избежать проверки. И все же, мы снова здесь. Несмотря на все мои достижения. Прямо там, где мы, кажется, всегда оказываемся в эти дни. Каждый проект. Это становится невыносимым. просто чтобы избежать проверки. И все же, мы снова здесь. Несмотря на все мои достижения. Прямо там, где мы, кажется, всегда оказываемся в эти дни. Каждый проект. Это становится невыносимым.
Пример вывода:
Дорогой Босс, как дела?
До моего сведения дошло, что я получил всю вину за неудачу в прошлую пятницу. Не только большинство из них.
Каждый последний бит этого.Это неправильно для меня думать, что остальная часть команды была по крайней мере частично ответственна? В конце концов, все шесть из нас были вовлечены с самого начала.
Не то чтобы я думал, что должен стоять без вины. Не за что.Все, что я говорю, это: я делаю все возможное. Я стараюсь изо всех сил. Я постоянно совершенствуюсь. И я постоянно беру на себя ответственность.
Вообще говоря, я вполне согласен взять на себя полную ответственность за свои действия. Но после этой весны, кажется, я получаю больше, чем заслуживаю.
Помните контракт с Flakenhauser.
Все прошло так гладко, как можно было надеяться. Или так казалось на первый взгляд. Это было в самую последнюю минуту, что вещи развалились.
Вся команда согласилась, что это было больше похоже на странную аварию, чем на неаккуратное планирование или неэффективное управление ресурсами.
Тем не менее, я - один - взял вину за это.
Даже тогда, когда я ничего не сказал, мой уровень терпимости к тому, чтобы взять на себя вину, тогда серьезно пошатнулся.С этого момента я чувствовал, что необходимо всегда стараться в два раза сильнее, просто чтобы избежать проверки. И все же, мы снова здесь.
Несмотря на все мои достижения.
Прямо там, где мы, кажется, всегда оказываемся в эти дни.
Каждый проект. Это становится невыносимым.
Это код гольф. Самый короткий код выигрывает.
Ответы:
CJam,
5653 байтаПопробуйте онлайн!
Как это устроено
источник
Perl - 60 байт
Считая Шебанг как один.
Это решение использует самую внутреннюю строку для построения следующего регулярного выражения:
который похож на регулярное выражение, используемое в решении m.buettner . Сгенерированное регулярное выражение затем сопоставляется с входом. В контексте списка это вернет массив, содержащий каждую из групп соответствия, которые объединены новой строкой (причина для групп «ничего не найдено»
(\.*)
заключается в том, чтобы вставить дополнительный символ новой строки). Если совпадений нет, вместо них выводится исходная строка.Perl - 73 байта
Считая Шебанг как два.
Это разбивает строку на соответствующие разделители и собирает части в массив. Если какой-либо из них не совпадает, разделитель выходных записей (который был установлен на новую
-l
строку с параметром) не устанавливается, и поэтому строка выводится без изменений.источник
./script.pl
, то скорее всего да. Если вызывается какperl script.pl
, то нет..
ПослеI
вставит дополнительный символ новой строки передI
(потому что он снова совпадает в той же позиции). Возможно, немного нелогичным.-M
опцию к shebang, которая умрет с фатальной ошибкой:Too late for "-M" option at line 1.
Но главная причина, по которой я ее там поставил, я тоже избегаю объяснения, что его нужно запускать какperl -pl script.pl
- в его нынешнем виде он работает как есть.GolfScript, 53 байта
Похоже, мы с Денисом придумали довольно похожие вещи параллельно ... Но вот моя попытка.
Нажмите на ссылку перед каждым блоком кода, чтобы попробовать его онлайн. К сожалению, онлайн-интерпретатор не позволит вам запускать код длиной более 1024 символов, поэтому мне пришлось выполнить некоторое ... «сжатие» тестового ввода. Но это все еще работает.
Squished версия
Unsquished, прокомментированная версия
Вопрос, поднятый Деннисом: все программы GolfScript печатают автоматический финальный перевод строки. Должно ли это сделать недействительным мое решение как есть, я не уверен. Я полагаю, что это будет стоить 4 символа, чтобы подавить последний перевод строки, добавив
"":n
где-то ближе к концу.источник
Рубин - 140
Нет регулярных выражений в этом . Он одновременно просматривает символы на входе ARGV [0] и строку, содержащую символы, которые нам нужно разбить для создания сообщения в левой колонке. Первоначально собирался вставлять пробелы после букв, которые должны иметь новую строку, но обнаружил, что было немного короче жестко закодировать индексы для вставки переноса строки.
После того как все сказано и сделано, он проверяет, что
i
индекс увеличился достаточно раз, чтобы пройти каждую букву, которая нуждалась в разрыве. Если это не так, мы просто распечатаем оригинальную строку. Если это так, мы даем им отформатированный.n-[i]!=n
была хитрая уловка для сохранения символов при проверке того, нужен ли текущий индекс для дополнительного разрыва строки (по сравнению сn.include? i
). Также сохранил некоторые символы, используя{}
s вместо того,do/end
чтобы быть многострочным блоком, и использовал троичное условие в последнем путе для сохранения символов при определении того, какой из них вывести.Не самое короткое, но я думал, что было бы аккуратно обойтись без регулярных выражений.
источник
Perl, 184 байта
Не впечатляющий результат для Perl, но вот простое решение для регулярных выражений
источник
print($_)
==print
. +1 балл за удобочитаемость: на удивление легко увидеть, что происходит, что не совсем так для других решений.JavaScript 116
Javascript реализация идеи m-buettner
Тестовый фрагмент
источник
FIFA
тесте (комментарии OP)From that FIFA point on
. Он ставит новую строку передFA
и перед пробеломFI
.Python3 (
166138)Golfed:
Ungolfed-иш:
Хотя использование лямбды меня несколько радует, то массовое число используемых переменных и несколько грязное развитие имеет противоположный эффект. Regex, возможно, тоже была хорошей идеей. Эй, хо, по крайней мере, это работает :).
Редактировать: заменены лямбда-переменные на
count
встроенные, и сокращенный оператор split.источник
Python3 (165)
Ungolfed
объяснение
chunk
рекурсивно разделяет конец сообщения, содержащего последний заголовок, и добавляет его в список.Предостережение: это не сработает, если по какой-то причине между двумя предлагаемыми заголовками в вашем письме вообще нет пробелов, но это вряд ли в письме вашему боссу.
источник
Рубин 115
Ruby 95
источник
J -
110103 байтаПочему у J нет хороших функций для обработки строк, а есть только функции массива? Я исправлю это, если выясню что-нибудь умное.
Редактировать: Сокращенный и фиксированный вывод (раньше у него были лишние пробелы) и проверка. Я также улучшил объяснение.
Объяснение:
Примеры (слишком длинные?):
источник
JavaScript (ES6),
93115 байтРаньше я
replace
перебирал строку с соответствием,/\b./g
чтобы найти только те символы, которые следуют за пробелом или начинаются с строки. Затем я проверил каждый символ, чтобы увидеть, соответствует ли он текущему индексу в массиве, который я искал, и добавил новую строку перед ним, если он это сделал, и увеличилi
.РЕДАКТИРОВАТЬ: пропустил необходимость создавать новые строки между словами. Я сделал это сейчас, что доводит до 115.
источник
PHP, 328 байт
Дан файл с именем «G», содержащий необработанный текст «enmessage»
Пояснение (~ ungolfed && закомментированный код):
источник
PHP, 136 байт
может ли быть нанесено все оскорбление; печатает измененную строку с начальным пробелом или переводом строки; пустой вывод, если нет. Бежать с
-r
.сломать
источник
Python - 190 байт
Ungolfed
Это моя первая попытка игры в гольф :) В поисках некоторых отличных методов кодирования, я просто сосредоточился на использовании find, а затем на связывании строк, чтобы найти подходящие символы и отформатировать вывод.
Переменные -
lr = l назначенные символы, которые мы будем использовать в качестве руководства для создания нашего нового отформатированного абзаца. Для нас назначен символ новой строки в интервале между новым выводом.
k, p = входной абзац. K используется для возврата к оригиналу, поскольку он не переназначается во время выполнения скрипта. Я проверяю по x, чтобы знать, когда добавить двойную новую строку для пробелов.
y, i = y - это своего рода «курсор», отслеживающий последнюю позицию, в которой был найден символ, поэтому мы находим правильное нахождение в абзаце в целях соединения, я проверяю работоспособность, если мы не ударили по всем нашим символам, мы вернуть абзац (переменная p) к исходному вводу через переменную k.
h = длина ввода, которую мы используем при сращивании.
x = Позиция текущего символа, представленного буквой C, также используется для соединения.
c = Символы в l для итерации и поиска.
Следующий код переписан и выделен из исходного кода для удобства чтения как происходящего:
Буду признателен за ваш отзыв! Я ищу учиться.
источник
x<0
кi
. В python значение True равно 1, а значение False равно 0. Поэтому, если x равно -1, он добавляет 1, а в противном случае 0.i+=
соответствуетi=i+
True == 1
дает. :)