Роздрукуйте всі буквено-цифрові символи ASCII, не використовуючи їх


51

Виклик

Роздрукуйте наступні символи:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

Привід полягає в тому, що ви не можете використовувати жоден із них у своєму коді.

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

Правила

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

Роз'яснення

  • Якщо у вашій мові використовується інша діаграма, ви не можете використовувати в цьому коді точкові коди, які відповідають буквено-цифровим символам.
  • Повернення рядка з функції вважається допустимою формою виводу.
  • Ви можете повернути масив char.

8
Це дещо неоднозначно. Якщо ви маєте на увазі вихід цих необроблених байтів без цих байтів у своєму коді, то вам слід вказати, що ви не можете використовувати кодові точки цих символів, навіть якщо вони відображають щось інше на сторінці коду вашої мови.
FlipTack

11
Отже, це означає, що я не можу використовувати жодні літери чи цифри у своєму вихідному коді. Добре, що це значною мірою використовує будь-які неезотеричні мови.
Р. Кап

2
Що робити, якщо мова - це лише необроблені байти (як опкоди), які не мають представлення? Чи можу я використовувати будь-які символи?
FlipTack

1
@briantist це добре, якщо вони внутрішньо представлені вставками, але самі символи повинні бути надруковані.
dkudriavtsev

3
@ R.Kap Javascript може працювати, за умови, що ви не вважаєте це eso
руйнівний лимон

Відповіді:


19

V , 8 7 байт

1 байт збережено завдяки @DJMcMayhem, помістивши все це в один оператор регулярного вираження

¬/{Ó×ü_

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

Виходи:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Примітка: ×це НЕ x або X, то0xd7

Hexdump:

00000000: ac2f 7bd3 d7fc 5f                        ./{..._

Пояснення

¬/{            " inserts every character in the range / to {

Тепер вихід виглядає так:

/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{

Ми повинні видалити всі не алфавітно-цифрові символи та _(оскільки вони не включені в \W), тому давайте зробимо це за допомогою регулярного вираження

Ó×ü_           " removes every character that is non-alphanumeric or an underscore _ 
               " vim equivalent of :s/\W\|_//g

Дивовижний! +1 за побиття мене. :) Крім того, ви можете спростити його до одного регулярного виразу, якщо це зробили Ó×ü_(що еквівалентно :s/\W\|_//g)
DJMcMayhem

50

Октава , 52 46 40 байт

['['-('"':'+'),'{'-(_='!':':'),_+'@','']

Це оцінюється до

9876543210ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz

Пояснення

Тут ми використовуємо той факт, що символи неявно перетворюються на цілі числа, коли застосовуються арифметичні операції типу +-або діапазон :. При об'єднанні з порожнім рядком ( [...,'']) цифри знову перетворюються на символи.

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


7
+1за те, що це перша неезотерична мова в проблемі, дуже придатній до езоланг.
DJMcMayhem

4
Велике +1, не для використання Octave (це досить прямо), але для гольфу це дуже добре, і використання _в якості змінної! Я не мав уявлення, що це можливо ... Приємно!
Стюі Гріффін

1
При об'єднанні з порожнім рядком ([..., '']) цифри знову перетворюються на символи .... дуже приємно
rahnema1

29

мозковий ебать , 77 76 75 72 байт

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

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

Як це працює

Перекладач починається зі стрічки з 0 комірок.

++++++++

Це встановлює першу комірку на 8 , залишаючи стрічку в наступному стані.

   8
   ^
[>+>++++++>++++>-<<<<-]

Це збільшує другу клітинку один раз, третю клітинку 6 разів, четверту клітинку 4 рази, зменшує п'яту клітинку один раз, потім повертається до початку стрічки і зменшує першу клітинку. Після 8 ітерацій стрічка виглядає так.

  0   8  48  32  -8
  ^
>++

Переходимо до другої комірки і збільшуємо її двічі, готуючись до друку цифр.

  0  10  48  32  -8
      ^
[>.+<-]

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

  0   0  58  32  -8
      ^
>>

Час підготувати стрічку для листів! Почнемо, просунувши дві клітини.

  0   0  58  32  -8   0   0
              ^
[>+>++>+++<<<-]

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

  0   0  58   0  24  64  96
              ^
>++

Як останній крок перед друком листів, ми переходимо до п’ятої клітинки і збільшуємо її двічі.

  0   0  58   0  26  64  96
                  ^
[>+.>+.<<-]

Нарешті, ми переходимо до шостої комірки для збільшення та друку, робимо те ж саме для сьомої комірки, потім повертаємося до п’ятої клітинки та зменшуємо її. Після 26 ітерацій ми надрукували Aa...Zz.


Гарний гольф! Я
посилаюсь

25

Рубін, 42 байти

->{[*?/...?:,*?@...?[,*?`...?{]-[?/,?@,?`]}

Функція, яка повертає масив char. Програма, яка видає лише символи, становить 49 байт:

$><<([*?/...?:,*?@...?[,*?`...?{]-[?/,?@,?`])*''

Це просто використовує символи ascii з будь-якої сторони відповідних діапазонів для визначення діапазону. Наприклад, ?/...?:означає символи між прямою косою рискою та двокрапкою, виключаючи кінець. Щоб позбутися початку, ми віднімаємо масив, що містить три початкові символи.


Хороша робота. Я бачив це саме тоді, коли я прийшов опублікувати свою 60-байтну версію, використовуючи ту саму ідею.
AShelly

3
Ви можете зберегти один байт з дещо різними діапазонами: $> << ([ (? / ...? {)] - [* (?: ..? @), * (? [..? `),? / ]) ''
AShelly

Це справді досить. Ну, некрасиво. Ти знаєш, що я маю на увазі. Чудово зроблено.
Уейн Конрад

22

6502 мова машини, 74 70 68 байт

Шестнадцятковий дамп (6502 програми, як правило, не переміщуються; код тут зберігається, починаючи з місцезнаходження 0603 $):

0600:          a9 24 0a 8d 20 06 8d 21 06 8d 23 06 8d 
0610: 25 06 09 20 8d 1a 06 8d 1c 06 ea aa ea a8 a9 00 
0620: ea ea 98 ea 8a ea a2 ff a9 7b a0 60 20 3a 06 a9 
0630: 5b a0 40 20 3a 06 a9 3a a0 2f 85 80 c8 e8 98 95 
0640: 00 c8 c4 80 d0 f7 60

Ви бачите, що для цього не використовується жоден із заборонених байтів: від 41 до 5 доларів, від 61 до 7а, або від 30 до 39 доларів.

Це функція без аргументів, яка при виклику повертає вказівник на масив символів "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" у верхній частині стека, згідно зі стандартними умовами виклику 6502.

Як пояснення, ось демонтаж:

Розбирання Hexdump адреси
-------------------------------
$ 0603 a9 24 LDA # 24 $
0605 $ 0a ASL A
0606 8d 20 06 STA $ 0620
0609 8d 21 06 STA $ 0621
$ 060c 8d 23 06 STA $ 0623
060f 8d 25 06 STA $ 0625
0612 09 20 ОРА №20
$ 0614 8d 1a 06 STA $ 061a
$ 0617 8d 1c 06 STA $ 061c
$ 061a ea NOP 
$ 061b на обклад 
$ 061c ea NOP 
$ 061d a8 ТАЙН 
$ 061e a9 00 LDA # $ 00
$ 0620 ea NOP 
$ 0621 ea NOP 
0622 доларів 98 тис. Грн 
$ 0623 ea NOP 
$ 0624 8а TXA 
$ 0625 ea NOP 
$ 0626 a2 ff LDX # $ ff
$ 0628 a9 7b LDA # $ 7b
$ 062a a0 60 LDY # 60 $
$ 062c 20 3a 06 JSR $ 063a
$ 062f a9 5b LDA # $ 5b
$ 0631 a0 40 LDY # 40 $
$ 0633 20 3a 06 JSR $ 063a
$ 0636 a9 3a LDA # $ 3a
$ 0638 a0 2f LDY # $ 2f
$ 063a 85 80 STA $ 80
$ 063c c8 INY 
$ 063d e8 INX 
$ 063е 98 тис. Дол 
$ 063f 95 00 STA $ 00, X
$ 0641 c8 INY 
$ 0642 c4 80 CPY $ 80
$ 0644 d0 f7 BNE $ 063d
$ 0646 60 RTS

Машиномовний код самовиправляється. Для маніпуляції зі стеком мені потрібно було використовувати PHA та PLA, щоб натиснути та накопичити акумулятор, але ці інструкції містять опкоди $ 48 та $ 68, які заборонені (вони ASCII-коди для літер 'H' та 'h'). Отже, для PHA я беру число $ 24, роблю арифметичний зсув вліво (ASL) і зберігаю отримані $ 48 у чотирьох місцях у коді, де це потрібно виконати. Тоді, для PLA, я використовую побіжно АБО на $ 48 у акумуляторі, щоб обчислити $ 68, і зберігаю їх у двох місцях у коді, де це потрібно.

Окрім PHA та PLA, було декілька інструкцій, які я також не міг використати, оскільки їхні коди можуть бути такими ж, як букви або цифри ASCII, але я знайшов прямі способи вирішення цих інших.

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

Ви можете спробувати це на 6502 асемблері та емуляторі Ніка Моргана . Ось скріншот; у нижній частині монітора внизу відображається вихідний рядок (у місцях від $ 00 до $ 3D) після запуску програми.


16

Haskell , 75 72 63 58 56 байт

__=[__|[_',ä]<-["/:","@[","`{"],__<-[_'..],_'<__,__<ä]

Спробуйте в Інтернеті! Подзвоніть з __. Вихід:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Завдяки xnor, який запропонував __і _'як два байтові імена змінних замість (!)або подібних, економив 9 байт. Мені особливо подобається, як _'розбиває виділення синтаксису. І ще раз дякую xnor за узагальнення діапазонів, збереження ще 4 байтів.
Змінити: Я виявив, що символи Unicode допускається в якості ідентифікаторів в Haskell, так наприклад ä, ö... також може бути використаний в якості двох ідентифікаторів байтів. Оскільки в програмі залишився один трибайтовий ідентифікатор, я замінив його ä, зберегли ще 2 байти.

Пояснення:

__і _'є дійсними іменами змінних. З мовної специфікації :

Ідентифікатор складається з літери з наступним нулем або більше літер, цифр, підкреслення та одиничних лапок. [...] Підкреслення, _трактується як малі літери, і воно може відбуватися там, де це може бути написано малою літерою. Однак _все це само по собі є зарезервованим ідентифікатором, який використовується в якості підказки в шаблонах.

Тож код еквівалентний

s = [x|[a,b]<-["/:", "@[", "`{"], x<-[a..], a<x, x<b]

У списку розуміння aстає неминуче '/'і bдо ':'( "/:"еквівалентно ['/',':'], так що відповідний шаблон успішно). Тоді діапазон [a..]будує рядок усіх символів більшим рівним '/':

"/0123456789:;<=>?@ABCDE ... \1114110\1114111"

Після цього для кожного символу xв цьому рядку перевіряється, чи є, '/'<xі в x<':'результаті виникають символи 0123456789. Тоді aі bобов'язково @ і [, отримуючи символи ABCDEFGHIJKLMNOPQRSTUVWXYZі так далі.


3
Ви можете використовувати __і _'як змінні.
xnor

@xnor Спасибі, я не знав про це Underscore is treated as a lower-case letterправило.
Laikoni

1
Ви можете зберегти деякі байти, узагальнивши діапазони: _'_=[__|[_',__']<-["`{","@[","/:"],__<-[_'..],_'<__,__<__'](у звичайних змінних z=[x|[a,b]<-["`{","@[","/:"],x<-[a..],a<x,x<b]).
xnor

@xnor Ще раз дякую! Чудова ідея поєднати початок і кінець діапазонів у рядок. Я також намагався узагальнити діапазони, але завжди закінчувався довше без цієї ідеї. Додатковий байт можна зберегти, прив’язавши рядок до __замість того, _'_ що __він використовується як ідентифікатор всередині розуміння списку.
Laikoni

13

Perl (5,10 або 5,12), 30 29 байт

Ця програма складається в основному з недрукованих символів, тому ось шістнадцятковий набір:

00000000: 5f 3d 7e 7e 22 d7 c0 84 8c 9e 86 df 9e d1 d1 85 _=~~"...........
00000010: d3 be d1 d1 a5 d3 cf d1 d1 c6 82 d6 22          ............"

Ця програма дуже проста: ми повторно виражаємо =~підкреслення ( _; дякуємо @Dennis, що вказали, що це працює) проти регулярного вираження. Режекс задається як вираз, а не буквально; конкретно, ми беремо побітове доповнення ( ~) рядка. Повернувши побітове доповнення для отримання в нижній рядку, ми отримаємо наступний регулярний вираз, який виконується:

(?{say a..z,A..Z,0..9})

У версіях Perl 5.10 та 5.12 (?{…})синтаксис був експериментальним синтаксисом, що дозволяє регулярним виразам запускати довільний код під час виконання. У цьому випадку ми використовуємо його для запуску прямої програми Perl для друку потрібного виводу. (Версії раніше 5.10 не можна використовувати, оскільки їх немає say.)

Сучасні версії Perl відключені (?{…})за замовчуванням з міркувань безпеки, але якщо у вас є така версія Perl, ви можете відключити перевірку (і, таким чином, запустити цю програму) за допомогою -Mre=evalаргументу командного рядка (разом із стандартом, -M5.010який визначає версію мови, яку потрібно реалізувати, і яка не рахується з рахунком).


13

Насправді 8 5 4 байти

'>┘▀

Як це працює:

 '>    Pushes > onto the stack as a string
           STACK: [>]
    ┘  Converts the top item of the stack to it's ordinal
           STACK: [62]
     ▀ Push all digits from base n(top item of the stack)
           STACK: [012...xyz]

Друк неявний в кінці програми.

Редагувати 1: Замінено введення алфавіту в нижній / верхній регістр, а потім в діапазон чисел (10), лише отримавши друковані символи бази 62.

Редагувати 2: змінити ">" на "> завдяки Mego :) збережено 1 байт.

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


'>- байт коротший, ніж ">".
Mego

@ Mee так, це відредаговано :) спасибі
Тілі пелікан

11

PHP, 69 байт

<?=~"ÏÎÍÌËÊÉÈÇƾ½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥žœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…";

Код стилізований за допомогою Windows-1252 тут. Нижче - оборотний xxd шестигранник.

00000000: 3c 3f 3d 7e 22 cf ce cd cc cb ca c9 c8 c7 c6 be  <?=~"...........
00000010: bd bc bb ba b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 af ae  ................
00000020: ad ac ab aa a9 a8 a7 a6 a5 9e 9d 9c 9b 9a 99 98  ................
00000030: 97 96 95 94 93 92 91 90 8f 8e 8d 8c 8b 8a 89 88  ................
00000040: 87 86 85 22 3b                                   ...";

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


10

Java (OpenJDK 9) , 277 байт

Так, Ява, ти це добре читаєш!

$->""+($='='+'=')+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+($='-'+'-')+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+($='_'-'&')+--$+--$+--$+--$+--$+--$+--$+--$+--$

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

Це друкує діапазони, але зворотні, оскільки порядок не має значення.

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA9876543210

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

Невикористані та тестування

public class PCG105781 {
  interface X { String apply(char x); }

  public static void main(String[] args) {
    X x = $
        -> "" // Force the result as a String.
        // The line below appends "zyxwvutsrqponmlkjihgfedcba"
        // '=' + '=' is 122 as int. $=122 casts 122 as a char, 'z'
        + ($ = '=' + '=') + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$
        // The line below appends "ZYXWVUTSRQPONMLKJIHGFEDCBA"
        // '-' + '-' is 90 as int. $=90 casts 90 as a char, 'Z'
        + ($ = '-' + '-') + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$
        // The line below appends "9876543210"
        // '_' - '&' is 57 as int. $=57 casts 57 as a char, '9'
        + ($ = '_' - '&') + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$ + --$
      ;

    System.out.println(x.apply('_'));
  }
}

3
Чекати, що?? Мені не вистачає всіх рішень JavaScript? o_O
Олів'є Грегоар

Це тому, що JavaScript не має char, інакше це буде шматок пирога. І якщо чесно, моя відповідь коротша, ніж ваша початкова відповідь. Погляньте на моє пояснення щодо всіх накладних витрат, які мені доведеться пройти.
Патрік Робертс

2
@PatrickRoberts Щоб бути справедливим, ми повинні порівняти початкове редагування з початковим чи останнім редагуванням з останнім редагуванням, а не початкове редагування з останнім ...;) Я уважно прочитав, що було зроблено для JavaScript, тим більше, що я не розумів, як я міг отримати більш коротку відповідь, ніж усі JS.
Олів'є Грегоар

9

Brainfuck, 89 85 байт

Оскільки brainfuck ігнорує буквено-цифрові символи так чи інакше, це лише виклик постійного виходу ... (Редагувати: Див . Рішення Деніса для версії, яка на 10 байт коротша)

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

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

Цей код є хорошим прикладом основних перелічених циклів у brainfuck:

+[-[--<]>>--]   Create value 47: char just before '0'
++++++++++      Set adjacent cell to 10: to be used as a counter

[               While the counter is not 0:
 <+.              Increment and print the char
    >-            Decrement the counter
       ]        (End loop: Exits when all digits have been printed)


<++++++++>           The char is now at '9' so add 8 to make it 'A'
+[-[---<]>>-]<-      In another cell create lowercase 'a'
<<+++++[>+++++<-]>+  Create 26: the number of times to loop

[                While the counter is not 0:
 >.+               Print and increment the lowercase char
    <<<.+          Print and increment the uppercase char
         >>-       Decrement the counter
            ]    (End loop: Exits when all letters have been printed)

Зауважте, що для цього використовуються ярлики для обгортання для генерування чисел, тобто інтерпретатору необхідно мати 8-бітні комірки для обгортання (наприклад, ту, до якої я пов’язаний).


5
Brainfuck - перша мова, про яку я придумав. Сором, я цього не знаю. Гарна відповідь.
ElPedro

7

JavaScript (ES6), 983 байти

Виявляється, в ES6 є багато символів, які можна використовувати в іменах змінних JavaScript ! Чудово працює після того, як ви вичерпаєте шість 1-2-байтних імен змінних за допомогою $та і _.

_=~[]
$={}
Á=++_
À=![]+""
Â=À[_]
Ã=++_
Ä=À[_]
Å=++_
Æ=($+"")[_]
Ç=(_[_]+"")[_]
È=++_
É=(!""+"")[_]
Ë=++_
Ì=++_
Ê=($+"")[_]
Í=++_
µ=++_
Î=++_
Ï=++_
_="\\"
Ð=$.$
È_=(!""+"")[Ã]
Å_=$+""
Ñ=Å_[Ã]
Ò=(Ð+"")[Ã]
__=Å_[Í]
Ó=(!""+"")[Å]
$_=Å_[Ì]+Ñ+Ò+(!$+"")[È]+__+È_+Ó+Å_[Ì]+__+Ñ+È_
$$=È_+(!""+"")[È]+__+Ó+È_+Ò
$=Á[$_][$_]
$($($$+"\""+Ê+Ñ+_+Ã+Ì+Í+_+Ã+Í+È+Ñ+À[Å]+É+"."+À[Å]+Ñ+_+Ã+Ë+µ+"('"+Ä+Æ+Ê+Ç+É+Â+_+Ã+Ë+µ+_+Ã+Ì+Á+_+Ã+Ì+Ã+_+Ã+Ì+Å+_+Ã+Ì+È+À[Å]+_+Ã+Ì+Ì+_+Ã+Ì+Í+Ñ+_+Ã+Í+Á+_+Ã+Í+Ã+_+Ã+Í+Å+_+Ã+Í+È+__+Ó+_+Ã+Í+Í+_+Ã+Í+µ+_+Ã+µ+Á+_+Ã+µ+Ã+_+Ã+µ+Å+_+Ã+Á+Ã+_+Ã+Á+Å+_+Ã+Á+È+_+Ã+Á+Ë+_+Ã+Á+Ì+_+Ã+Á+Í+_+Ã+Á+µ+_+Ã+Ã+Á+_+Ã+Ã+Ã+_+Ã+Ã+Å+_+Ã+Ã+È+_+Ã+Ã+Ë+_+Ã+Ã+Ì+_+Ã+Ã+Í+_+Ã+Ã+µ+_+Ã+Å+Á+_+Ã+Å+Ã+_+Ã+Å+Å+_+Ã+Å+È+_+Ã+Å+Ë+_+Ã+Å+Ì+_+Ã+Å+Í+_+Ã+Å+µ+_+Ã+È+Á+_+Ã+È+Ã+_+Ã+È+Å+Ã+Å+È+Ë+Ì+Í+µ+Î+Ï+Á+"')\"")())()

JavaScript, 1223 байти

Це була моя відповідь, перш ніж я дізнався про сказане.

_=~[]
$={}
___=++_
____=![]+""
$$$$=____[_]
__$=++_
$_$_=____[_]
_$_=++_
$_$$=($+"")[_]
$$_$=(_[_]+"")[_]
_$$=++_
$$$_=(!""+"")[_]
$__=++_
$_$=++_
$$__=($+"")[_]
$$_=++_
$$$=++_
$___=++_
$__$=++_
_="\\"
_$_$=$.$
_$$_=(!""+"")[__$]
_$__=$+""
_$=_$__[__$]
__$_=(_$_$+"")[__$]
__=_$__[$$_]
___$=(!""+"")[_$_]
$_=_$__[$_$]+_$+__$_+(!$+"")[_$$]+__+_$$_+___$+_$__[$_$]+__+_$+_$$_
$$=_$$_+(!""+"")[_$$]+__+___$+_$$_+__$_
$=___[$_][$_]
$($($$+"\""+$$__+_$+_+__$+$_$+$$_+_+__$+$$_+_$$+_$+____[_$_]+$$$_+"."+____[_$_]+_$+_+__$+$__+$$$+"('"+$_$_+$_$$+$$__+$$_$+$$$_+$$$$+_+__$+$__+$$$+_+__$+$_$+___+_+__$+$_$+__$+_+__$+$_$+_$_+_+__$+$_$+_$$+____[_$_]+_+__$+$_$+$_$+_+__$+$_$+$$_+_$+_+__$+$$_+___+_+__$+$$_+__$+_+__$+$$_+_$_+_+__$+$$_+_$$+__+___$+_+__$+$$_+$$_+_+__$+$$_+$$$+_+__$+$$$+___+_+__$+$$$+__$+_+__$+$$$+_$_+_+__$+___+__$+_+__$+___+_$_+_+__$+___+_$$+_+__$+___+$__+_+__$+___+$_$+_+__$+___+$$_+_+__$+___+$$$+_+__$+__$+___+_+__$+__$+__$+_+__$+__$+_$_+_+__$+__$+_$$+_+__$+__$+$__+_+__$+__$+$_$+_+__$+__$+$$_+_+__$+__$+$$$+_+__$+_$_+___+_+__$+_$_+__$+_+__$+_$_+_$_+_+__$+_$_+_$$+_+__$+_$_+$__+_+__$+_$_+$_$+_+__$+_$_+$$_+_+__$+_$_+$$$+_+__$+_$$+___+_+__$+_$$+__$+_+__$+_$$+_$_+__$+_$_+_$$+$__+$_$+$$_+$$$+$___+$__$+___+"')\"")())()

Я пробіг console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')через jjencode і переграв результат вручну. Однозначно є більше оптимізацій, які можна зробити.


Гей, FYI, я розмістив codegolf.stackexchange.com/a/105854/42091, тому що я вклав багато роботи в це, і я думаю, що це досить відрізняється від вашої відповіді.
Патрік Робертс

Без проблем, добре виглядаю!
darrylyeo

Приємно! Це останнє оновлення допомогло мені отримати понад 100 байт від мого!
Патрік Робертс

1
Якщо ви зміните кодування на ISO8859-1 і залиште його саме так, це буде 769 байт.
Патрік Робертс

7

Befunge, 73 72 59 57 55 53 байт

"{"< ^+`"`"\+*`\":"\`"/":\*`\"["\`"@":::::-!!
#@_^,_!

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

Це один цикл, відлік від якого {(тобто один символ після z). Під час першої ітерації "{"<послідовність виштовхує дві копії {на стек - один є початковим лічильником циклу, а другий використовується для декрементації цього лічильника за допомогою послідовності !!-(два NOT роблять 1, які потім віднімаються). При наступних ітераціях лічильник циклів вже знаходиться в стеці, тому {для настройки послідовності декременту потрібен лише один .

Решта коду - це лише довгий булевий вираз, який обчислює, чи знаходиться символ у діапазоні. Якщо це так, гілка другого рядка розбивається ліворуч, щоб записати значення. Якщо ні, права гілка обертається навколо, щоб перевірити, чи ми досягли нуля і чи слід припинити. Дві гілки зливаються посередині, щоб піднятися і повторити петлю. Зауважте, що всі команди вертикального напрямку йдуть вгору, оскільки ми не можемо використовувати a v, але це добре, оскільки вказівник інструкції автоматично загортається у верхній частині поля.

Завдяки Mistah Figgins за те, що спочатку придумав кращу техніку для збільшення петлі.

Але особлива подяка Джо Кінгу за ще кращий підхід до відліку, а не вгору, а також більш компактне розташування гілок.


1
Якщо на стеку немає нічого іншого, крім лічильника, ви можете змінити свою частку приросту на \! + Якщо є, ви можете зробити: !! +. для ненульових значень
MildlyMilquetoast

-2 байти , переставивши чек на початку рядка
Jo King

@JoKing Добре помічений. Ми не можемо використовувати, vоскільки це обмежене джерело, але воно все одно працює так само добре, як і a ^. Дякую.
Джеймс Холдернесс

-2 байти , відраховуючи замість вгору та використовуючи додаткову копію лічильника у другому рядку, щоб перевірити, чи закінчено цикл (згадайте про обмежене джерело цього разу;))
Jo King

@JoKing Вау, ви справді набагато кращі в цьому гольфі, ніж я! Знову дякую.
Джеймс Холдернес

6

Желе , 17 16 байт

“:[{“/@`‘Ḷḟ"/ỌḊ€

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

Як це працює

“:[{“/@`‘Ḷḟ"/ỌḊ€  Main link. No arguments.

“:[{“/@`‘         Yield [[58, 91, 123], [47, 64, 96]].
         Ḷ        Unlength; map each n to [0, ..., n-1].
          ḟ"/     Reduce by vectorizing filter-false.
                  This yields [[47, ..., 57], [64, ..., 90], [96, ..., 122]].
             Ọ    Unordinal; replace each n with the corr. Unicode character.
              Ḋ€  Deqeue each; remove the first character of each of the three
                  generated strings ('/', '@', and '`').

Оскільки у желе є своя кодова сторінка, це допоможе, якщо ви приєднаєте hexdump, для зручної перевірки того, що ви не використовуєте заборонені байти
FlipTack

@FlipTack IIRC Кодова сторінка Jelly сумісна з ASCII для друку.
PurkkaKoodari

@FlipTack Pietu1998 вірно. І навіть якщо його не було, специфікація забороняє символи, а не байти.
Денніс

@Dennis Насправді він забороняє байти за коментарі , хоча це все-таки справедливо (ASCII-сумісний).
Ерік Аутгольфер

6

Модифікуючий Brainfuck , 32 байти

<[-<+.>]<<[-<+.>]<<[-<+.>]`@/

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

xxd -r-оборотний гекс-дамп (містить недруковані матеріали):

00000000: 3c5b 2d3c 2b2e 3e5d 3c3c 5b2d 3c2b 2e3e  <[-<+.>]<<[-<+.>
00000010: 5d3c 3c5b 2d3c 2b2e 3e5d 601a 401a 2f0a  ]<<[-<+.>]`.@./.

Що робить @/?
Yytsi

@TuukkaX Останні 6 символів `\x1a@\x1a/\nє, тому що їх кодові точки дуже корисні в гольфі. Ви не можете їх видалити.
Ерік Аутгольфер

@downvoter: Якщо ви натрапите на цю публікацію, видаліть свою прихильність. Це було врегульовано.
Ерік Аутгольфер

Я радий, що я не єдиний, хто використовує SMBF. :)
mbomb007

@ mbomb007 Практичність :) Я думав про BF, і їм SMBF прийшло в голову, так що я маю готові кодові точки. Обмеження не коштувало мені байтів, як я використовував +.замість цього .+.
Ерік Аутгольфер

6

C, 128 байт

Так, С. І навіть коротше, ніж у кількох езотеричних.

__($$,_,$,_$,$_){$>_$?_$=_$?!$:$,$=*(""-_+$_++)&*"{":_;_$?*(""-_+$$++)=$++:_;$&&__($$,_,$,_$,$_);}_(_){__(_,"",_,!!_,"½´ÞÅþå");}

Викличте _достатньо великий порожній char *буфер.

Може бути залежним від компілятора підлітків. Тестували за допомогою GCC; файл збережено на кодовій сторінці 1252.


6

JavaScript (ES6), 812 745 657 650 536 520 416 байт

(À=(Á=!($={})+(Ø=""))[Â=_=+[]],Ã=(Ä=!_+Ø)[Å=++_],Æ=(Ç=$+Ø)[_],È=(É=$.$+Ø)[_],Ê=Ä[Ë=++_],Ì=Ä[Í=++_],Î=++_,Ï=Ç[Ð=++_],Ñ=Ç[Ò=++_],Ó=++_,$=$[Ô=Ï+Æ+È+Á[Í]+Ñ+Ã+Ê+Ï+Ñ+Æ+Ã][Ô],$($((Õ=Ã+Ä[Í]+Ñ+Ê+Ã+È)+`"${Ù=($=À)+Æ+(Ö=Ô[Ð])}($ ${[Æ+$+"[["+Î+ ++_,Ø+Ð+_+"],["+Ò+Ð,Ø+ ++_+Å+"],["+_+Ó,Ú=Ø+Å+Ë+Í]}]])${Ù}(_=$[Â];_<$[Å];)Ø+=${(_="\\")+Ú+Ñ+Ö+(Û=(_=_+Å)+Ð)+Å+Ô[Ë]+_+Î+Ó}.${$+Ö+Æ+Û+Ð+_+Â+Í+Û+Â+Á[Å]+Ö+_+Â+Í+Æ+É[Ë]+Ì}(_++);${Õ} Ø"`)()))

Редагувати: Використовуючи кодування ISO8859-1, це рішення становить 416 байт замість 520 байт. Повна програма складає 432 байти, враховуючи додаткові 16 байт для

f=\r\n
416 byte submission here\r\n
alert(f())

Це подання функції на відміну від повної програми. Я досить довго проводив у гольфі JJEncode (капелюх для darrylyeo за це), але замість гольфу

console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')

Я займався гольфом

for($ of[[48,58],[65,91],[97,123]])for(_=$[0];_<$[1];)Ø+=String.fromCharCode(_++);return Ø

де Øініціалізовано ""в накладні.

Переписаний з операторами, перетвореними в нові рядки:

À=(Á=!($={})+(Ø=""))[Â=_=+[]]
Ã=(Ä=!_+Ø)[Å=++_]
Æ=(Ç=$+Ø)[_]
È=(É=$.$+Ø)[_]
Ê=Ä[Ë=++_]
Ì=Ä[Í=++_]
Î=++_
Ï=Ç[Ð=++_]
Ñ=Ç[Ò=++_]
Ó=++_
$=$[Ô=Ï+Æ+È+Á[Í]+Ñ+Ã+Ê+Ï+Ñ+Æ+Ã][Ô]
// function that returns string
$($((Õ=Ã+Ä[Í]+Ñ+Ê+Ã+È)+`"${Ù=($=À)+Æ+(Ö=Ô[Ð])}($ ${[Æ+$+"[["+Î+ ++_,Ø+Ð+_+"],["+Ò+Ð,Ø+ ++_+Å+"],["+_+Ó,Ú=Ø+Å+Ë+Í]}]])${Ù}(_=$[Â];_<$[Å];)Ø+=${(_="\\")+Ú+Ñ+Ö+(Û=(_=_+Å)+Ð)+Å+Ô[Ë]+_+Î+Ó}.${$+Ö+Æ+Û+Ð+_+Â+Í+Û+Â+Á[Å]+Ö+_+Â+Í+Æ+É[Ë]+Ì}(_++);${Õ} Ø"`)())

Пояснення

Цей сценарій починається з ініціалізації декількох вбудованих типів та примусового їх до рядків. Рядки, які ми можемо отримати без використання буквено-цифрових символів, є:

{}+""     -> "[object Object]"
!{}+""    -> "false"
!+[]+""   -> "true"
{}[{}]+"" -> "undefined"

З цих рядків та необхідних цифр для посилання на окремі символи ми можемо отримати рядки returnта constructor, які можна використовувати так:

$={}[Ô="constructor"][Ô]
$(("return"+`"encoded script"`)())

Конструктор об'єкта є Object(), і його конструктор є Function(), який ми можемо використовувати по суті eval().

У цьому випадку кодований сценарій, який потрібно виконати, - це вкладені forцикли, що об'єднують усі буквено-цифрові символи в рядок, використовуючи їхні кодові точки та повертаючи його.

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

Демо

f=
(À=(Á=!($={})+(Ø=""))[Â=_=+[]],Ã=(Ä=!_+Ø)[Å=++_],Æ=(Ç=$+Ø)[_],È=(É=$.$+Ø)[_],Ê=Ä[Ë=++_],Ì=Ä[Í=++_],Î=++_,Ï=Ç[Ð=++_],Ñ=Ç[Ò=++_],Ó=++_,$=$[Ô=Ï+Æ+È+Á[Í]+Ñ+Ã+Ê+Ï+Ñ+Æ+Ã][Ô],$($((Õ=Ã+Ä[Í]+Ñ+Ê+Ã+È)+`"${Ù=($=À)+Æ+(Ö=Ô[Ð])}($ ${[Æ+$+"[["+Î+ ++_,Ø+Ð+_+"],["+Ò+Ð,Ø+ ++_+Å+"],["+_+Ó,Ú=Ø+Å+Ë+Í]}]])${Ù}(_=$[Â];_<$[Å];)Ø+=${(_="\\")+Ú+Ñ+Ö+(Û=(_=_+Å)+Ð)+Å+Ô[Ë]+_+Î+Ó}.${$+Ö+Æ+Û+Ð+_+Â+Í+Û+Â+Á[Å]+Ö+_+Â+Í+Æ+É[Ë]+Ì}(_++);${Õ} Ø"`)()))
console.log(f())


5

Мозок-Флак , 171 байт

Включає +3 для -A

(((((()()()){}){}){}){})(((()()())){}{}){({}[()]<(({})())>)}{}(({})(()()()()){})(((((()()()){}){}){}())<{({}[()]<(({})())>)}{}(({})(()()()){}())>){({}[()]<(({})())>)}{}

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

(((((()()()){}){}){}){}) # push 48
(((()()())){}{})         # push 9
{({}[()]<                # for 9..0
(({})())                 # pop a, push a, push a+1
>)}{}                    # end for
(({})(()()()()){})       # pop a, push a, push a + 8
(((((()()()){}){}){}())< # push 26 and save a 26 for later
{({}[()]<                # for 26..0
(({})())                 # pop a, push a, push a+1
>)}{}                    # end for
(({})(()()()){}())       # pop a, push a, push a + 7
>)                       # push that 26 that we held
{({}[()]<                # for 26..0
(({})())                 # pop a, push a, push a+1
>)}{}                    # end for

Можливо, існує спосіб зробити це без необхідності повторення функції додавання 1 "."



5

J, 171 байт

(+:>.+:^^*_){.".(':',~(+:+:>.^*_){(*:>.^*_)!:(+:<.^+:*_)''),',',(":(>:*:+:+:+:*_),(<.^<:^<:^*_),<:*:<.^+:*_),'+/',('.',~(+:<.+:^*_){(*:>.^*_)!:(+:<.^+:*_)''),":+:<.*:>:^*_

О, болить мій мозок ... Спробуйте в Інтернеті!

Ось так ви зможете побачити все це одним рядком (однак він не працюватиме з розривами рядків.)

(+:>.+:^^*_){.".(':',~(+:+:>.^*_){(*:>.^*_)!:(+:<.^+:*_)''),',',(":(>:*:+:+:+:*_),(<.^<:^<:^*
_),<:*:<.^+:*_),'+/',('.',~(+:<.+:^*_){(*:>.^*_)!:(+:<.^+:*_)''),":+:<.*:>:^*_

Гарантована робота з версією J j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52в такому порядку. (Мають значення лише перші 12 символів.)

Пояснення

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

(62){.".(':',~(12){(9)!:(14)''),',',(":(65),(97),48),'+/',('.',~(10){(9)!:(14)''),":26

Коли деякі дужки видалено, а деякі цифри зробили приємнішими:

62{.".(':',~12{9!:14''),',',(":65 97 48),'+/',('.',~10{9!:14''),":26

Складається з купки ,та ,~s, які додають та додають аргументи. Ось окремі значення:

  1. ":26
  2. ('.',~10{9!:14'')
  3. '+/'
  4. (":65 97 48)
  5. ','
  6. (':',~12{9!:14'')

1є 26як струна.

9!:14'' генерує наступний рядок у TIO:

j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52

з 2, отримуємо й- 10й символ ( iвід linux) і додаємо .до кінця його, поступаючись i..

3і 5є самостійними.

4перелік чисел 65 97 48у вигляді рядка.

6подібний 2, за винятком того, що він є 12символом ( uвід linux) і додає a :до кінця, поступаючись u:.

Це, все разом, дає результат u:,65 97 48+/i.26. ".оцінює це, даючи нам:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHI

(Примітка: +/додаток у таблиці.)

Тоді, з 62{., ми беремо перші 62символи з цього, даючи нам ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.


Ви можете отримати константу 14, за допомогою <:<.^^*_якої зберігається байт. Також я спробував генерувати весь діапазон і видалити символи, щоб отримати ':;<=>?@[\]^_`'-.~".(':',~(+:+:>.^*_){(*:>.^*_)!:(<:<.^^*_)''),":(#@}.@}.@}.@,~(+#\)],,~)(*:@#$])'+++++'104 байти. Я впевнений, що це може стати набагато коротшим
милі

5

05AB1E , 18 15 11 байт

-4 завдяки Аднану, тому що якщо розмір вводу дорівнює 1, 05AB1E буде використовувати 0 для b в першій команді.

•£•Ýç©á®þ«˜

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

•£•Ÿ            # Push [0..122] using implicit 0 and the base-214 of `£`.
    ç           # Convert to ASCII chars.
     ©          # Store full array in register.
      á         # Push the same array with ONLY letters.
       ®        # Push contents of register (char)[0..122].
        þ       # Push only the digits.
         «˜     # Concat to list, flatten it. 

Я спробував так багато різних підходів, але ключові моменти тут ускладнили:

- Basic commands will not work, only extended and a select few of the basics.
- Extended commands are pretty complex.
- Eval (.V) will not work.
- To push numbers you can do a base 214 compression.
- ALL sequence pushes (E.G. žK) won't work.
- ALL number pushes won't work, except for compression and the -1 an empty register pushes.

1
You may print them in arbitrary orderговорить виклик.
AdmBorkBork

1
Чи має •£•Ýç©á®þ«˜працювати?
Аднан

@Adnan приємно, не знав, що він використовує 0, коли немає b.
Magic Octopus Urn

5

Brainfuck, 55 байт

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

Вихід:

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789

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


Ініціалізує стрічку до 3 · 2 п , і працює звідти.

+++[[<+>->++<]>]    initialize the tape
                    |   0 |   3 |   6 |  12 |  24 |  48 |  96 | 192 | 128 |   0 |   0 |
                                                                                    ^
<<[-<->]            subract 128 from 192
                    |   0 |   3 |   6 |  12 |  24 |  48 |  96 |  64 |   0 |   0 |   0 |
                                                                        ^
<<<<++              increment 24 twice
                    |   0 |   3 |   6 |  12 |  26 |  48 |  96 |  64 |   0 |   0 |   0 |
                                                ^
[->>+.>+.<<<]       output aAbBcC ~ zZ
                    |   0 |   3 |   6 |  12 |   0 |  48 | 122 |  90 |   0 |   0 |   0 |
                                                ^
<--[->>.+<<]        decrement 12 twice; output 0 ~ 9
                    |   0 |   3 |   6 |   0 |   0 |  58 | 122 |  90 |   0 |   0 |   0 |
                                          ^

5

Perl 6 , 43 байти - неконкурентоспроможний

{|('`'^..^'{'),|('@'^..^'['),|('/'^..^':')}

Лямбда, яка повертає список символів.
Пояснення:

   '`'                                       # The character before "a" (in Unicode order)
          '{'                                # The character after "z"
      ^..^                                   # Endpoint-exclusive range between them
 |(          )                               # Slip the range into the outer list
               |('@'^..^'[')                 # Same thing for "A" to "Z"
                             |('/'^..^':')}  # Same thing for "0" to "9"

Залежить від виправлення інтерпретатора Rakudo Perl 6, який сьогодні був присвячений лише git repo, та ще не є частиною офіційного випуску Rakudo. Насправді я зіткнувся з помилкою, відповідаючи на цей виклик, і мені вдалося виправитись за допомогою одного з основних розробників Perl 6. Правила цього сайту, наскільки я їх розумію, не дозволяють відповідям конкурувати в такій ситуації, тому я позначив його як неконкурентоспроможний.



4

PHP 7.0+, 110 байт

Бог благословляє похотливі струни!

<?=($__='`@`@'^'*/).')(($_='->.<:'^'__@[_')('>'^_,'%'^_)),$__($_('|'^'=','|'^'&')),$__($_(':'^"\n",';'^']'^_));

Замініть на \nреальний * рядок у стилі NIX.
Він присутній у коді, щоб уникнути проблем з новими рядками, але не враховується у балах.

Це кидає купу попереджень, але їх можна придушити, додавши @перед кожним бродячим _.


Попередження безкоштовно , 113 байт

<?=($__='`@`@'^'*/).')(($_='->.<:'^'__@[_')('>'^@_,'%'^@_)),$__($_('|'^'=','|'^'&')),$__($_(':'^"\n",';'^']'^@_));

3

65c02 мова машини + Apple] [ROM, 25 байт

A9 E0 20 0F 80 A9 C0 20 0F 80 A2 0A A9 AF 2C A2 1A 1A 20 ED FD CA D0 F9 60

Друкує abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.

Слід почати о $8000.

Розбирання

8000-   A9 E1       LDA   #$E0
8002-   20 0F 80    JSR   $800F
8005-   A9 C1       LDA   #$C0
8007-   20 0F 80    JSR   $800F
800A-   A2 0A       LDX   #$0A
800C-   A9 B0       LDA   #$AF
800E-   2C          HEX   2C     ; SKIPS NEXT 2 BYTES
800F-   A2 1A       LDX   #$1A
8011    1A          INC   
8012-   20 ED FD    JSR   $FDED
8015-   CA          DEX   
8016-   D0 F9       BNE   $8011
8018-   60          RTS   

Це порушує правило кодової точки - ви просто використовуєте символи в іншому наборі символів. Байти в порядку, якщо вони не є ітеральними чи не читаються кодом.
dkudriavtsev

@wat Ага, гаразд. Я відредагував свій код, щоб він не використовував жодних байтів машинного коду, які відображають для буквено-цифрових символів у "нормальному" (позитивному) ASCII і не використовує жодних позитивних чи негативних буквено-цифрових літер ASCII ; чи дійсно це зараз?
insert_name_here

Я так гадаю... ._.
дідрявцев

@wat Кодові точки у порядку зростання, які використовуються в даний час, є 10, 15, 26, 32, 44, 96, 128, 162, 169, 175, 192, 202, 208, 224, 237, 249, 253, які відображаються на символи, ↵.. ,`.¢©¯ÀÊÐàíùýде .s - символи, які не можна друкувати. Це дійсно
Патрік Робертс

3

bash (на Linux), 507 493 490 485 байт

це зберігає масив символів у глобальній змінній __

: {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_
__=(/????/????/??/??)
___=${__%??}
__=(${__[@]#$___?})
____=${___#/*/?}
____=${____%?/*/}
_____=${____%?}
____=${____#?}
___=${___%??/}
______=($___*_??)
______=${______#$___???????}
______=${______%??_*}
_______=($___$_____???*)
_______=${_______#$___??}
_______=${_______%????}
___=$#
___=$((++___))$((___+++++___+___--))$___
$_____$_______$______$____{,} ___="\({$______..$'\\$___'}\)"
__=(${__[@]} ${___[@]} ${___[@]^})

його потрібно виконати на щойно завантаженій машині Linux з /proc, або щось на зразок простору імен pid

пояснення:

# {var}>file opens a file descriptor >= 10 to that file
: {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_
# at startup no pid is > 999 so there's no other /proc/pid/fd/??
__=(/????/????/??/??)                                 # /proc/self/fd/1[0-9]
___=${__%??}                                          # /proc/self/fd/
__=(${__[@]#$___?})                                   # {0..9}
____=${___#/*/?}                                      # elf/fd/
____=${____%?/*/}                                     # el
_____=${____%?}                                       # e
____=${____#?}                                        # l
___=${___%??/}                                        # /proc/self/
______=($___*_??)                                     # /proc/self/timerslack_ns
______=${______#$___???????}                          # ack_ns
______=${______%??_*}                                 # a
_______=($___$_____???*)                              # /proc/self/environ
_______=${_______#$___??}                             # viron
_______=${_______%????}                               # v

___=$#                                                # 0
___=$((++___))$((___+++++___+___--))$___              # 172 (z in octal)

# eval eval                   ___="\({a..$'\172'}\)"
$_____$_______$______$____{,} ___="\({$______..$'\\$___'}\)"
#   {0..9}   {a..z}    {A..Z}
__=(${__[@]} ${___[@]} ${___[@]^})

щоб спробувати це, ми можемо додати declare -p __в кінці, щоб відобразити результат

$ sudo unshare --fork --pid --mount-proc bash golf
declare -a __=([0]="0" [1]="1" [2]="2" [3]="3" [4]="4" [5]="5" [6]="6" [7]="7" [8]="8" [9]="9" [10]="a" [11]="b" [12]="c" [13]="d" [14]="e" [15]="f" [16]="g" [17]="h" [18]="i" [19]="j" [20]="k" [21]="l" [22]="m" [23]="n" [24]="o" [25]="p" [26]="q" [27]="r" [28]="s" [29]="t" [30]="u" [31]="v" [32]="w" [33]="x" [34]="y" [35]="z" [36]="A" [37]="B" [38]="C" [39]="D" [40]="E" [41]="F" [42]="G" [43]="H" [44]="I" [45]="J" [46]="K" [47]="L" [48]="M" [49]="N" [50]="O" [51]="P" [52]="Q" [53]="R" [54]="S" [55]="T" [56]="U" [57]="V" [58]="W" [59]="X" [60]="Y" [61]="Z")

+1. Я думаю, ви повинні вказати це як Bash на Linux, оскільки інших ОС (наприклад, MacOS) немає /proc. Насправді /procце не обов'язково в Linux, хоча вам, мабуть, важко буде знайти сучасний дистрибутив без нього.
Цифрова травма

3

Javascript, 1273 1351 рік 1610 рік байт

Це рішення працює практично так само, як і інші два відповідь на цю тему тут і тут , де він використовує листи від true, false, undefinedі [object Object]рядків для побудови функції, необхідної для генерації інших букв.

Оскільки велика кількість букв уже введено в об’єкт, я спробував додати всі об’єкти, що залишилися з малих літер та цифр до об'єкта, а потім застосував toUpperCaseдо всіх значень в об'єкті, щоб генерувати пропущені великі літери.

Оновлення:

Я зміг вдосконалити спосіб встановлення восьмеричних значень, але вони все ще займають 13 х 30 байт (або вони будуть по 30 байт кожен раз, коли я зміню числа на різні клавіші), кожен з них слідує цій загальній картина: $.ž=\'\\'+$.一+$.七+$.二+'\';.

Додаткові 49 байт можна легко вийняти, перемикаючи клавіші для чисел на 2 байтові символи.

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

$=~[];_={ť:!""+"",ň:![]+"",û:$._+'',ô:{}+"",ø:''};$={零:++$,ƒ:_.ň[$],ť:_.ť[$],一:++$,â:_.ň[$],ř:_.ť[$],ô:_.ô[$],ň:_.û[$],二:++$,ľ:_.ň[$],û:_.ť[$],ƅ:_.ô[$],ď:_.û[$],三:++$,ŝ:_.ň[$],ĵ:_.ô[$],四:++$,ě:_.ň[$],五:++$,ĉ:_.ô[$],î:_.û[$],六:++$,七:++$,八:++$,Ô:_.ô[$],九:++$};_.ĉ=$.ĉ+$.ô+$.ň+$.ŝ+$.ť+$.ř+$.û+$.ĉ+$.ť+$.ô+$.ř;_.ř=$.ř+$.ě+$.ť+$.û+$.ř+$.ň;_.ƒ=(0)[_.ĉ][_.ĉ];_.ƒ(_.ƒ(_.ř+' "$.Û=\'\\'+$.一+$.二+$.五+'\';$.Ĉ=\'\\'+$.一+$.零+$.三+'\';$.Ě=\'\\'+$.一+$.零+$.五+'\';$.ĝ=\'\\'+$.一+$.四+$.七+'\';$.ĥ=\'\\'+$.一+$.五+$.零+'\';$.ǩ=\'\\'+$.一+$.五+$.三+'\';$.ӎ=\'\\'+$.一+$.五+$.五+'\';$.ƥ=\'\\'+$.一+$.六+$.零+'\';$.ǫ=\'\\'+$.一+$.六+$.一+'\';$.ư=\'\\'+$.一+$.六+$.六+'\';$.ŵ=\'\\'+$.一+$.六+$.七+'\';$.ӽ=\'\\'+$.一+$.七+$.零+'\';$.ŷ=\'\\'+$.一+$.七+$.一+'\';$.ž=\'\\'+$.一+$.七+$.二+'\';"')())();_.ƒ(_.ƒ(_.ř+' "_.â=\''+$.Ô+$.ƅ+$.ĵ+$.ě+$.ĉ+$.ť+'.'+$.ǩ+$.ě+$.ŷ+$.ŝ+'($).'+$.ƒ+$.ô+$.ř+$.Ě+$.â+$.ĉ+$.ĥ+'\';_.ƅ=\''+$.ť+$.ô+$.Û+$.ƥ+$.ƥ+$.ě+$.ř+$.Ĉ+$.â+$.ŝ+$.ě+'\';"')())();_.ƒ(_.ƒ(_.ř+' "'+_.â+'((ǩ)=>{$[ǩ.'+_.ƅ+"()]=($[ǩ]+'')."+_.ƅ+"()});"+_.â+"((ǩ)=>{_.ø+=$[ǩ];});"+$.â+$.ľ+$.ě+$.ř+$.ť+'(_.ø);"')())()

1
Це здається цікавим, але, як це є, це не дуже гольф. Просто видалення пробілів дозволить заощадити 74 байти, одинарні лапки можуть бути використані для рядків, що містять подвійні лапки, а 3-байтові символи Unicode можуть бути замінені на менш дорогі.
Денніс

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

3

C (стук) , 164 байти

é,ú,í,ó;_(*$){ú-=ú;ú++;í=ú+ú;ó=í<<í*í<<ú;!é?é++,é<<=í*í+ú,é+=í<<í+ú:é;*$++=é++;é+=é==ó-(í*í+í)?(í<<í)-ú:ú-ú;é+=é==ó+(í<<í<<í)-í*í-ú?í*í+í:ú-ú;é<í*ó-(í*í)-ú?_($):ú;}

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

Це рекурсивна функція, яка отримує символи, починаючи зі значення 1 (віднімання від самоврядування та збільшення) та створює з цього всі інші числа.

Недоліковані / Пояснення:

é,ú,í,ó;
_(*$){ //function "_" taking a pointer "$"
	ú-=ú;ú++; //constant ú=1
	í=ú+ú; //constant í=2
	ó=í<<í*í<<ú; //constant ó=64
	!é?é++,é<<=í*í+ú,é+=í<<í+ú:é; //if é isn't initialized, seek to character '0'
	*$++=é++; //write to string and increase string index
	é+=é==ó-(í*í+í)?(í<<í)-ú:ú-ú; //skip to 'A'
	é+=é==ó+(í<<í<<í)-í*í-ú?í*í+í:ú-ú; //skip to 'a'
	é<í*ó-(í*í)-ú?_($):ú; //keep recursing until end of alphabet
}

2

CJam , 15 байт

"{`[@:/"_:,:^\-

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

Пояснення

"{`[@:/" e# Push this string. Note that these are the characters just above and
         e# below the a-z, A-Z and 0-9 ranges, respectively.
_        e# Get a copy of the string.
:,       e# Turn each character into a range, i.e. all characters from the null byte
         e# to the the character below the given one. E.g. { is turned into "...xyz".
:^       e# Fold symmetric set difference over the list. Gives us the characters that
         e# appear in an odd number of the strings. Those are the letters, the digits
         e# as well as `, @ and /.
\        e# Pull the other copy of the string on top.
-        e# Remove these characters from the string. That leaves only the alphanumerics.

2

𝔼𝕊𝕄𝕚𝕟, 8 символів / 19 байт

ᶐ+ᶛ+⩥Ⅹă⬯

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

- це алфавіт верхнього регістру, це алфавіт з малі літери, і ⩥Ⅹă⬯це діапазон ( ) від 0до 10( , римська цифра unicode) мінус 1, приєднаний ( ă) нічого ( ).

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