Програма самооцінки


15

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

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


1: Мені справді подобаються деякі відповіді.


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

Чи можете ви використовувати відповідні мови або лише інтерпретовані?
Логерн

@Logern Ви можете використовувати будь-який.
Опублікувати Rock Garf Hunter

2
Арг. Я витратив півгодини на приготування розчину шестикутника , але коли я пішов перевірити його, видалення байта змусило шестикутник скоротитися ! :(
Джо Кінг,

1
@WW Що я маю на увазі " 1 bytes- це технічно неправильна граматика, але якщо припустити, що мови не мають вбудованого для виведення рядка" байт "у <= 2 байти, програма буде довшою за 3 байти, тому вона не матерія "- це все одно не має значення.
користувач202729

Відповіді:


16

Бекхенд , 40 36 29 байт

vv""sseettyybb  ""jjHHOO]

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

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

Пояснення:

Програма без опромінення:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

Опромінена програма:

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

vv"sseettyybb
v " s e t y b     The same instructions are still executed

Однак замість того, щоб стрибати до пункту ], він замість цього відображає кінець програми і Oнатомість приземляється .

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code

3

Рунічні чари , 47 байт

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

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

Що є більш-менш портом моєї відповіді Гейгера Counter , але з різним результатом (який сам по собі є відповіддю Кляйна).

>>yyLLПотрібно, щоб Runic генерував (принаймні) один IP, об'єднав два IPS та відобразив назад ліворуч, щоб усі варіанти призвели до єдиної IP-адреси, що рухається ліворуч. Може бути замінено на, yy<<але це не економить жодних байт.

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

Однак надлишки пробілів невтішні. Але всі спроби зменшити їх призвели або до більш великих програм, і до тих же розмірів, або до програм, які не мають 100% радіаційного захисту. І відповіді Klein, і> <> тут використовують функції, недоступні в Runic.


2

> <> , 43 39 байт

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

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

У неопроміненій програмі ми додаємо 0до '(39), а в опроміненій програмі пропускаємо 0 і додаємо -1до нього замість цього. Якщо щось видалено з верхнього ряду, ми замість цього переходимо на нижній рядок і просто виводимо 38 bytes.


2

Шестикутник , 71 байт

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

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

Я занадто довго пробував, намагаючись ввести це в шестикутник розміром 5, але мені довелося замінити розмір нижньої частини 6 замість цього :(.

Розширено:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

Я спочатку зробив це на )один ряд нижче, але виявилося, що саме там є поділ між розміром 5 і шестикутником розміру 6. Це означає, що коли байт видаляється, розмір все зміщується вниз і руйнує шляхи. Я точно впевнений, що розмір 5 можливий.


Якщо я правильно це розумію, чи не можете ви поставити )рядок нижче, а потім просто поставити не-оп, після цього, щоб він був шестикутником розміру 6?
EdgyNerd

@EdgyNerd Якщо ви поставите не-оп після цього, його можна буде зняти, не впливаючи на програму
Jo King

2

Кляйн 000, 41 байт

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

Спробуйте в Інтернеті! Верифікатор JoKing

Я думаю, що ця відповідь схожа на відповідь JoKing> <> , але я не читаю> <>, тому я не можу бути впевнений.

Тут є 4 різних видалення байтів

  1. Байт видаляється з першого рядка раніше /. У цьому випадку косою рисою ефективно переміщується лівий простір, відводячи її в нижній рядок і не даючи виконувати змінену частину коду. Це змушує нас запустити код ("40 bytes"@, який виводить 40 bytes.

  2. Перший /видаляється з першого рядка. У цьому випадку ми запускаємо код "0"+"4"$" bytes"@, який є перекрученим способом або друком 40 bytes.

  3. Новий рядок видалено. Це змушує нас починати з кінця другого рядка, і отриманий код (з видаленими петлями) є 1("40 bytes"@, який просто друкує 40 bytes.

  4. Видаляється байт з останнього рядка. Це призводить до того, що 1в кінці першого рядка буде переміщено ліворуч і запобігає його доданню до стеку, коли загострений відхилений /. Код "0"+з цієї причини висувається 0замість 1, решта коду перетворюється 0на 40 bytes.

Кляйн 001, 41 байт

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

Спробуйте в Інтернеті! Верифікатор JoKing

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


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