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

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

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

Язык этого раунда — 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
  • Проголосовать: не нравится

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

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

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

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

»
15 лет назад, скрыть # |
 
Проголосовать: нравится +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. :)

  • »
    »
    15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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.

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

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

»
15 лет назад, скрыть # |
 
Проголосовать: нравится +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.

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

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

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

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

Befunge was realy cool :)

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

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

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

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

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

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

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

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

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

COBOL

ARE YOU KIDDING ME

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

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

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

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

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

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

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

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

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

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

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

»
15 лет назад, скрыть # |
← 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

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

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

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

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

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

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

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

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

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

                01 C        PIC Z(10)9.
      

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

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

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

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

WHY C'S 14 FAILS ALL TIME?

RPU + 14 -> FDI

THE SECOND LINE IN THE INPUT IS OBVIOUS 0 NOT 14

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

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

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

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

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

»
15 лет назад, скрыть # |
 
Проголосовать: нравится +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? :)

  • »
    »
    15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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.

  • »
    »
    15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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.

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

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

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

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

»
15 лет назад, скрыть # |
 
Проголосовать: нравится 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.

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

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

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

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

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

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

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

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

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

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

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

»
14 лет назад, скрыть # |
← 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