Codegolf — Распечатайте Все Буквенно-Цифровые Символы Ascii, Не Используя Их.

  • Автор темы AndrXxX
  • Обновлено
  • 23, Oct 2024
  • #1

Испытание

Напечатайте следующие символы:

 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
 

Загвоздка в том, что вы не можете использовать ни один из них в своем коде.

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

Правила

  • Вы не можете использовать символы из набора, указанного выше.
  • Вы можете использовать любые другие символы
  • Никакого обмана
  • Стандартные лазейки запрещены
  • Это значит, что побеждает самый короткий ответ.

Разъяснения

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

#code-golf #code-golf #string #kolmogorov-complexity #restricted-source

AndrXxX


Рег
22 Dec, 2012

Тем
61

Постов
190

Баллов
525
  • 26, Oct 2024
  • #2

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Address  Hexdump   Disassembly
-------------------------------
$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     ORA #$20
$0614    8d 1a 06  STA $061a
$0617    8d 1c 06  STA $061c
$061a    ea        NOP 
$061b    aa        TAX 
$061c    ea        NOP 
$061d    a8        TAY 
$061e    a9 00     LDA #$00
$0620    ea        NOP 
$0621    ea        NOP 
$0622    98        TYA 
$0623    ea        NOP 
$0624    8a        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 
$063e    98        TYA 
$063f    95 00     STA $00,X
$0641    c8        INY 
$0642    c4 80     CPY $80
$0644    d0 f7     BNE $063d
$0646    60        RTS

Это оценивается как

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 __________________________________________________________________________________________________________________________ 

Объяснение

Здесь мы используем тот факт, что символы неявно преобразуются в целые числа при выполнении арифметических операций, таких как +++[[<+>->++<]>] 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 | ^ or the range function aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789 применяются. При объединении с пустой строкой ( +++[[<+>->++<]>]<<[-<->]<<<<++[->>+.>+.<<<]<--[->>.+<<] ), the numbers again are converted to characters.

Попробуйте онлайн!

 

entevaabonlek


Рег
15 Aug, 2006

Тем
70

Постов
194

Баллов
574
  • 26, Oct 2024
  • #3

мозготрах, 77 76 75 72 байта

- 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.

Попробуйте онлайн!

Как это работает

Переводчик начинает с записи 0 клетки.

•£•Ÿ # 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.

Это устанавливает первую ячейку в 8, оставив ленту в следующем состоянии.

•£•Ýç©á®þ«˜ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

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

62 62{.

Мы переходим ко второй ячейке и увеличиваем ее дважды, готовясь к печати цифр.

+/ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHI

Это печатает третью ячейку, увеличивает ее, затем возвращается ко второй ячейке и уменьшает ее. После 10 итерации, мы напечатали ". and the tape looks like follows.

u:,65 97 48+/i.26 u:

Пора готовить ленту для писем! Начнем с продвижения двух ячеек.

: linux

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

u 12

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

2 6

Наконец, мы переходим к шестой ячейке, чтобы увеличить и распечатать ее, делаем то же самое для седьмой ячейки, затем возвращаемся к пятой ячейке и уменьшаем ее. После 26 итерации, мы напечатали 65 97 48 .

 

Irishabondar


Рег
11 Nov, 2019

Тем
71

Постов
201

Баллов
566
  • 26, Oct 2024
  • #4

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

4

Функция, возвращающая массив символов. Программа, выводящая только символы, имеет размер 49 байт:

5

При этом для определения диапазона просто используются символы ascii по обе стороны от соответствующих диапазонов. Например, 3 means the characters between a forward slash and a colon, excluding the end. To get rid of the beginnings, we subtract an array containing the three beginning characters.

 

Vitpol


Рег
01 Sep, 2009

Тем
71

Постов
183

Баллов
598
  • 26, Oct 2024
  • #5

6502 машинный язык, 74 70 68 байт

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

i.

Вы можете видеть, что здесь не используется ни один из запрещенных байтов: от $41 до $5a, от $61 до $7a или от $30 до $39.

Это функция без аргументов, которая при вызове возвращает указатель на массив символов «abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789» в верхней части стека в соответствии со стандартными соглашениями о вызовах 6502.

В качестве пояснения, вот разборка:

.

Код машинного языка самомодифицируется. Для манипулирования стеком мне нужно было использовать PHA и PLA для нажатия и извлечения аккумулятора, но эти инструкции имеют коды операций $48 и $68, которые запрещены (это коды ASCII для букв «H» и «h»). Итак, для PHA я беру число $24, делаю арифметический сдвиг влево (ASL) и сохраняю полученные $48 в четырех местах кода, где оно должно быть выполнено. Затем, для PLA, я использую побитовое ИЛИ к 48 долларам в аккумуляторе, чтобы вычислить 68 долларов, и сохраняю их в двух местах кода, где это необходимо.

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

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

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

 

Qva738skestSoky


Рег
05 Dec, 2015

Тем
69

Постов
209

Баллов
584
  • 26, Oct 2024
  • #6

В, 8 7 байт

1 байт сэкономлен благодаря @DJMcMayhem, поместив все это в один оператор регулярного выражения.

linux

Попробуйте онлайн!

Выходы:

i

Примечание: 10 is нет 2 or j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52 , это 9!:14''

Шестнадцатеричный дамп:

26

Объяснение

1

Теперь вывод выглядит так:

(':',~12{9!:14'')

Нам нужно удалить все небуквенно-цифровые символы и ',' (since it is not included in (":65 97 48) ), так что давайте сделаем это, используя регулярное выражение

'+/' ||answer||

Хаскелл, 75 72 63 58 56 байт

('.',~10{9!:14'')

Попробуйте онлайн! Позвонить с ":26 . Output:

,~

Спасибо xnor, который предложил , и 62{.".(':',~12{9!:14''),',',(":65 97 48),'+/',('.',~10{9!:14''),":26 как двухбайтовые имена переменных вместо (62){.".(':',~(12){(9)!:(14)''),',',(":(65),(97),48),'+/',('.',~(10){(9)!:(14)''),":26 or similar, saving 9 bytes. I especially like how j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52 нарушает подсветку синтаксиса. И еще раз спасибо xnor за обобщение диапазонов, сэкономив еще 4 байта.
Редактировать: Я узнал, что символы Юникода разрешены в качестве идентификаторов в Haskell, поэтому, например. (+:>.+:^^*_){.".(':',~(+:+:>.^*_){(*:>.^*_)!:(+:<.^+:*_)''),',',(":(>:*:+:+:+:*_),(<.^<:^<:^* _),<:*:<.^+:*_),'+/',('.',~(+:<.+:^*_){(*:>.^*_)!:(+:<.^+:*_)''),":+:<.*:>:^*_ , (+:>.+:^^*_){.".(':',~(+:+:>.^*_){(*:>.^*_)!:(+:<.^+:*_)''),',',(":(>:*:+:+:+:*_),(<.^<:^<:^*_),<:*:<.^+:*_),'+/',('.',~(+:<.+:^*_){(*:>.^*_)!:(+:<.^+:*_)''),":+:<.*:>:^*_ , ... также могут использоваться как двухбайтовые идентификаторы. Поскольку в программе остался один трехбайтовый идентификатор, я заменил его на (((((()()()){}){}){}){}) # 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 , saving another 2 bytes.

Объяснение:

(((((()()()){}){}){}){})(((()()())){}{}){({}[()]<(({})())>)}{}(({})(()()()()){})(((((()()()){}){}){}())<{({}[()]<(({})())>)}{}(({})(()()()){}())>){({}[()]<(({})())>)}{} и -A являются допустимыми именами переменных. Из спецификация языка:

Идентификатор состоит из буквы, за которой следуют ноль или более букв, цифр, символов подчеркивания и одинарных кавычек. [...] Подчеркнуть, f= (À=(Á=!($={})+(Ø=""))[Â=_=+[]],Ã=(Ä=!_+Ø)[Å=++_],Æ=(Ç=$+Ø)[_],È=(É=$.$+Ø)[_],Ê=Ä[Ë=++_],Ì=Ä[Í=++_],Î=++_,Ï=Ç[Ð=++_],Ñ=Ç[Ò=++_],Ó=++_,$=$[Ô=Ï+Æ+È+Á[Í]+Ñ+Ã+Ê+Ï+Ñ+Æ+Ã][Ô],$($((Õ=Ã+Ä[Í]+Ñ+Ê+Ã+È)+`"${Ù=($=À)+Æ+(Ö=Ô[Ð])}($ ${[Æ+$+"[["+Î+ ++_,Ø+Ð+_+"],["+Ò+Ð,Ø+ ++_+Å+"],["+_+Ó,Ú=Ø+Å+Ë+Í]}]])${Ù}(_=$[Â];_<$[Å];)Ø+=${(_="\\")+Ú+Ñ+Ö+(Û=(_=_+Å)+Ð)+Å+Ô[Ë]+_+Î+Ó}.${$+Ö+Æ+Û+Ð+_+Â+Í+Û+Â+Á[Å]+Ö+_+Â+Í+Æ+É[Ë]+Ì}(_++);${Õ} Ø"`)())) console.log(f()) , is treated as a lower-case letter, and can occur wherever a lower-case letter can. However, for all сам по себе является зарезервированным идентификатором, используемым в качестве подстановочного знака в шаблонах.

Таким образом, код эквивалентен

eval()

В понимании списка Function() gets bound to Object() and $={}[Ô="constructor"][Ô] $(("return"+`"encoded script"`)()) to constructor ( return is equivalent to {}+"" -> "[object Object]" !{}+"" -> "false" !+[]+"" -> "true" {}[{}]+"" -> "undefined" , поэтому сопоставление с образцом выполнено успешно). Тогда диапазон À=(Á=!($={})+(Ø=""))[Â=_=+[]] Ã=(Ä=!_+Ø)[Å=++_] Æ=(Ç=$+Ø)[_] È=(É=$.$+Ø)[_] Ê=Ä[Ë=++_] Ì=Ä[Í=++_] Î=++_ Ï=Ç[Ð=++_] Ñ=Ç[Ò=++_] Ó=++_ $=$[Ô=Ï+Æ+È+Á[Í]+Ñ+Ã+Ê+Ï+Ñ+Æ+Ã][Ô] // function that returns string $($((Õ=Ã+Ä[Í]+Ñ+Ê+Ã+È)+`"${Ù=($=À)+Æ+(Ö=Ô[Ð])}($ ${[Æ+$+"[["+Î+ ++_,Ø+Ð+_+"],["+Ò+Ð,Ø+ ++_+Å+"],["+_+Ó,Ú=Ø+Å+Ë+Í]}]])${Ù}(_=$[Â];_<$[Å];)Ø+=${(_="\\")+Ú+Ñ+Ö+(Û=(_=_+Å)+Ð)+Å+Ô[Ë]+_+Î+Ó}.${$+Ö+Æ+Û+Ð+_+Â+Í+Û+Â+Á[Å]+Ö+_+Â+Í+Æ+É[Ë]+Ì}(_++);${Õ} Ø"`)()) builds the string of all characters greater equal "" :

Ø

Для каждого персонажа for($ of[[48,58],[65,91],[97,123]])for(_=$[0];_<$[1];)Ø+=String.fromCharCode(_++);return Ø in this string it's then checked whether console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890') and f=\r\n 416 byte submission here\r\n alert(f()) , resulting in the chars (À=(Á=!($={})+(Ø=""))[Â=_=+[]],Ã=(Ä=!_+Ø)[Å=++_],Æ=(Ç=$+Ø)[_],È=(É=$.$+Ø)[_],Ê=Ä[Ë=++_],Ì=Ä[Í=++_],Î=++_,Ï=Ç[Ð=++_],Ñ=Ç[Ò=++_],Ó=++_,$=$[Ô=Ï+Æ+È+Á[Í]+Ñ+Ã+Ê+Ï+Ñ+Æ+Ã][Ô],$($((Õ=Ã+Ä[Í]+Ñ+Ê+Ã+È)+`"${Ù=($=À)+Æ+(Ö=Ô[Ð])}($ ${[Æ+$+"[["+Î+ ++_,Ø+Ð+_+"],["+Ò+Ð,Ø+ ++_+Å+"],["+_+Ó,Ú=Ø+Å+Ë+Í]}]])${Ù}(_=$[Â];_<$[Å];)Ø+=${(_="\\")+Ú+Ñ+Ö+(Û=(_=_+Å)+Ð)+Å+Ô[Ë]+_+Î+Ó}.${$+Ö+Æ+Û+Ð+_+Â+Í+Û+Â+Á[Å]+Ö+_+Â+Í+Æ+É[Ë]+Ì}(_++);${Õ} Ø"`)())) . Затем char * and _ обязаны __($$,_,$,_$,$_){$>_$?_$=_$?!$:$,$=*(""-_+$_++)&*"{":_;_$?*(""-_+$$++)=$++:_;$&&__($$,_,$,_$,$_);}_(_){__(_,"",_,!!_,"½´ÞÅþå");} and $ 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") , давая символы declare -p __ and so on.

 

Карабас444


Рег
08 May, 2012

Тем
71

Постов
205

Баллов
600
  • 26, Oct 2024
  • #7

Perl (5.10 или 5.12), 30 29 байт

Эта программа состоит в основном из непечатаемых символов, поэтому вот шестнадцатеричный дамп:

# {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} __=(${__[@]} ${___[@]} ${___[@]^})

Эта программа очень проста: мы выполняем регулярное выражение ( /proc ) an underscore ( : {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ {_}>_ __=(/????/????/??/??) ___=${__%??} __=(${__[@]#$___?}) ____=${___#/*/?} ____=${____%?/*/} _____=${____%?} ____=${____#?} ___=${___%??/} ______=($___*_??) ______=${______#$___???????} ______=${______%??_*} _______=($___$_____???*) _______=${_______#$___??} _______=${_______%????} ___=$# ___=$((++___))$((___+++++___+___--))$___ $_____$_______$______$____{,} ___="\({$______..$'\\$___'}\)" __=(${__[@]} ${___[@]} ${___[@]^}) ; спасибо @Dennis за указание на то, что это работает) против регулярного выражения. Регулярное выражение указывается как выражение, а не буквально; в частности, мы принимаем побитовое дополнение ( __ ) of a string. Reversing the bitwise complement to get at the underlying string, we get the following regex that's being executed:

_(_=_==_)=['/'+_:':'-_;'@'+_:'['-_;'`'+_:'{'-_]

В версиях Perl 5.10 и 5.12 _()=['¥':'®';'¶':'Ï';'Ö':'ï'].-['~'-' '] syntax was an experimental syntax for allowing regexes to run arbitrary code at runtime. In this case, we use it to run a straightforward Perl program to print the desired output. (Versions earlier than 5.10 can't be used because they don't have “:[{“/@`‘Ḷḟ"/ỌḊ€ 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 '`'). .)

Современные версии Perl отключили “:[{“/@`‘Ḷḟ"/ỌḊ€ by default for security reasons, but if you have such a version of Perl, you can disable the check (and thus run this program) via v в качестве аргумента командной строки (вместе со стандартным { that specifies the version of the language to implement, and which doesn't count against the bytecount).

 

Karloslove


Рег
12 Oct, 2014

Тем
63

Постов
178

Баллов
523
  • 26, Oct 2024
  • #8

Фактически 8 5 4 байта

1

Как это работает:

!!-

Печать неявно выполняется в конце программы.

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

Редактирование 2: изменено ">" на '> благодаря Mego :) сохранено 1 байт.

Попробуйте онлайн!

 

Blackcat


Рег
24 Jun, 2014

Тем
83

Постов
214

Баллов
629
  • 26, Oct 2024
  • #10

Java (OpenJDK 9), 277 байт

Да, Ява, ты хорошо читаешь!

z

Попробуйте онлайн!

Это печатает диапазоны, но в обратном порядке, поскольку порядок не имеет значения.

{

Я играл на отсутствии правила «нет ввода», чтобы неявно определить "{"< ^+`"`"\+*`\":"\`"/":\*`\"["\`"@":::::-!! #@_^,_! which is required to make the whole thing work. If that's cheating, please say so.

Негольф и тестирование

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

Brainfuck, 89 85 байт

Поскольку Brainfuck в любом случае игнорирует буквенно-цифровые символы, это просто задача с постоянным выводом... (Редактировать: см. Решение Денниса для версии, которая на 10 байт короче)

xxd -r

Попробуйте онлайн!

Этот код — хороший пример базовых циклов с подсчетом в Brainfuck:

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

Обратите внимание, что здесь используются ярлыки переноса для генерации чисел, а это означает, что интерпретатору необходимо иметь 8-битные ячейки переноса (например, ту, на которую я дал ссылку).

 

Blardiard58


Рег
28 Feb, 2017

Тем
76

Постов
200

Баллов
620
  • 26, Oct 2024
  • #11

JavaScript (ES6), 983 байта

Оказывается, в ES6 есть много символов, которые вы можете использовать в именах переменных JavaScript! Отлично работает после того, как вы исчерпаете шесть имен переменных размером 1-2 байта с помощью console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890') and _=~[] $={} ___=++_ ____=![]+"" $$$$=____[_] __$=++_ $_$_=____[_] _$_=++_ $_$$=($+"")[_] $$_$=(_[_]+"")[_] _$$=++_ $$$_=(!""+"")[_] $__=++_ $_$=++_ $$__=($+"")[_] $$_=++_ $$$=++_ $___=++_ $__$=++_ _="\\" _$_$=$.$ _$$_=(!""+"")[__$] _$__=$+"" _$=_$__[__$] __$_=(_$_$+"")[__$] __=_$__[$$_] ___$=(!""+"")[_$_] $_=_$__[$_$]+_$+__$_+(!$+"")[_$$]+__+_$$_+___$+_$__[$_$]+__+_$+_$$_ $$=_$$_+(!""+"")[_$$]+__+___$+_$$_+__$_ $=___[$_][$_] $($($$+"\""+$$__+_$+_+__$+$_$+$$_+_+__$+$$_+_$$+_$+____[_$_]+$$$_+"."+____[_$_]+_$+_+__$+$__+$$$+"('"+$_$_+$_$$+$$__+$$_$+$$$_+$$$$+_+__$+$__+$$$+_+__$+$_$+___+_+__$+$_$+__$+_+__$+$_$+_$_+_+__$+$_$+_$$+____[_$_]+_+__$+$_$+$_$+_+__$+$_$+$$_+_$+_+__$+$$_+___+_+__$+$$_+__$+_+__$+$$_+_$_+_+__$+$$_+_$$+__+___$+_+__$+$$_+$$_+_+__$+$$_+$$$+_+__$+$$$+___+_+__$+$$$+__$+_+__$+$$$+_$_+_+__$+___+__$+_+__$+___+_$_+_+__$+___+_$$+_+__$+___+$__+_+__$+___+$_$+_+__$+___+$$_+_+__$+___+$$$+_+__$+__$+___+_+__$+__$+__$+_+__$+__$+_$_+_+__$+__$+_$$+_+__$+__$+$__+_+__$+__$+$_$+_+__$+__$+$$_+_+__$+__$+$$$+_+__$+_$_+___+_+__$+_$_+__$+_+__$+_$_+_$_+_+__$+_$_+_$$+_+__$+_$_+$__+_+__$+_$_+$_$+_+__$+_$_+$$_+_+__$+_$_+$$$+_+__$+_$$+___+_+__$+_$$+__$+_+__$+_$$+_$_+__$+_$_+_$$+$__+$_$+$$_+$$$+$___+$__$+___+"')\"")())() .

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

JavaScript, 1223 байта

Это был мой ответ до того, как я узнал об этом.

_

я побежал $ through jjencode and golfed the result manually. There are definitely more optimizations that can be done.

 

Petr2000


Рег
24 Jun, 2014

Тем
65

Постов
207

Баллов
542
  • 26, Oct 2024
  • #12

Самомодифицирующийся Brainfuck, 32 байта

+[-[--<]>>--] 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)

Попробуйте онлайн!

+[-[--<]>>--]++++++++++[<+.>-]<++++++++>+[-[---<]>>-]<-<<+++++[>+++++<-]>+[>.+<<<.+>>-] -reversible hexdump (contains unprintables):

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('_')); } } ||answer||

Бефунге, 73 72 59 57 55 53 байта

char

Попробуйте онлайн!

Это один цикл обратного отсчета от zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA9876543210 (i.e. one character after $->""+($='='+'=')+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+($='-'+'-')+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+--$+($='_'-'&')+--$+--$+--$+--$+--$+--$+--$+--$+--$ ). На первой итерации 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 ..."; sequence pushes two copies of <?=~"ÏÎÍÌËÊÉÈÇƾ½¼»º¹¸·¶µ´³²±°¯®¬«ª©¨§¦¥žœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…"; в стек - один из них является счетчиком начального цикла, а другой используется для уменьшения этого счетчика с использованием последовательности '> 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] (two NOTs make '>┘▀ , который затем вычитается). На последующих итерациях счетчик цикла уже находится в стеке, поэтому только один -M5.010 is required to setup the decrement sequence.

Остальная часть кода представляет собой просто длинное логическое выражение, вычисляющее, находится ли символ в диапазоне. Если это так, ветвь во второй строке разделяется влево, чтобы записать значение. Если нет, правая ветвь завершается, чтобы проверить, достигли ли мы нуля и должны ли мы завершить работу. Две ветви сливаются посередине, поднимаясь вверх и повторяя цикл. Обратите внимание, что все команды вертикального направления идут вверх, поскольку мы не можем использовать -Mre=eval , but that's fine because the instruction pointer automatically wraps at the top of the playfield.

Спасибо Мисте Фиггинс за то, что он изначально придумал лучшую технику приращения цикла.

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

 

Wnick


Рег
28 Mar, 2006

Тем
80

Постов
218

Баллов
638
  • 26, Oct 2024
  • #13

Anakra


Рег
09 Aug, 2011

Тем
76

Постов
194

Баллов
614
  • 26, Oct 2024
  • #14

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

это сохраняет массив символов в глобальной переменной ~

_

его необходимо выполнить на только что загруженной Linux-машине с =~ , or something like a pid namespace

объяснение:

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 ............"

чтобы попробовать, мы можем добавить ABCDEFGHIJKLMNOPQRSTUVWXYZ at the end to display the result

[ ||answer||

С, 128 байт

Да, С. И оно даже короче некоторых эзотерических.

@

Вызов b on a sufficiently large, empty a буфер.

Может быть, немного зависит от компилятора. Протестировано с использованием GCC; файл был сохранен в кодовой странице 1252.

 

Majya08


Рег
03 Jan, 2009

Тем
79

Постов
203

Баллов
608
  • 26, Oct 2024
  • #15

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

0123456789

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

x<':'

Это представление функции, а не полная программа. Я довольно долго играл в гольф с JJEncode (хвастаюсь Даррилео для этого), но вместо игры в гольф

'/'<x

я играл в гольф

x

где "/0123456789:;<=>?@ABCDE ... \1114110\1114111" is initialized to '/' в накладных расходах.

Переписано с использованием операторов-запятых, преобразованных в символы новой строки:

[a..]

Объяснение

Этот сценарий начинается с инициализации нескольких встроенных типов и преобразования их в строки. Строки, которые мы можем получить без использования буквенно-цифровых символов:

['/',':']

Из этих строк и необходимых цифр для ссылки на отдельные символы мы можем получить строки "/:" and ':' , который можно использовать как:

b

Конструктор объекта '/' , and its constructor is a , который мы можем использовать по существу как s = [x|[a,b]<-["/:", "@[", "`{"], x<-[a..], a<x, x<b] .

В этом случае закодированный сценарий, который будет выполняться, является вложенным _ loops concatenating all the alphanumeric characters to a string using their code points and returning it.

Для буквенных символов в закодированном сценарии, к которым невозможно получить доступ с помощью встроенных модулей, JJEncode использует восьмеричные escape-символы для их представления, а затем декодирует всю строку, возвращая ее из внутренней функции. Затем можно вызвать внешнюю функцию для выполнения источника.

Демо

_ ||answer||

Брейн-Зенит, 171 байт

Включает +3 за _'

__

Попробуйте онлайн!

ä

Вероятно, есть способ сделать это без повторения «функции» добавления 1.

 

Натали Лу


Рег
04 Apr, 2014

Тем
72

Постов
188

Баллов
548
  • 26, Oct 2024
  • #16

Дж, 171 байт

ö

Ой... у меня болит мозг... Попробуйте онлайн!

Вот так вы можете увидеть все это в одной строке (однако с разрывами строк оно не запустится.)

ä

Гарантированно работает только с версией J. _' , in that order. (Only the first 12 characters matter.)

Объяснение

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

(!)

После удаления некоторых скобок и улучшения некоторых чисел:

_'

Это состоит из множества __ and 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz s, которые добавляют аргументы в начало. Вот отдельные значения:

  1. __
  2. __=[__|[_',ä]<-["/:","@[","`{"],__<-[_'..],_'<__,__<ä]
  3. Ó×ü_ " removes every character that is non-alphanumeric or an underscore _ " vim equivalent of :s/\W\|_//g
  4. \W
  5. _
  6. /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{

¬/{ " inserts every character in the range / to { is 00000000: ac2f 7bd3 d7fc 5f ./{..._ как строка.

0xd7 generates the following string on TIO:

X

с x , we obtain the × й персонаж ( 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz от ¬/{Ó×ü_ ) и добавьте 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 to the end of it, yielding ?/...?: .

$><<([*?/...?:,*?@...?[,*?`...?{]-[?/,?@,?`])*'' and ->{[*?/...?:,*?@...?[,*?`...?{]-[?/,?@,?`]} говорят сами за себя.

Aa...Zz is the list of numbers [>+.>+.<<-] как строка.

0 0 58 0 26 64 96 ^ is similar to >++ , за исключением того, что это 0 0 58 0 24 64 96 ^ th character ( [>+>++>+++<<<-] from 0 0 58 32 -8 0 0 ^ ) and adds a >> до конца, уступая 0 0 58 32 -8 ^ .

Все это вместе дает 0123456789 . [>.+<-] оценивает это, давая нам:

0 10 48 32 -8 ^

(Примечание: >++ is tabulated addition.)

Затем с 0 8 48 32 -8 ^ , we take the first [>+>++++++>++++>-<<<<-] персонажи из этого, давая нам 8 ^ .

 

Dfsdfs


Рег
10 Jul, 2020

Тем
90

Постов
195

Баллов
655
  • 26, Oct 2024
  • #17

05AB1E, 18 15 11 байт

-4 благодаря Аднану, потому что, если входной размер равен 1, 05AB1E будет использовать 0 для b в первой команде.

++++++++

Попробуйте онлайн!

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

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

[...,''] ||answer||

Мозговой трах, 55 байт

:

Выход:

+-

Попробуйте онлайн!


Инициализирует ленту 3·2н, и работает оттуда.

9876543210ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz ||answer||

МДРП, 197 байт

Вот забавное решение.

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

MaxRibin51


Рег
23 Jun, 2010

Тем
80

Постов
189

Баллов
609
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно