Колмогоров Гнучкість. Розпродаж AKA! знижки на всі Codegolf, поки запаси останні!


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

Деякі приємні роботи з гольфу там: 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буде переданий, значення argcякого буде 1, якщо викликається без аргументів.

  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. Закриваючі дужки

Ми не можемо використовувати "]" або "}", щоб закрити наші масиви або функції. На щастя, у C є графіки та триграфи, які працюють. :>стане ], поки ??>стане }. Для цього потрібен gcc взяти -trigraphsкомутатор, оскільки він ігнорує триграфи за замовчуванням (з порушенням стандарту).

  1. Побітні операції

Ми не можемо використовувати &для маскування шматочків нашого індексу, і не можемо використати, %щоб дістатися туди старомодним способом. Тому ми покладаємось на поведінку, що залежить від реалізації. Зокрема, ми переміщуємо свої 32-бітні цілі числа досить далеко вліво, щоб втратити біти, а потім назад вправо. Наприклад, щоб отримати останні 5 біт нашого номера, ми спочатку зміщуємо його вліво на 27 біт (залишаючи abcde00000...), а потім переміщуємо його назад вправо на 27 біт (залишаючи ...00000abcde).

  1. Різні значення

Нам потрібно ще декілька буквальних значень у всьому коді - вони взяті з відповіді АР Арнольда, плюс 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
??>

Чудова робота! Приємне пояснення теж. (Я не на 100%, але вважаю, що в заголовку слід писати "C (gcc) -триграфи")
Джонатан Аллан

1
Це для дискусій. Код не специфічний для gcc, він не повністю відповідає стандарту коду, але на моєму комп'ютері комп'ютер компілює його добре без аргументів. Просто в TIO немає вбудованого компілятора, який би відповідав стандарту за замовчуванням, якщо б (або старіша збірка gcc), то триграф повинен просто генерувати попередження.
LambdaBeta

Використовуючи ?:розширення g ++ , зловживайте побітовим зміщенням по модулю 32, 273 байтів
user202729

Це розумно. Я збираюся зберегти його таким, яким є, оскільки ця версія не потребує -trigraphsопції для деяких компіляторів C, тоді як ?:потрібен gcc, який вимагає -trigraphs.
LambdaBeta

6

мозковий ебать , 635 байт

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

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

У відповідь на те, що нарешті побили Javascript, я переграв усе, що можу з цього:

1 байт збережено, маючи 32 у комірці 0 та збільшуючи клітинку 1 (єдиною причиною, яку я спочатку мав у іншому випадку, було швидке виправлення, коли Орджан Йохансен зазначив, що я не можу використовувати ])

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

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

мозковий ебать , 639 байт

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

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

Спочатку ми генеруємо число 32. Потім ми просто прокручуємо одну клітинку і перемикаємо друк між цією клітиною і тією, що містить 32. Постійно зростаючі числа - це те, що Brainfuck робить добре.

Приємно бити Javascript за допомогою Brainfuck, це трапляється не часто!


Вибачте, але ]це не дозволений символ. Хоча ви все-таки зможете це виправити і перемогти Javascript. :)
Ørjan Johansen

@ ØrjanJohansen fix
Level River St

Вибачте, ви втратили Javascript.
користувач202729

@ user202729 досить добре! все-таки я 3 дні бив Javascript. Оскільки я не можу використовувати петлі, оскільки ]це не дозволено, я думаю, що моя відповідь BF зараз, мабуть, оптимальна.
Рівень річки Св.

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


32як 8<<9-7економить байт для кожного 32.
TFeld

1
@TFeld Насправді я додав зміни до свого вирішувача, який щойно знайшов 32 = 8<<98(тому що ). Кілька виразів можна таким чином скоротити. Ще над цим працюю. 982(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(...)).
Ørjan Johansen

3

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

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

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

Це трохи важко для Brain-Flak, оскільки ми не можемо використовувати ]або }. Значення є лише корисними символами <>().

Ось програма Haskell, яка допомогла мені написати це

Він просто підраховує пропуск, де пробіли, і проштовхує їх окремо.


Це наочно оптимально?
користувач202729

@ user202729 Я підозрюю, що ні. Це могло бути хоч. Немає тонни кімнати, але я далеко не в змозі довести, що це оптимально. Хоча, оскільки у нас немає {}комп'ютерного пошуку, можна було б знайти оптимальне в обмежений час.
Ad Hoc Hunter Hunter

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

@ user202729 Ну це було не оптимально. Я знайшов коротший.
Ad Hoc Hunter 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нам потрібно?

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

Для цього я використав indexOf- він повертає хибне значення, якщо перший аргумент є префіксом thisаргументу.

Представити літерали функції


1
спіткнувся з кінцем пояснень і звивається, звисаючи з гілки
Ørjan Johansen

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(команда і деяка арифметика закінчують завдання.

Це була захоплююча частина; решта - це гольф-константи, і я, мабуть, цього не зробив якомога більше. Один із хитрощів, якими я користуюся, - це те, що за замовчуванням Xmaxце 10, XFactце 4 і ΔTblдорівнює 1.


Хоча матриця 1 * 256 не працюватиме, чи можете ви зробити щось на зразок 3 * 99 матриці і використовувати div / mod для індексації матриці?
користувач202729

О, ми також не можемо індексувати речі, тому що (це заборонено.
Міша Лавров

Чи є умовне вираження (якщо тоді тоді ще c) чи підлога чи мод? Точність числа становить ~ 15 десяткових цифр, правильно?
користувач202729

Все це існує. Ми просто не можемо потрапити на запис в матрицю [A](I,J), і, наскільки я розумію, ти хочеш зробити щось на кшталт, [A](int(I/99),I-99int(I/99))щоб прочитати всі елементи матриці [A]- ми також не можемо цього зробити. (До речі, )це також заборонено. На щастя, нам не доведеться закривати кінцеві дужки, але це обмежує, як ми можемо використовувати багато команд.)
Міша Лавров

Я думаю про використання числа для кодування масиву, подібного до бітової маски. Як (123456789 >> X) та 1 в Python.
користувач202729

1

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

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

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

Я написав програму для створення оптимальної програми Brain-Flak для будь-якого виходу. Припустимо, що:

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

, тоді це рішення є оптимальним.

O(n5)


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схожий на strте, що він є ітерабельним, однак, повторюючи це дає цілі числа, а не символи. Ми можемо використовувати його для кодування базового N літералу та reduce(lambda x,y: x*N+y, my_bytearray)для його декодування.

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

Також неможливо використовувати всі бази.

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

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