В частности, используйте каждый из этих символов хотя бы один раз в вашем исходном коде:
! " # $ % & ' () * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
Символы внутри комментариев, строковых литералов, регулярных выражений (или любых других типов литералов и т. Д.) Не учитываются (но их разделители, такие как /**/
или имеют ""
значение).
Программа не должна выполнять никаких действий. Он просто должен скомпилировать и ничего не делать при запуске.
Если по какой-либо причине некоторые символы не могут использоваться на выбранном вами языке, объясните это строго (что и почему должно быть исключено).
Обновление: в нескольких ответах использовались символы с регулярными выражениями. Я считаю , что это немного проблематично, это то же самое, помещая их в строковые литералы или комментарии (вот почему я и т.д. в это требование). Пожалуйста, попробуйте без этого. Я также обновил требование выше.
Обновление: выигрывает самый короткий код (помеченный как code-golf ). Как и предполагалось, нам, скорее всего, понадобятся некоторые критерии разрыва связей. Я полагаю, что, если есть ничья, побеждает тот, в котором символы ASCII выглядят как можно более упорядоченными. Формально: отфильтруйте первое вхождение каждого из перечисленных символов из программы. Это приведет к перестановке перечисленных символов. Программа с меньшим числом инверсий своей перестановки выигрывает.
Обновление: я был бы рад видеть некоторые / больше решений на обычных / основных языках, таких как C (++), Java, Scala, Haskell и т. Д.
источник
@%
ни обратный удар не могут появляться в c, кроме как как часть литерала (в достаточно новых версиях c%
может появляться в орграфах). (и#
появляется только в директивах препроцессора, но нам просто придется с этим жить)? То есть, я прошу, чтобы подход Мэтта был явно законным.#
,@
и `не являются законными вне всякого рода буквальногоОтветы:
Brainf * ck, 32 символа
Распечатывает смайлик (если ваша консоль может выводить символ ASCII 1)
Да, решение Branf * ck, которое превосходит Golfscript! :П
Если вы настаиваете на отсутствии вывода, просто поменяйте
+
и.
:источник
Perl, 32 символа
нет скрытых символов в комментариях, строковых литералах или регулярных выражениях. использует все символы точно один раз.
Описание
я попытался указать приоритет оператора с отступом: самые правые выражения оцениваются раньше, чем их слева
источник
`<@"^[(\{_},)]/+-~%'?&|:!*.=>
?$`
,@"
,%'
и*.
(скаляр, массив, хэш, и тип - глобу, соответственно), хотя это очень трудно быть уверенным. , ,Пробел, 32
все непробельные символы игнорируются, так что это на самом деле пустая программа
источник
Python 65
Я использовал символы
?
и$
внутри строкового литерала. Эти символы недопустимы вне строковых литералов или комментариев.источник
{[`'"$?'`,]}
недопустимо, так как создает словарь с ключом без связанного значения. Вы можете сделать его действительным с помощью еще двух символов, например так:{[`'"$?'`,]:0}
PHP, 32 символа
Возможно, это немного тролль, эта PHP-программа также является QUINE и использует все символы в точном порядке, в котором они перечислены.
Выполненный из командной строки, вывод будет просто содержимым файла, так как нет
<?php
необходимости вызывать интерпретатор.источник
Perl 6 (43 символа)
Давайте определим инфиксный оператор с довольно необычным именем:
Это не литерал и не литерал в RE или что-то скрытое в комментарии. Ты мне не веришь? Запуск следующей программы выдаст «2»:
Но я совершенно уверен, что вы, придурки, будете расширять правила дальше, чтобы исключить переопределение самого языка, чтобы мы, perl lubbers, были несчастны. :(
источник
Хаскелл, 53
Мы можем сделать это немного короче
45
Однако эта программа не завершается, и использует большее количество символов (
'!'
,'<'
,'|'
) во вновь определенного инфикс.источник
к (33 знака)
Очень легко в к. К сожалению,
"
должны быть в паре.источник
GolfScript (33 символа)
"
должен быть в паре. Потребовалось немного проб и ошибок, чтобы заставить его ничего не выводить - большинство других позиций:'
результата в некотором выводе.источник
J, 33 знака
'
необходимо удвоить, чтобы избежать синтаксических ошибок.В моем первом ответе отсутствовали некоторые символы.
источник
С, 48 символов
Вид обмана.
источник
#define Q(_) "##_##"
...char*c=Q(~''*+,-./:<=>?[]
| \); `. Ничего в строке, он просто конвертируется в один ... Конечно, это будет длиннее."";
), но$@
и backtick кажутся безнадежными.#define Q(_) #_
. Препроцессор будет обрабатываться"##_##"
как строковый литерал.Постскриптум - 32 символа
В результате получается объект в стеке, но в остальном эффект не имеет. Postscript допускает использование практически любого символа в идентификаторе, за исключением тех,
<>()[]{}/
которые являются специальными синтаксическими формами и%
которые вводят комментарий. Программа размечена какисточник
C # (91 символ)
Насколько я знаю, символ $ не является допустимым символом вне строковых литералов, поэтому я не использовал его в своем ответе.
РЕДАКТИРОВАТЬ : Благодаря Питер Тейлор , я сократил код.
источник
#if A
...#endif
короче#region
...#endregion
. И"x"[0]+
короче чем[System.STAThread]
.PowerShell (52 символа)
Мне пришлось поместить символ ^ в качестве строкового литерала, потому что, насколько я знаю, символ ^ не является допустимым символом PowerShell вне строковых литералов. Поправь меня, если я ошибаюсь.
Единственный способ, который я нашел в качестве символа :, это использовать оператор :: для вызова статического метода.
источник
Схема, 41 символ
Это использует невероятную терпимость Схемы для символов в именах переменных. В этой программе я создаю переменную с именем! $% & * +, -. /: <=>? @ [] ^ _ `{|} ~, Которую Схема с радостью принимает.
источник
Tcl 37 символов
Определяет переменную
!#$%&'()*+,-./:<=>?@[]^\_`|~
с пустой строкойисточник
C:
8356 символовАт-знаки и обратные кавычки не являются частью разрешенного C-синтаксиса, поэтому я поставил их между кавычками.
источник
(b)
? Это странный синтаксис и пустая трата символов.0.0
гораздо короче.main(_,$)
спасет персонажа.x?:y
, но это не стандартная C.Common Lisp, 33 символа
Основная часть вышеупомянутого оценивает (или, скорее, оценила бы, если бы не
#+()
перед ним) символ с именем:Это
#+()
, чтобы избежать вывода. Я не уверен, что|foo|
синтаксис для символов считается литералом, но символы используются как имена переменных / функций в Common Lisp, и есть несколько ответов, уже использующих необходимые символы в них.источник
Smalltalk (Squeak 4.x диалект) 38 символов
Реализуйте этот метод в Object, синтаксис действителен, если Preferences Allow подчеркивание (это настройка по умолчанию)
объявить Z как глобальную переменную во всплывающем меню, если он интерактивный
Пояснения:
Блин, кто сказал, что Smalltalk читабелен?
Обратите внимание, что я не обманывал, единственный недопустимый символ `вставлен в буквальный символ. РЕДАКТИРОВАТЬ см. Ниже, это было ложное утверждение (по крайней мере, в Squeak)
Но мы можем сделать это до 34 символов с помощью этого трюка
На этот раз:
Строго говоря, мы можем считать это мошенничеством ... Это не буквальная строка, но все же непустой литерал ...
Мне все еще нужно удвоить кавычку комментария "" (если я не сделаю буквенный символ с его помощью $ ", но затем мне нужно удвоить строковую кавычку '')
Мне все еще нужно использовать букву для параметра (_ не принимается, даже если мы устанавливаем предпочтения разрешить подчеркивание в селекторе на true).
Приятно, что мы можем даже запустить метод, например, отправить сообщение 1 с аргументом 2:
РЕДАКТИРОВАТЬ Наконец в 35 символов без обмана
Примечания:
источник
R: 108 символов
Очевидно, что это самая длинная отправка, но чтобы иметь возможность использовать символы
@
и$
в R, нам нужно создать объект, который имеет слоты (индексированные с помощью@
) и именованные элементы (индексированные с помощью$
).Самое короткое решение, о котором я мог подумать, - это создать новый класс object (
a=new(setClass("a",representation(b="list")))
), который берет свое. В противном случае, исходите из классики, которые не нуждаются в объяснениях (например!=
,#
или1:2
),создает новый оператор, который делает то же самое, что и оператор
?
(т. е. вызывает страницу справки предшествующего ему элемента).%*%
вычисляет внутреннее произведение двух матриц (здесь1^1
и.1
).Символ
_
ничего не делает (AFAIK) в R, но обычно используется в именах переменных или функций, как это имеет место здесь.источник
TI-Basic, 36
источник
End
завершает оператор цикла, а не программу. Я думаю, что вы имели в видуReturn
.