Роздрукуйте кожен символ, який не має вашої програми


219

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

Виграє найкоротший код для будь-якої мови.


19
Вони є, але вони не знаходяться в діапазоні 0x20від 0x7e, які визначаються як «друковані символи ASCII». Технічно вкладки та нові рядки - це фактично контрольні символи.
Джо Z.

3
Чи дозволяється нам друкувати нові рядки (або будь-які інші недруковані символи ASCII)?
flornquake

1
Вкладки та нові рядки не відображаються таким чином, що вони займають місце друку. Вони переміщують положення. Дивіться функцію ANSI C "Isprint".
Каз

1
Як це питання ожило? Він знову почав отримувати гроші.
Джо З.

3
@Timwi: Якщо ви хочете це зробити, вам також доведеться вивести всі символи в просторі символів CJK (крім тих, які відображаються у вашому коді). Управління надто складним, тому я обмежив його лише ASCII.
Джо З.

Відповіді:



274

Поліглот, 95

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

Нічого не робить.


19
Ні, але це багатокутник. Я не хочу цього знищувати.
Йоганнес Кун

95
Я вніс це в компілятор GNU Fortran, і це стало похиткою.
marinus

12
В С #undef X;whatever junk you wantпрацює.
ugoren

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
Добре, але, на жаль, я можу помітити місце :у виході.
Говард


78
Я ціную це, @TheGuywithTheHat, але я відповів на це близько року тому, на відміну від вчорашнього.
Ри-

9
@TheGuywithTheHat Це була одна з відповідей, коли лазівка ​​була смішною, новою та вела до вашого пов’язаного мета-повідомлення. Тепер це вже не так.
Йоганнес Кун

48

JavaScript - 88

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

друкує "bcdfghijkmnpquvxyz"


13
Нічого мені не подобається ідея toLowerCase, це геніально!
П'єр Арло

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

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 за виправлення вищезазначених (потрібний додатковий дублікат для інструкції з гілки) та менші числа для натискання на стек.


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-символьне рішення через десять хвилин після повідомлення про це. Гаразд, це було не зовсім десять хвилин, але це працювало в принципі.

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


21

Гольфскрипт, 26 24 символи

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

Бере сценарій генерації діапазону, дублює його, виконує його, віднімає його від результату, потім піддає коду віднімання результату та іншим символом цитати.


2
Чорт, це розумно.
marinus

1
Видаліть ''+, уникніть програми перед відніманням, покладіть в noop .;(не знайшов кращого способу прикрити крапку), використовуйте кодовий блок замість рядка -> {126,33>`-.;}.~що становить 16 знаків
Говард

І використовуючи в будь-якому порядку, скільки завгодно разів ви також можете видалити крапку з комою.
Говард

@Howard Боюся, я не розумію вашої ідеї. Ви можете опублікувати його як окрему відповідь.
Джон Дворак

@PeterTaylor Я думав, що надрукував пробіл?
Джон Дворак

20

Риба - 80

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

При рибних помилках він видає "щось пахне рибним ...". Оскільки z - це погана інструкція, вона помиляється відразу


17

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

Java - 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можна трактувати як int, я використовую це на свою користь тут для збільшення всіх можливих значень c. Я опускаю умову завершення в циклі (той, який буде проходити між двома крапками з комою), щоб заощадити на символах, оскільки не було вказано, що програма повинна припинятися. :)
  2. "publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"": На жаль, не дуже елегантний підхід, але він робить роботу. Вручну перелічіть кожен символ, що присутній у вихідному коді, як Stringбуквальний, а потім перевірте, чи char cвідбувається струм у ньому indexOf(). Якщо indexOf()дзвінок повернеться -1, його не існує, і тому ми повинні його роздрукувати. В іншому він просто використовує потрійний оператор, щоб заощадити на символах та просторі.

ви можете трохи пояснити?
joey rohan

1
@joeyrohan Звичайно, щойно додав пояснення під ним. :)
asteri

круто;) приємні речі :)
joey rohan

2
Ви можете помістити ЦІЛЬКУ таблицю для друку 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-х символів, а мінітеху за збереження 5 символів!


Чи не можете ви поставити if після $> << x для збереження одного з кінцевих рядків?
Джош

@Josh Так. Я зараз це зроблю.
Дверна ручка

Ви можете взяти його до 58:(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
Ри-

1
Ах, і з кращим вибором назви змінної, 57:(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
Ри-

$><<((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 (Це роздум?)
Тому я вирішу проігнорувати всі правила !!!

APL (Діалог), 3 10

⎕AV

Друкує атомний вектор (який включає всі доступні символи ASCII)


Виявляється, я зовсім забув про частину "без" ...
Але це легко виправити

⎕AV~'AV'''

~'AV'''означає виключити ( ~) символи A, V та одинарну цитату (уникнути як подвоєні одиничні лапки)

Щодо друку без ASCII, я також ігнорую всі правила.


"роздрукувати [s] точно символів у просторі 0x20для друку ASCII ( до 0x7e), які не відображаються у вихідному коді вашої програми". Я вважаю, що вихід може не містити символів поза простором ASCII для друку ("саме" є ключовим словом) , і ваша програма містить "A" і "V", тому вони не повинні друкуватися.
FireFly

1
Ви хоч хочете додати ~до набору виключених символів. ;-) До речі, аналогічне рішення буде Ja.-.'a.-'''
FireFly

2
Ви можете проігнорувати всі правила, але це позбавить вас від прийнятої відповіді.
Джо Z.

11

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

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

Демонстрація в Інтернеті з додатковою лінією, яка перевіряє правильність та видає кількість помилок.

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


1
приємне зловживання правилами :-) golfscript.apphb.com/?c=ImAnficoLCszMj5cXC0uIi5%2B
Джон Дворак

2
На щастя, ascii закінчується }~- ще краще для кодових блоків, дивіться мою нову відповідь ;-)
Говард

11

Brainfuck, 173

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

Досить довго, я можу спробувати знову пізніше.


6
написати програму, яка нічого не робить і додати решту od ascii до джерела, в гіршому випадку відчувається 96 символів.
Ясен

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: whoops typo
marinus

Палки! Я сподівався, що зможу потрапити досить низько в Рубі, щоб побити тебе, і тоді ти скинеш його до 40.: P
Doorknob

Новий виглядає набагато химерніше.
Джон Дворак

1
@Doorknob: У мене в APL є лише 24 символи, але в ньому є не ASCII символи.
marinus

Так, я зробив справу ASCII, щоб уникнути таких мов, як APL.
Джо Z.

7

Пітон 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{|}~#'?
jocap

Я знав, що буде подання, в якому просто використовуються всі символи.
MilkyWay90

Тут не використовуються символи!;>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
tristin

2
@tristin: Так, javas є трохи багатослівним, коли мова заходить про charcode до рядка. І хіба це не кожний символ, який у вашої програми не має. Текст, про який ви повідомляєте, є і у вашій програмі :)
C5H8NNaO4

1
Ха-ха, ой. Ну добре.
тристін

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);}}

немінімізований:

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, тому що котлован вимагає їх.

|може використовуватися, якщо у вас є стан або стан, але я не міг знайти спосіб скористатись тим, що призводить до коротшої програми, ніж просто використання |в якості побітового оператора. The|0Змушує мене відчувати себе трохи брудний, тому що це єдина частина , що це NOP просто отримати символ там.

~0врожайність -1, що зручно, тому що саме це нам потрібно перевірити indexOf. Поєднуючи це з використанням !=умовного циклу, виключає <символ взагалі, а значить, не потрібно входити всередину умовного рядка.


5

ш (47)

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

Використовує самореференційний підхід. Припускає /dev/urandom, що з часом вийде кожен октет хоча б один раз. Не припиняється.

Якщо припустити, що manце встановлено, ми могли б замість цього скористатися ascii(7)manpage (і, таким чином, мати програму, що завершує роботу) ( 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" як оператор діапазону, який порушує вихід.
Toby Speight

BTW, якщо asciiпрограма встановлена, ви можете використовувати її замість man ascii.
Toby Speight

5

BitShift , 1038 байт

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

101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010

Друкує

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

Спробуйте тут


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або не буде компілюватися!


4
Ні, у JSFuck один довший.
Джо З.

4

Brainfuck, 133 123 114 110 байт

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

Трохи більше поводжусь із колишнім рішенням (до того, як я зрозумів, що нижче було менше - хоча це було до того, як я зробив важку оптимізацію). Це працює, зберігаючи 4 набори номерів ascii та роздруковуючи їх за допомогою певного циклічного циклу, а потім надає пропущені символи (тобто ті, які знаходяться між недійсними числами ascii).

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

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

Він робить наступне:

  • Створіть 4 регістри, що містять 11. 13, 28, 33
  • Створіть п'яту зі значенням 31, щоб розпочати друк
  • Друк ascii 32-42 (11)
  • Друк ascii 44
  • Друк ascii 47-59 (13)
  • Друк ascii 61
  • Друк ascii 63-90 (28)
  • Друк ascii 92
  • Друк ascii 94-126 (33)

4

Хаскелл (70)

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

Нудні дублікати символів у програмі в рядку, віднімання з універсального набору рішення. Далеко не переможець кодогольфа, хоча він напрочуд розбірливий за своєю довжиною.

(Тепер із відніманням списку замість filter/ notWith.)


ви можете змінитись import Data.Listнаimport List
гордий haskeller

@ @ ponoshaskeller так, справді? Схоже, це не спрацює, коли я спробую це runhaskell: "Не вдалося знайти модуль" Список "". Я помітив, що я прорахував кількість символів, тому виправив це.
FireFly

1
ну, це дивно, спробуйте з ghc чи ghci? Це працює для мене
гордий haskeller

@proudhaskeller nope, не може змусити його працювати. Це з 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)'

Вихідний код містить ', яке не видалено з виводу.
FireFly

3

Clojure (142, 106, 103)

(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. String має кілька коментарів у кінці, щоб отримати символи, що використовуються поза рядка (основний метод тощо)


3

Пітон 2, 69

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

Я використовую найдовшу (що мені вдається знайти) послідовність безперервних символів, які я можу роздрукувати та додати інші як коментар після коду.


8
Я не збираюся брати участь у коментарях
Джон Дворак

Моя відповідь повинна показати найгірший можливий спосіб вирішити це завдання. (Використовуйте лазівку для коментарів).
Йоганнес Кун

9
добре ... для цього поліглота , що немає нічого , крім , але коментарі.
Джон Дворак

@JohannesKuhn Однак, оскільки це найдовший код, який працює, він не виграє конкурс. : P
Joe Z.

5
@JoeZ. він виграє з великим запасом, якщо розділити на кількість мов, на яких він працює
Джон Дворак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.