Форум программистов, компьютерный форум CyberForum.ru

Сокращение кода - C++

Восстановить пароль Регистрация
 
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 13:46     Сокращение кода #1
Думаю, многие, кто занимался олимпиадным программированием, знакомы с сайтом ********. И думаю многие знают, что чем короче код, тем круче сабмит.
Сегодня я решал вырезано задачу и мне удалось сократить свой код на С++ до 129 символов. Хотелось бы узнать, как сделать его короче? Есть методы файлового ввода-вывода в C++, с помощью которых можно сократить объем кода? Каждый символ важен!!! P.S. код здесь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 13:46     Сокращение кода
Посмотрите здесь:

C++ Сокращение строк под инклюды
сокращение дроби C++
Сокращение дроби C++
C++ Сокращение кода
Сокращение кода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.01.2013, 13:51     Сокращение кода #2
Цитата Сообщение от Bek$ Посмотреть сообщение
И думаю многие знают, что чем короче код, тем круче сабмит.
Полный идиотизм, поверьте!!! Тот, кто так считает, скорее всего, никогда не программировал.
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 13:53  [ТС]     Сокращение кода #3
Никто так не считает, это правила сайта.

Добавлено через 54 секунды
Цитата:
"В качестве критерия ранжирования лучших попыток служит размер кода закачиваемой программы. При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции."
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
07.01.2013, 13:56     Сокращение кода #4
Цитата Сообщение от Bek$ Посмотреть сообщение
думаю многие знают, что чем короче код, тем круче сабмит.
Не знаю, как там у ваших сабмитов, а нормальные люди считают, что читаемый код при прочих равных лучше короткого.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.01.2013, 13:57     Сокращение кода #5
Цитата Сообщение от Bek$ Посмотреть сообщение
В качестве критерия ранжирования лучших попыток служит размер кода закачиваемой программы. При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции.
Бросайте данный сайт. Он безнадежен при таком ранжировании. Основными критериями должны быть сжираемая память, время выполнения и соответствие стандарту языка, а не количество символов в коде.
По их теории код
C++
1
std::fstream InputFile;
хуже, чем
C++
1
std::fstream i;
БРЕД!!!
AlvinMax
 Аватар для AlvinMax
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 16
07.01.2013, 14:00     Сокращение кода #6
вот на этом сайте гораздо лучше http://codeforces.com/
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:00  [ТС]     Сокращение кода #7
Я очень редко вижу людей-олимпиадников, неукоснительно соблюдающих стандарты языка. И вообще это оффтоп. Вопрос-то ведь в другом
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.01.2013, 14:00     Сокращение кода #8
Ну, на самом деле умение быстро сжимать/обфусцировать исходник иногда бывает очень полезным. На хабрасоревновании оно мне весьма помогло :)
Замечания по коду:
1) используется страшно неоптимальный способ ввода/вывода(более оптимальный не подскажу)
2) всегда используйте for вместо while (но только при сокращении, в нормальном коде такое делать нельзя).
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:03  [ТС]     Сокращение кода #9
Про CF я знаю. И он тут не причем.

Добавлено через 1 минуту
for (;i >> x; )
Вы имели ввиду такой вариант? Но ведь он не влияет на количество символов.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.01.2013, 14:03     Сокращение кода #10
Цитата Сообщение от Bek$ Посмотреть сообщение
Вы имели ввиду такой вариант? Но ведь он не влияет на количество символов.
Конкретно такой - не влияет. Но вы присмотритесь повнимательнее к пустым блокам for и подумайте - может, можно их чем-то заполнить?
AlvinMax
 Аватар для AlvinMax
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 16
07.01.2013, 14:06     Сокращение кода #11
я использую такой ввод / вывод в файл:
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 14:07     Сокращение кода #12
польза в таких упражнениях сомнительна, но забавы ради можно и поиграть.
вот может с временным объектом получится сократить код на пару символов: имя переменной и точка с запятой:
C++
1
2
3
4
5
// это удаляем
//std :: ofstream o ("output.txt");
 
// в последней строчке пишем:
std::ofstream("output.txt") << a;
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:09  [ТС]     Сокращение кода #13
Спасибо на таком варианте:
C++
1
for (i >> x >> x; i >> y; a += y != x + 1, x = y);
выиграл 1 символ). По поводу ввода-вывода - не подскажете хотя бы в какую сторону копать?

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
польза в таких упражнениях сомнительна, но забавы ради можно и поиграть.
вот может с временным объектом получится сократить код на пару символов: имя переменной и точка с запятой:
C++
1
2
3
4
5
// это удаляем
//std :: ofstream o ("output.txt");
 
// в последней строчке пишем:
std::ofstream("output.txt") << a;
Такое не компилится у меня

ааа не, все заработало) Спасибо!
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.01.2013, 14:09     Сокращение кода #14
Цитата Сообщение от Bek$ Посмотреть сообщение
выиграл 1 символ).
Можно еще один выиграть, если использовать тело цикла(тогда пропадет запятая).

Цитата Сообщение от Bek$ Посмотреть сообщение
По поводу ввода-вывода - не подскажете хотя бы в какую сторону копать?
Выше самый годный стандартный вариант подсказали. Короче только специфичный для студии код(и гуглить его бесполезно).
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
07.01.2013, 14:12     Сокращение кода #15
Ну можно еще наклепать короткосимвольных псевдонимов.
(будет выйгрыш если много раз создаеш какую нить хрень с длинным именем типа)
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:19  [ТС]     Сокращение кода #16
Жаль - не пользуюсь студией(
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
07.01.2013, 14:55     Сокращение кода #17
Вот еще марсианский вариант
C++
1
2
3
4
5
6
7
8
9
#include <fstream>
 
#define _(a,b) std::a##fstream a (#b"put.txt");
 
int main()
{
    _(i,in)
    _(o,out)
}
по сравнению с
C++
1
2
std :: ifstream i ("input.txt");
std :: ofstream o ("output.txt");
экономит 1 символ, но как сократить на 1 символ уже предложили выше более вменяемое решение.
Выложил просто так, как вариант
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 15:07     Сокращение кода #18
хитрое сокращение.
еще один символ можно сэкономить, если вместо std::ifstream использовать std::fstream.
для std::ofstream такая замена не прокатыает, т.к. чтобы это работало, нужно еще флаги открытия задавать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 18:18     Сокращение кода
Еще ссылки по теме:

Сокращение дроби C++
Сокращение кода C++
Сокращение дробей до несократимого вида C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Bek$
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 18:18  [ТС]     Сокращение кода #19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вот еще марсианский вариант
C++
1
2
3
4
5
6
7
8
9
#include <fstream>
 
#define _(a,b) std::a##fstream a (#b"put.txt");
 
int main()
{
    _(i,in)
    _(o,out)
}
по сравнению с
C++
1
2
std :: ifstream i ("input.txt");
std :: ofstream o ("output.txt");
экономит 1 символ, но как сократить на 1 символ уже предложили выше более вменяемое решение.
Выложил просто так, как вариант
Действительно по-марсиански получается) Пока понял суть этого дефайна...
Yandex
Объявления
07.01.2013, 18:18     Сокращение кода
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru