Напишите скрипт, который отлично работает, когда в потоке программной логики присутствует пустая строка, но ломается или вызывает неожиданное поведение при удалении этой строки.
Избегайте стандартных лазеек и глупых ответов. Ваша программа должна сделать что-то «полезное», даже если все, что она делает, это добавляет несколько целых чисел.
Удаление пустой строки из многострочной строки не считается, если только ожидаемый вывод этой многострочной строки технически не изменится (т. Е. Если вы удалите все соответствующие пустые строки ^$
).
Также не допускаются пустые места; не делайте странных вещей с возвратом каретки, табуляцией, пробелами и т. д.
popularity-contest
underhanded
Нафтули Кей
источник
источник
Ответы:
Javascript
Открывает всплывающее окно с предупреждением «Hello, World!» если пустая строка существует, в противном случае выводится предупреждение «0».
демонстрация
Объяснение:
arguments.callee
является ссылкой на самовыполняющуюся анонимную функцию.Добавление пустого array (
[]
) приводит функцию к строке, которая дает вам ее исходный код.indexOf
возвращает,-1
если строка не найдена.Выполнение побитовой операции not (
~
) приводит-1
к превращению в0
значение false.источник
arguments.callee
содержит источник функции.arguments.callee
.arguments.callee
. Даже делает это короче.С
Эта волшебная программа из 8 шаров все еще будет работать без пустой строки, но она будет немного более решительной - ни один из нейтральных ответов никогда не появится в выходных данных.
объяснение
источник
Befunge-93
Моя первая программа befunge :)
Он читает два числа из ввода и печатает их сумму. Если вы удалите пустую строку, она ничего не печатает.
Объяснение:
v
устанавливает нисходящее направление для выполнения кода&
читает целое число+
складывает числа вместе#
пропускает следующую команду.
выводит целое число из стека@
завершает программуКак написано,
#
пропускает пустую строку и ограничивает с.
. Купить при удалении пустой строки,.
пропускается.Кажется, есть хороший переводчик на http://befunge.aurlien.net/
источник
Рубин / Shell
Работает нормально, если новая строка находится сверху, в противном случае первая строка комментария интерпретируется оболочкой как неправильный шебанг.
источник
ruby youranswer.rb
, он не будет искать shebang, потому что он уже запущен в интерпретаторе ruby, но если вы запустили его так, как./youranswer.rb
он вообще не будет работать, потому что нет shebang ..ruby youranswer.rb
, что может быть полезно для установки необходимых параметров командной строки в файле. Так что без перевода строки я получаюruby: no Ruby script found in input (LoadError)
Scala
Если вы удалите пустую строку, вывод не будет напечатан. Что к лучшему, так как ваш стек переполнится, если вы на самом деле
IntWrapper
.источник
GolfScript
Вычисляет GCD из двух ненулевых целых чисел. Удаление пустой строки разрывает программу.
Попробуйте онлайн.
Как это работает
Это реализация евклидова алгоритма в GolfScript:
Есть только одна крошечная проблема:
источник
#
,{
и}
не могут быть использованы в качестве имен переменных, так как они являются частью синтаксиса. Все остальные токены в порядке, включая строки..:-1
хранит данные-1
, а не знак минус? Хм ...Синтаксис шаблона MediaWiki
Определить шаблон: Foo as
На другой странице
источник
LaTeX (обратная ссылка)
В следующем коде LaTeX используется цитата, а цитата содержит список страниц, где цитируется запись. Вот это первая страница. Пакет
hyperref
также добавляет ссылки PDF, обратная ссылка на страницу красная, ссылка на цитирование зеленая.Но LaTeX не требует пустой строки, пустая строка выглядит излишней, и пример все равно будет работать без
hyperref
пустой строки:Но ссылки и обратная ссылка исчезли, поэтому мы вставляем их заново:
Но теперь пример сломан и не компилировать больше:
Что произошло? Пакет
hyperref
(или более точный пакетbackref
, который загруженhyperref
) хочет получить в конце библиографической записи, чтобы добавить список обратной ссылки. Но синтаксис в LaTeX обеспечивает только начало записи\bibitem
, конец может быть где угодно. В этот аварийный пакетbackref
добавлено ограничение,\bibitem
которое должно заканчиваться записью с пустой строкой. Тогда пакет можно переопределить\bibitem
чтобы поместить обратные ссылки в конец записи.Поскольку пустая строка отсутствует, TeX продолжает ее искать, но вместо этого находит конец файла и выдает сообщение об ошибке.
источник
С (полуобфускированный)
Эта маленькая программа берет число в командной строке и вычисляет ее факториал. Тем не менее, он также содержит передовые функциональные возможности AI для проверки во время выполнения, что стандарты кодирования компании, включая правильное использование пробелов и пустых строк, соблюдаются. Удаление пустой строки приведет к тому, что алгоритм отклонит недостаточно обслуживаемую программу.
Никаких продолжений строк или триграфов нигде. Я считаю, что это действительно ANSI C99.
Из-за продвинутой математики, которую вы используете
gcc
, не забывайте использовать-lm
.Спойлер
источник
tcc -run
vfry
не расширено в определении функции, действительно озадачило меня.С
Эта программа работает, как и ожидалось (как описано в комментариях), если только перед пустой строкой
foo = 5;
удалена .К сожалению, я однажды столкнулся с ошибкой, почти такой же, как в рабочем коде.
В этом примере используется
do { ... } while (0)
идиома для создания многострочного оператора в макросе (см. Https://stackoverflow.com/questions/257418/do- while-0-what-is-it-good-for ). Он также использует символ обратной косой черты для распределения#define
по нескольким строкам, удобно расположенным вне поля зрения. Тем не менее, это также делает две вещи вроде:while (0)
, в то время как в идиоме это обычно опускается#define
При этом в месте, удаляя пустую строку перед теми
foo = 5;
причинами , что назначение быть выполнено послеprintf
, но и после каждого вызова изFROB
макроса. В результате на выходе после удаления пустой строки будет:источник
C / C ++
Возвращает успех и может использоваться как реализация для true . Если пустая строка удалена, вы можете использовать ее как реализацию для false .
источник
PowerShell
Эта функция добавит два числа.
Удаление пустой строки вызовет сбой функции с:
Unexpected token '$b' in expression or statement.
объяснение
источник
TeX
Без пустой строки «привет» не печатается.
объяснение
TeX рассматривает пустую строку как разрыв абзаца и
\everypar
выполняется в начале нового абзаца.источник
Джава
источник
Math.pow
?Math.pow
и распечатка результата также делает что- то, не так ли?Perl 5
Этот код печатает
Hello, World!
. Удаление пустой строки дает вместо этого синтаксическую ошибку.Объяснение:
источник
партия
Этот код выведет
Hello
и на следующую строкуWorld
. Когда удаляется одна или обе пустые строки, он вообще ничего не выводит.Здесь есть объяснение .
источник
Рубин
Удаление первой строки приведет к ошибке:
источник
питон
Не знаю, подпадает ли это под стандартные лазейки, я посмотрел на список и не увидел этого.
Запуск этого регулярно возвращается
Запустите его без пустой строки в строке 4, например, как показано ниже:
ничего не возвращает
источник
Python 2.x
Эта программа выводит пятый символ введенной строки.
Это никоим образом не скрыто. Если вы удалите пустую строку, она даст четвертый символ и шестой, если вы добавите один.
источник
Tcl
Функция, которая добавляет два числа (и проверяет, был ли удален перевод строки):
Здесь нечего скрывать, он делает то, что говорит, поэтому я не балуюсь объяснением. Эта функция
info
- швейцарский армейский нож самоанализа (то, что другие языки называют отражением).info body
возвращает исходный код функции (если не написан на C или сборке).Я должен признать, что это поставило меня в тупик, пока я не увидел решение javascript.
источник
С
Пустая строка
a
- это локальная переменная a, а без макропараметра ...источник
Технически это не проблема кода, а проблема сервера. Если это будет отправлено в Apache из CGI-скрипта (который может быть сгенерирован на любом языке, который вам нужен), он отправит HTTP-ответ клиенту:
С другой стороны, это не удастся, так как отсутствует заголовок после пробела.
источник
JavaScript
Функция
whereami
отвечает позицией вызывающей строки относительно ее собственной позиции в исходном коде.Если какая-либо пустая строка в
whereami
функции удаляется. Выход естьNaN line(s) confusing me
. (Добавление строк не нарушает его)источник
Perl
источник
Escript
Из-за ошибки в
escript
реализации допустимый сценарий должен иметь длину не менее трех строк, а первая строка должна быть строкой Шебанга или пустой строкой. Итак, следующий скрипт должен иметь две пустые строки, где первая должна быть первой:Или он должен быть разбит на две строки, но все равно должен иметь первую пустую строку.
В противном случае вы получите
источник
Рубин
Печатает
2+2=4
, но выдает синтаксическую ошибку без пустой третьей строки.%q
позволяет любому символу, не являющемуся словом, служить разделителем строк, даже символу новой строки. Таким образом, первые три строки кода фактически эквивалентныprint %q"2+2="
или простоprint "2+2="
. Поскольку символ новой строки после2+2=
используется в качестве разделителя кавычек, он также не анализируется как разделитель строк , поэтому вам нужен еще один после него.источник
Бессонница (обе версии)!
Этот код печатает ~ (не спрашивайте почему, бессонница странная). Если вы удалите пустую строку, вместо этого будет напечатан символ ÿ.
Кстати, эта первая буква - это шип .
источник
C ++
Это классический и довольно тупой трюк. Вы узнаете, что это, когда увидите, это просто ради завершения. Таким образом, я отмечаю это как ответ сообщества вики.
Почему это работает
источник
??/
значит\
, значит??//
значит\/
, и поскольку строка не заканчивается\
, продолжения строки нет. Второе - это то же самое поведение , независимо от тогоreturn 0;
, выполняется ли оно, потому что это стандартное поведение, когда выполнениеmain
достигает закрытия}
.I know people always use this in these kinds of question
, поэтому мы сделали это стандартной лазейкойВставьте это в HTML-файл и откройте его в браузере. Это довольно просто, но немного хитро, потому что для этого нужно взять количество пустых строк в документе и проиндексировать массив для вызова функции, которая показывает предупреждение.
Это пограничное нарушение правил. Технически JavaScript не имеет многострочных строк, и это единственная причина, по которой это работает.
Поскольку вы можете иметь синтаксическую ошибку в одном теге сценария, не мешая другим тегам сценария, это показывает положительный результат, только если на странице есть ошибка. Ошибка предотвращает срабатывание второго предупреждения, поскольку оно находится в том же теге сценария.
источник
Рубин
Секрет в том, что перевод строки - это действительно вкладка, а затем новая строка. Я не знаю, имеет ли это значение, но я подумал, что это умно. Символ после
%
также является вкладкой, но по некоторым причинам он не отображается как один. Я использую процентную нотацию Ruby для создания строки, которая добавляет первые 2 аргумента, переданных в скрипт. Подробнее об этом здесь: http://teohm.com/blog/2012/10/15/start-using-ruby-percent-notation/источник
\n
должен присутствовать и должен иметь решающее значение для работы программы, как ожидалось.