Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/23: Рейтинг темы: голосов - 23, средняя оценка - 4.57
костя666674555
-3 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
1

Сократить код. Задача про сравнение символов

02.01.2014, 21:07. Просмотров 4200. Ответов 81
Метки нет (Все метки)

набросал решение вышесказаной задачи вот код
C++
1
2
3
4
5
6
7
#include <fstream>
main(int k){
    std::fstream i("input.txt"),o("output.txt", 2);
    i>> k;
    k = k * 5 - 5;
    k > 720 ? o<<"NO" : o <<k / 60 << " "<< k % 60;
}
с удивлением обнаружил что я на 6 месте по коду
Размер кода: 119
но есть код (с++) и короче 114 символов как?
помогите мне сократить код (убрать 4-5 символов)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2014, 21:07
Ответы с готовыми решениями:

Сократить код. Задача про туриста
всем привет есть задача Турист (Время: 1 сек. Память: 16 Мб Сложность: 22%)...

Сократить код до 101 - 120 символов
есть задача ! есть код #include &lt;fstream&gt; int main(){ std::fstream...

Стоит задача сравнение и подсчета символов строки.
Стоит задача сравнение и подсчета символов строки. Получается, сравнить только...

Сравнение символов через код символа
есть задание выбрать неповторяющиеся символы и расположить в порядке убывания...

Каждое слово строки состоящее более, чем из 8 символов, сократить до первых 8 символов
Нуждаюсь в помощи. Нужно написать программу на C++(в принципе, и на Си можно)...

81
костя666674555
-3 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
16.01.2014, 18:11  [ТС] 41
Цитата Сообщение от MrGluck Посмотреть сообщение
Кстати, если проверяющий компилятор пропустил такое безобразие как main без типа, то мб он разрешит и такое:
C++
1
2
#include <fstream.h>
fstream i("input.txt"),o("output.txt", 2);
Добавлено через 1 минуту

это не по стандарту и не все компиляторы данное безобразие понимают. Тем не менее, такой грязный хак очень часто используется и настоящих спортивных программистов.
нет такое он не разрешает
0
S_el
2220 / 1682 / 354
Регистрация: 15.12.2013
Сообщений: 6,664
16.01.2014, 18:12 42
Цитата Сообщение от ValeryS Посмотреть сообщение
а что это?
Обычный main только без возвращаемого типа
0
ValeryS
Модератор
7315 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,853
16.01.2014, 18:19 43
Цитата Сообщение от MrGluck Посмотреть сообщение
это не по стандарту и не все компиляторы данное безобразие понимают.
дак компиляторы то бог с ним
а как система?
какой аргумент она отдаст майну? имя программы? перевод строки?
как поведет себя стартовый код, который до майна исполняется?
Цитата Сообщение от MrGluck Посмотреть сообщение
и настоящих спортивных программистов.
а в чем спорт? написать как можно меньше букв? эдак все переменные пообъявляем одной буквой переводы строки уберем, от чего ушли к тому и пришли, нечитаемый листинг
плюс еще наплевательское отношение к стандарту
я еще понимаю чтобы сгенерированый код был меньше, быстродействие выше
а так? не понимаю
0
TrueBit
96 / 96 / 47
Регистрация: 19.11.2012
Сообщений: 195
16.01.2014, 18:21 44
Цитата Сообщение от костя666674555 Посмотреть сообщение
C++
1
2
3
4
5
6
#include <fstream>
main(int k){
    std::fstream i("input.txt"),o("output.txt", 2);
    i>> k;
    k-- > 145 ? o<<"NO" : o <<k/12 << " "<< 5*k%60;
}
Размер кода 115 символов
хотябы на 1 сивол
а разве значение k в строке
C++
1
 k-- > 145 ? o<<"NO" : o <<k/12 << " "<< 5*k%60;
не будет уменьшено только после вывода строки ?
насколько помню k-- такая запись вначале подставит значение k в выражение, а затем уменьшит, а такая: --k вначале уменьшит k, а затем подставит в выражение, но тогда k-- не несет никакой смысловой нагрузки, поскольку после вывода программа завершается

C++
1
2
3
4
5
6
#include <fstream>
main(int k){
    std::fstream i("input.txt"),o("output.txt", 2);
    i>> k;
    k > 145 ? o<<"NO" : o <<k/12 << " "<< 5*k%60;
}
P.S.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=145;
    k > 145 ? cout << "YES\n" : cout << "NO\n";
    k-- > 145 ? cout << "YES\n" : cout << "NO\n";
}
вывод:
Код
NO
NO
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=146;
    k > 145 ? cout << "YES\n" : cout << "NO\n";
    k-- > 145 ? cout << "YES\n" : cout << "NO\n";
}
вывод:
Код
YES
YES
т.е. k либо k-- эквивалентно в конце программы
0
ValeryS
Модератор
7315 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,853
16.01.2014, 18:21 45
Цитата Сообщение от S_el Посмотреть сообщение
Обычный main только без возвращаемого типа
ткни мне в стандарте чтобы main так описывался, что это за аргументы
и что значит без возвращаемого типа, это что конструктор?
майн в любом случае должен что то возвращать
int в С++ int или void в С
0
костя666674555
-3 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
16.01.2014, 18:26  [ТС] 46
Цитата Сообщение от ShadowFirst Посмотреть сообщение
А если так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<string>
#include<fstream>
main()
{
std::fstream i("input.txt"),o("output.txt",2);
std::string a,b;
bool f;
i>>a>>b;
while(a+b>"")
{
f = a+'A'>b+'B';
o << (f ? b:a)[0];
(f ? b:a).erase(0,1);
}
}
Wrong answer 1 60 Кб

Добавлено через 12 минут
Цитата Сообщение от ShadowFirst Посмотреть сообщение
А если так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<string>
#include<fstream>
main()
{
std::fstream i("input.txt"),o("output.txt",2);
std::string a,b;
bool f;
i>>a>>b;
while(a+b>"")
{
f = a+'A'>b+'B';
o << (f ? b:a)[0];
(f ? b:a).erase(0,1);
}
}
ладно это задача №548 с acmp удачи в сокрашении
0
MrGluck
Модератор
Эксперт CЭксперт С++
8101 / 4952 / 1436
Регистрация: 29.11.2010
Сообщений: 13,437
16.01.2014, 18:40 47
Цитата Сообщение от ValeryS Посмотреть сообщение
а как система?
какой аргумент она отдаст майну? имя программы? перевод строки?
как поведет себя стартовый код, который до майна исполняется?
предполагаю, что тип то подставится int, а в качестве аргументов программа считает лишь argc. Ну и менять его можно вполне:
C++
1
2
3
4
int main(int argc, char *argv[])
{
    argc = 2;
}
Цитата Сообщение от ValeryS Посмотреть сообщение
а в чем спорт? написать как можно меньше букв? эдак все переменные пообъявляем одной буквой переводы строки уберем, от чего ушли к тому и пришли, нечитаемый листинг
плюс еще наплевательское отношение к стандарту
я еще понимаю чтобы сгенерированый код был меньше, быстродействие выше
а так? не понимаю
там два показателя:
1) по времени выполнения
2) по количеству буковок в коде.
И писькомерят и в том и в другом. Спорт на любителя.
0
костя666674555
-3 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
16.01.2014, 18:44  [ТС] 48
Цитата Сообщение от TrueBit Посмотреть сообщение
а разве значение k в строке
C++
1
 k-- > 145 ? o<<"NO" : o <<k/12 << " "<< 5*k%60;
не будет уменьшено только после вывода строки ?
насколько помню k-- такая запись вначале подставит значение k в выражение, а затем уменьшит, а такая: --k вначале уменьшит k, а затем подставит в выражение, но тогда k-- не несет никакой смысловой нагрузки, поскольку после вывода программа завершается

C++
1
2
3
4
5
6
#include <fstream>
main(int k){
    std::fstream i("input.txt"),o("output.txt", 2);
    i>> k;
    k > 145 ? o<<"NO" : o <<k/12 << " "<< 5*k%60;
}
P.S.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=145;
    k > 145 ? cout << "YES\n" : cout << "NO\n";
    k-- > 145 ? cout << "YES\n" : cout << "NO\n";
}
вывод:
Код
NO
NO
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=146;
    k > 145 ? cout << "YES\n" : cout << "NO\n";
    k-- > 145 ? cout << "YES\n" : cout << "NO\n";
}
вывод:
Код
YES
YES
т.е. k либо k-- эквивалентно в конце программы
зря надрявался 3214709 16.01.2014 18:40:44 Андрей и Костя 0511 C++ Wrong answer 1 60 Кб

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=146;
    k > 145 ? cout << "YES\n" : cout << "NO\n";
    k-- > 145 ? cout << "YES\n" : cout << "NO\n";
}
тестируй в ручную k=146
146>145 вывод Yes
k-->145 =>145>145 но 145=145 => ответ No
0
TrueBit
96 / 96 / 47
Регистрация: 19.11.2012
Сообщений: 195
16.01.2014, 19:54 49
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=146;
    k > 145 ? cout << "YES " << k << endl : cout << "NO " << k << endl;
    k-- > 145 ? cout << "YES " << k <<endl : cout << "NO " << k << endl;
}
Bash
1
2
YES 146
YES 145
условие посчитает правильно, выражение нет
0
костя666674555
-3 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
16.01.2014, 20:04  [ТС] 50
Цитата Сообщение от TrueBit Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <fstream>
using namespace std;
 
int main(){
    int k=146;
    k > 145 ? cout << "YES " << k << endl : cout << "NO " << k << endl;
    k-- > 145 ? cout << "YES " << k <<endl : cout << "NO " << k << endl;
}
Bash
1
2
YES 146
YES 145
условие посчитает правильно, выражение нет
система не принимает :-(
0
Dzzirt
0 / 0 / 2
Регистрация: 14.01.2014
Сообщений: 6
16.01.2014, 20:41 51
Тут надо не сокращать , а добавлять код
C++
1
2
3
4
5
6
7
8
9
10
if ( !o )
    {
        cerr << "File could not be opened" << endl;
        exit( 1 );
    }
if ( !i )
    {
        cerr << "File could not be opened" << endl;
        exit( 1 );
    }
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
16.01.2014, 21:16 52
Цитата Сообщение от S_el Посмотреть сообщение
это не прототип
Знаете, что такое прототип функции?

Цитата Сообщение от ValeryS Посмотреть сообщение
дак компиляторы то бог с ним
а как система?
какой аргумент она отдаст майну? имя программы? перевод строки?
как поведет себя стартовый код, который до майна исполняется?
Система-то сделает всё как надо, положит всё, что требуется, в стек. А вот как пролог функции main это стек обработает - надо смотреть в коде, который сгенерировал компилятор, который такое безобразие позволяет.

Цитата Сообщение от TrueBit Посмотреть сообщение
а разве значение k в строке
C++
1
 k-- > 145 ? o<<"NO" : o <<k/12 << " "<< 5*k%60;
не будет уменьшено только после вывода строки ?
насколько помню k-- такая запись вначале подставит значение k в выражение, а затем уменьшит, а такая: --k вначале уменьшит k, а затем подставит в выражение, но тогда k-- не несет никакой смысловой нагрузки, поскольку после вывода программа завершается
Почитайте про точки следования, в частности, где находится точка следования в тернарном операторе. Ну и плюс ко всему, значение не подставляется, а числятся, просто в случае постинкремента/постдекремента оператор возвращает предыдущее значение, но фактическое значение переменной меняется.

Цитата Сообщение от ValeryS Посмотреть сообщение
майн в любом случае должен что то возвращать
int в С++ int или void в С
В Си она тоже инт должна возвращать. Вызывающее окружение (что бы это ни было - система или другое пользовательское приложение) должно знать статус завершения программы, чтобы адекватно среагировать на это завершение.
А вообще, когда-то давно существовало соглашение int by default, но это давно в прошлом.
0
ValeryS
Модератор
7315 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,853
16.01.2014, 21:55 53
Цитата Сообщение от silent_1991 Посмотреть сообщение
В Си она тоже инт должна возвращать.
может быть
я стандарты Си не очень хорошо знаю
но сишные компиляторы в отличии от плюсовых такую конструкцию переваривают
C++
1
void main()
Цитата Сообщение от silent_1991 Посмотреть сообщение
А вообще, когда-то давно существовало соглашение int by default, но это давно в прошлом.
вроде бы С подставляет int но не уверен
0
S_el
2220 / 1682 / 354
Регистрация: 15.12.2013
Сообщений: 6,664
16.01.2014, 22:25 54
Цитата Сообщение от ValeryS Посмотреть сообщение
но сишные компиляторы в отличии от плюсовых такую конструкцию переваривают
void main() работает на С++,хоть и не стандарт.
0
ValeryS
Модератор
7315 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,853
16.01.2014, 22:32 55
Цитата Сообщение от S_el Посмотреть сообщение
void main() работает на С++,хоть и не стандарт.
где???
VS откровенно посылает
0
S_el
2220 / 1682 / 354
Регистрация: 15.12.2013
Сообщений: 6,664
16.01.2014, 22:33 56
Цитата Сообщение от ValeryS Посмотреть сообщение
где???
VS откровенно посылает
VS 2012,VS 2006.
Даже предупреждение не выдает.
0
Ev_Hyper
Заблокирован
16.01.2014, 22:34 57
ValeryS, и VS10 тоже
0
ValeryS
Модератор
7315 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,853
16.01.2014, 22:43 58
S_el, Ev_Hyper,
действительно попутал
это Qt посылает
C++ (Qt)
1
2
3
4
void main()
{
 
}
C:\Qt\Qt5.1.0\Tools\QtCreator\bin\test_voidmain\main.cpp:3: ошибка: '::main' must return 'int'
0
MrGluck
Модератор
Эксперт CЭксперт С++
8101 / 4952 / 1436
Регистрация: 29.11.2010
Сообщений: 13,437
16.01.2014, 23:38 59
Цитата Сообщение от ValeryS Посмотреть сообщение
это Qt посылает
Не Qt, а mingw, который входит в её базовый набор.
А VS любая такой код пропускает, у Microsoft свое видение стандартов.
Цитата Сообщение от S_el Посмотреть сообщение
void main() работает на С++
работает на VS. Для С++ есть стандарт и его не волнуют реализации компиляторов. В С++ принято писать int main. Остальное - от лукавого.
0
костя666674555
-3 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 78
17.01.2014, 15:46  [ТС] 60
int void самое главное что бы ******** принял
0
17.01.2014, 15:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 15:46

Сократить количество символов кода
#include &lt;fstream&gt; using namespace std; int main(){ifstream f(&quot;input.txt&quot;);...

Сократить код, переделав if
#include &lt;iostream&gt; #include &lt;math.h&gt; #pragma hdrstop #pragma argsused ...

Сократить код на два символа
сокртить код #include &lt;fstream&gt; main(int n) { std::fstream I(&quot;input.txt&quot;),...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru