Блог пользователя Nakilon

Автор Nakilon, 11 лет назад, По-русски

Хочу порешать Unknown Language Round 4, но наткнулся на странное поведение оператора # в конце строки.

Так как код тороидален, то следующий код циклится на печати единицы:

1.

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

1..@

И следующий код теоретически должен напечатать единицу, а потом зациклиться на нуле, потому что # реализует пропуск push(1):

1.#

Но увы, циклится печать единицы. Потому что в интерпретаторе codeforces # не работает через границу. В Википедии, правда, это поведение не регламентировано, ровно как и на Esolang, но мне кажется, что это косяк.

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

  • Проголосовать: нравится
  • +25
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Цитата из документации по Funge-98

Negative values are legal arguments for j, such that 04-j@ is an infinite loop.

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

In Befunge-93, each line ends with the current operating system's "end of line" character

но не совсем понятно, что делается в случае двухбайтового (виндового) перевода.

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Скорее всего, программа просто считается тором 80x25, и всё, что не написано, заполняется noop-ами. Так что прыжок происходит не через единицу, а через четвёртую, не написанную, клетку первой строки.

Например, здесь явно написано про размеры 80x25.