Найкоротша програма, об'єднана програма + вихід - перестановка 95 друкованих символів ASCII


12

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

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

У разі вирівнювання переможцем стає запис, у якого (95 символів) об'єднана програма + вихід найближчий до вищевказаного рядка, що вимірюється Левенштейнською дистанцією редагування (тобто кількістю односимвольних видалень, вставок або заміни, необхідні для приведення їх до порядку ASCII).


2
Так це означає, що якщо, наприклад, програма містить повторювані символи, вона автоматично дискваліфікується? Це грубо.
хлібниця


1
Ви також можете прийняти рішення про echo $0дискваліфікацію старого .
Пітер Тейлор

3
Чи дозволені символи, що знаходяться поза діапазоном символів для друку (та можливо їх дублікати)? Або програма + вихід повинна містити кожен символ, який можна надрукувати рівно один раз, і більше нічого ?
примо

1
@primo Я припускаю, що вони дозволені. Я думаю, що настав час написати рішення "shift-and-eval", яке використовує дублікати (хоча рядкові букви будуть важко дістати)
Джон Дворак

Відповіді:


12

GolfScript, 14 символів

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

Вихід :

 !"#$%&'(*+/015789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz|

Завдання (принаймні, наскільки я це розумію) полягала в тому, щоб написати програму, програма і вихід якої є перестановкою 95 друкованих символів ASCII, а не написати найкоротшу програму, яка виводить 95 друкованих символів ASCII.
Френк Шмітт

Вибачте, моя помилка. У заголовку він пише "програма + вихід", тоді як пізніше у питанні він читає об'єднану програму + вихід.
Френк Шмітт

),- Ого. Мені це подобається.
Джон Дворак

1
@JanDvorak codegolf.SE: єдине місце, де люди захоплюються близьким батьком і комою. : P
Дверна ручка

@Doorknob у golfscript це означає "правильний uncons (rparen) та скласти масив такого розміру (кома)". Насправді у вас залишилася рядок, скорочена на один символ (праворуч фігурно) та масив, що закінчується трохи нижче позиції ASCII цього символу (у |). Обріжте недруковані символи, період і xor (тут симетрична різниця множин) з вихідним кодом (віднімання прийнято), сказавши правильно, фігурно, і ви закінчили. І так, масив string 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. ~-$=це побітова інверсія від'ємника комплементу двох, що трапляється 59. 73*2це 146. .і ,робіть те, що ви від них очікували. 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

@res Так, важко керувати всіма цими літерами: P
Doorknob

Тепер \ включається три рази.
Говард

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 символи відкидаються).


1
Я вважаю, що ваша програма - 61 символ.
res

Дякую. Мій текстовий редактор повідомив про 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.