Решал задачи на acmp.ru, и в самой простой задаче, где надо просто считать и вывести число, в рейтинге есть решение вполовину короче моего(всего лишь 35 сим.)! Это читерство или волшебство?
Ну как можно придумать решение короче этого?
#include <iostream>
int main()
{
int a;
std::cin >> a;
std::cout << a;
} // 59 символов
На этом сайте самые лучшие решения те, которые самые короткие.
Так как педантичной "стандартности" и "определенности поведения" С кода не требуется, завязываясь на особенности компилятора GCC в его конфигурации по умолчанию можно сократить код до
main(){char*gets(),b[9];puts(gets(b));}
http://coliru.stacked-crooked.com/a/bf02104f47ad8b3c
(по мотивам ответа @vegorov). Памятуя, однако, что функции gets
в стандартной библиотеке формально больше нет.
Можно даже совсем грубо, ибо длина входной строки по условию не превосходит 3 (в предположении о том, что ведущие нули в записи чисел не допускаются), а тип int
в GCC имеет размер 4
main(){int*gets(),b;puts(gets(&b));}
http://coliru.stacked-crooked.com/a/c64f32776b7fa150
а также
b;*gets();main(){puts(gets(&b));}
http://coliru.stacked-crooked.com/a/e92785b2be0324a6
Это уже 33 символа.
А на 32-битной платформе (т.е. на платформе, где размер указателя совпадает с размером типа int
) можно даже обойтись и без объявления gets
, хотя это будет уже совсем грубым, наглым и грязным хаком
b;main(){puts(gets(&b));}
К сожалению, онлайновых компиляторов GCC c библиотеками для -m32
я не нашел. Только https://godbolt.org/z/j3Ye9u .
Однако если переменная b
окажется расположенной в той области 64-битного адресного пространства, где старшие 32 бита адреса являются нулевыми, то такой код с высокой долей вероятности будет работать и на 64-битной X86 платформе: http://coliru.stacked-crooked.com/a/b70346370d1f08f6
#include <stdio.h>
main()
{
char b[9];
puts(gets(b));
}
48 символов. Следовал советам из статьи Сокращение кода на C++ для acmp.ru
Вот немного короче.
#include <iostream>
int main()
{
std::cout << std::cin.rdbuf();
}
Радикальный вариант на С89:
main(){system("cp INPUT.TXT OUTPUT.TXT");}
online compiler
С и POSIX read/write
avp@avp-ubu1:hashcode$ cat golf.c
main(){char s[4]; write(1, s, read(0, s, 4));}
avp@avp-ubu1:hashcode$ wc golf.c
1 7 47 golf.c
avp@avp-ubu1:hashcode$ gcc golf.c -Wno-implicit-function-declaration -Wno-implicit-int
avp@avp-ubu1:hashcode$ echo 123 | ./a.out
123
avp@avp-ubu1:hashcode$
С потерей остатков читабельности легко сокращается до 40 символов:
main(){int s;write(1,&s,read(0,&s,4));}
Update
По подсказке @pavel в комментарии получилось 35!!! (и что характерно, без warnings -), и оказалось достаточно флажка -w
)
avp@avp-ubu1:hashcode$ gcc golf.c -w
avp@avp-ubu1:hashcode$ cat golf.c
s; main(){write(1,&s,read(0,&s,4));}
avp@avp-ubu1:hashcode$
Спасибо, @pavel
b;main(){puts((read(0,&b,4),&b));}
пользуясь подсказками из всех ответов и комментариях -- 34 (!) символа
Как ни странно gcc -w
компилирует вообще без ругани, а ./a.out
работает -)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть RecyclerView (LinearLayoutManager) с объявлениямиМне нужно чтобы баннеры (static Integer BANNER_VIEW = 2) выходили через каждые 5 объявлений при этом нужно чтобы...
Всем приветДелаю приложения для редактирования фото и хочу добаивть стикеры в приложение