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

15

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

Ваши ответы будут оцениваться в байтах с меньшим количеством байтов, тем лучше.


1: мне действительно нравятся некоторые ответы там.

Пост Рок Гарф Хантер
источник
Возможно, вы могли бы изменить название задачи на «изменяемая программа самооценки» или что-то подобное.
Дилнан
Вы можете использовать соблюдаемые языки или только устный перевод?
Logern
@Logern Вы можете использовать либо.
Пост Рок Гарф Хантер
2
Argh. Я потратил полчаса на создание решения Hexagony , но когда я пошел, чтобы проверить его, удаление байта заставило шестиугольник сжаться ! :(
Джо Кинг,
1
@WW То, что я имею в виду, это « 1 bytesтехнически неправильная грамматика, но при условии, что языки не имеют встроенной функции для вывода строки« байты »в <= 2 байта, программа будет длиннее 3 байтов, поэтому она не имеет значение "- это не имеет значения в любом случае.
user202729

Ответы:

16

Backhand , 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\

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

Это более или менее порт моего ответа счетчика Гейгера , но с другим выводом (который сам по себе является портом ответа Кляйна).

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

Отражатели справа направляют IP в нижнюю левую строку, поэтому удаление верхнего правого из них позволяет IP в верхнюю правую строку. Удаление байта в любом месте вдоль верхней линии приводит к тому, что верхний отражатель располагается выше L (что позволяет программе войти в правый нижний угол). Удаление байта вдоль нижней части корректирует этот отражатель (или удаляет его) так, что последний символ неявно заполняется пробелом, что позволяет IP отскочить с обеих сторон от верхнего правого отражателя и в верхнюю правую строку.

Однако лишние места разочаровывают. Но все попытки уменьшить их привели к появлению более крупных программ, программ одинакового размера или программ, которые не на 100% защищены от радиации. Ответы Klein и> <> здесь используют функции, недоступные в руническом языке.

Draco18s больше не доверяет SE
источник
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 :(.

Expanded:

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

Первоначально я сделал это с )одной строкой ниже, но оказалось, что это именно то, где разрыв между шестигранниками размера 5 и размера 6. Это означает, что когда байт удаляется, размер все смещается вниз и разрушает пути. Я определенно уверен, что размер 5 возможен.

Джо Кинг
источник
Если я правильно понимаю, не могли бы вы поставить )строку ниже, а затем просто поставить неактивную после нее, чтобы получился шестиугольник размера 6?
EdgyNerd
@EdgyNerd Если после него поставить no-op, то его можно удалить, не затрагивая программу
Jo King
2

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

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

Попробуйте онлайн! JoKing's Verifier

Я думаю, что этот ответ похож на ответ ДжоКинга> <> , но я не читаю> <>, поэтому я не уверен.

Здесь есть 4 различных типа удаления байтов

  1. Байт удаляется из первой строки раньше /. В этом случае косая черта эффективно перемещается влево на один пробел, отклоняя ее в нижнюю строку и предотвращая выполнение измененной части кода. Это заставляет нас запускать код ("40 bytes"@, который выводит 40 bytes.

  2. Первый /удаляется из первой строки. В этом случае мы запускаем код "0"+"4"$" bytes"@, который является запутанным способом или печатью 40 bytes.

  3. Новая строка удалена. Это заставляет нас начинать с конца второй строки, и результирующий код (с удаленными noops) 1("40 bytes"@, который просто печатает 40 bytes.

  4. Байт из последней строки удаляется. Это приводит к 1смещению в конце первой строки влево и предотвращает его добавление в стек, когда указатель отклоняется на /. Код "0"+по этой причине толкает 0вместо 1, остальная часть кода превращается 0в 40 bytes.

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

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

Попробуйте онлайн! JoKing's Verifier

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

Пост Рок Гарф Хантер
источник
37 байтов в 200
Джо Кинг,