Напечатайте каждого персонажа, которого нет в вашей программе

221

Ваша задача - создать программу (используя только печатаемые символы ASCII и / или символы табуляции и новые строки), которая печатает именно те символы в печатаемом пространстве ASCII ( 0x20до 0x7e), которые не появляются в исходном коде вашей программы (в любом порядке, однако). много раз хочешь).

Самый короткий код для этого на любом языке выигрывает.

Джо З.
источник
19
Они есть, но они не находятся в диапазоне 0x20от 0x7e, которые определяются как «печатаемые символы ASCII». Технически вкладки и переводы строк на самом деле являются управляющими символами.
Джо З.
3
Разрешено ли печатать переводы строки (или любые другие непечатные символы ASCII)?
землетрясение
1
Вкладки и переводы строк не отображаются таким образом, что они занимают позицию печати. Они перемещают позицию. Смотрите функцию ANSI C "isprint".
Каз
1
Как этот вопрос был восстановлен? Он снова начал получать голоса.
Джо З.
3
@Timwi: Если вы хотите это сделать, вам придется выводить все символы в символьном пространстве CJK (кроме тех, которые появляются в вашем коде). Слишком сложно управлять, поэтому я ограничил его только ASCII.
Джо З.

Ответы:

275

Полиглот, 95

#undef X;A!"$%&'()*+-[,.]/0123456789:<=>?@BCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcghijklmopqrstvwxyz{|}~

Ничего не делает.

Йоханнес Кун
источник
19
Нет, но это полигот. Я не хочу это разрушать.
Йоханнес Кун
95
Я вставил это в компилятор GNU Fortran, и он вышел из строя.
марин
12
В Си #undef X;whatever junk you wantработает.
Угорен
6
Работает и в Python (потому что он использует #для комментариев, таких как Ruby и Perl)
Doorknob
87
«Самый короткий код для этого на любом языке выигрывает». Из-за отсутствия кода, который работает на любом языке, эта запись должна выиграть, так как это код, который работает на наибольшем количестве языков. ;-D
MSB
142

PHP 5.2, 4

<?<<

Сохранить как файл с именем NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.phpгде-то в /home. short_open_tagдолжен быть Onв вашем php.ini.

Выход:

PHP Parse error:  syntax error, unexpected T_SL in /home/wherever/NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php on line 1
Рыбаковым
источник
42
Ха-ха, приятное изменение правил.
Йоханнес Кун
6
Хорошо, но, к сожалению, я могу заметить :на выходе.
Говард
12
-1; meta.codegolf.stackexchange.com/a/1072/11066
Парень со шляпой
78
Я ценю это, @TheGuywithTheHat, но я ответил на это около года назад, а не вчера.
Ry-
9
@TheGuywithTheHat Это был один из ответов, когда лазейка была забавной, новой и привела к вашей связанной мета-записи. Теперь этого больше нет.
Йоханнес Кун
48

JavaScript - 88

alert("BCDFGHIJKMNPQUVXYZ".toLowerCase())// !#$%&'*+,-0123456789:;<=>?@[\]^_`{|}~AERTOWS

печатает "bcdfghijkmnpquvxyz"

XEM
источник
13
Ух ты, мне нравится идея toLowerCase, она великолепна!
Пьер Арло
2
Вы можете сохранить три символа с небольшим количеством математики: "!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)потому что 95*72= 6840и перемещение потерянных символов в строку позволяет вам использовать кавычки вместо того, чтобы тратить их впустую. Кроме того, скрытие символов в комментарии кажется бредом.
Umbrella
28

Пробел, 61 57 символов

Он не самый короткий, но, вероятно, имеет простейшую логику (на самом деле это просто цикл).

Здесь это полностью прокомментировано, где S - пробел, T - табуляция, L - перевод строки:

SSSTSSSSSL     # push 0x20
LSSSL          # label S
SSSTL          # push 1
TSSS           # add
SLS            # duplicate top of stack
SLS            # duplicate again
TLSS           # output ASCII character
SSSTTTTTTSL    # push 0x7E
TSST           # subtract (result - 0x7E)
LTTSL          # branch to label S if top of stack is negative
LLL            # end

Спасибо @res за исправление вышеупомянутого (требуется дополнительный дубликат для инструкции ветвления) и за меньшие числа, чтобы поместить в стек.

DPenner1
источник
1
Это не работает как есть, но может быть исправлено путем вставки дубликата вершины стека (SLS) непосредственно перед условным переходом (LTTSL) - это необходимо, потому что команда условного ветвления удаляет верх стека , Получающаяся в результате 64-символьная программа работает как рекламируется. (Если программа хранится в файле с расширением .ws, ее можно протестировать в Интернете по адресу golf.shinh.org/checker.html )
res
1
Кроме того , продолжительность программы может быть уменьшена до 57 , используя почти ту же программу , но с тремя толкнула номера -94, 127, 126 изменили до 32, 1, 126, соответственно: SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL.
Res
Я знаю, что прошло более 5 лет, но вы можете сыграть в гольф 5 байт, изменив метку S на метку (пустая) ( LSSSLстановится LSSLи LTTSLстановится LTTL) и удалив выход в конце (три LLL). Попробуйте онлайн в формате 52 байта или здесь с подсветкой и пояснениями .
Кевин Круйссен
22

C 83 74 69 знаков

main(z) {for(;++z<96;"\33iE!vk?}GkRP8z"[z/7]&1<<z%7&&putchar(z+32));}

Я действительно пытался опустить его ниже 80 символов, но я просто не смог его осуществить. Наконец, я решил опубликовать то, что у меня есть, исходя из предположения, что я (или кто-то еще) найду решение из 79 символов через десять минут после публикации. Ладно, прошло не совсем десять минут, но в принципе это сработало.

Я действительно хотел опубликовать версию, в которой не должно было быть свободного места в исходном коде, но которая оказалась на орбите странного аттрактора, подпрыгивая между несколькими решениями. После многих минут попыток подтолкнуть одного из них к стабильному решению, я сдался и добавил пространство.

Хлебница
источник
69 персонажей, красиво
галуа
21

Golfscript, 26 24 персонажа

"126,32>''+".~\-'.~\-"'-

Принимает сценарий генерации диапазона, дублирует его, выполняет его, вычитает его из результата, затем вычитает код вычитания результата и другой символ кавычки.

Джон дворак
источник
2
Блин, это умно.
марин
1
Удалить ''+, выйти из программы перед вычитанием, вставить noop .;(не нашел лучшего способа закрасить точку), использовать блок кода вместо строки -> {126,33>`-.;}.~16 символов
Говард
И используя в любом порядке, сколько бы раз вы ни захотели, вы также можете удалить точку с запятой.
Говард
@ Боюсь, я не понимаю твою идею. Вы можете опубликовать это как отдельный ответ.
Джон Дворак
@PeterTaylor Я думал, что напечатал пробел?
Джон Дворак
20

Рыба - 80

zbcdjkpqruvwxaABCDEFGHIJKLMNOPQRSTUVWXYZ#!"'$%^&*()@!+-[]{},;:/\<>=?|~0123456789

Когда рыба ошибается, она печатает "что-то пахнет рыбой ...". Поскольку z - плохая инструкция, она сразу же ошибается

Cruncher
источник
17

Я знаю, что это не победа в каких-либо конкурсах. Я просто хотел попробовать это на языке, который обычно не используется, просто для удовольствия.

Ява - 209 195 152 140 знаков

class a{public static void main(String[]a){for(char c=0;;c++)System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:}".indexOf(c)<0?c:"");}}

С переносами строк и вкладками

class a{
    public static void main(String[]a) {
        for(char c=0;;c++)
            System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"");
    }
}

Осторожно, если вы выполните: программа не завершается. ха-ха

объяснение

  1. for(char c=0;;c++): Так как a charможно рассматривать как a int, я использую это в своих интересах здесь для увеличения всех возможных значений c. Я опускаю условие завершения в цикле (то, которое должно идти между двумя точками с запятой), чтобы сэкономить на символах, так как не было указано, что программа должна была завершиться. :)
  2. "publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""К сожалению, не очень элегантный подход, но он выполняет свою работу. Вручную перечислите каждый символ, присутствующий в исходном коде, как Stringлитерал, а затем проверьте, char cпроисходит ли в нем ток indexOf(). Если indexOf()вызов возвращается -1, он не существует, и поэтому мы должны его распечатать. В остальном он просто использует троичный оператор для экономии символов и места.
Asteri
источник
можешь немного объяснить?
Джои Рохан
1
@joeyrohan Конечно, только что добавил объяснение ниже. :)
Астери
круто;) классно :)
Джои Рохан
2
Вы можете поместить в комментарий ENTIRE ascii пригодную для печати таблицу и создать Java-программу, которая ничего не возвращает. Это победило бы ваше :-)
Пьер Арло
9
Вы могли бы сказать мне, что это будет печатать каждый символ Unicode, прежде чем я выполню его в своем терминале.
nyuszika7h
14

Perl, 49 символов

say grep/[^+-246\[-^aceghmprsy]/,map chr,041..126

Это интересный вызов - это своего рода анти-квайн, и мне удалось несколько раз сократить программу, увеличив диапазон отображаемых в ней символов.

Хлебница
источник
14

Рубин, 81 78 68 66 62 57

(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}

Просто проверяет себя. Дублирующиеся символы удаляются вручную.

Спасибо Джошу за сохранение 4 символов и Minitech за сохранение 5 символов!

Дверная ручка
источник
Не можете ли вы поставить if после $> << x, чтобы сохранить одну из конечных строк?
Джош
@ Джош Да. Я сделаю это сейчас.
Ручка двери
Вы можете взять его до 58:(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
Ry-
1
Ах, и с лучшим выбором имени переменной, 57:(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
Ry-
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join55 байтов, используя другой подход.
twe4ked
14

Befunge (48)

<|::-1,+*88:<+3*87
6<@.**85
9>"()~&"/%$ |!#';=?}

Выходы: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240


Святая корова! Хорошо сделано!
Cruncher

12

Не очень серьезно, но я должен был попробовать:

JSFuck (138152)

(скомпилированный источник здесь)

Первоначальный источник:

for(x=0x7e;x>0x19;x--){
    console.log(String.fromCharCode(x).replace(/[\[\]!\+\(\)]/ig, ''))
}

Печатает все символы кроме () + []!


2
(x)<=> [x][+[]], увеличивает размер кода, но делает алфавит меньше.
FireFly

12

Ваша задача - создать программу (используя только печатные символы ASCII и / или вкладки и новые строки)

Черт возьми, ты сделал это трудно для APL (это преднамеренно?)
Так что я решил игнорировать все правила !!!

АПЛ (Дьялог), 3 10

⎕AV

Печатает атомарный вектор (который включает все печатные символы ASCII)


Оказывается, я полностью забыл про "без" часть ...
Но это легко исправить

⎕AV~'AV'''

~'AV'''означает exclude ( ~) символы A, V и одинарные кавычки (экранируются как двойные одинарные кавычки)

Что касается печати без ASCII, я игнорирую все правила.


«вывести [s] точно символы в печатаемом пространстве ASCII ( 0x20to 0x7e), которые не отображаются в исходном коде вашей программы» Я полагаю, что вывод не может содержать символы за пределами печатаемого пространства ASCII («точно» является ключевым словом) , и ваша программа содержит «A» и «V», поэтому они не должны быть напечатаны.
FireFly

1
Вы по крайней мере захотите добавить ~в набор исключенных символов. ;-) Кстати, подобное решение J будетa.-.'a.-'''
FireFly

2
Вы можете игнорировать все правила, но это лишает вас права быть принятым ответом.
Джо З.

11

GolfScript ( 18 16 символов)

"),@`^^32>#.~".~

Онлайн-демонстрация с дополнительной строкой, которая проверяет правильность и выводит количество ошибочных символов.

(У меня есть различные эквивалентные альтернативы. @`^Могут быть заменены на \\`; #могут быть заменены на `или ]. Правильная комбинация может быть использована с трюком Говарда, чтобы равняться его счету 15, потому что обратные слеши не нуждаются в экранировании в блоках, как в строковых литералах: {),\`^32>].~}.~Но Говард заслуживает похвалы за этот трюк).



2
К счастью, ascii заканчивается }~- еще лучше для блоков кода, см. Мой новый ответ ;-)
Говард

11

Brainfuck, 173

+++++[->++++++<]>>>++[------<+>]<++++>>----[----<+>]>-[-------<+>]>-[---<+>]<------->>-[---<+>]<+++++++++>>--[-----<+>]<+++++>>+[---------<++>]+++++++++++++[<[.+<]>[>]<-]\=,

Довольно долго, я мог бы попробовать позже.


6
написать программу, которая ничего не делает и добавить остальные исходники к исходному тексту, наихудший случай - 96 символов.
Jasen

10

J ( 52 40)

Редактировать: Дух, забыл о e.

'''(-@.e#[)~95{32}a'(-.@e.#[)~95{.32}.a.

Старая версия:

(>@(*/@('(>@*/''&~:).#]32{95}a'&~:)&.>)#])95{.32}.a.

Другой вариант (той же длины, но с меньшим выходом):

([#~*/"1@('([#~*/"1@''&:0)95{.32}a'&~:"0))95{.32}.a.

@JanDvorak: опечатка, упс
marinus

Слей это! Я надеялся, что смогу достичь достаточно низкого уровня в Ruby, чтобы победить тебя, а потом ты
опустишь

Новый выглядит гораздо более лукавым.
Джон Дворак

1
@ Doorknob: у меня есть один в APL, который содержит всего 24 символа, но в нем есть не-ASCII символы.
марин

Да, я сделал ASCII, чтобы избежать таких языков, как APL.
Джо З.

7

Python 3 - 68 61

x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"
exec(x)

... спасибо @WolframH за улучшения.


1
Я думаю, что вы можете ввести exec(x)новую строку и сохранить ;в x. Кроме того, в Python 3 вы можете использовать x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)для 61 символа (печатает несколько пробелов, что разрешено).
WolframH

@WolframH гениальный, спасибо!

7

PowerShell: 96

Должен быть сохранен и запущен как скрипт.

diff([char[]](gc $MyInvocation.InvocationName))([char[]](32..126))-Pa|?{$_.SideIndicator-eq'=>'}

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, который фильтрует его только до элементов, которые являются исключительными для второго входа.


Нормально и поучительно.
Стефан Гурихон

7

PHP - 92

<? //A"$%&'()*+[,.]0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#

Выход:

ничего

ОП просит напечатать все неиспользованные символы, ну, я просто использую их все


Как насчет <?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'?
Иокап

Я знал, что будет представление, которое просто использует все символы.
MilkyWay90

1
Это не использует символы!;>Xn
Джо Кинг

6

Javascript, 92

(function f(){for(i=32;126>i++;)!~(""+f).indexOf(c=String.fromCharCode(i))&&console.log(c)})()

Это справедливое решение? alert ('! "# $% ^ * + / -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _` bcdfghijkmnopqsuvwxyz {|} ~') Приходит в 95 символов и является чертовски тупым.: p

источник
6

Java - 126 символов

свести к минимуму:

class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}

unminimized:

class hjq {
    public static void main(String... w) { 
        for (char z = '"'|0; ++z != 'a';) {
            if ("'()+.0;=OS".indexOf(z) == ~0) {
                System.out.print(z);
            }
        }
    }
}

Это интересная проблема, потому что отдельные токены могут выиграть от их более длинной формы, потому что они повторно используют символы. Например, обычно String[]будет короче, но String...устраняет необходимость в квадратных скобках в условной строке.

Я обнаружил, что хитрость заключается в том, чтобы попытаться использовать символы в начале и в конце диапазона, чтобы вы могли исключить их из вывода, просто изменив начало и конец цикла.

Для Java ключевым символом, который следует исключить, является то ", потому что наличие этого в строке требует его экранирования, что добавляет \к вашей программе то, что должно идти в строке, которая добавляет \\. Удаляя "из вашей условной строки, вы удаляете 4 символа. Это может быть достигнуто, убедившись , что вы используете и !и начать свой цикл из #.

Все строчные буквы появляются ближе к концу диапазона, с только {, |, }и ~приходить за ними. Из-за многословия Java большинство строчных букв используются только для примера. Точно так же {и }тривиально для Java-программы, потому что шаблон требует их.

|может использоваться, если у вас есть условие или, но я не смог найти способ воспользоваться тем, который приводит к более короткой программе, чем просто использование |в качестве побитового оператора. Это |0заставляет меня чувствовать себя немного грязно, потому что это единственная часть, которую нельзя делать, просто чтобы персонаж был там.

~0доходность -1, что удобно, потому что это то, что мы должны проверить с indexOf. Объединение этого с использованием !=для условного цикла полностью исключает <символ, что означает, что ему не нужно входить в условную строку.

ICR
источник
5

sh (47)

tr</dev/urandom -cd \[:print:]|tr -d "`cat $0`"

Использует самореференциальный подход. Предполагается, /dev/urandomчто в конечном итоге каждый октет будет выводиться хотя бы один раз. Не заканчивается

Если мы предположим, что manон установлен, мы могли бы вместо этого использовать ascii(7)man-страницу (и, таким образом, иметь завершающую программу) ( 44 символа, спасибо @fennec).

man ascii|tr -cd \[:print:]|tr -d "`cat $0`"
Светлячок
источник
Не могли бы вы использовать другой файл, возможно, с более коротким именем, который, по сути, гарантированно содержит все возможные октеты? и может даже прекратить? Я думаю, как / dev / memory или что-то.
@fennec, если мы предположим, что manи zshустановлены, man zshallкажется, соответствует критериям. Я мог бы добавить это как вариант.
FireFly
man asciiЯ мог бы спасти тебе другое письмо.
Что trвы используете? GNU trрассматривает -in " cat $0" как оператор диапазона, который прерывает вывод.
Тоби Спейт
Кстати, если asciiпрограмма установлена, вы можете использовать это вместо man ascii.
Тоби Спейт
5

BitShift , 1038 байт

BitShift язык , который поддерживает только 0и 1в синтаксисе. Я подумал, что будет легко напечатать все другие символы, но, поскольку он не поддерживает цикл, он по-прежнему занимает 1038 байтов.
Тем не менее, я считаю, что на самом деле не возможно пойти немного меньше, чем это ..

101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010

Печать

 !"#$%&'()*+,-./23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Попробуй здесь

Bassdrop Cumberwubwubwub
источник
4

Определенно самое длинное решение здесь, но кодирование в Lino всегда весело:

L.in.oleum -655 523 персонажа

"libraries"/arch/cpu/base;/hmi/conout;/data/bytes;/data/string/t2s;/data/heap;/data/heap/connect/mgrab;"stockfile"a;"directors"displaystatus=engage;"injection"c=524;b<-bytes.bytesizeconvert:c;b<-heap.alloc:b;a<-heap.alloc:c;[filecommand]=readfile;[filename]=stockfile;[fileposition]=0;[fileblocksize]=c;[fileblockpointer]=b;arch.fileread;[string.psource]=b;[string.ptarget]=a;string.t2s;b<-heap.alloc:7fh;c=32;d=b;"f"[d_32]=c;+c;+d;?c<7fh>f;"w"d=[a];+a;?d=0>y;?d<32>w;?d>7eh>w;e=b;e+d;[e]=33;^w;"y"b+32;"v"conout.say:b;bye;

Без комментариев, просто читает исходный код, скомпилированный в двоичный файл. Сохранить как a.txtили он не скомпилируется!

gronostaj
источник
4
Нет, JSFuck один длиннее.
Джо З.
4

Brainfuck, 133 123 114 110 байт

++++++++++++++++[->++++++>++>+++>++++>++<<<<<]>-->>->->+[---<.+.+<.+<.+<.+.+.+>>>>]++[-<.+.+.+<.+>>]<+.<+.<++.

Немного больше возиться с прежним решением (прежде чем я понял, что ниже было меньше - хотя это было до того, как я провел серьезную оптимизацию). Это работает путем сохранения 4 наборов чисел ascii и распечатывания их с некоторым хитрым циклом, а затем выдачи пропущенных символов (то есть тех, которые находятся между недопустимыми числами ascii).

Оригинальная подача

>>+++++++++++[<+<+>>->++>+++<<]<++>>++++++>>+++++[-<<<++++++>>>]<<<+<<[->>+.<<]>>++.++<[->+.<]>++.+>[-<+.>]<++.+>>[-<<+.>>]

Это делает следующее:

  • Создайте 4 регистра, содержащие 11. 13, 28, 33
  • Создайте 5-е со значением 31, чтобы начать печать
  • Print ASCII 32-42 (11)
  • Print ascii 44
  • Print ASCII 47-59 (13)
  • Print ascii 61
  • Распечатать ascii 63-90 (28)
  • Print ascii 92
  • Печать ASCII 94-126 (33)
FIQ
источник
4

Хаскелл (70)

import Data.List
main=putStrLn$[' '..'~']\\" \\\"$'.=DLS[]aimnoprstu~"

Скучное решение для вычитания повторяющихся символов в программе в строке, вычитание из универсального набора. Далеко не победитель Codegolf, хотя это удивительно разборчиво для его длины.

(Теперь с вычитанием списка вместо filter/ notWith.)

Светлячок
источник
Вы можете изменить import Data.Listнаimport List
гордый haskeller
@ Горжусь, правда? Кажется, он не работает, когда я пытаюсь это сделать runhaskell: «Не удалось найти модуль« Список »». Я заметил, что неправильно подсчитал количество символов, поэтому исправил это.
FireFly
1
ну, это странно, попробуйте это с GHC или GHCI? Это работает для меня
гордый haskeller
@proudhaskeller Нет, не могу заставить его работать. Это с GHC 7.8.3.
FireFly
3

J - 21

(u:32+i.97)-.1!:1<":5

запишите это в файл с именем 5в текущем каталоге. Затем загрузите выполнить скрипт с0!:1<'5'

Или 25 без файловой уловки:

(-.~".)'(":u:32+i.0-~95)'
jpjacobs
источник
Содержит исходный код ', который не удаляется из вывода.
FireFly
3

Clojure (142, 106103)

(defn -main[](let[c"(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]((load-string c)c)))

отформатирован:

(defn -main []
  (let [c "(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]
    ((load-string c) c)))

Думаю, это поможет, возможно, понадобятся некоторые настройки. выход:

#{@ ` ! A B b # C $ D % E & F ' G H I * J + K k , L M . N / O 0 P Q q R S 4 T 5 U V v 7 W w 8 X x 9 Y y : Z z { < | = } > ^ ? _}

запускает на себе строку, которая является оцениваемым кодом clojure. В конце строки есть несколько комментариев, чтобы получить символы, используемые вне строки (основной метод и т. Д.)

RedDeckWins
источник
3

Python 2, 69

for x in range(38):print chr(x+59)#!"$%&'*,-./012467bdjklmqsuvwyz{|}~

Я использую самую длинную (которую я могу найти) последовательность непрерывных символов, которую я могу распечатать, и добавляю другие как комментарий после кода.

миль
источник
8
Я не собираюсь выдвигать ничего, что имеет комментарий
Джон Дворак
Мой ответ должен показать худший из возможных способов решения этой задачи. (Используйте лазейку для комментариев).
Йоханнес Кун
9
хорошо ... для этого полиглота , что нет ничего , кроме , но комментарии.
Джон Дворак
@JohannesKuhn Однако, поскольку это самый длинный код, который работает, он не выиграет конкурс. : P
Джо З.
5
@JoeZ. он выигрывает с большим отрывом, если вы поделите на количество языков, на которых он работает
Джон Дворжак