Size-contest
От: Сергей  
Дата: 23.06.05 08:50
Оценка:
Здравствуйте.
Осмелюсь предложить такую задачу:

Вам дан набор чисел, найдите сумму всех положительных чисел в нем. 

Входные данные
В первой строке записано количество чисел N (0 <= N <= 1000). 
Затем следует N целых чисел, по модулю не превосходящих 1000. 

Выходные данные
Выведите единственное целое число -- сумму положительных чисел из данного набора.

Ввод: stdin
Вывод: stdout


При подсчете размера исходника не учитываются символы с кодом <= 32.

Это задача с нашего университетского соревнования. Пока (и довольно давно) там побеждают дельфисты — 76 байт. Мне удалось написать решение для BCC 5.5 размером 76 байт, но оно не компилируется на предлагаемх VC7.1, GCC3.
Re: Size-contest
От: Кодт Россия  
Дата: 23.06.05 09:08
Оценка: :)
Здравствуйте, Сергей, Вы писали:

С>Это задача с нашего университетского соревнования. Пока (и довольно давно) там побеждают дельфисты — 76 байт. Мне удалось написать решение для BCC 5.5 размером 76 байт, но оно не компилируется на предлагаемх VC7.1, GCC3.


basic, 72 байта
1 input n%
2 for i%=1 to n%
3 input v%
4 s%=s%+v%
5 next
6 ? s%
Перекуём баги на фичи!
Re: Size-contest
От: DK3981 Россия  
Дата: 23.06.05 09:25
Оценка: :)))
С>При подсчете размера исходника не учитываются символы с кодом <= 32.

Надо писать на whitespace
... << RSDN@Work 1.1.3 stable >>
Clannad — Bruach na carriage baine
Standarts are great, everyone should have one!
Re[2]: Size-contest
От: o.kostya  
Дата: 23.06.05 09:27
Оценка:
Здравствуйте, Кодт, Вы писали:

К>basic, 72 байта

К>
К>1 input n%
К>2 for i%=1 to n%
К>3 input v%
К>4 s%=s%+v%
К>5 next
К>6 ? s%
К>


а отрицательные?
... << RSDN@Home 1.1.3 stable >>
Re[3]: Size-contest
От: Кодт Россия  
Дата: 23.06.05 10:11
Оценка:
Здравствуйте, o.kostya, Вы писали:

OK>а отрицательные?


Ой, проглядел в условии.
Перекуём баги на фичи!
Re: Size-contest
От: Кодт Россия  
Дата: 23.06.05 10:28
Оценка:
K&R Си
#define R (scanf("%d",&t),t>0?t:0)
main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}

Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).
Перекуём баги на фичи!
Re[2]: Size-contest
От: WinterMute Россия http://yarrr.ru
Дата: 23.06.05 10:47
Оценка:
Здравствуйте, Кодт, Вы писали:

К>K&R Си

К>
К>#define R (scanf("%d",&t),t>0?t:0)
К>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>

К>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).

Можно переписать на "OlimpiadaC". "OlimpiadaC" это обычный "C" у которого переопределены ключевые слова и названия библиотечных функций:

for -- fr
#define -- #def
main() -- mn()
scanf() -- sf()
printf() -- pf()

Получается 74 символа.
Re[2]: Size-contest
От: Сергей  
Дата: 23.06.05 10:53
Оценка:
Здравствуйте, Кодт, Вы писали:

К>K&R Си

К>
К>#define R (scanf("%d",&t),t>0?t:0)
К>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>

К>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).
Здесь 83 символа.
Пробелы не считаются. Но, я так понял. это на С (не С++)?
Такой исходник на С++ у меня не компилируется (ВСС5.5 такой файл с расширением С скомпилируе, а С++ — нет).
А прога на сервер для проверки загружается через HTML-форму, так что в какой файл там исходник сохраняют, никто не знает.
А у меня так:
int n, s, p, *o = "%d";
main ()
{
 for (scanf (o, &n); n--;) scanf (o, &p), s += p>0 ? p:0;
 printf (o, s);
}

81 символ.
Re[3]: Size-contest
От: Сергей  
Дата: 23.06.05 10:55
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Здравствуйте, Кодт, Вы писали:


К>>K&R Си

К>>
К>>#define R (scanf("%d",&t),t>0?t:0)
К>>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>>

К>>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).
С>Здесь 83 символа.
С>Пробелы не считаются. Но, я так понял. это на С (не С++)?
С>Такой исходник на С++ у меня не компилируется (ВСС5.5 такой файл с расширением С скомпилируе, а С++ — нет).
С>А прога на сервер для проверки загружается через HTML-форму, так что в какой файл там исходник сохраняют, никто не знает.
С>А у меня так:
С>
С>int n, s, p, *o = "%d";
С>main ()
С>{
С> for (scanf (o, &n); n--;) scanf (o, &p), s += p>0 ? p:0;
С> printf (o, s);
С>}
С>

С>81 символ.
Упс. .cpp, разумеется.
Re[3]: Size-contest
От: Сергей  
Дата: 23.06.05 10:56
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Здравствуйте, Кодт, Вы писали:


К>>K&R Си

К>>
К>>#define R (scanf("%d",&t),t>0?t:0)
К>>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>>

К>>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).

WM>Можно переписать на "OlimpiadaC". "OlimpiadaC" это обычный "C" у которого переопределены ключевые слова и названия библиотечных функций:


WM>for -- fr

WM>#define -- #def
WM>main() -- mn()
WM>scanf() -- sf()
WM>printf() -- pf()

WM>Получается 74 символа.

Это конечно можно. Но сами переопределения тоже символы занимают!
Re: Size-contest
От: Константин Россия  
Дата: 23.06.05 11:04
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Здравствуйте.

С>Осмелюсь предложить такую задачу:

python можно?

import sys
print sum(map(lambda x:max(0,int(x)),sys.stdin)[1:])


60 без учётов \n, ' '.
64 размер файла

P.S. сейчас появятся знатоки perl и пойдёт вечеринка
Re[2]: Size-contest
От: Трурль  
Дата: 23.06.05 11:17
Оценка:
Здравствуйте, Константин, Вы писали:

К>P.S. сейчас появятся знатоки perl и пойдёт вечеринка

perl не perl, но 16 символов.
+/{x|0}0$1 _0:""
Re: Size-contest
От: Аноним  
Дата: 23.06.05 11:31
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Здравствуйте.

С>Осмелюсь предложить такую задачу:

С>
С>Вам дан набор чисел, найдите сумму всех положительных чисел в нем. 

С>Входные данные
С>В первой строке записано количество чисел N (0 <= N <= 1000). 
С>Затем следует N целых чисел, по модулю не превосходящих 1000. 

С>Выходные данные
С>Выведите единственное целое число -- сумму положительных чисел из данного набора.

С>Ввод: stdin
С>Вывод: stdout
С>


С>При подсчете размера исходника не учитываются символы с кодом <= 32.


С>Это задача с нашего университетского соревнования. Пока (и довольно давно) там побеждают дельфисты — 76 байт. Мне удалось написать решение для BCC 5.5 размером 76 байт, но оно не компилируется на предлагаемх VC7.1, GCC3.


Не против если я эту задачу выложу на сфере? Там куча языков — будет где развернуться =)
Re[3]: Size-contest
От: Кодт Россия  
Дата: 23.06.05 11:32
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Здравствуйте, Кодт, Вы писали:


К>>K&R Си

К>>
К>>#define R (scanf("%d",&t),t>0?t:0)
К>>main(){int t,n=R,s=0;for(;n--;s+=R);printf("%d",s);}
К>>

К>>Что-то не получается меньше 87 символов (включая 3 обязательных пробела и 1 LF).
С>Здесь 83 символа.
С>Пробелы не считаются. Но, я так понял. это на С (не С++)?

Некошерно не считать ОБЯЗАТЕЛЬНЫЕ пробелы и переводы строки.
Разумеется, это не С++, а С (я даже не уверен, соответствует ли он С90).

С>Такой исходник на С++ у меня не компилируется (ВСС5.5 такой файл с расширением С скомпилируе, а С++ — нет).


Многие компиляторы поддерживают и С++, и С — различают языки по расширению файла или по опции в командной строке.

С>А у меня так:

С>int n, s, p, *o = "%d";
С>main ()
С>{
С> for (scanf (o, &n); n--;) scanf (o, &p), s += p>0 ? p:0;
С> printf (o, s);
С>}

С>81 символ.

Ход с int*o="%d" — это
А кто будет обнулять s?

Кстати, полностью беспробельная версия:
main(){int*o="%d",n,v,s=0;for(scanf(o,&n);n--;)scanf(o,&v),s+=v>0?v:0;printf(o,s);}
Перекуём баги на фичи!
Re[2]: Size-contest
От: DK3981 Россия  
Дата: 23.06.05 11:47
Оценка:
С>>При подсчете размера исходника не учитываются символы с кодом <= 32.

DK>Надо писать на whitespace


Читаем N:
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][LF][Tab][Tab]     -  прочитать число в 0ю ячейку памяти
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][Tab][Tab] - из 0й ячейки на стек.

[Space][Space][Space][Space][LF]     -  0 на стек

--Здесь всегда на стеке лежат 2 числа. Количество оставшихся итераций и текущая сумма
[LF][Tab][Space][Space][Space][LF]  - метка [Space][Space].

[Space][Tab][Space][Space][Tab][LF] - Скопировали число итераций на верхушку стека.
[LF][Tab][Space][Space][LF]  - Если 0, то перейти к метке [Space].

Читаем A[i]:
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][LF][Tab][Tab]     -  прочитать число в 0ю ячейку памяти
[Space][Space][Space][Space][LF] - 0 на стек
[Tab][Tab][Tab] - из 0й ячейки на стек.

[Space][LF][Space] - Дублируем его

[LF][Tab][Tab][Tab][LF] - Переход к метке [Tab] если число отрицательно.

[Tab][Space][Space][Space] - сложили верхние числа на стеке
[Space][LF][Space] - Дублируем результат

[LF][Space][Space][Tab][LF] - Метка [Tab]
[Space][LF][LF] - выкинули верхний элемент стека (отрицательное число или дублированный результат).
--Здесь всегда на стеке лежат 2 числа. Количество оставшихся итераций и текущая сумма
[Space][LF][Tab] - Swap stack
[Space][Space][Space][Tab][LF] - 1 на стек
[Tab][Space][Space][Tab] - вычитание
[Space][LF][Tab] - Swap stack
--Здесь всегда на стеке лежат 2 числа. Количество оставшихся итераций и текущая сумма
[LF][Space][LF][Space][Space][LF] - Переход к метке [Space] [Space] .
[Tab][LF][Space][Tab] - вывести число на стеке
[LF][LF][LF] - Закончить

8*3 + 4*4 + 9*5 + 3*6 = 103 символа, из них непробельных — 0.
... << RSDN@Work 1.1.3 stable >>
Clannad — Robin (the hooded man)
Standarts are great, everyone should have one!
Re: Size-contest
От: Аноним  
Дата: 23.06.05 11:50
Оценка:
Задача готова:
https://spoj.sphere.pl/problems/SIZECON/

Добавил все возможные языки — можно тестить. =)
Re[3]: Size-contest
От: Трурль  
Дата: 23.06.05 12:11
Оценка:
Здравствуйте, Трурль, Вы писали:
И даже 12
+/0|0$1_0:""
Re[2]: Size-contest
От: Аноним  
Дата: 23.06.05 13:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Задача готова:

А>https://spoj.sphere.pl/problems/SIZECON/

А>Добавил все возможные языки — можно тестить. =)


Не забываем про код возврата — должен быть 0.
Re: Size-contest
От: Socrat Россия  
Дата: 23.06.05 14:18
Оценка:
main(){int t,s=0,n;cin>>n;while(n--){cin>>t;if(t>0)s+=t;}cout<<s;}
Re[2]: Size-contest
От: Трурль  
Дата: 23.06.05 14:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добавил все возможные языки — можно тестить. =)

Ай, какую бяку подсунули в тесте!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.