|
|
  |
Олимпиада программистов, Чистый С |
|
|
|
Mar 18 2013, 10:08
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Может вот так попробовать: Код #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h>
void str_cpy (char **a, const char *b) { int _size = strlen(b)+1;
*a =realloc(*a, _size); memmove(*a, b, _size); }
void str_cat (char **a, const char *b){ int _size1 = strlen(b);
*a =realloc(*a, _size1); memmove(*a + strlen(*a), b, _size1); }
int main() { char *s = NULL; str_cpy(&s, "Hola Hola"); str_cpy(&s, s+5); str_cat(&s," World"); return 0; } "str_cat" можно переписать как вызовс сдвигами "str_cpy". "memmove" потому как он хитро работает и учитывает перекрытия.
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
Mar 19 2013, 14:39
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(Буратино @ Mar 18 2013, 14:08)  Может вот так попробовать: ... Я обещал не комментировать и никак иначе не помогать участникам. Так что, извините. Скажу только, что направление правильное, но пока что это не годится. Сплетнями поделться могу. Я спросил организаторов, как идут дела. Они сказали, что отказались от идеи предлагать удаленную работу программистам из России/Украины. Но от своих обязательств по олимпиаде не отказываются. И если кто сможет решить задачу, то премию получит. Пока никто не смог.
|
|
|
|
|
Mar 19 2013, 14:52
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата Незнаю как и кто, но я ощущаю счастье в том, что пока еще могу себе позволить не работать. А я вот напротив ощущаю счастье в том что могу позволить себе поработать.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Mar 19 2013, 17:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(igorle @ Mar 19 2013, 18:39)  Я обещал не комментировать и никак иначе не помогать участникам. Так что, извините. Скажу только, что направление правильное, но пока что это не годится.
Сплетнями поделться могу. Я спросил организаторов, как идут дела. Они сказали, что отказались от идеи предлагать удаленную работу программистам из России/Украины. Но от своих обязательств по олимпиаде не отказываются. И если кто сможет решить задачу, то премию получит.
Пока никто не смог. Да фиг с ней с премией, просто интересно!:) "realloc" не перетирает информацию, ну или точнее дублирует информацию в переразмереном буфере, а это важно и для "str_cpy" и для "str_cat". "memmove" переставляет блоки данных даже если есть перекрытие, учитывая это. Лишнего ничего нет ,но функции свои функции выполняют. Проверка на NULL еще не обдумана, но это в конце концов детали.
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
Mar 20 2013, 07:09
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(demiurg_spb @ Mar 20 2013, 08:17)  Ой-ли... Ничего удивительного. Когда я говорю "никто не смог", я имею ввиду - из России/Украины никто не смог решить. В целом - они в эту игру играют уже год. Список победителей за это время есть на их сайте.
Сообщение отредактировал igorle - Mar 20 2013, 07:10
|
|
|
|
|
Mar 20 2013, 07:40
|
Участник

Группа: Участник
Сообщений: 74
Регистрация: 12-01-13
Из: Нижний Новгород
Пользователь №: 75 160

|
На олимпиадное тут не тянет, даже далеко не тянет.
p.s. форумчанам просто *бут мозх
Сообщение отредактировал federal - Mar 20 2013, 08:46
|
|
|
|
|
Mar 20 2013, 10:08
|
Частый гость
 
Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337

|
отправил ради интереса Код void str_cpy( char** to_str, char* from_str ) { if ( !from_str ) { return; }
if ( !( *to_str = ( char* )realloc( *to_str, strlen(from_str)*sizeof(char) + sizeof(char) ) ) ) { return; }
if ( !memmove( *to_str, from_str, strlen( from_str )*sizeof(char) + sizeof(char) ) ) { if ( !*to_str ) { free( *to_str ); } *to_str=NULL; } }
void str_cat(char** to_str, char* from_str) {
if ( !from_str ) { return; }
if ( !( *to_str = ( char* )realloc( *to_str, ( !*to_str ? 0: strlen(*to_str)*sizeof(char) ) + strlen(from_str)*sizeof(char) + sizeof(char) ) ) ) { return; }
if ( !memmove( *to_str + ( !*to_str ? 0: strlen(*to_str)*sizeof(char) ), from_str, strlen( from_str )*sizeof(char) + sizeof(char) ) ) { if ( !*to_str ) { free( *to_str ); } *to_str=NULL; }
} на что сразу же был получен ответ. Что,собственно, и ожидаемо Код Thank you for taking the time to answer our challenge.
Unfortunately the answer you gave is not the answer we are looking for. I do hope that you at least enjoyed the challenge (-;
In all solutions that don't pass this stage we find at least 2 problems from the list of blocking problems that you can find at http://www.hola.org/issues.html
We realize that the bugs in your solution may have been due to a hasty submission. Therefore, if this was your 1st submission you are welcome re-check your code carefully, use the issues list we gave, and try a 2nd attempt.
You can send this challenge to programmers you know and if they will answer the question perfectly then you and your friend may win 2K NIS...Please remember to CC me when you forward the link to the challenge so I will know they came from you (http://www.TheCodeIL.com/5min_forward_rules.html).
Below is an email that you can use to forward to your friends.
Good Luck and again, Thank you!
|
|
|
|
|
Mar 20 2013, 10:23
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(am1808 @ Mar 20 2013, 14:13)  размер типа правильно определять в runtime Но ведь char всегда 8 бит, зачем так делать? Я понимаю "int", там могут быть вопросы, но с "char" мне кажется лишним "сайзофать". Видимо в целом направление не верное в решении этой задачи. Поправлю свой вариант и попробуем иным путем пойти
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|