Перейти к содержанию
    

Олимпиада программистов

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Воры в законе? :disco:

Вы ж поймите, что мы не виноватыя, что определенная категория населения нашей всеобъемлющей Родины живет по такому же распорядку дня :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может вот так попробовать:

 

#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" потому как он хитро работает и учитывает перекрытия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может вот так попробовать:

...

Я обещал не комментировать и никак иначе не помогать участникам. Так что, извините. Скажу только, что направление правильное, но пока что это не годится.

 

Сплетнями поделться могу. Я спросил организаторов, как идут дела. Они сказали, что отказались от идеи предлагать удаленную работу программистам из России/Украины. Но от своих обязательств по олимпиаде не отказываются. И если кто сможет решить задачу, то премию получит.

 

Пока никто не смог.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А я вот напротив ощущаю счастье в том что могу позволить себе поработать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я обещал не комментировать и никак иначе не помогать участникам. Так что, извините. Скажу только, что направление правильное, но пока что это не годится.

 

Сплетнями поделться могу. Я спросил организаторов, как идут дела. Они сказали, что отказались от идеи предлагать удаленную работу программистам из России/Украины. Но от своих обязательств по олимпиаде не отказываются. И если кто сможет решить задачу, то премию получит.

 

Пока никто не смог.

 

Да фиг с ней с премией, просто интересно!:)

"realloc" не перетирает информацию, ну или точнее дублирует информацию в переразмереном буфере, а это важно и для "str_cpy" и для "str_cat". "memmove" переставляет блоки данных даже если есть перекрытие, учитывая это. Лишнего ничего нет ,но функции свои функции выполняют. Проверка на NULL еще не обдумана, но это в конце концов детали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ой-ли...

Ничего удивительного.

Когда я говорю "никто не смог", я имею ввиду - из России/Украины никто не смог решить. В целом - они в эту игру играют уже год. Список победителей за это время есть на их сайте.

Изменено пользователем igorle

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На олимпиадное тут не тянет, даже далеко не тянет.

 

p.s. форумчанам просто *бут мозх

Изменено пользователем federal

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

отправил ради интереса

 

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!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, мне кое какие моменты нужно исправить..

 

Скажите, а нафига "sizeof(char)" делать? Один ведь будет во всех системах, или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

размер типа правильно определять в runtime
compiletime всё же B)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

размер типа правильно определять в runtime

 

Но ведь char всегда 8 бит, зачем так делать? Я понимаю "int", там могут быть вопросы, но с "char" мне кажется лишним "сайзофать".

 

Видимо в целом направление не верное в решении этой задачи. Поправлю свой вариант и попробуем иным путем пойти:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...