Запишіть цілі отвори, використовуючи непрокопані


55

У символи ASCII з десятковим кодом 33 до 126:

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

Зауважте, що в більшості шрифтів 25 з цих символів мають "дірки" в них: ( рід, більший за 0 , можна сказати)

#$%&04689@ABDOPQRabdegopq

Іншими 68 "нехолодженими" символами є:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

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

Оскільки пробіл, вкладка та нові рядки (подача рядків та / або повернення перевезення) є порожнім простором, вони можуть з’являтися у вашій програмі чи її вихідних даних. Вони все ще підраховують кількість символів. Інші символи ASCII можуть не використовуватися (і, звичайно, не символи, що не належать до ASCII).

Примітки

  • Вам не доведеться використовувати всі неохоплені символи, а також лише один з кожного.
  • Вихід може не містити нехолоджених символів.
  • Можливо використовувати мову білого простору .
  • Вихід повинен перейти до stdout або може перейти до файлу. Вхід не повинен бути.

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


9
+1 для заголовка. Ми любимо речі , як це .
Яків

1
Де рішення Perl ?!
П’єр Арло

4
Ну, ніякого рішення в Haskell чи C; якщо це програма, яку ви хочете, то вам потрібно зробити написання main.
Римоїд

2
Бонус можна зробити за допомогою пробілів.
Джошуа

1
Як ніхто ніколи не помічав, що я забув ~??
Захоплення Кальвіна

Відповіді:


18

Піта , 43 35 символів

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

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

Друкує символи в порядку, за винятком того, що на початку 9, розділений новий рядок.

Рядок містить усі символи на 7 більше, ніж потрібні, за винятком того, що 9 стане @, тож це спеціальний кейс. Алгоритм завдяки @Howard.

Пояснення:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.

24

GolfScript, 37 36 символів

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Спробуйте код тут .

Рядок містить заборонені символи, закреслені символами 25. На щастя, всі символи відображаються на дійсні.


22

Мозковий 119

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

е, --на початку ... Ви повертаєтесь до 254 на початковому реєстрі там?
WallyWest

1
Yup :) Зробити цикл на 36 коротшим (щоб дістатися до 35)
Teun Pronk

Ну, це звичайно б'є моїх 275 ... молодець ...
WallyWest

@ Хобі Кальвіна Я досить впевнений, що вхід заборонений, вибачте. ОП, можливо, хоче уточнити.
isaacg

@isaacg Я знаю, ось чому мій основний код не приймає вклад, і останній приклад не є серйозним :)
Teun Pronk

20

Бонус - dc, 179 символів

Ну добре, ще один виклик з обмеженими символами, коли Pце дозволено.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Оскільки dcце, очевидно, досить незрозуміло, щоб вимагати пояснень (мені це дивно з огляду на дивні речі тут!), Ось огляд:

Це перш за все калькулятор RPN з арифметикою довільної точності. Але для цього завдання я використовую Pкоманду, яка інтерпретує число як серію символів у базі 256 та друкує їх. Приклади: 65 Pвідбитки A(ASCII код 65). 16706 Pвідбитки AB(16706 = 65 * 256 + 66).

Крім цього, єдиною іншою цікавою особливістю є те, що він розпізнає всі шістнадцяткові цифри, 0-9A-Fнавіть коли вони не містяться в шістнадцятковій кількості. Десяткове введення є за замовчуванням, тому маркер введення 999означає 9 hundreds + 9 tens + 9і ABCозначає 10 hundreds + 11 tens + 12зробити його рівнозначним 1122.

Можливість використання цифр ABDу десятковій частині частково компенсує неможливість використання 12357, а вибір упорядкування та групування робить все інше. (Якщо мені потрібно кілька номерів x, y, zі вони не представимо з дозволеними цифрами, то я намагаюся представляючи x*256*256+y*256+zзамість цього.)

Програму, ймовірно, можна трохи скоротити, використовуючи більші групи. Я не пройшов 3 байти на число.


1
@DigitalTrauma навпаки був Бонусом наприкінці заяви проблеми.

Га! Я пропустив це! Відмінно! +1
Digital Trauma

Чи можете ви пояснити це? І чи є місце, де ми можемо це запустити?
Захоплення Кальвіна

4
Місце, де ви можете його запустити? DC не є якоюсь дурною мовою, призначеною для створення важко читаються програм, це серйозний калькулятор. Запустіть його на будь-якій машині Unix (або cygwin). en.wikipedia.org/wiki/Dc_(computer_program)

@ Calvin'sHobbies Якщо у вас є доступ до майже будь-якої машини Linux або Unix (включаючи OSX), просто збережіть їх як текстовий файл, наприклад, bonus.dc, а потім запустіть dc bonus.dc. DC є однією з найстаріших мов, і вона є постійним кріпленням у * nix буквально десятиліттями. Це невідомо, проте, мабуть, через його прихований і не дуже читабельний синтаксис RPN. Хоча чудово підходить для деяких проблем із кодовим гольфом ;-)
Digital Trauma

12

Bash + coreutils, 56 байт

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

Як би пощастило, додавання 7 до значення ascii заскрежених символів дає всі неохолоджені символи (за винятком "9"). Тому ми просто робимо це перетворення в зворотному порядку, потім аналогічне перетворення (віднімаємо 12 від "Е"), щоб отримати "9".

Вихід:

#$%&0468@ABDOPQRabdegopq
9

7
Мені подобається, як перший рядок віднімає 7 з набору символів, і він містить -7помітне відображення між знаками пунктуації, і ці 2 факти не мають нічого спільного один з одним.

@ WumpusQ.Wumbley Я навіть цього не помічав :)
Digital Trauma

6

Perl - 49 байт

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

Це в значній мірі Perl-версія рішення Говарда. XORing рядок з 25. Вихід - файл з назвою #$%&04689@ABDOPQRabdegopq. У мене з'явилася ідея використовувати symlinkі ім'я файлу як вихідний формат, оскільки все інше заборонено.

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

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

Цей виводить багато файлів, ім'я кожного - один із символів. Я не міг зрозуміти, як додати рядки без використання забороненого символу.

for, while, map, say, print, eval, s///e, І будь-яке ім'я змінної не може бути використана (змінні починають з @або $в Perl) , який зробив це важко.

Сподіваємось, імена файлів у порядку як вихідний формат, тому що я майже впевнений, що кожен інший спосіб виведення інформації використовує один із заборонених символів.


Я збираюся дати вам +1 за творчість! Дуже розумно використовувати код!
WallyWest

Я знаю, що це досить старе, але можна надрукувати вихід на екран і зберегти кілька байт за допомогою -pпрапора і *_=\(... ): Спробуйте в Інтернеті!
Дом Гастінгс

@DomHastings класно! Я думаю, що -pпрапор буде заборонений, хоча, оскільки в pньому є дірка.
hmatt1

5

MATLAB, 36 байт

ТАК ЗАКРИТИ .... Тільки на 1 байт більше, ніж поточний переможець (isaacg)! Який при подальшій інспекції вже зробив те, що я і мав на меті зробити. Ну, не шкода при винаході колеса ...

Я знаю, що це старе завдання, але я зрозумів, що лише після того, як зацікавився ним.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Якби тільки я міг змусити MATLAB зрозуміти, що я хочу рядок без окремих ''... пропозицій, хтось?


4

Brainfuck 303 275

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

Brainfuck, остання непрохоплена езотерична мова (крім Whitespace);)


1
Видаліть старі фрагменти, не проривайте.
isaacg

2
Я бачу, що ви використовували цитатні речі (не знаєте справжнього імені) для своїх фрагментів коду. Можливо, буде простіше вибрати свій код і натиснути Ctrl+ K:)
Teun Pronk

@isaacg Готово. TeunPronk, готово!
WallyWest

6
Або просто натисніть пробіл 4 рази, якщо це лише лінія або два. @TeunPronk Це? `Це бетік. (Також називається серйозним акцентом, хоча " цитувати речі " є новим для мене: P)
Doorknob

1
@Doorknob Тоді ми сьогодні щось навчились, хоча те, що ви навчилися, так чи інакше: P
Teun Pronk

4

JS - 196 - спробуйте

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')

1
Боже, це божевільно. Здається, Js - одна з найбільш жорстоких мов =)
недолік

Зловживаючий так, але це просто пляма порівняно з моїм входом ... Вибачте @bebe, але я цього разу перейшов-JS'd ви ...
WallyWest

1
@WallyWest я оголошу війну.
bebe

1
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- вбудований l, укорочений m, заявили iна першому використанні, створений кілька додаткового ВАРА для повторних зразків (ви могли б поліпшити це шляхом налаштування порядку символів outputed, але це за межами мого терпіння: P).
Alconja

2

GolfScript, 89 символів

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Просто будує масив усіх символів ASCII і віднімає з них не "отвернутые" символи.

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string

2

Befunge 98 - 69 байт

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

Робить це в 3 частинах. Одне, де знаки, що не охолоджуються, відрізняються від символів, що відточуються, на 5. Потім ті, що відрізняються на 1, і, нарешті, список неохолоджених символів, які відрізняються на 3 від відвернутих. Інструкція завершити програму в Befunge - це "@" (значення знаку 64), тож наприкінці я завантажую "?" (Значення знаку 63) додати 1, а потім поставити його в код з інструкцією 's'.

Я міг би, можливо, більше пограти, об'єднавши три

>:5j2 ,(differ value)_

розділ, але, мабуть, не на багато.


2

JavaScript 240 228

Початкове подання:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

Зараз це чудовий початок, ось як воно розпадається ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

І тоді я подумав ... "Має бути простіший спосіб ..." і є ...

Переглянуте подання: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

Бачачи , що я можу використовувати eval (по шматочках разом, натхнення з @bebe, що набагато швидше , ніж при використанні constructorбезлічі А constructorв А number...) я свердлив його до 228 ... Я знаю , що це не може виграти цей конкретний Golf Challenge , але це лише мій спосіб показати, наскільки ви можете зловживати JavaScript, і все одно отримати бажаний результат ...


2

Головна - Безсоння , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Він виводить:

abdegopq04689@ABDOPQR#$%&

Бонус - Безсоння, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Він виводить:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

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

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

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

Перекладач безсоння .


1

Befunge 98 - 46 байт

Підвищена версія випуску Pyth: isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <

1

Japt , 33 байти

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

Спробуйте в Інтернеті!

Такий самий алгоритм, що і у поданні Pyth із Isaacg, у Japt просто буває коротшим.

Як це працює

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

7+2           Obviously the number 9
    "..."c-7  Apply -7 on each char's charcode of this string
   +          String concatenation

Так, це JS, яка є однією з найбільш жорстоких мов , просто коротше (і вам це не потрібно alertчи console.logтут).

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