Колмогоров Гибкость. АКА Распродажа! Скидка

12

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

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

Вот простой, большой буква ASCII art CODEGOLF :

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFF
C      O   O  D   D  E      G      O   O  L      F
C      O   O  D   D  EEE    G  GG  O   O  L      FFF
C      O   O  D   D  E      G   G  O   O  L      F
 CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

Без каких-либо переносов (или завершающих пробелов в любых строках) длина составляет 256 символов:

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFFC      O   O  D   D  E      G      O   O  L      FC      O   O  D   D  EEE    G  GG  O   O  L      FFFC      O   O  D   D  E      G   G  O   O  L      F CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

Индексы (основанные на 0) непробельных символов:

1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255

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

Вы можете включить красивые печатные * новые строки (но без пробелов в строках), если это поможет.

Например, используя кодовую страницу Jelly, этот вывод приемлем:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      12345
6      =   A  D   H  K      R      Y   ]  `      g
h      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓ
ƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ
 ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

... но это так:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      123456      =   A  D   H  K      R      Y   ]  `      gh      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

... и так:

[32, 1, 2, 3, 4, 32, 32, 32, 8, 9, 10, 32, 32, 32, 14, 15, 16, 17, 32, 32, 32, 21, 22, 23, 24, 25, 32, 32, 32, 29, 30, 31, 32, 32, 32, 32, 36, 37, 38, 32, 32, 32, 42, 32, 32, 32, 32, 32, 32, 49, 50, 51, 52, 53, 54, 32, 32, 32, 32, 32, 32, 61, 32, 32, 32, 65, 32, 32, 68, 32, 32, 32, 72, 32, 32, 75, 32, 32, 32, 32, 32, 32, 82, 32, 32, 32, 32, 32, 32, 89, 32, 32, 32, 93, 32, 32, 96, 32, 32, 32, 32, 32, 32, 103, 104, 32, 32, 32, 32, 32, 32, 111, 32, 32, 32, 115, 32, 32, 118, 32, 32, 32, 122, 32, 32, 125, 126, 127, 32, 32, 32, 32, 132, 32, 32, 135, 136, 32, 32, 139, 32, 32, 32, 143, 32, 32, 146, 32, 32, 32, 32, 32, 32, 153, 154, 155, 156, 32, 32, 32, 32, 32, 32, 163, 32, 32, 32, 167, 32, 32, 170, 32, 32, 32, 174, 32, 32, 177, 32, 32, 32, 32, 32, 32, 184, 32, 32, 32, 188, 32, 32, 191, 32, 32, 32, 195, 32, 32, 198, 32, 32, 32, 32, 32, 32, 205, 32, 207, 208, 209, 210, 32, 32, 32, 214, 215, 216, 32, 32, 32, 220, 221, 222, 223, 32, 32, 32, 227, 228, 229, 230, 231, 32, 32, 32, 235, 236, 237, 238, 32, 32, 32, 242, 243, 244, 32, 32, 32, 248, 249, 250, 251, 252, 32, 32, 255]

(Этот последний является допустимым выводом списка на любом языке с любой кодовой страницей, и можно также использовать любое разумное форматирование списка.)


Вот код Python 3, который показывает недоступные байты ASCII.

* Хотя сама печать может и не быть такой красивой!

Джонатан Аллан
источник
Вы не можете использовать ни один из этих 97 байтов в своем коде. Означает ли это, что я не могу использовать эти символы ASCII: $%&*123456=ADHKRY]``ghosvz}~и нет новой строки?
Тит
1
@Titus Если ваша кодовая страница совпадает с ASCII, тогда да - или вкладка или любой другой символ в указанном диапазоне, например непечатные или расширенные. (Также - см. Связанный сценарий Python на TIO)
Джонатан Аллан
2
Для чего это стоит, вот валидатор кода (при условии отсутствия специальной кодовой страницы).
Арнаулд
У меня почти есть это в PHP ... нужен только способ array_map(function($n){return sprintf("%6b",$n);},...)без $(я мог бы сделать это) И без }(без понятия). Да; Я хочу упаковать данные!
Тит

Ответы:

7

Python 2 , 321 203 байта

print map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8,enumerate(bin(int(reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkf','')))))

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


Объяснение:

шиворот навыворот:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkчисло, 25731972618407747697792173390589410779249734035626759409848989703511287412985закодированное разрешенными символами (Не 123456разрешено)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') отображает строку в ее десятичную строку:

  • reduce(lambda x,y:x+y,'..','')такой же как ''.join('..')(Нет oразрешено)
  • repr('..')вместо str('..')(не sразрешено)
  • 'abcdefijkl'.find(y) сопоставляет символ с цифрой.

enumerate(bin(int(...)))преобразует числовую строку в двоичную строку и перечисляет. Это дает пары[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) преобразует перечисленный список в конечный результат.

  • map(lambda(i,x):.. , .. )вместо [... for(i,x)in ...](не o]разрешено)
  • lambda(i,x): ..преобразует каждую пару (индекс, значение) в индекс или 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 такой же как:
    • x>'0'and i or 8+8+8+8, (Не oразрешено)
    • [8+8+8+8,i][x>'0']или [8<<9-7,i][x>'0'](не ]разрешено)
  • 8+8+8+8= 32(Не 23разрешено)

Это означает, что программа по сути такая же как:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]
TFeld
источник
Там есть отличная игра в гольф: D
Джонатан Аллан
7

C (gcc) , 318 байтов

main(_){--_<88+80+88?printf((int[:>){77707-989908070??>,((int[:>){0xE8E8C79E^0xB0B0080,0xC07E0870^0xE0000C00,0xCC08099C^0xEE0C008E,0xE8888989^0xCC00808,0x9E088990^0x800C0000,0x990C8888^0x080ECC00,0xF9C7a088^0x080000C0,0x9F8C78F8^0x900000??>[_>>(0xC^0x9):>>>(_<<9+9+9>>9+9+9))<<(70^89)>>(70^89)?_:' '),main(_+9-7):0;??>

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

Это что-то вроде путешествия ...

1. Сжатие списка

Каким-то образом нам нужно будет проверить, является ли данное целое число одной из специальных кодовых точек. Любой «голый» список будет слишком длинным, поэтому мы используем контрольный список. Этот список имеет ненулевое значение в кодовых точках, которые «ограничены», и нулевое значение в тех, которые не являются.

К сожалению, это все еще занимает 512 байт, чтобы получить список (похоже 0,0,7,7,0,7,0,...). Это можно сократить с помощью битовой маски.

Чтобы использовать битовую маску, мы разбиваем каждый байт на две части. Первые 3 бита будут выбирать маску из массива, а последние 5 битов будут выбирать бит в массиве. Мы не можем уменьшать массив дальше, потому что 32-битные целые числа, используемые по умолчанию, не поддерживают более 2 ^ 5 = 32 бит.

Используя эталонную реализацию, я написал:

int main() {
    int i;
    int vals[] = {1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255, 0};

    for (i = 0; i <= 0xFF; ++i) {
        int j,f;
        f = 0;
        for (j = 0; vals[j]; ++j)
            if (vals[j] == i)
                f = 1;
        if (f)
            printf("1");
        else
            printf("0");

        if (i%32 == 31)
            printf("\n");
    }

    return 0;
}

Я смог сгенерировать соответствующие значения для этого нового массива с помощью команды echo "obase=16;ibase=2;$(./a.out | rev)" | bc. Это передает вывод вышеуказанной программы ( ./a.out) revпрограмме, которая переворачивает каждую строку. Он печатает это вместе с заголовком bc, который устанавливает выходную базу равной 16, а входную базу равной 2. Таким образом, bc преобразует двоичные цифры в шестнадцатеричную битовую маску.

Полученный массив можно увидеть в этом «бета» решении:

f(){
    int x;
    int arr[] = {0xE3E3C71E, 0x207E0470, 0x22040912, 0xE4488181, 0x1E048990, 0x91024488, 0xF1C7A048, 0x9F1C78F8};
    for (x=0; x<=0xFF; ++x) {
        int mask = arr[x >> 5];
        int bit = mask >> (x & 0x1F);

        if (bit & 1)
            printf("%c", x);
        else
            printf(" ");
    }
}

2. Работа с ограничениями

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

  1. Нет назначения

Это чувствуется и в других языках: без присваивания в C очень сложно получить какие-либо гарантированные значения в переменных. Самый простой способ для нас - написать нашу функцию в виде полной программы. Первому аргументу mainбудет передано значение, равное argc1, если оно вызывается без аргументов.

  1. Нет петли

Единственный циклические конструкции в C являются for, whileи gotoвсе из которых содержат недопустимые символы. Это оставляет нас с помощью рекурсии. Основная функция будет начинаться с 1 и повторяться до тех пор, пока аргумент не станет> 256, при этом она будет внутренне уменьшать аргумент, чтобы использовать значение с 0 индексами.

  1. Шестнадцатеричные значения

Значения в приведенном выше массиве являются шестнадцатеричными, даже если они преобразуются в десятичные, они содержат некоторые ограниченные символы, в частности 123456 (AD может быть в нижнем регистре). Чтобы обойти это, каждая константа XORed с другой, так что ограниченные символы удаляются. 1 становится 9 ^ B, 2 становится C ^ E, 3 становится B ^ 8, 4 становится 8 ^ C, 5 становится 9 ^ C, а 6 становится 9 ^ F (есть больше способов сделать это, я выбрал этот способ) ,

  1. печать

Ограничения не оставляют нам много функций печати. putcharи putsоба ограничены, уходя printf. К сожалению, мы должны отправить printfстроку формата, в идеале "% c". У всех таких строк есть тот неприятный знак процента, который мы хотим удалить. К счастью, мы предполагаем, что машина с прямым порядком байтов (потому что, очевидно, это то, что использует TIO, и это довольно типично). Построив целое число, байты которого в памяти равны 0x25 (%), 0x63 (c), 0x00 (\ 0), чему угодно (не имеет значения, после нулевого терминатора), мы можем просто передать его адрес, printfи он примет его это строка Один такой номер, который работает, -989830363 (0xC5006325). Это легко создать при ограничениях 77707-989908070.

По-прежнему существует проблема, заключающаяся в том, что мы не можем ссылаться на какие-либо значения (потому что мы не можем присвоить их и потому что мы не можем использовать &), поэтому мы должны использовать литерал массива (int []) {...}. Мы фактически используем это и для массива битовой маски, описанного выше.

  1. Закрывающие скобки

Мы не можем использовать ']' или '}', чтобы закрыть наши массивы или функции. К счастью, у Си есть орграфы и триграфы, которые работают. :>станет ], пока ??>станет }. Для этого требуется, чтобы gcc -trigraphsпереключился, так как он игнорирует триграфы по умолчанию (в нарушение стандарта).

  1. Побитовые операции

Мы не можем использовать, &чтобы замаскировать биты нашего индекса, и мы не можем использовать его, %чтобы получить старомодный способ. Поэтому мы полагаемся на специфическое поведение реализации. В частности, мы сдвигаем наши 32-разрядные целые числа достаточно далеко влево, чтобы потерять биты, а затем обратно вправо. Например, чтобы получить последние 5 бит нашего числа, мы сначала сдвигаем его влево на 27 бит (оставляя abcde00000...), а затем сдвигаем его вправо на 27 бит (оставляя ...00000abcde).

  1. Разные значения

Нам нужно еще несколько буквальных значений в коде - они взяты из JS-ответа Арно, плюс 27 (по вышеуказанной причине) добавлено мной как 9+9+9.

3. Соединение

Вот описание источника со всеми этими изменениями вместе.

main(_){                // This is our main entry point
--_<88+80+88            // This subtracts 1 from the argument (_) and checks if it is less than 256
    ?                   // If it is less than 256 we 'continue'
printf(                 // first we call printf with...
    (int[:>){           // An integer array that will be interpreted as a string
    77707-989908070     // With the value we determined above, to represent "%c\0\xC5"
    ??>,                // This is a trigraph for }, just as the :> above is a digraph for ]
    ((int[:>){          // We immediately create another integer array
0xE8E8C79E^0xB0B0080,   // Each row is the bit-mask for 32 characters
0xC07E0870^0xE0000C00,
0xCC08099C^0xEE0C008E,
0xE8888989^0xCC00808,
0x9E088990^0x800C0000,
0x990C8888^0x080ECC00,
0xF9C7a088^0x080000C0,
0x9F8C78F8^0x900000??>
[_>>(0xC^0x9):>         // This is {arr}[_>>5] just in a roundabout way
>>(_<<9+9+9>>9+9+9))    // Similarly this is (...)>>(_&0x1F)
<<(70^89)>>(70^89)      // This is <<31>>31 or &1, to check the last bit
?_:' ')                 // If its 1, we print the character, otherwise we print a space
,main(_+9-7):0;         // We recurse, the :0 is the other branch of the if, it terminates execution
??>
LambdaBeta
источник
Прекрасная работа! Хорошее объяснение тоже. (Я не на 100%, но считаю, что заголовок должен гласить «C (gcc) -триграфы»)
Джонатан Аллан
1
Это для обсуждения. Код не является специфичным для gcc, это не полностью совместимый со стандартами код, но на моей машине cc компилирует его без аргументов. В TIO просто нет встроенного компилятора, который бы соответствовал стандарту по умолчанию. Если бы существовала (или более старая сборка gcc), то триграфы просто генерировали бы предупреждения.
LambdaBeta
Используя ?:расширение g ++ , используйте битовое смещение по модулю 32, 273 байта
user202729
Это умно. Однако я собираюсь оставить все как есть, так как эта версия не требует -trigraphsопций на некоторых компиляторах Си, а ?:требует gcc, который требует -trigraphs.
LambdaBeta
6

брейкфук , 635 байт

++++++++++++++++++++++++++++++++.>+.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+....++++.+.+.<...>++++.<......>+++++++.+.+.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<......>+++++++.<...>++++.<..>+++.<......>+++++++.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.+.+.<....>+++++.<..>+++.+.<..>+++.<...>++++.<..>+++.<......>+++++++.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<.>++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.+.<..>>-.

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

В ответ на то, что меня наконец-то избили в Javascript, я сделал все возможное для этого:

1 байт сохранен благодаря наличию 32 в ячейке 0 и приращению ячейки 1 (единственная причина, по которой я изначально использовал ее в другом случае, была из-за быстрого исправления, когда OrjanJohansen указал, что я не могу использовать ])

1 байт сохранен уменьшением третьей ячейки (изначально в 0) для генерации 255=-1

2 байта сохраняются путем печати пробелов между символами 31 и 36 без использования, <>но вместо этого просто останавливаются на 32 для печати из ячейки 0 при увеличении с 31 до 33.

мозговой трах , 639 байт

>++++++++++++++++++++++++++++++++.<+.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.>....<+++++.+.+.>...<++++.>......<+++++++.+.+.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>......<+++++++.>...<++++.>..<+++.>......<+++++++.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.+.+.>....<+++++.>..<+++.+.>..<+++.>...<++++.>..<+++.>......<+++++++.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>.<++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.+.>..<+++.

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

Сначала мы генерируем число 32. Затем мы просто увеличиваем одну ячейку и переключаем печать между этой ячейкой и ячейкой, содержащей 32. Постоянно растущие числа - это то, что Brainfuck хорошо делает.

Приятно побить Javascript с помощью Brainfuck, это случается не часто!

Уровень реки St
источник
Извините, но ]это не разрешенный персонаж. Хотя вы все равно сможете это исправить и победить Javascript. :)
Орджан Йохансен
@ ØrjanJohansen исправлено
Уровень Река St
Извините, вы потеряли Javascript.
user202729
@ user202729 довольно хорошо! Тем не менее, я был избит Javascript в течение 3 дней. Поскольку я не могу использовать циклы, потому что ]это не разрешено, я думаю, что мой ответ BF сейчас, вероятно, является оптимальным.
Уровень Река St
5

JavaScript (SpiderMonkey) , 1918 1598 1487 1431 байт

Сохранено 56 байтов благодаря @ user202729

print(8<<98,7/7,9-7,7>>97,8>>97,8<<98,8<<98,8<<98,8,9,0xa,8<<98,8<<98,8<<98,0xe,0xf,7+9,8+9,8<<98,8<<98,8<<98,7+0xe,7+0xf,8+0xf,9+0xf,78^87,8<<98,8<<98,8<<98,77^80,70^88,70^89,8<<98,8<<98,8<<98,8<<98,9<<98,70^99,77>>97,8<<98,8<<98,8<<98,98-070,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,9^070,80^98,80^99,87^99,87^98,9^077,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,70-9,8<<98,8<<98,8<<98,7^70,8<<98,8<<98,9^77,8<<98,8<<98,8<<98,7^79,8<<98,8<<98,70^0xd,((8<<98)+' ').repeat(8^0xe)+(8^90),((8<<98)+' ').repeat(8^0xe)+89,8<<98,8<<98,8<<98,7^90,8<<98,8<<98,7+89,((8<<98)+' ').repeat(8^0xe)+(7|97),7+97,((8<<98)+' ').repeat(8^0xe)+(77|98),8<<98,8<<98,8<<98,80|99,8<<98,8<<98,8^0x7e,8<<98,8<<98,8<<98,0x7a,8<<98,8<<98,0x7d,0x7e,0x7f,8<<98,8<<98,8<<98,8<<98,7+0x7d,8<<98,8<<98,0x87,0x88,8<<98,8<<98,0x8b,8<<98,8<<98,8<<98,0x8f,8<<98,8<<98,7+0x8b,((8<<98)+' ').repeat(8^0xe)+0x99,0x9a,0x9b,0x9c,((8<<98)+' ').repeat(8^0xe)+(7+0x9c),8<<98,8<<98,8<<98,0xa7,8<<98,8<<98,0xaa,8<<98,8<<98,8<<98,0xae,8<<98,8<<98,78+99,((8<<98)+' ').repeat(8^0xe)+0xb8,8<<98,8<<98,8<<98,0xbc,8<<98,8<<98,0xbf,8<<98,8<<98,8<<98,97+98,8<<98,8<<98,99+99,((8<<98)+' ').repeat(8^0xe)+0xcd,8<<98,0xcf,0xd0,7+0xca,7+0xcb,8<<98,8<<98,8<<98,7+0xcf,0xd7,0xd8,8<<98,8<<98,8<<98,0xdc,0xdd,0xde,0xdf,8<<98,8<<98,8<<98,7+0xdc,7+0xdd,7+0xde,7+0xdf,0xe7,8<<98,8<<98,8<<98,0xeb,0xec,0xed,0xee,8<<98,8<<98,8<<98,7+0xeb,7+0xec,7+0xed,8<<98,8<<98,8<<98,0xf8,0xf9,0xfa,0xfb,0xfc,8<<98,8<<98,0xff)

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

Как?

То, что =не разрешено, является шоу-убийцей в JS. Мы не можем делать какие-либо переменные, и мы также не можем использовать любую функцию стрелки.

0789+-/|^<<>>

  1 = 7/7     |   50 = 80^98   |  136 = 0x88    |  216 = 0xd8
  2 = 9-7     |   51 = 80^99   |  139 = 0x8b    |  220 = 0xdc
  3 = 7>>97   |   52 = 87^99   |  143 = 0x8f    |  221 = 0xdd
  4 = 8>>97   |   53 = 87^98   |  146 = 7+0x8b  |  222 = 0xde
  8 = 8       |   54 = 9^077   |  153 = 0x99    |  223 = 0xdf
  9 = 9       |   61 = 70-9    |  154 = 0x9a    |  227 = 7+0xdc
 10 = 0xa     |   65 = 7^70    |  155 = 0x9b    |  228 = 7+0xdd
 14 = 0xe     |   68 = 9^77    |  156 = 0x9c    |  229 = 7+0xde
 15 = 0xf     |   72 = 7^79    |  163 = 7+0x9c  |  230 = 7+0xdf
 16 = 7+9     |   75 = 70^0xd  |  167 = 0xa7    |  231 = 0xe7
 17 = 8+9     |   82 = 8^90    |  170 = 0xaa    |  235 = 0xeb
 21 = 7+0xe   |   89 = 89      |  174 = 0xae    |  236 = 0xec
 22 = 7+0xf   |   93 = 7^90    |  177 = 78+99   |  237 = 0xed
 23 = 8+0xf   |   96 = 7+89    |  184 = 0xb8    |  238 = 0xee
 24 = 9+0xf   |  103 = 7|97    |  188 = 0xbc    |  242 = 7+0xeb
 25 = 78^87   |  104 = 7+97    |  191 = 0xbf    |  243 = 7+0xec
 29 = 77^80   |  111 = 77|98   |  195 = 97+98   |  244 = 7+0xed
 30 = 70^88   |  115 = 80|99   |  198 = 99+99   |  248 = 0xf8
 31 = 70^89   |  118 = 8^0x7e  |  205 = 0xcd    |  249 = 0xf9
 32 = 8<<98   |  122 = 0x7a    |  207 = 0xcf    |  250 = 0xfa
 36 = 9<<98   |  125 = 0x7d    |  208 = 0xd0    |  251 = 0xfb
 37 = 70^99   |  126 = 0x7e    |  209 = 7+0xca  |  252 = 0xfc
 38 = 77>>97  |  127 = 0x7f    |  210 = 7+0xcb  |  255 = 0xff
 42 = 98-070  |  132 = 7+0x7d  |  214 = 7+0xcf  |
 49 = 9^070   |  135 = 0x87    |  215 = 0xd7    |

32

Пусть shiftCount будет результатом маскирования всех, кроме наименее значимых 5 битов rnum , то есть, вычислить rnum & 0x1F.

8<<988<<232

Arnauld
источник
32как 8<<9-7сохраняет байт для каждого 32.
TFeld
1
32 = 8<<98982(mod32)
3
"шоу-убийца" или "фанатик"?
Джонатан Аллан
2
@JonathanAllan ;-) Последнее выходит из первого!
Арнаулд
Извините, если я глуп, но почему вы ссылаетесь на старую версию SpiderMonkey?
Соломон Уцко
4

Haskell, 623 617 614 594 360 342 байта

Редактировать: -234 байта благодаря @Lynn, найдя кодировку шаблона в виде строки. -18 байт благодаря @ Örjan Johansen.

map(\i->cycle(8+8+8+8:filter(\_->" XXXX   XXX   XXXX   XXXXX   XXX    XXX   X      XXXXXX      X   X  X   X  X      X      X   X  X      XX      X   X  X   X  XXX    X  XX  X   X  X      XXXX      X   X  X   X  X      X   X  X   X  X      X XXXX   XXX   XXXX   XXXXX   XXXX   XXX   XXXXX  X"!!i>' ')(pure i))!!9)(take(0xf8+8)(iterate(9-8+)0))

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

Как это устроено

map(\i->    )                   -- map the lambda over the
        (take(0xf8+8)           -- first 256 elements of
           (iterate(9-8+)0))    -- the list [0,1,2,....]

                                -- the lambda is:

    cycle                       -- make an infinite list by repeating the list
      8+8+8+8:                  -- wih element 32 followed by
                  pure i        -- the singleton list with 'i'
       filter                   -- but keep 'i' only if
          \_->" XXXX..."!!i>' ' -- the pattern has an 'X' at index 'i', else
                                -- remove it to make an empty list
                                -- i.e. the cycled list is, if the pattern is
                                -- a space: [32,32,32,32,32,32,32,32,32,32,...]
                                -- an 'X':  [32, i,32, i,32, i,32, i,32, i,...]
                                --                                       ^
                                --                        9th element ---/ 
                      !!9       -- pick the 9th element which is the result
                                -- of the lambda
Ними
источник
3
Вы можете индекс (id:pure(\_->8+8+8+8))по until((||" XXXX XXX XXXX XXXXX XXX XXX X XXXXXX X X X X X X X X X XX X X X X XXX X XX X X X XXXX X X X X X X X X X X X XXXX XXX XXXX XXXXX XXXX XXX XXXXX X"!!i<'X').(<1))pred 1 и сохранить кучу байтов.
Линн
1
342 байта с filterвместо untilветвления (и cycleчтобы избежать лишнего ++pure(...)).
Орджан Йохансен,
3

Brain-Flak -r, 4190 4188 байт

(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())())()<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())

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

Это немного сложно для Brain-flak, так как мы не можем использовать ]или }. Имеются в виду только полезные символы <>().

Вот программа на Haskell, которая помогла мне написать это

Это просто подсчет пропусков, где пробелы должны быть и выдвигать их по отдельности.

Специальный охотник за гарфами
источник
Это доказуемо оптимально?
user202729
@ user202729 Я подозреваю, что нет. Это может быть, хотя. Здесь нет места для маневра, но я далек от того, чтобы доказать, что это оптимально. Хотя, поскольку у нас нет {}компьютерного поиска, можно найти оптимальное за конечное время.
Ad Hoc Garf Hunter
Я заканчиваю тем, что пишу программу, которая генерирует оптимальное решение, но она немного медленнее, чем я ожидаю.
user202729
@ user202729 Ну, это не было оптимальным. Я нашел более короткий.
Ad Hoc Garf Hunter
3

JavaScript (SpiderMonkey) , 1001 919 789 441 байт

print(/u/.exec().map.call('0777700077700077770007777700077700007770007000000777777000000700070070007007000000700000070007007000000770000007000700700070077700007007700700070070000007777000000700070070007007000000700070070007007000000707777000777000777700077777000777700077700077777007',''.repeat.bind(Number)).map(/u/.exec().find.bind(/()/.exec().fill(Number.bind(0,88-070)).fill(/u/.exec().fill,!0),''.indexOf)).map(Map.call.bind(Map.call)))

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

Наконец-то бьет БФ !!!

Главная идея

Конвертировать каждый символ длинной строки строки в ее индекс или 32, в зависимости от значения.

Array.prototype.map? Как получить массив

Грубая сила, чтобы увидеть, какие объекты доступны через доступ к свойствам объекта (потому что ]это не разрешено, поэтому доступны только свойства с именем, совпадающим с идентификатором).

RegExp.prototype.execвозвращает подобный массиву объект при совпадении. Если аргумент не указан, по умолчанию используется аргумент undefined, поэтому он /u/.exec()совпадает и возвращает массив.

Получить 2 произвольных разных значения для 2 разных персонажей

Мы хотим иметь (x,y)=>x=='0'?32:y, но мы не можем использовать =.

Вместо этого мы собираемся сделать

new Array(a)
    .map(x=>x=='0'?()=>32:function()this)
    .map((x,y,z)=>x.call(y,z))

Мы можем mapиспользовать строку для некоторой функции, но =>это не разрешено, поэтому можно использовать только несколько функций. Может иметь связанные thisи некоторые связанные аргументы (поэтому он имеет форму (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

После рассмотрения списка функций ( repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply) я решаю, что будут использоваться следующие функции (после рассмотрения всех других комбинаций)

  • repeat: число -> разные строки.
  • find: thisArg -> первый элемент в массиве соответствует.

Общая идея будет:

[].map.call('07070707...', (x,y,z)=>[elem1,elem2].find(somefunction,x,y,z)

где somefunctionучитывает thisаргумент ( x) и первый аргумент ( elem1или elem2) и возвращает, соответствует ли он.

Последняя функция стрелки переписана на [].find.bind([elem1,elem2],somefunction).

Массив буквальный

Мы можем использовать regex exec для получения массива fillс разными значениями. Например, /()/.exec()возвращает массив длины 2, тогда мы можем заполнить его, как нам нужно.

Что somefunctionнам нужно?

Нам нужен тот, который возвращает истинное / ложное значение, зависит от this(это 1 из 2 функций, которые мы собираемся вернуть) и первый аргумент (должен быть строкой или массивом).

Для этого я использовал indexOf- он возвращает ложное значение, если первый аргумент является префиксом thisаргумента.

Представлять литералы функции

user202729
источник
1
спотыкается от конца объяснения и в конце концов свисает с ветки
Орджан Йохансен
2

TI-Basic (серия 83), 578 байт

8XFact8-ΔTbl
seq(X and XX≤8+8 or 8≤X and X≤Xmax or 7+7≤X and X<9+9 or 7+7+7≤X and X<8π or 9π<X and X<πXmax or 9 nCr 7≤X and X+X<77 or X=7²-7 or 7²≤X and X≤7*9-9 or X=70-9 or X=8²+ΔTbl or X=78-Xmax or X=9*8 or X=89-7-7 or X=89-7 or X=89 or X=900-807 or X=88+8 or 809-707<X and X≤97+77-70 or 9X=999 or 8X=990-70 or X=888-770 or X=899-777 or 8*7+77-8≤X and X+X<Ans or 7²X/77=77+7 or 999+77<8X and 7X<970-9-7 or 8²X=8888+8 or X+X=99+99+88 or 7X=9099-8077 or 9+8≤X/9 and X<997-770-70 or X=99+8² or X=87+80 or X=80+90 or X=87+87 or X=87+90 or X=87+97 or X=98+90 or X=999-808 or X=97+98 or X=99+99 or X=99+99+7 or 9²8<πX and X+X+X≤70*9 or 70π-π-π<Xand X+X+X≤9²8 or 70π<X and X<70π+π or 997-770≤X and X+X+X≤99*7 or 77+79+79≤X and X+8+9≤Ans or 77π<X and X<Ans-Xmax or 7*8*9-8≤X+X and X+X≤7*8*9 or X=Ans,X,0,Ans
8XFact+Ansseq(X,X,⁻8XFact,70π+π

TI-Basic имеет свою особую «кодовую страницу» со странными вариантами оформления, такими как перемещение символа пробела до 0x29, так что 0x20 может быть randM(командой.

Сложно понять, как заставить TI-Basic выводить правильный тип объекта. Строки не будут работать по нескольким причинам: нет способа сослаться на токен без использования токена, а также нам не разрешен "символ. Мы не можем просто написать список, потому что {и }запрещены. Мы позволили [и ]символы для матриц, а 1 по 256 матрица не работает, так как матрицы разрешены в большинстве 99 строк и столбцов. Мы не можем использовать для присвоения переменных, и мы не можем получить в списке переменных ʟили L₁в L₆любом случае.

Итак, здесь мы записываем сложную логическую формулу с неравенствами, которая говорит, что когда символ является одним из тех, которые мы хотим вывести. Затем мы используем seq(команду для создания списка с 1этими позициями и в 0других местах. Оттуда другая seq(команда и некоторая арифметика заканчивают работу.

Это была захватывающая часть; остальное - игра в гольф с константами, и я, вероятно, не сделал этого как можно больше. Один из приемов, которые я использую, заключается в том, что по умолчанию Xmax10, XFact4 и ΔTbl1.

Миша лавров
источник
Хотя матрица 1 * 256 не будет работать, вы можете сделать что-то вроде матрицы 3 * 99 и использовать div / mod для индексации матрицы?
user202729
О, мы тоже не можем индексировать вещи, потому что (это запрещено.
Миша Лавров,
Есть ли условное выражение (если a затем b, иначе c) или floor или mod? Точность чисел составляет ~ 15 десятичных знаков, верно?
user202729
Все это существует. Мы просто не можем получить доступ к матричной записи [A](I,J), и из того, что я понимаю, вы хотите сделать что-то вроде [A](int(I/99),I-99int(I/99))чтения всех элементов матрицы [A]- мы также не можем этого сделать. (Кстати, )это также запрещено. К счастью, нам не нужно закрывать конечные скобки, но это ограничивает то, как мы можем использовать много команд.)
Миша Лавров,
Я думаю об использовании числа для кодирования массива, похожего на битовую маску. Как (123456789 >> X) и 1 в Python.
user202729
1

Brain-Flak -r, 3894 байта

(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())<((())((()())()))>)))(((((((()()()()()()()())(()()()()()()()()())(()()()()()()()()()())()()()()())))<((((((((()()()()()()()()()()()()()())((((((((((()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()())()))))<((((((((((((()()()()()()()()()()()()()()()()()()()()())())())())())()()()()()()())))<((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()())())())()))))()()()())())())>)))()()()()()()()()()())>))))))()()())())())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())>)))())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())())<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())

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

Я написал программу для генерации оптимальной программы Brain-Flak для любого выхода. Предположить, что:

  • <> не используется
  • Моя программа правильная

тогда это решение оптимально.

O(n5)

user202729
источник
1

Python 2 , 162 157 байт

Предупреждение : непечатные символы впереди!

print map(lambda(i,x):(x>'0'and i-0xe0/7)+0xe0/7,enumerate(bin(reduce(lambda x,y:(x<<0xd-7)-x+y,bytearray('7?QcZ;+BqiQJUS!?B0W![<LBU7X!frQd(SQdB\0')))))

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

На основе существующего ответа TFeld , но с некоторыми изменениями:

A bytearrayпохож на a в strтом, что он итеративен, однако при итерации он дает целые числа, а не символы. Мы можем использовать его для кодирования литерала base-N и reduce(lambda x,y: x*N+y, my_bytearray)для его декодирования.

Поскольку файлы Python 2 по умолчанию не имеют кодировки, можно использовать только символы в ASCII (0..127). Нулевой байт, переводы строки, обратная косая черта и кавычки занимают еще 1 байт.

Кроме того, невозможно использовать все базы.

Я написал программу, чтобы найти кратчайшее представление n, учитывая эти ограничения.

user202729
источник