Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
1

Сокращение кода

07.01.2013, 13:46. Показов 4110. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Думаю, многие, кто занимался олимпиадным программированием, знакомы с сайтом acmp.ru. И думаю многие знают, что чем короче код, тем круче сабмит.
Сегодня я решал вырезано задачу и мне удалось сократить свой код на С++ до 129 символов. Хотелось бы узнать, как сделать его короче? Есть методы файлового ввода-вывода в C++, с помощью которых можно сократить объем кода? Каждый символ важен!!! P.S. код здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2013, 13:46
Ответы с готовыми решениями:

Сокращение кода
Есть задача: Я решил таким способом: #include <fstream> int N,i,x,t,k,j,*G; main() { ...

Сокращение кода
Я учусь сокращать код на С++, для решения олемпиадных задач. (только пока еще простые задачки) ...

Сокращение кода
Всем привет! Ребят, возникла мелкая проблема. Написал программку человеку, он начал сдавать ее...

Сокращение кода и времени проверки (задача)
Однажды Вася очень долго просидел на остановке, прежде чем дождался своего автобуса. Чтобы как-то...

18
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.01.2013, 13:51 2
Цитата Сообщение от Bek$ Посмотреть сообщение
И думаю многие знают, что чем короче код, тем круче сабмит.
Полный идиотизм, поверьте!!! Тот, кто так считает, скорее всего, никогда не программировал.
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 13:53  [ТС] 3
Никто так не считает, это правила сайта.

Добавлено через 54 секунды
Цитата:
"В качестве критерия ранжирования лучших попыток служит размер кода закачиваемой программы. При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции."
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
07.01.2013, 13:56 4
Цитата Сообщение от Bek$ Посмотреть сообщение
думаю многие знают, что чем короче код, тем круче сабмит.
Не знаю, как там у ваших сабмитов, а нормальные люди считают, что читаемый код при прочих равных лучше короткого.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.01.2013, 13:57 5
Цитата Сообщение от Bek$ Посмотреть сообщение
В качестве критерия ранжирования лучших попыток служит размер кода закачиваемой программы. При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции.
Бросайте данный сайт. Он безнадежен при таком ранжировании. Основными критериями должны быть сжираемая память, время выполнения и соответствие стандарту языка, а не количество символов в коде.
По их теории код
C++
1
std::fstream InputFile;
хуже, чем
C++
1
std::fstream i;
БРЕД!!!
1
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 16
07.01.2013, 14:00 6
вот на этом сайте гораздо лучше http://codeforces.com/
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:00  [ТС] 7
Я очень редко вижу людей-олимпиадников, неукоснительно соблюдающих стандарты языка. И вообще это оффтоп. Вопрос-то ведь в другом
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.01.2013, 14:00 8
Ну, на самом деле умение быстро сжимать/обфусцировать исходник иногда бывает очень полезным. На хабрасоревновании оно мне весьма помогло :)
Замечания по коду:
1) используется страшно неоптимальный способ ввода/вывода(более оптимальный не подскажу)
2) всегда используйте for вместо while (но только при сокращении, в нормальном коде такое делать нельзя).
1
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:03  [ТС] 9
Про CF я знаю. И он тут не причем.

Добавлено через 1 минуту
for (;i >> x; )
Вы имели ввиду такой вариант? Но ведь он не влияет на количество символов.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.01.2013, 14:03 10
Цитата Сообщение от Bek$ Посмотреть сообщение
Вы имели ввиду такой вариант? Но ведь он не влияет на количество символов.
Конкретно такой - не влияет. Но вы присмотритесь повнимательнее к пустым блокам for и подумайте - может, можно их чем-то заполнить?
1
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 16
07.01.2013, 14:06 11
я использую такой ввод / вывод в файл:
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
0
DU
1500 / 1146 / 165
Регистрация: 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;
1
1 / 1 / 1
Регистрация: 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;
Такое не компилится у меня

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

Цитата Сообщение от Bek$ Посмотреть сообщение
По поводу ввода-вывода - не подскажете хотя бы в какую сторону копать?
Выше самый годный стандартный вариант подсказали. Короче только специфичный для студии код(и гуглить его бесполезно).
1
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
07.01.2013, 14:12 15
Ну можно еще наклепать короткосимвольных псевдонимов.
(будет выйгрыш если много раз создаеш какую нить хрень с длинным именем типа)
0
1 / 1 / 1
Регистрация: 18.03.2012
Сообщений: 29
07.01.2013, 14:19  [ТС] 16
Жаль - не пользуюсь студией(
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
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 символ уже предложили выше более вменяемое решение.
Выложил просто так, как вариант
2
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 15:07 18
хитрое сокращение.
еще один символ можно сэкономить, если вместо std::ifstream использовать std::fstream.
для std::ofstream такая замена не прокатыает, т.к. чтобы это работало, нужно еще флаги открытия задавать.
0
1 / 1 / 1
Регистрация: 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 символ уже предложили выше более вменяемое решение.
Выложил просто так, как вариант
Действительно по-марсиански получается) Пока понял суть этого дефайна...
0
07.01.2013, 18:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2013, 18:18
Помогаю со студенческими работами здесь

Решение уравнения методом перебора (сокращение кода)
A*X3 + B*X2 + C*X + D = 0 нужно решить это уравнение методом перебора корни уравнение целые ....

Сокращение дроби
Есть класс дроби с полями Чисельник и Знаменник. надо написать функцию сокращение дроби. сделать...

Сокращение дроби
Даны натуральные числа a и b, обозначающие соответственно числитель и знаменатель дроби. Сократите...

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru