Кратчайшая программа, объединенная программа + вывод которой представляет собой перестановку из 95 печатных символов ASCII

12

Напишите программу, которая должна быть максимально короткой (измеряемой по счетчику байтов), не требует ввода, не содержит комментариев и выводит строку / последовательность символов, так что составная программа + вывод имеет длину ровно 95 символов и содержит каждый печатный символ ASCII ровно один раз , то есть программа + вывод представляет собой перестановку из 95 символов с кодами ASCII 32-126:

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

В случае ничьей, победителем становится запись, чья (95-символьная) каскадная программа + выходные данные находится ближе всего к вышеуказанной строке, что измеряется расстоянием редактирования Левенштейна (т. Е. Числом удалений, вставок или односимвольных удалений). замены, необходимые для приведения его в порядок ASCII).

Рез
источник
2
Значит ли это, что если, например, программа содержит повторяющиеся символы, она автоматически дисквалифицируется? Это грубо.
хлебница
5
Связанный: codegolf.stackexchange.com/questions/12368/…
Джон Дворжак
1
Вы также можете принять решение о том echo $0, дисквалифицирован ли старый .
Питер Тейлор
3
Разрешены ли символы за пределами печатаемого диапазона символов ascii (и, возможно, их дубликаты)? Или программа + вывод должна содержать каждый печатный символ ровно один раз и ничего больше ?
Примо
1
@ primo Я предполагаю, что они разрешены. Я думаю, что пришло время написать решение «сдвиг и оценка», которое использует дубликаты (хотя получить строковые литералы будет сложно)
Джон Дворжак

Ответы:

12

GolfScript, 14 символов

{`),32>46-^}.~

Выход :

 !"#$%&'(*+/015789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz|
Говард
источник
Задача (по крайней мере, насколько я понимаю) состояла в том, чтобы написать программу, программа и вывод которой представляет собой перестановку 95 печатных символов ASCII, а не написать самую короткую из возможных программ, которая выводит 95 печатных символов ASCII.
Фрэнк Шмитт
Извините моя ошибка. В заголовке он читается как «программа + вывод», тогда как позже в вопросе читается каскадная программа + вывод.
Фрэнк Шмитт
),- Вау. Я люблю это.
Джон Дворжак
1
@JanDvorak codegolf.SE: единственное место, где люди в восторге от близких парня и запятой. : P
Дверная ручка
@Doorknob в golfscript означает «правильные значения (rparen) и создать массив такого размера (запятая)». По сути, у вас остается строка, укороченная на один символ (правый вьющийся), и массив, заканчивающийся чуть ниже позиции ASCII этого символа (at |). Обрежьте непечатаемые символы, точку и xor (симметричное различие здесь) с исходным кодом (вычитание берется) без излишних слов, и все готово. И да, строка xor массив является строкой.
Джон Дворжак
6

Perl, 89 символов

Это лучшее, что я смог сделать до сих пор:

q< !"#%&'()+/8:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghjklmosuvwxz|>;
print~-$=.73*2,y[]{}

Для тех, кто не знаком с Perl minutae, два аргумента к printзаявлению могут быть представлены как ~(-($=)) . (73 * 2)и tr///.

Программа выводит 6 символов:

591460

К сожалению , каждая итерация конструкт , что я могу думать в Perl ( for, while, until, map, grep) акций , по крайней мере один символ с print. Если бы в выводе было разрешено переводить строки, я мог бы использовать Perl 5.010, чтобы получить решение из 87 символов:

q{ !"#%&'*,-./0:;>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^`bcdfgjkmnoprtuvxz|~}while($_+=say)<9
Хлебница
источник
Посмотрим, смогу ли я напечатать большее число :-)
Джон Дворжак
э-э ... не могли бы вы перевести для меня вторую строку?
Джон Дворжак
1
@JanDvorak $=- количество горизонтальных линий в текущем устройстве вывода. По умолчанию 60. ~-$=это побитовая инверсия отрицательного дополнения к двум, равного 60 59. 73*2146. .и ,делать то, что вы ожидаете от них. y[]{}это еще один способ сказать tr///, который является оператором транслитерации. Он берет $_и ничего не делает, потому что вы не дали ему никаких символов для замены. Возвращает количество замененных символов 0. Итак, имеем ~-$= . 73*2 , y[]{}= 59 . 146 , 0= '591460`.
Дан
6

PHP 67 байт

<?=U4eB1gkFdA6J9snZD2IE8y5PhwQV^xHGmqYMfNjKpbR3vcLalCWi0_TtrOSXouz;

Выход:

-|"/@>& *+}:[!],'~(){.\`7#%$

Кажется, что должно быть 65-байтовое решение, выдающее 30 символов вместо только 28, но я не мог заставить его выстроиться в линию. OSXouzВместо этого 6 неиспользованных символов были прикреплены к одному из строковых литералов.

Изменить: После дальнейшего размышления, невозможно создать более 28 символов таким образом. UPPER ^ lowerвсегда будет содержать символы от 32 до 63, поэтому все 10 цифр требуются для @[\]_`{|}~. Четыре из оставшихся 22 используются в самом сценарии, оставляя только 18, которые можно получить только с помощью букв. Хотя тай-брейк может быть значительно улучшен.

Примо
источник
Ах, конечно, голые слова. Как я мог забыть?
Джон Дворжак
3

Рубин, 91 символ

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcefghijklmnqvwxyz|~};puts(?@‌​.ord*98+1)

Выходы 6273.

%{...} трюк украден у Яна Дворака

Дверная ручка
источник
Без комментариев. Как четко сказано.
Йоханнес Кун
@JohannesKuhn Ах, не заметил этого. изм.
Ручка двери
%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts(?@.ord*98+1)это то, что, я думаю, вы хотите (для 91 символа) с точкой с запятой, которую нужно переместить, чтобы использовать в качестве разделителя для печати (вместо новой строки), и с буквами 'ord', удаленными из фигурных скобок.
Рез
@res Да, трудно управлять всеми этими буквами: P
дверная ручка
Теперь \ включено три раза.
Говард
3

Perl, 61 символов

print$:x8^CJIBQTOWAEULHVGFNMKRPZY,q<#"/;*g~?|={.>&+u15m97ws26

Выход:

c@db[yo]le_ah\jfD`kX}zS-! %)('v304

$:по умолчанию " \n-". x8повторяет это восемь раз; 24-символьный результат затем поразрядно закрашивается 23-символьным символом (последний -остается без изменений). Вторая часть представляет собой 12-символьную q-строку поразрядно и 10-символьную линию (последние 2 символа отбрасываются).

Grimmy
источник
1
Я считаю, что длина вашей программы составляет 61 символов.
Рез
Благодарю. Мой текстовый редактор сообщил о 62 символах из-за EOF.
Grimmy
1

Рубин, 95 знаков, 6 правок

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

Ага. Вот и все. Просто свободно плавающий строковый литерал, который никогда не печатается. Ruby поддерживает строковые литералы (заимствованные из Perl, я думаю) в форме процента-типа-разделителя - разделителем является любой не алфавитно-цифровой символ, а если открывающим разделителем является открывающая скобка (любая из [({<), закрывающим разделителем является соответствующий закрывающая скобка (допускаются вложенные скобки).

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

Джон дворак
источник
0

Tcl 96, редактировать расстояние 12

if 0    {!"#$%&'()*+,-./123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeghjklmnopqrstuvwxyz|~}
Йоханнес Кун
источник
Боюсь, в одном из пробелов должна быть вкладка
Джон Дворжак
печатается табуляция или пробел?
Йоханнес Кун
вкладка не печатается (ASCII 9), но место для печати (ASCII 32).
Джон Дворжак
1
[Просто увидел, что ОП только разъяснил это после того, как вы ответили :)]
flornquake
1
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~} Кажется, работает с использованием 95 символов? (Спасибо за вашу запись. Извините за хамелеона - к сожалению, я отредактировал на скорую руку, и должен был поступить по-другому.)
res