Ваша задача - создать программу (используя только печатаемые символы ASCII и / или символы табуляции и новые строки), которая печатает именно те символы в печатаемом пространстве ASCII ( 0x20
до 0x7e
), которые не появляются в исходном коде вашей программы (в любом порядке, однако). много раз хочешь).
Самый короткий код для этого на любом языке выигрывает.
code-golf
self-referential
Джо З.
источник
источник
0x20
от0x7e
, которые определяются как «печатаемые символы ASCII». Технически вкладки и переводы строк на самом деле являются управляющими символами.Ответы:
GolfScript,
1512 символовНа основании ответа Яна Дворака с несколькими поворотами, а также в стиле ответа Питера Тейлора .
источник
Полиглот, 95
tclsh
,bash
,sh
,ksh
и т.д.)main()
необходимости. Благодаря урогенуНичего не делает.
источник
#undef X;whatever junk you want
работает.#
для комментариев, таких как Ruby и Perl)PHP 5.2, 4
Сохранить как файл с именем
NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php
где-то в/home
.short_open_tag
должен бытьOn
в вашемphp.ini
.Выход:
источник
:
на выходе.JavaScript - 88
печатает "bcdfghijkmnpquvxyz"
источник
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)
потому что95*72
=6840
и перемещение потерянных символов в строку позволяет вам использовать кавычки вместо того, чтобы тратить их впустую. Кроме того, скрытие символов в комментарии кажется бредом.Пробел,
6157 символовОн не самый короткий, но, вероятно, имеет простейшую логику (на самом деле это просто цикл).
Здесь это полностью прокомментировано, где S - пробел, T - табуляция, L - перевод строки:
Спасибо @res за исправление вышеупомянутого (требуется дополнительный дубликат для инструкции ветвления) и за меньшие числа, чтобы поместить в стек.
источник
SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL
.LSSSL
становитсяLSSL
иLTTSL
становитсяLTTL
) и удалив выход в конце (триLLL
). Попробуйте онлайн в формате 52 байта или здесь с подсветкой и пояснениями .C
837469 знаковЯ действительно пытался опустить его ниже 80 символов, но я просто не смог его осуществить. Наконец, я решил опубликовать то, что у меня есть, исходя из предположения, что я (или кто-то еще) найду решение из 79 символов через десять минут после публикации.Ладно, прошло не совсем десять минут, но в принципе это сработало.Я действительно хотел опубликовать версию, в которой не должно было быть свободного места в исходном коде, но которая оказалась на орбите странного аттрактора, подпрыгивая между несколькими решениями. После многих минут попыток подтолкнуть одного из них к стабильному решению, я сдался и добавил пространство.
источник
Golfscript,
2624 персонажаПринимает сценарий генерации диапазона, дублирует его, выполняет его, вычитает его из результата, затем вычитает код вычитания результата и другой символ кавычки.
источник
''+
, выйти из программы перед вычитанием, вставить noop.;
(не нашел лучшего способа закрасить точку), использовать блок кода вместо строки ->{126,33>`-.;}.~
16 символовРыба - 80
Когда рыба ошибается, она печатает "что-то пахнет рыбой ...". Поскольку z - плохая инструкция, она сразу же ошибается
источник
Я знаю, что это не победа в каких-либо конкурсах. Я просто хотел попробовать это на языке, который обычно не используется, просто для удовольствия.
Ява -
209195152140 знаковС переносами строк и вкладками
Осторожно, если вы выполните: программа не завершается. ха-ха
объяснение
for(char c=0;;c++)
: Так как achar
можно рассматривать как aint
, я использую это в своих интересах здесь для увеличения всех возможных значенийc
. Я опускаю условие завершения в цикле (то, которое должно идти между двумя точками с запятой), чтобы сэкономить на символах, так как не было указано, что программа должна была завершиться. :)"publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""
К сожалению, не очень элегантный подход, но он выполняет свою работу. Вручную перечислите каждый символ, присутствующий в исходном коде, какString
литерал, а затем проверьте,char c
происходит ли в нем токindexOf()
. ЕслиindexOf()
вызов возвращается-1
, он не существует, и поэтому мы должны его распечатать. В остальном он просто использует троичный оператор для экономии символов и места.источник
Perl, 49 символов
Это интересный вызов - это своего рода анти-квайн, и мне удалось несколько раз сократить программу, увеличив диапазон отображаемых в ней символов.
источник
Рубин,
817868666257Просто проверяет себя. Дублирующиеся символы удаляются вручную.
Спасибо Джошу за сохранение 4 символов и Minitech за сохранение 5 символов!
источник
(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join
55 байтов, используя другой подход.Befunge (48)
Выходы: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240
источник
Не очень серьезно, но я должен был попробовать:
JSFuck (138152)
(скомпилированный источник здесь)
Первоначальный источник:
Печатает все символы кроме () + []!
источник
(x)
<=>[x][+[]]
, увеличивает размер кода, но делает алфавит меньше.Черт возьми, ты сделал это трудно для APL (это преднамеренно?)
Так что я решил игнорировать все правила !!!
АПЛ (Дьялог),
310Печатает атомарный вектор (который включает все печатные символы ASCII)
Оказывается, я полностью забыл про "без" часть ...
Но это легко исправить
~'AV'''
означает exclude (~
) символы A, V и одинарные кавычки (экранируются как двойные одинарные кавычки)Что касается печати без ASCII, я игнорирую все правила.
источник
0x20
to0x7e
), которые не отображаются в исходном коде вашей программы» Я полагаю, что вывод не может содержать символы за пределами печатаемого пространства ASCII («точно» является ключевым словом) , и ваша программа содержит «A» и «V», поэтому они не должны быть напечатаны.~
в набор исключенных символов. ;-) Кстати, подобное решение J будетa.-.'a.-'''
GolfScript (
1816 символов)Онлайн-демонстрация с дополнительной строкой, которая проверяет правильность и выводит количество ошибочных символов.
(У меня есть различные эквивалентные альтернативы.
@`^
Могут быть заменены на\\`
;#
могут быть заменены на`
или]
. Правильная комбинация может быть использована с трюком Говарда, чтобы равняться его счету 15, потому что обратные слеши не нуждаются в экранировании в блоках, как в строковых литералах:{),\`^32>].~}.~
Но Говард заслуживает похвалы за этот трюк).источник
}~
- еще лучше для блоков кода, см. Мой новый ответ ;-)Brainfuck, 173
Довольно долго, я мог бы попробовать позже.
источник
J (
5240)Редактировать: Дух, забыл о
e.
Старая версия:
Другой вариант (той же длины, но с меньшим выходом):
источник
Python 3 -
6861... спасибо @WolframH за улучшения.
exec(x)
новую строку и сохранить;
вx
. Кроме того, в Python 3 вы можете использоватьx=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)
для 61 символа (печатает несколько пробелов, что разрешено).PowerShell: 96
Должен быть сохранен и запущен как скрипт.
diff
это встроенный псевдоним дляCompare-Object
.gc
это встроенный псевдоним дляGet-Content
.$MyInvocation.InvocationName
получает полный путь к исполняемому скрипту.32..126
является десятичным эквивалентом для0x20..0x7e
, и поэтому создает массив десятичных кодов ASCII, которые мы ищем.[char[]]
берет содержимое следующего объекта и помещает их в массив, разбивая их и преобразовывая в символы ASCII. Итак, теперь у нас есть два массива символов ASCII - один взят из этого скрипта, а другой определен критериями вызова.-Pa
устанавливаетсяCompare-Object
в формате «Passthru», поэтому на консоли выводятся только те элементы, которые отличаются между входами - индикаторы того, в каких элементах входные данные все еще сохраняются в данных объекта, но не отображаются.|?{$_.SideIndicator-eq'=>'}
каналCompare-Object
выводит вWhere-Object
, который фильтрует его только до элементов, которые являются исключительными для второго входа.источник
PHP - 92
Выход:
ничего
ОП просит напечатать все неиспользованные символы, ну, я просто использую их все
источник
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
?!;>Xn
Javascript, 92
источник
источник
Java - 126 символов
свести к минимуму:
unminimized:
Это интересная проблема, потому что отдельные токены могут выиграть от их более длинной формы, потому что они повторно используют символы. Например, обычно
String[]
будет короче, ноString...
устраняет необходимость в квадратных скобках в условной строке.Я обнаружил, что хитрость заключается в том, чтобы попытаться использовать символы в начале и в конце диапазона, чтобы вы могли исключить их из вывода, просто изменив начало и конец цикла.
Для Java ключевым символом, который следует исключить, является то
"
, потому что наличие этого в строке требует его экранирования, что добавляет\
к вашей программе то, что должно идти в строке, которая добавляет\\
. Удаляя"
из вашей условной строки, вы удаляете 4 символа. Это может быть достигнуто, убедившись , что вы используетеи
!
и начать свой цикл из#
.Все строчные буквы появляются ближе к концу диапазона, с только
{
,|
,}
и~
приходить за ними. Из-за многословия Java большинство строчных букв используются только для примера. Точно так же{
и}
тривиально для Java-программы, потому что шаблон требует их.|
может использоваться, если у вас есть условие или, но я не смог найти способ воспользоваться тем, который приводит к более короткой программе, чем просто использование|
в качестве побитового оператора. Это|0
заставляет меня чувствовать себя немного грязно, потому что это единственная часть, которую нельзя делать, просто чтобы персонаж был там.~0
доходность-1
, что удобно, потому что это то, что мы должны проверить сindexOf
. Объединение этого с использованием!=
для условного цикла полностью исключает<
символ, что означает, что ему не нужно входить в условную строку.источник
sh (47)
Использует самореференциальный подход. Предполагается,
/dev/urandom
что в конечном итоге каждый октет будет выводиться хотя бы один раз. Не заканчиваетсяЕсли мы предположим, что
man
он установлен, мы могли бы вместо этого использоватьascii(7)
man-страницу (и, таким образом, иметь завершающую программу) ( 44 символа, спасибо @fennec).источник
man
иzsh
установлены,man zshall
кажется, соответствует критериям. Я мог бы добавить это как вариант.man ascii
Я мог бы спасти тебе другое письмо.tr
вы используете? GNUtr
рассматривает-
in "cat $0
" как оператор диапазона, который прерывает вывод.ascii
программа установлена, вы можете использовать это вместоman ascii
.BitShift , 1038 байт
BitShift язык , который поддерживает только
0
и1
в синтаксисе. Я подумал, что будет легко напечатать все другие символы, но, поскольку он не поддерживает цикл, он по-прежнему занимает 1038 байтов.Тем не менее, я считаю, что на самом деле не возможно пойти немного меньше, чем это ..
Печать
Попробуй здесь
источник
Определенно самое длинное решение здесь, но кодирование в Lino всегда весело:
L.in.oleum -
655523 персонажаБез комментариев, просто читает исходный код, скомпилированный в двоичный файл. Сохранить как
a.txt
или он не скомпилируется!источник
Brainfuck,
133123114110 байтНемного больше возиться с прежним решением (прежде чем я понял, что ниже было меньше - хотя это было до того, как я провел серьезную оптимизацию). Это работает путем сохранения 4 наборов чисел ascii и распечатывания их с некоторым хитрым циклом, а затем выдачи пропущенных символов (то есть тех, которые находятся между недопустимыми числами ascii).
Оригинальная подача
Это делает следующее:
источник
Хаскелл (70)
Скучное решение для вычитания повторяющихся символов в программе в строке, вычитание из универсального набора. Далеко не победитель Codegolf, хотя это удивительно разборчиво для его длины.
(Теперь с вычитанием списка вместо
filter
/notWith
.)источник
import Data.List
наimport List
runhaskell
: «Не удалось найти модуль« Список »». Я заметил, что неправильно подсчитал количество символов, поэтому исправил это.J - 21
запишите это в файл с именем
5
в текущем каталоге. Затем загрузите выполнить скрипт с0!:1<'5'
Или 25 без файловой уловки:
источник
'
, который не удаляется из вывода.Clojure (
142, 106103)отформатирован:
Думаю, это поможет, возможно, понадобятся некоторые настройки. выход:
запускает на себе строку, которая является оцениваемым кодом clojure. В конце строки есть несколько комментариев, чтобы получить символы, используемые вне строки (основной метод и т. Д.)
источник
Python 2, 69
Я использую самую длинную (которую я могу найти) последовательность непрерывных символов, которую я могу распечатать, и добавляю другие как комментарий после кода.
источник