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

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

Раунд окончен, надеюсь, вам понравилось. Разбор задач здесь.

Язык этого раунда — COBOL (диалект COBOL85), один из старейших языков программирования (1959 год "рождения", то есть вдвое старше меня). Несмотря на почтенный возраст, до сих пор активно используется, но не в спортивном программировании, так что для присутствующих должен стать сюрпризом :-)

Задача "A+B" (числа A и B заданы в отдельных строках) решается вот так:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SOLUTION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A        PIC 9(10)   VALUE ZEROES.
       01 B        PIC 9(10)   VALUE ZEROES.
       01 STR      PIC X(10).

       PROCEDURE DIVISION.
         ACCEPT STR
         MOVE STR TO A
         ACCEPT STR
         MOVE STR TO B
         ADD A TO B
         DISPLAY B
         STOP RUN.

С примерами программ на COBOL можно ознакомиться в статье в Прогопедии и статье на RosettaCode, а также в документации к OpenCOBOL.

Система тестирования использует OpenCOBOL версии 1.0. Для тестирования своих программ можно:

  • воспользоваться вкладкой “Запуск” в интерфейсе контеста.
  • воспользоваться ideone, язык COBOL. Напоминаю, что по умолчанию анонимно присланные коды показываются в recent codes, для сохранения спортивного интереса рекомендую зарегистрироваться и использовать опцию приватности "user's", или хотя бы использовать опцию “private”.
  • установить его локально.

В Linux эта версия есть в репозиториях. После установки компилятора команда cobc -std=cobol85 -x <filename> компилирует код и создает исполняемый файл.

В Windows, если у вас установлена Visual Studio C++ (протестировано с 2005 Express Edition):

  • скачайте http://assets.codeforces.com/files/surprize-language-round-5.7z
  • разархивируйте его с паролем fe8b058ca460d2 в каталог C: — к сожалению, в исполняемых файлах компилятора жестко прописаны пути C:\OpenCobol
  • располагайте исходные тексты для компиляции и запуска в C:\OpenCobol, компилируйте их командой compile.bat solution.cob

22 февраля вас ждет Surprise Language Round #5 — продолжение серии Unknown Language Round. Эпитет Unknown пал жертвой ребрендинга: едва ли можно гарантировать, что язык раунда будет неизвестен всем участникам, и чем больше раундов проводится, тем вероятнее, что какой-то из языков кому-то уже встречался.

Правила раунда:

  • Индивидуальное нерейтинговое соревнование по правилам ACM ICPC.
  • В раунде будет 5 задач, примерно отсортированных по сложности, и 2 часа на их решение.
  • Решения задач принимаются только на одном языке, который будет объявлен в начале контеста. Пожалуйста, в начале контеста перечитайте этот пост целиком.

Контест получился небольшой и не такой головоломный, как прошлый — все-таки будний день, да и вообще, добрее надо быть :-) Всем удачи!

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

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

Спасибо, Nickolas! Очень соскучился по необычным контестам. =)

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

Nickolas метит на место natalia в топе по вкладу?

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

Hi I have a question. how I can learn the syntax and rules of that language in middle of the contest? is there any help in the contest?

thanks a lot. :)

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

    The point of such contests is that you have to find the things you need to write the solutions yourself. You will be given the compiler/interpreter you have to use, and a very basic example of code, maybe a link to some more examples, but that's all, you'll have to find and explore any documentation you'll need on your own. The problems are simple so you need to care only about learning the language, not about figuring out the algorithm.

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

But... This is an existing language, or one created by yourself?

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

Hi everybody

I didn’t know that I’m not allowed to post in a non-English language …

My Blog Post

I have only translated an English post to my native language and my Contribution is -55 now.

What I have to do ?

thanks.

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

Для пользователей Windows при наличии установленной Visual Studio C++

А пользователям Windows без наличия установленной Visual Studio C++ предлагается её сейчас устанавливать?

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

    Будут альтернативные способы запуска онлайн, из интерфейса контеста. Я бы со студией не возилась :-)

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

    вопрос решился

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

Befunge was realy cool :)

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

What means "The round will be unrated" ? It won't affect our rating or what?

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

Напомните, язык и компилятор дают за 15 минут или в начале контеста?

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

what about linux users?will compiler be provided later during the contest?

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

What to do if I have windows that does not have visual studio c++, only have codeblocks IDE?

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

COBOL

ARE YOU KIDDING ME

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

Круто! Вспомним старину Коболу )

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

Как сказано в задаче "Код, приведенный в посте о раунде, эту задачу не решает." А мне одному кажется, что этот код вообще не складывает числа?

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

    Ну когда я его запускаю, он именно складывает числа. А что он делает у вас?

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

      В здешнем компиляторе он мне почему-то выдал первое введеное число

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

        И в здешнем, и на ideone все в порядке: http://ideone.com/NZrOv После второго числа точно есть перевод строки?

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

          Беру 1 пример

          12 3

          Ctrl+C, Ctrl+V

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

            Читаем условие: "Задача “A+B” (числа A и B заданы в отдельных строках)"

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

              Виной может быть Markup.

              Как делаю я — нажимаю на 1 потом на 2 потом на Enter потом на 3. Правильно? Получается:

              12 3

              UPD. Копипастю я не свой текст, а текст из примеров к задаче.

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

                Неправильно, так перевод строки съедается. Надо писать <br /> там, где хочешь строчку разорвать.

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

                  Ну это в Markup, а как во входных данных писать? Так же? O_O

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

                  А во входных просто дописать лишний перевод строки в конце, не?

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

                  Уже всё понял. Ем.

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

          Откровенно говоря, мне немного неясно, каким волшебным способом вы смогли сделать этот перевод строки, а afix нет. Я в всматривался в оба ввода теста, я скопировал ваш тест, запустил его снова на здешнем компиляторе, но ни разницы, ни сложения двух чисел не обнаружил

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

            У меня все волшебным образом заработало, когда тест стал выглядеть так (\n — перевод строки): "123\n456\n"

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

      Он не считывает второе число =(

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

Да жаль что, с КОБОЛ-ом нельзя писать трудные математические проги . Но зато её понимает каждый.

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

    Но зато её понимает каждый.

    Лол ват? Конечно, изначально кобол задумывался как язык, на котором типа управленцы будут писать программы и программисты будут не нужны; но как будто мы не видим, что получилось в итоге.

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

The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense. (E. Dijkstra)

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

Контест очень понравился, буду ждать следующих серий; но такое количество гнусного мата в такой короткий промежуток времени от меня давно уже не исходило. :) Полбеды было бы отсутствие в интернете нормальных современных доков про этот язык, если был бы не сам язык.

001210 PERFORM UNTIL N IS NOT GREATER THAN 0
001220 DIVIDE N BY 2 GIVING N REMAINDER Y
...
001620   MOVE 1 TO StartPos.
001630   INSPECT RESSTR TALLYING StartPos FOR LEADING ZEROES

— мне этот кошмар всю ночь сниться будет. :D

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

так как делать strlen в этом ужасе? length(string) не спасалоWIXYZIL 6

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

    Не так понял вопрос, сорри

    У меня другой вопрос — как адекватно отсекать ведущие нули? Я придумал только такое, но мне это СОВСЕМ не нравится, хоть и писалось не руками: 1217747

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

      Ну про ведущие нули вот тут один из основных примеров, да и в гугле легко гуглится.

      001620   MOVE 1 TO StartPos.
      001630   INSPECT RESSTR TALLYING StartPos FOR LEADING ZEROES
      001640   DISPLAY RESSTR(StartPos:)
      
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      чтобы выводилось без нулей, надо объявить тип данных, с отображением другим:

                01 C        PIC Z(10)9.
      

      Потом копируем в эту С наше Б и выводим С. Z означает, что если в разряде ничего нет или нуль, то ничего не выведет.

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

        Это отсечет все нули или только ведущие?

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

          z(10)9, вы видите, это равно ZZZZZZZZZZ9, все Z могут превратиться в пробел, а девятка в конце никогда не упадет

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

          Только ведущие, но оно пишет вместо них пробелы — слава богу проверяющая система триммит пробелы и такие решения проходят :)

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

I feel sorry for the people that use COBOL for living :P

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

WHY C'S 14 FAILS ALL TIME?

RPU + 14 -> FDI

THE SECOND LINE IN THE INPUT IS OBVIOUS 0 NOT 14

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

    "Note that numeric variables are read into strings and then converted into numbers — this is explained by the compiler specifics which reads numbers in different ways depending on whether they are read from cosole or from file redirected to the program input stream."

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

Как хорошо, что такие языки — это давно пройденный этап развития.

Nickolas, спасибо за контест!

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

Here is my code for problem A. gl & hf. :P

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

Thanks for such a nice contest :)

I experienced a few annoying problems which I don't understand until now:

  1. Sometimes the compiler just doesn't work. I used windows. I had to restart cmd once every five minutes.

  2. Lots of "Error: syntax error, unexpected LITERAL, expecting EXTERNAL or GLOBAL". I tried to google but it didn't help.

Anyone experienced the same problems and understand how it happened? :)

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

    I received that error (Error: syntax error, unexpected LITERAL, expecting EXTERNAL or GLOBAL) because i made a typo in a declaration

    I put 01 str X(15).

    But forgot to put the "pic":

    01 str pic X(15).

    I also looked for it on google, but didn't find much, some said that this error was caused by additional spaces, so i looked into that, and i noticed the missing pic keyword, which solved the issue.

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

      Thanks. Seems like that was exactly what happened. During contest I was too frustrated and rewrote most of the codes :)) Cost me quite a lot of time :(

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

    It tries to append something to your PATH each time you call it :) So eventually the PATH will become too long that Windows cannot process it.

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

Извините, но этот раунд рейтинговый или нет? нигде не было написанно.

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

    В посте:

    Правила раунда:

    • Индивидуальное нерейтинговое соревнование по правилам ACM ICPC.
  • »
    »
    13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +8 Проголосовать: не нравится

    ^

    UPD. Интересный баг — история правок не сохраняется =\

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

Есть такое ощущение, что некоторым моим преподавателям в вузе по предметам, связанным с программированием, именно кобол повредил мозг и они так и остались ментально в каменном веке. С каждым курсом все страшнее и страшнее.

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

Thanks for the contest! At times it was a bit frustrating when I got lost in figuring out smaller details like removing the trailing zeros or concatenating strings without spaces in between. But I suppose that was to some extend intended :) Right now I have to admit that I would rather code in Befunge than in COBOL. There you have that really small set of possible operations which gives you the power to create complex structures (loops, etc.) yourself (which was fun) while COBOL provides all this — but you have to figure out what the right syntax is. This almost always took me longer than implementing it myself in Befunge last time.

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

http://mirror.codeforces.com/contest/153/standings/page/4 Дорешивают! Понравилось :)

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

Хм, впервые я рад, что пропустил раунд.

Язык ужасен. Befunge 100500 раз элегантнее.

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

А чекеры для таких раундов пишутся на языке раунда?

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

    Нет, чекеры пишутся на стандартных языках, решение на языке раунда с чекером сверяется последним движением.

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

COBOL just like COLLECTION, neither of them is easy to learn. :<

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

If any of you are interested in participating in an external surprise language contest, there is a contest starting tomorrow(3rd march) at 12:30 Gmt.

Contest Link: http://chaos.techkriti.org