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

Автор KADR, 16 лет назад, По-русски
На топкодере регулярно проходит 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
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
a[' '] - это отжиг. Пробельный символ не считается, но без него код не работает :). Кстати, почему там три пробела?
16 лет назад, скрыть # |
 
Проголосовать: нравится 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;
}
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 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.: как сделать подсветку кода в комментариях?
16 лет назад, скрыть # |
 
Проголосовать: нравится 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;
}
П.С. видимо, лучше отвечать на исходное сообщение, иначе все рискует безумно поехать
16 лет назад, скрыть # |
 
Проголосовать: нравится 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;
}
16 лет назад, скрыть # |
 
Проголосовать: нравится 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;
}
  • 11 лет назад, скрыть # ^ |
    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...

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

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

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