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

Автор KADR, 14 лет назад, По-русски
На топкодере регулярно проходит shortest code competition по задачам срмов (обычно простым). Иногда довольно интересно посмотреть, как можно сжать код, казалось бы простой задачи, до совершенно непонятного, но в то же время работающего. Предлагаю проводить такие соревнования и здесь, на Codeforces.

Я начну с задачи C из Codeforces Beta Round #24. Правила простые: каждый следующий код должен быть короче предыдущего. Побеждает тот, кого никто не смог перебить. Длина кода - количество символов в нем, не считая пустых (пробелов, табов, переводов строки и т.д.). Само собой, код должен быть АС хотя бы на одном из доступных компиляторов. Насколько я знаю, на топкодере дефайны в С++ не используют в таких соревнованиях, поэтому предлагаю и здесь их не использовать.

Учитывая возможности некоторых языков, предлагаю проводить отдельный зачет по разным языкам, т.к. вряд ли C++ или Pascal смогут соревноваться с Haskell или Python.

214:
#include <iostream>
__int64 n,k,x,y,a['   '],b['   '],d;
int main()
{
std::cin>>n>>k>>x>>y;
for(k%=2*n;d<n;d++) std::cin>>a[d]>>b[d],d<k?x=2*a[d]-x,y=2*b[d]-y:0;
for (d=0,k-=n;k>0;--k,++d) x=2*a[d]-x,y=2*b[d]-y;
std::cout<<x<<" "<<y;
}
  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
a[' '] - это отжиг. Пробельный символ не считается, но без него код не работает :). Кстати, почему там три пробела?
  • 14 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    '   ' - это число в системе счисления по основанию 256. Оно равно  32*256*256+32*256+32=2105376.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Пока просто бездумно.
206:
#include
<iostream>
__int64 n
,k,x,y,a['   '],b['   '],d,i;
int main()
{
std
::cin>>n>>k>>x>>y;
for(k%=2*n;std::cin>>a[d]>>b[d];d++) d<k?x=2*a[d]-x,y=2*b[d]-y:0;
for (k-=n;k>0;--k) x=2*a[i]-x,y=2*b[i++]-y;
std
::cout<<x<<" "<<y;
}
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    #include <iostream>
    203:
    __int64 n,k,x,y,a['   '],b['   '],d,i;
    main()
    {
    std::cin>>n>>k>>x>>y;
    for(k%=2*n;std::cin>>a[d]>>b[d];d++) d<k?x=2*a[d]-x,y=2*b[d]-y:0;
    for (k-=n;k>0;--k) x=2*a[i]-x,y=2*b[i++]-y;
    std::cout<<x<<" "<<y;
    }

    P.S.: как сделать подсветку кода в комментариях?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ой, случайно 203 не туда вставил. Вот:

      #include <iostream>
      __int64 n,k,x,y,a['   '],b['   '],d,i;
      main()
      {
      std::cin>>n>>k>>x>>y;
      for(k%=2*n;std::cin>>a[d]>>b[d];d++) d<k?x=2*a[d]-x,y=2*b[d]-y:0;
      for (k-=n;k>0;--k) x=2*a[i]-x,y=2*b[i++]-y;
      std::cout<<x<<" "<<y;
      }
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Не знаю, оно само.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Похоже, что это "стараются" среды разработки(ещё  на это указывает :). По-моему, достаточно monospace шрифта.
      А ещё в Notepad++ есть NppExport>Export to HTML.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
198:
#include <iostream>
__int64 n,k,x,y,a['   '],b['   '],d,i;
main()
{
    std::cin>>n>>k>>x>>y;
    for(k%=2*n;std::cin>>a[d]>>b[d];d++) d<k?x=2*a[d]-x,y=2*b[d]-y:0;
    while (i<k-n) x=2*a[i]-x,y=2*b[i++]-y;
    std::cout<<x<<" "<<y;
}
П.С. видимо, лучше отвечать на исходное сообщение, иначе все рискует безумно поехать
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
197:
#include <iostream>
__int64 n,k,x,y,a['   '],b['   '],d,i;
main()
{
    std::cin>>n>>k>>x>>y;
    for(k%=2*n;std::cin>>a[d]>>b[d];d++) d<k?x=2*a[d]-x,y=2*b[d]-y:0;
    for(;i<k-n;x=2*a[i++]-x)y=2*b[i]-y;
    std::cout<<x<<" "<<y;
}
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
164:
#include <iostream>
__int64 n,k,x,y,a['   '],b['   '],d,i;
main()
{
    std::cin>>n>>k>>x>>y;
    for(k%=2*n;d<k;d++) std::cin>>a[d]>>b[d],x=2*a[d%n]-x,y=2*b[d%n]-y;
    std::cout<<x<<" "<<y;
}
  • 9 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    I like the idea of having winners per language, especially difficult to compete with Java :-D

    But seriously, you can use code formatting... Is there a tool counting length? You know, I'm wondering if b[' '] is 5 characters or 8...

    edit: Ok, I found that you cannot use code formatting — in the comment above, 3 spaces were replaced with 1, hm HTML...

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
163:
#include <iostream>
__int64 n,k,x,y,a['   '],b['   '],d,i;
main()
{
    for(std::cin>>n>>k>>x>>y;d<k%(2*n);d++) std::cin>>a[d]>>b[d],x=2*a[d%n]-x,y=2*b[d%n]-y;
    std::cout<<x<<" "<<y;
}
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
160:
#include <iostream>
__int64 n,k,x,y,a['   '],b['   '],d;
main()
{
    for(std::cin>>n>>k>>x>>y;d<k%(2*n);) std::cin>>a[d]>>b[d],x=2*a[d%n]-x,y=2*b[d++%n]-y;
    std::cout<<x<<" "<<y;
}
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
157:
Snippet
#import <iostream>
__int64 n,k,x,y,b['   '],d;
main()
{
    for(std::cin>>n>>k>>x>>y;d<k%(2*n);) std::cin>>b[d+n]>>b[d],x=2*b[d%n+n]-x,y=2*b[d++%n]-y;
    std::cout<<x<<" "<<y;
}
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    хм, фиг знает откуда там какой-то Snippet взялся, его надо убрать ))
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

156

#include <iostream>
main() {
    __int64 n,k,a['   '],d;
     for(std::cin>>n>>k>>*a>>a[1],n*=2;d<k%n*2;) std::cin>>a[2+d],a[d%2]=2*a[2+d%n]-a[d++%2];
     std::cout<<*a<<" "<<a[1];
}

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

    О, есть еще чит с import оказывается

    155
    #import <iostream>
    main() {
        __int64 n,k,a['   '],d;
         for(std::cin>>n>>k>>*a>>a[1],n*=2;d<k%n*2;) std::cin>>a[2+d],a[d%2]=2*a[2+d%n]-a[d++%2];
         std::cout<<*a<<" "<<a[1];
    }

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

      151
      #import <iostream>
      main() {
          __int64 n,k,a['   '],d;
           for(std::cin>>n>>k,n*=2;d<2+k%n*2;) std::cin>>a[d],a[d%2]=2*a[d>n+1?d-n:d]-a[d++%2];
           std::cout<<*a<<" "<<a[1];
      }

      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        150
        #import <iostream>
        main() {
            __int64 n,k,a['   '],d;
             for(std::cin>>n>>k,n*=2;d<2+k%n*2;a[d%2]=2*a[d>n+1?d-n:d]-a[d++%2]) std::cin>>a[d];
             std::cout<<*a<<" "<<a[1];
        }

        :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
149:
#import <iostream> 
main() { 
    __int64 n,k,a['   '],d; 
     for(std::cin>>n>>k,n*=2;d/2<=k%n;a[d%2]=2*a[d>n+1?d-n:d]-a[d++%2]) std::cin>>a[d]; 
std::cout<<*a<<" "<<a[1]; 
}
»
9 лет назад, # |
  Проголосовать: нравится -28 Проголосовать: не нравится

These shortest code competitions really rub me the wrong way, to an extent I can hardly convey. I have spent well over twenty years honing my skill at writing code that would win no prizes for either length or brevity, by merely for clarity. Code clarity reigns supreme in my book. Not cleverness, brevity, or obfuscation. A shortest code competition to me is like a competition to see who can make love in the shortest time. Well, if that's what you are into, enjoy. But my priorities are completely different.

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

    Well this is just for having fun no need to be so serious :O

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

      And he even revived a 4-year old blog post to say that. Talk about serious business.

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

        O_o

        4 years old

        I didn't look at the posting time and thought it was a new thing, purely because of how many such things there have been in CF recently (achievements, stats, Polygon updates...)

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

        I didn't realize too. And I was wondering why such old contest :-D

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

    Programmers are doing "strange" things to have some fun :-D

    This is what I discovered recently — JSFuck.

    disclaimer: no I'm not a fun of such things, but comparing with code above, this is "advanced level"...

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

    The point of these competitions are exploiting the language and just playing around with code. It's your opinion but i feel that being clever and knowing the language will definitely make you a better programmer. Code clarity is no big deal. If you find this obfuscated, look at languages like Brainfuck or Intercal.

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

>I doubt that C++ or Pascal can compete with Haskell or Python

or Perl

"There was this bug running on my keyboard, I tried to hit it but the little bitch always dodged... and look, I wrote a Perl script!"

If we consider CF problems, then there should be general limitations concerning bizzare languages.

UPD: number of downvotes: 7, number of replies: 0. How impressive.

UPD2: oh, it's 4 years old. Maybe that's why (but I probably shouldn't try to find logic in CF downvotes).

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

    What do you mean "general limitations"?

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

      Dunno exactly, maybe making separate categories for some languages. Or restricting the set of usable languages. But a code for a non-DS-heavy problem in Java can't compete with a code in Perl, purely to the languages' syntax verbosity.