Ваша задача - написать программу, которая выводит точную строку Programming Puzzles
(конечный символ новой строки необязательный), но когда все пробелы, табуляции и новые строки удаляются, выводится Code Golf
(конечный символ новой строки необязательный).
Ваш счетчик байтов - это счет первой программы с пробелами, которые все еще там.
Примечания
Пробелы в
Code Golf
иProgramming Puzzles
будут удалены как часть удаления, поэтому планируйте соответственно.В кодировках, где 0x09, 0x0A и 0x20 не являются символами табуляции, перевода строки или пробелов соответственно, эти символы будут удалены.
Если ваш код
42 $@ rw$ @42
тогда это должно вывести
Programming Puzzles
. Кроме того, на том же языке,42$@rw$@42
должен выводить
Code Golf
.
Это код-гольф , поэтому выигрывает самый короткий код в байтах! Удачи!
источник
Code Golf
также будет удалено, как насчет одного вProgramming Puzzles
.Ответы:
Python 2 , 50 байт
Попробуйте онлайн!
Со всеми удаленными пробелами:
Попробуйте это онлайн!
Спасибо Стивену S за 3 байта и Эрику Аутгольферу за 1
источник
" ">""
возвращаетTrue
, поскольку, по лексикографическому признаку, пробел больше пустой строки. Во втором случае"">""
возвращаетсяFalse
, поскольку ничто не может быть больше самого себя.True
иFalse
на самом деле просто1
и0
соответственно, просто вbool
типе данных вместоint
илиlong
. В первом случае пробелы сохраняются, поэтому элемент с индексом 1"Programming Puzzles"
возвращается дословно. Во втором случае пробелы исчезли, следовательно,\x20
в элементе с индексом 0"Code\x20Golf"
сохраняются пробелы.Python 2 ,
4847 байт-1 байт благодаря Эрику Аутгольферу
Попробуйте онлайн!
Попробуйте онлайн!
источник
05AB1E , 15 байтов
Попробуйте онлайн!
объяснение
источник
C
64625352 байтаПопробуйте онлайн!
Использует тот факт, что строки C заканчиваются нулевым символом
источник
CJam , 38 байт
Попробуйте онлайн! или с удаленными пробелами
объяснение
Есть ли пробелы в программе или нет, определяет, является ли первая строка истинной или ложной.
источник
:(
"Bncd\x19Fnke":)
используйте вместо этого счастливый код (замените\x19
).Желе , 18 байт
Попробуйте онлайн!
объяснение
В написанной программе первая строка - это вспомогательная функция, которая никогда не запускается. Вторая строка (последняя в программе) является основной программой и представляет собой сжатое представление строки
"Programming Puzzles"
(которая затем печатается неявно).Если вы удалите перевод строки, все это станет одной большой программой.
“½ċṭ6Ỵ»
является сжатым представлением строки"Code Golf"
.ḷ
оценивает, но игнорирует аргумент правой руки, оставляя то же значение, что и до запуска; его можно использовать для оценки функций на предмет их побочных эффектов (то, что я делал раньше), но его также можно использовать, как здесь, для эффективного закомментирования кода.Интересно, что действительная логика здесь короче, чем запись 05AB1E, но код в целом получается длиннее, потому что компрессор строк хуже справляется со сжатием этих конкретных строк.
источник
Желе , 17 байт
Попробуйте онлайн!
Как это устроено
Как и в другом желе, отвечайте
Ñ1ɦ+£)G
и½ċṭ6Ỵ
кодируйте строки Programming Puzzles и Code Golf .“
начинает строковый литерал и отделяет одну строковую форму от другой, а»
выбирает тип литерала (сжатие на основе словаря), так что получаетсяṂ
затем берет минимум, уступая Code Golf .Однако, добавив пробел между
½ċṭ6
иỴ
, мы получим совершенно другую вторую строку, и литерал оценивается какПоскольку caird coinheringaahing лексикографически больше, чем Programming Puzzles ,
Ṃ
вместо этого выбирается первая строка.источник
“½ċṭ6Ỵ“Ñ1ɦ +£)G»Ṁ
Javascript,
464342 байтисточник
\x20
в первой строке пробелом.;
?;
Иногда это не требуется в JavaScript.\x20
на,\40
чтобы сохранить байт :-)Язык Wolfram, 62 байта
Пространство в
[[0 1]]
является неявным умножением, так что это эквивалентно[[0]]
. Без пробела01
это просто1
. 0-я и 1-я части этого выражения являются строками, которые мы хотим.Другое решение сомнительной достоверности (44 байта, 2 сохранены Келли Лоудер):
При
\.20
вводе в среду Mathematica объекты get заменяются пробелом, поэтому неясно, удаляются ли они вместе с другими пробелами…источник
\:0020
превращается в пробел и, таким образом, будет удалена, поэтому я не уверен, что это подходит. И\.20
короче. На два символа."Programming Puzzles"["Code"<>FromCharacterCode@32<>"Golf"][[01]]
будет работать.\.20
предложение - как ты это нашел? Я подумал, что покопался во всей документации…)\.20
, сделав опечатку. Кажется, работает только для двузначных кодов символов. Я не думаю, что это в документации.Excel - 56 байт
Очень похоже на большинство других ответов ... ничего особенного здесь.
источник
Haskell, 48 байтов
Определяет функцию,
f
которая возвращает соответствующую строку.Для справки, старая версия:
Haskell, 49/47 байт
с удаленными пробелами
Два простых совпадения.
(_)
соответствует всем шаблонам. Вы можете улучшить версию без пробелов на один байт, определив второй шаблон какf" "=
/f""=
, но это дает предупреждение «Соответствие шаблону является избыточным».Альтернативное решение с тем же количеством байтов:
источник
Ом ,
3332 байтИспользует кодировку CP437.
Попробуйте онлайн! или попробуйте без пробелов
объяснение
С пробелами:
Без пробелов:
источник
Code Golf
больше при сжатии. Я думаю, это из-за столиц? В любом случае, это все же короче, чем писать его обычно, потому что я не могу использовать здесь буквальное пространство.Japt , 29 байт
С пробелами:
Попробуйте онлайн!
Без пробелов:
Попробуйте онлайн!
Это использует тот факт, что в Japt пробел закрывает вызов метода. С пробелами код примерно эквивалентен этому коду JavaScript:
Это оценивается как JavaScript, и результат отправляется в STDOUT. Поскольку последнее выражение есть
"Programming Puzzles"
, эта строка печатается.Без пробелов код примерно эквивалентен:
(Если вы еще не выяснили это,
S
переменная представляет собой один пробел.).r()
Метод в строке, если задан один аргумент, удаляет все экземпляры этого аргумента из строки. Так"Code Golf"
как не содержит"ProgrammingPuzzles"
, он возвращает"Code Golf"
без изменений, который затем отправляется в STDOUT.источник
Брахилог , 44 байта
Попробуйте онлайн!
объяснение
источник
по обе стороны, чтобы исправить :)Алиса , 44 байта
Попробуйте онлайн!
Без пробелов:
Попробуйте онлайн!
объяснение
В первой программе два зеркала
/
перенаправляют указатель команд на вторую строку."selzzuP gnimmargorP"
выдвигает требуемые кодовые точки в порядке почтения,d
увеличивает глубину стека и&o
печатает столько байтов.@
завершает программуБез пробелов программа находится в одной строке. В этом случае указатель инструкций не может перемещаться в обычном режиме, поэтому он
/
фактически становится no-ops (технически, IP просто не перемещается на один шаг, то же самое/
выполняется снова, и IP отражается обратно в кардинальный режим). ). Так что, если мы удалим их из программы, это будет выглядеть так:Чтобы включить пробел
Code Golf
, мы используем вместо этого восклицательный знак и уменьшаем его наt
. После того, как у нас есть все кодовые точки в стеке,#
пропускается следующая команда, которая является всей второй строкой.d&o
затем снова печатает стек и@
завершает программу.источник
PHP, 44 байта
троичный оператор
PHP, 51 байт
комментарий
PHP, 57 байт
переключатель массива
источник
Pyth, 37 байт
Попробуй это здесь.
Попробуй это здесь.
источник
C #
88817063 байтаС пропущенными пробелами:
Спасибо BrianJ за то, что показали, как не должно быть пробела между типом возвращаемого метода и именем метода, PeterTaylor за сохранение
718 байтов и Patrick Huizinga за сохранение 7 байтов.Тот же метод, что и все остальные на самом деле,
технически это можно считать недействительным, поскольку метод не указывает тип возвращаемого значения для метода, но между типом возвращаемого значения и именем метода должен быть пробел.источник
@
, так что тогда выvoid@a...
избежите ошибки компиляции «no return type» (также добавляет байты :().Length<1
сохраняет один байт;\u0020
сохраняет шесть, если я правильно посчитал; и вы можете сделать правильный ответ (и сохранить несколько байтов одновременно), отправив лямбду вместо функции верхнего уровня.Func<string>a=()=>...
@
прежде всего используется, если вам нужно использовать зарезервированное слово в качестве имени переменной (эквивалент находится[]
в VB.NET (и MS SQL Server)).=>
вместоreturn
вас не нужно никаких пробелов. (И даже если вы используетеreturn
, вы можетеreturn(...)
).Common Lisp (SBCL), 52 байта
Печать
Programming Puzzles
Печать
Code Golf
Ungolfed:
Explaination:
Хитрость в основном заключается в том, как
#'format
работает в Common Lisp.В CL большая часть пробелов может быть опущена при условии, что нет никакой двусмысленности относительно того, где токены начинаются или заканчиваются. Первый трюк отделяя
format
иt
символы. Мне пришлось однозначно закончитьformat
символ, не меняяt
интерпретации. К счастью, `в CL завершает предыдущий токен до его обработки и,
отменяет действие` (`используется для реализации шаблонов, где следующее выражение, следующее за ним, получает" в кавычках ", но любое подвыражение с префиксом a,
вычисляется и результат, включенный в шаблон, так что `, почти не используется).Третий аргумент
format
- это строка шаблона.format
похож на printf в C, но имеет гораздо более мощные директивы форматирования и использует ~, чтобы указать их вместо%. ~ [и ~] позволяют выбирать между несколькими вариантами печати с помощью ~; отделяя их. Дополнительный аргумент предоставляется для формата - числовой индекс, который вы хотите напечатать. Чтобы «» в Code Golf сохранилось, я использовал директиву табуляции ~ T, которая используется для вставки пробелов, как правило, для выравнивания текста по столбцам. ~ @ T - это вариант, который просто вставляет заданное количество пробелов, по умолчанию 1.Наконец, есть два аргумента для форматирования - 0 и 1. Перед удалением пробела ~ [~; ~] используется 0 для выбора «Пазлы программирования», а дополнительный аргумент формата (1) отбрасывается (я не знаю, как стандартно отбрасывать дополнительные аргументы формата, но это работает на Steel Bank Common Lisp). После удаления пробела появляется только один аргумент (01), который выбирает «Код Гольф».
источник
,
оценивается и объединяется в« Не,@
обязательно для объединения?,
исключает следующее выражение и включает результат в шаблон, в то время как,@
предполагает, что выражение будет преобразовано в список и включает содержимое этого списка непосредственно в шаблон. Традиционно в сообществе lisp,@
это называется «сплайсинг», но я не уверен, что это самый очевидный выбор. Я постараюсь перефразировать это немного.Java 8,
745048 байтисточник
==
оператор также должен работать,()=>""==""?"Code\u00A0Golf":"Programming Puzzles"
\u00A0
->\040
для экономии 2 байта.Japt , 32 байта
Попробуйте онлайн!
источник
PowerShell , 56 байт
Попробуйте онлайн!
Довольно простой, я бы сказал, но он выполняет свою работу
источник
R, 50 байтов
Я думаю, что это то же самое, что и этот ответ Javascript , и в основном та же идея, что и все остальные.
источник
> <> , 42 байта
С пробелами
Попробуйте онлайн!
Без пробелов
Попробуйте онлайн!
источник
постоянный ток , 50
Попробуйте онлайн .
[ ]
определяет строку -Z
измеряет ее длину. Если длина равна 19, то она содержит пробел и вызывается макрос, сохраненный в регистре m, который печатаетProgramming Puzzles
и завершает работу. В противном случаеCode Golf
печатается.источник
> <> ,
4745 байтПопробуйте онлайн!
Спасибо randomra за -2 (умные два
!
с, так что я могу использовать только один>o<
.)Код выкрикивает: "Порка! Порка! Порка!" и напоминает рыбу.
источник
T-SQL,
96828167 байтПопробуй это онлайн | Без пробелов
Старая версия (96 байт):
источник
iif(len(' x')=2
print
. Я использовал+
вместо этого, и это сработало.Perl 5 ,
4341 байтПопробуйте онлайн!
Использует тот факт, что
' '
верно в Perl и''
ложно.$"
Переменная устанавливается в пространство по умолчанию.Спасибо @NahuelFouilleul за удаление двух байтов.
источник
"Code$\"Golf"
короче иCode.$".Golf
тожеGolfScript , 38 байт
Попробуйте онлайн!
источник
Befunge , 76 байт
Попробуйте онлайн!
Не самое компактное решение, но опять же написать код Befunge без пробелов довольно сложно.
В самом начале он сравнивает пробел с 0. Если он больше, он переходит в нижний ряд. Если это не так, что происходит, когда вы заменяете пробел ничем, он остается в первом ряду.
источник
,
с?>:#,_
что может сэкономить вам много байтов