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

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

Контест окончен. 13 человек решили все задачи — это потрясающе!

Разбор задач будет доступен здесь.


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

Традиционная программа A+B (числа A и B разделены пробелом) выглядит вот так.

Для тестирования своих программ можно:

  • скачать исходный код на C авторского интерпретатора здесь. Проверяющая система использует именно этот интерпретатор с опцией -q.
  • использовать вкладку "Запуск".
  • использовать онлайн-интерпретаторы (отличаются от эталонного интерпретатора, но сильно упрощают отладку): 1, 2.

Полезные ссылки:

Замечания:

  1. В описании языка фигурируют команды ø и ß. Авторский интерпретатор обозначает их символами O и B (оба онлайн-интерпретатора поддерживают их неизменными).
  2. Конец файла кодируется как #-1, перевод строки — как #13#10.
  3. При завершении работы программы стек должен быть пустым, иначе интерпретатор выведет ошибку в стандартный вывод, и это будет считаться неверным ответом.

13 сентября вас ждет Surprise Language Round #7, посвященный Дню программиста.

Правила проведения раунда:

  • Соревнование будет нерейтинговым для всех участников.
  • Индивидуальное соревнование по правилам ACM ICPC: положение в результатах определяется количеством решенных задач, при равном количестве — набранным штрафным временем. Изначально штрафное время участника равно 0, при каждой сданной задаче оно увеличивается на время, прошедшее с начала контеста, + 20 минут за каждую неудачную посылку до отправки правильного решения. Решение считается правильным, если оно прошло все тесты из предопределенного набора; правильно ли посланное решение, становится известно сразу. Взломов чужих решений нет.
  • В раунде будет 8 задач, примерно отсортированных по сложности, и 2 часа на их решение.
  • Решения задач принимаются только на одном языке, который будет объявлен в начале контеста. Язык существует давно, а не придуман нами специально для раунда.
  • Пожалуйста, в начале контеста перечитайте этот пост целиком: в нем появится объявление языка, рекомендации по установке компилятора (в интерфейсе контеста будет доступен запуск программы онлайн) и полезные ссылки на документацию. В остальном изучение языка — дело рук самого участника. Для решения задач вы можете использовать любые ресурсы (но не совместное участие); ограничиваться документацией, приведенной в посте, не обязательно.

Я надеюсь, что выбранный мной язык будет незнаком большинству участников раунда. Для справки — список прошлых раундов такого типа.

Раунд Язык
Пятница, 13-ое, День Программиста Ada
Surprise Language Round #6 Roco
VK Cup 2012 Уайлд-кард раунд 1 Factor
Surprise Language Round #5 COBOL
Unknown Language Round #4 Befunge
Unknown Language Round #3 Pike
Unknown Language Round #2 Io
Unknown Language Round #1 Tcl

Всем удачи! И с Днем программиста!

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

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

Is the language and instructions provided at the very start of the round or a little before? (like 5 or 10 min?)

This sounds fun :)

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

You might want to add the time of the contest (usual time, 15.30 UTC, according to the Contests page). Unless you want to make this Surprise Round to have a Surprise Start Time too.

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

can install compiler in both linux and windows? or just one of them?

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    Should be both, we're checking this now. You'll also be able to run your code online ("Custom Invocation" tab of the contest interface).

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      but it's not User friendly (for me) !

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +15 Проголосовать: не нравится

        We are fully aware of people who refuse to use online compilers (although their reasons are a mystery to me). We do our best to make sure that compiler for the chosen language is available on all platforms. However, we cannot give a 100% guarantee of this, so we also provide alternative methods of running your code. Using "Custom Invocation" has an added benefit of running your code in the same conditions as your submission runs, which might be good for figuring out why your submission works locally but gets WA at the server.

        P.S. If you have a look at the languages used in previous rounds, you might notice that "user-friendly" is never part of the design :-)

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +23 Проголосовать: не нравится

So, where's the guy hoping for more maths ? :D

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

Last contest, the surprise language is ADA, then I spent 2 hour in reading the introduction and the grammar of this language.... After I can write the "a+b" and "hello world!" in online compiler... the contest is over... A sad story...XD

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

I wish the language in this contest is whitespace...then we can see a lot of "empty" code...

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

The language of the problem statements will be unknown as well?

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

How can we know the syntax rules of your language ? Will you explain ; or are the languages currently known worldwide ?

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

Hope for C++

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

Kinda hope it'll be Assembly :D

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

Вангую BF

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

MikeMirzayanov has registered for this contest :) It's going to be an exciting contest.

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

Nickolas Спасибо за контест) Караганда ждет начала, любопытство гложет))

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

FALSE((

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

As if ADA was not bad enough :(

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

I think FALSE is not a programming language at all!!

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +23 Проголосовать: не нравится

    Not true. We have evidence of at least 80 contest participants now that it is possible to write a program in it :-)

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

What is this thing ... OMG !!!

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

I'm ready to work with Assembly instead of this FALSE programming language!

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +26 Проголосовать: не нравится

    You know a programming language is bad when you can sort an array by hand faster than you can code it even for input size n = 105

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

Кажется, http://codeforces.com/contest/470/customtest в качестве перевода строки отправляет #10, а не #13#10

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

    Вероятно, это так. Вероятно, это воспроизводится только для не-windows браузеров. Обратите внимание, что в тестах всюду 1310.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Это точно? У меня в Шахматной доске 13,10, не заходило, а 10, зашло.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      В шахматной доске действительно проблема с тестами, перевод строки вида #13#10 не принимается

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

      Да, Mac OS, Chromium.
      P.S.: отправил в задачу B два раза один и тот же код -- один "time out", другой "ошибка компиляции" -- кажется, ваш интерпретатор отбросил ласты (
      P.P.S.: отправил третий раз тоже самое, но с расчетом на #10 -- Accepted ..\

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

Input is underspecified; some problems end the input with a newline (and apparently #10 only, not #13#10), and others don't have a newline at the end of the input. This makes comparing whether we've found the EOF different (either 10 or -1).

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

    Aha, there were endl instead of EOF!

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Luckily the while condition is just slightly changed, you simply need to check for more than one symbol in it, and that's all. I didn't encounter any problems with the input ending with newline instead of EOF, I just started using this "improved" condition.

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

      Oh, right, I should have checked for characters less than 33 (EOF (-1), line feed (10), carriage return (13), space (32)) instead; I coded [^$10=~] as the condition and should have [^$32>~] instead.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Awwww, this explains my "Wrong answer on test 1" in C!

    I haven't thought of that :(

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

Huge thank you for the contest, was fun as usual! Hopefully the next one will be sooner than a year from now.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится -21 Проголосовать: не нравится

    Hopefully the next one will feature a language that is more comprehendable and easier to code in. This one was a FALSE language.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +25 Проголосовать: не нравится

      I think this language is fun to learn.

      The challenge is to code in a language that is completely different from what you used to code in.

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

It was amazing! I'm very impressed. Thanks to Nickolas. Now we waiting for next Surprise Language Round.

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

Thanks a lot for the contest.

It was fun recollecting things about stack based programming. :-)

The language was actually fun once you get a hang of it. (Took me over 1 and a half hour)

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

Thanks for contest.

After being fun, I think trying to understand new library's and new languages in a short while is a good practice to face real ones.

PS: I wrote A & B directly and a c++ code generator for E CODE

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

Получается, хардкоднутый сорт 10 элементов Nickolas за решение не считает. :)

А почему тогда N до 10, а не до 30, скажем (насколько я понимаю, переменных может быть всего 26)? Не предвиделось такого варианта сдать задачу?

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

    Почему же не считаю, считаю и восхищаюсь :-)

    Изначально я собиралась делать как раз до 30-50. Но мое решение использовало другой принцип (я честно хранила элементы массива на стеке и каждый раз, когда мне надо было сделать swap для selection sort, копировала весь массив на верх стека), и где-то в районе 20 элементов наступало переполнение стека. Так что я решила перестраховаться и дать гораздо меньше элементов, чтобы любое решение проходило. Это все равно получилась не самая простая задача :-)

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      А почему тогда "8 человек решили все задачи", если их 13? Я как-то подумал что оттуда были исключены 5 человек хардкоднувшие сорт. :)

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

        Тысяча извинений, страница статуса не обновилась автоматически :-( 13, конечно

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Но там же простейшая сортировка подсчетом...

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

        Вот получается что её как-то сложно было заметить. Другого засыла сортировки подсчётом я вроде не заметил.

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

        Увы, читаемость кода не входит в число достоинств этого языка. Можешь объяснить, как сделать сортировку подсчетом?

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          for от 1 до 100 проходим массив и если встречаем текущее значение — выводим

      • »
        »
        »
        »
        10 лет назад, # ^ |
        Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

        Вот мне очень понравилось твоё решение! Сам я про сортировку подсчётом вспоминал (хотя не уверен, что это было во время контеста…), но не додумался, что можно наружный цикл делать по значению и внутренний по элементу массива, а не наоборот.

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

Both sample test outputs in problem H (array sorting) are wrong:

The first one should be: "1 2 3 3" (there are 2 instances of "3")

The second one should be: "2 2 3 5 7 12 44 60" (the "7" was accidentally omitted).

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Please read problem statement.

    The input consists of a single line of space-separated integers. The first number is n (1 ≤ n ≤ 10) — the size of the array. The following n numbers are the elements of the array (1 ≤ ai ≤ 100).

    3 and 7 are array sizes, not array elements, and should not be sorted.

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

I think there is a mistake in the statement. End of file is encoded as #-1,which is correct,while end of line — not as #13#10 ,but just #10 (at least on Codeforces,tested in custom test). I write a program ^.^. and the input is a blank line(Just press enter in input box),and I get a output like 10-1 --there is no #13

  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    The problem is, custom test differs from what testing system does — custom test uses end-of-line that matches OS under which browser runs, but the testing system always uses #13#10.

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      7786172

      If so, it's so weired that my submission for Problem D,which thinks that end of line consists of only one character,passed the system test.

      if a End-of-Line consists of 2 characters,after reading an integer, my code will get a #13 and thinks a integer end,and followed other chars,and the following loop will stop if the next char is not a letter,and the remaining #10 is not a letter,so my program will print nothing.

      BTW,I'm a windows user.

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

      msvcrt on Windows will do some automatically conversion between "\r\n" (Windows line ending) and "\n" (Unix line ending) when reading and writing. (If the stream is opened as text-mode, which is default)

      That is to say, even if the input file is in Windows line ending (CRLF, or "\r\n"), the program which uses msvcrt's I/O functions could only see a single "\n".

      Seems like the whole Codeforces judging system is based on Windows, and the interpreter is written in C, linked to msvcrt.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

Thanks for the great contest! I always enjoy these and this one was no exception.

end-of-line issues were pretty frustrating to me; I think #10 ('\n') is a more standard end-of-line character than #13#10 (which is apparently "vertical tab" and then a "newline"??). Two characters at end of line is weird...

I guess this way was more convenient for Windows users?

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

I did not realize there were variables in the language until after I did A,B,D,E. Oops...

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

Я настолько неудачник, что до меня за два часа не дошло, что ERROR: Stack is not empty at the end of program пишется в выводе, а не в компиляторе...