реклама на сайте
подробности

 
 
7 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Олимпиада программистов, Чистый С
igorle
сообщение Feb 25 2013, 09:05
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



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

Меня попросили рассказать, где могу. А я только на этом форуме и бываю. Причем только в разделе для начинающих.
http://hola.org/challenge_ru.html

Надо написать две простые функции на чистом С.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Feb 25 2013, 15:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Уж простите но как то лохотроном попахивает )


--------------------
Go to the top of the page
 
+Quote Post
igorle
сообщение Feb 25 2013, 15:49
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(SyncLair @ Feb 25 2013, 19:10) *
Уж простите но как то лохотроном попахивает )

sm.gif
Я здесь хоть и не старожил, но достаточно давно общаюсь. Репутацией дорожу.
В чем лохоторон? Людей этих я знаю. Один из них, кстати, написал известный Windriver.

Люди ценят тех, кто умеет писать короткий и элегантный код. И считают, что такой метод поиска дешевле и эффективнее чем многочисленные собеседования. Задачи не так просты, как кажутся. Хотя я считаю, что embedded программистам решить их проще, чем остальным.

От вас ничего, кроме нескольких строчек кода, не требуется.

Я прямой финансовой выгоды здесь не имею. Хотя если кто-то напишет решение, которое им понравится, и скажет им, что это по моей наводке, то я тоже получу такою-же премию, как и победитель.

Go to the top of the page
 
+Quote Post
SyncLair
сообщение Feb 25 2013, 16:01
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Да я не про вашу репутацию. Я про фирму. Ей наверное надо просто собрать базу ембеддеров. А чей код будет круче -- ведь чисто субъективная оценка.

Ну ладно убедили. На досуге что нить им напишу). Честно говоря с первого вгляда не понял как они в NULL копируют.


--------------------
Go to the top of the page
 
+Quote Post
igorle
сообщение Feb 25 2013, 16:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(SyncLair @ Feb 25 2013, 20:01) *
Да я не про вашу репутацию. Я про фирму. Ей наверное надо просто собрать базу ембеддеров. А чей код будет круче -- ведь чисто субъективная оценка.

База ембедеров им точно ни к чему. Они "чистые программисты". Хороших программистов они да, ищут. Код оценивается просто - есть тесты, которые он должен пройти, чтобы его приняли за идеальный.

Мопед не мой. Я просто знаю этих людей и у меня хорошие с ними отношения. Комментарий на русский я переводил. Они пытались после "google translate" текст оставить sm.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 25 2013, 16:22
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(SyncLair @ Feb 25 2013, 19:01) *
Честно говоря с первого вгляда не понял как они в NULL копируют.

lol.gif
Цитата
требуется имплементировать str_cpy()

т.е с проверкой и malloc() если его не существует, но при этом и вызов должен быть s=str_cpy(s, "Hola Hola"); без необоснованного использования двойных указателей

Сообщение отредактировал _Pasha - Feb 25 2013, 16:24
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 25 2013, 19:21
Сообщение #7


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Причём совершенно непонятно, круче будет тот вариант, который после str_cpy(&s, s+5); сразу сделает realloc() на меньший размер, чтобы сразу память освободить, или тот, котрый это дело отложит, а в str_cat() сможет по указателю узнать размер блока и закажет больше, чтобы влезло " Mundo".
Ну а str_printf() как-то сам должен " Mundo" на " World" менять, но реализация его пока не требуется.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Iptash
сообщение Feb 25 2013, 19:24
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



В функции str_cat перед конкатенации нужно Mundo еще и преобразовать в World что ли?
Go to the top of the page
 
+Quote Post
igorle
сообщение Feb 25 2013, 20:00
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Iptash @ Feb 25 2013, 22:24) *
В функции str_cat перед конкатенации нужно Mundo еще и преобразовать в World что ли?

Открою немного закулисы. В исходном варианте надо было получить "Hola Mundo". Я сказал, что лично я не знаю что такое мундо, гугл транслейт тоже не знает, и вообще по русски это звучит неприлично. Поэтому они решили заменить эту мунду в русском тесте на World. Вечером я заглянул, а там полмунды осталось....
Не обращайте внимание. Завтра почистят.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 26 2013, 07:40
Сообщение #10


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(igorle @ Feb 25 2013, 22:00) *
В исходном варианте надо было получить "Hola Mundo".
...
полмунды осталось....
Да это как раз во всём задании понятнее всего.
Я когда про преобразование в str_printf-фе писал, просто обломился смайлик поставить.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2013, 09:37
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(igorle @ Feb 25 2013, 23:00) *
Открою немного закулисы. В исходном варианте надо было получить "Hola Mundo". Я сказал, что лично я не знаю что такое мундо, гугл транслейт тоже не знает, и вообще по русски это звучит неприлично. Поэтому они решили заменить эту мунду в русском тесте на World. Вечером я заглянул, а там полмунды осталось....
Не обращайте внимание. Завтра почистят.

То - по испански. Hola - привет. Mundo - мир. Ваши друзья - испанцы!

Подкорректирую ответ. Гугл, естественно, справился с переводом. Нужно было нажать кнопку Автоматически определить язык. Складывается впечатление, что и по программированию вопрос задан так же нетолково.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 26 2013, 09:48
Сообщение #12


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ReAl @ Feb 25 2013, 22:21) *
Причём совершенно непонятно

Функции с кучей побочных эффектов нуждаются в уточнении понятия идеальности.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Feb 26 2013, 11:43
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(ViKo @ Feb 26 2013, 13:37) *
Ваши друзья - испанцы!

Вы слишком категоричны. Они могут быть и колумбийцами.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2013, 12:04
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Мда... Олимпиада - высшее спортивное состязание. Тут же этим словом прикрыт банальный и циничный поиск дешевой, но квалифицированной рабсилы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
gerber
сообщение Feb 26 2013, 12:10
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(SyncLair @ Feb 25 2013, 19:01) *
Честно говоря с первого вгляда не понял как они в NULL копируют.

А вот и не в NULL ... Передаётся-то в функцию ссылка на указатель. wacko.gif


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
igorle
сообщение Feb 26 2013, 12:51
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Сергей Борщ @ Feb 26 2013, 16:04) *
Мда... Олимпиада - высшее спортивное состязание. Тут же этим словом прикрыт банальный и циничный поиск дешевой, но квалифицированной рабсилы.

Блин. Это я так перевел. А как бы Вы перевели "Coding Challenge"? Русскоговорящий (но не русскомыслящий) товарищ из Холы перевел это "вызов кодирования". Хорошо еще что он узнал что я скучаю на больничном и попросил прочитать, что он там написал. Если предложите перевод лучше - они могут и поправить. Оригинал - здесь http://hola.org/hola_5min_challenge.html

Они ищут квалифицированных программистов, это да. Про дешевизну речи не было. Мозгоклюи они еще те (работать с ними мало кто может), но в банальности их еще никто не упрекал. Или сейчас все работодатели премии за успешно решенные тесты дают?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2013, 13:46
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (igorle @ Feb 26 2013, 14:51) *
Если предложите перевод лучше - они могут и поправить.
А они заплатят за лучший перевод? Не имею никакого желания помогать капиталистам организовывать их набор сотрудников.

И вы и они тщательно убрали из заголовка цель всего мероприятия - набор сотрудников. Подменив ее в заголовке средством достижения этой цели - конкурсом. Банальный, простите, развод.
Возможно мне бы и было интересно соревнование ради соревнования, из спортивного интереса. А вот наниматься никуда не собираюсь и одолжения "может быть мы вам позвоним" мне тем более не нужны.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 26 2013, 13:48
Сообщение #18


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ReAl @ Feb 25 2013, 23:21) *
Ну а str_printf() как-то сам должен " Mundo" на " World" менять, но реализация его пока не требуется.

А оно ИМХО и не реализуемо. Я было попробовал, но неизбежно переполнение буфера, т.к. нам не известен его требуемый размер...
Код
int str_printf(char** pdst, char* format, ...)
{
    va_list arg_ptr;

    va_start(arg_ptr, format);

    int x = vsprintf(*pdst, format, arg_ptr);

    va_end(arg_ptr);

    return (x);
}
Задания с багами даже на "Олимпиаде":(


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 26 2013, 13:56
Сообщение #19


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(demiurg_spb @ Feb 26 2013, 15:48) *
не известен его требуемый размер...
А чо™ — пробежаться по форматной строке в режиме dry-run :-), вычислить длину.
Потом по указателю на получатель уточнить у менеджера памяти реальный размер выделенного блока (он может отличаться от того, который запрашивали в тех str_cpy() и, возможно, перезапрашивали в str_cat()), например, потому, что менеджер памяти округляет размер блока до 16 или 32 байт. Ну и тогда уже решать, лезет в тот же блок или нет, перезапрашивать новый. Ну и потом уже реально печатать. Всё можно, было бы желание.
Кстати, в str_printf там еще может быть морока, в задании оно печатает в ту же строку, из которой берёт. В случае формата "!%s!" оно начнёт налазить само на себя, нужен какой-от промежуточный буфер либо совсем новый, указатель на который потом записывать в первый аргумент. Так что не зря пока сказано, что str_printf делать не надо :-)
Но и для str_cpy и str_cat подобная беда будет, там всего лишь проще считать необходимую длину.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 26 2013, 14:00
Сообщение #20


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ReAl @ Feb 26 2013, 17:56) *
А чо™ — пробежаться по форматной строке в режиме dry-run :-), вычислить длину.
Ага учесть все возможные форматы *%+-0 u l d f s hu hhu .... и нигде не облажаться, ну-ну™....
Я пас!
Проще ещё раз реалоцировать буфер с офигенным запасом и использовать snprint. И это тоже буде та ещё кака, но зато рабочая в большинстве случаев.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 26 2013, 14:47
Сообщение #21


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(demiurg_spb @ Feb 26 2013, 16:00) *
Ага учесть все возможные форматы *%+-0 u l d f s hu hhu
Ага, и %*.*s c правильной отработкой отрицательной ширины поля в аругменте.
Ну так ведь олимпиада™ и прочий контест™ с челленджем™
Дорога героев.

А буфер с запасом — удел слабаков. На 500 баксов не тянет.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 26 2013, 15:37
Сообщение #22


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Надо создать поток с переопределенной ф-цией putc() чтобы следила за размером буфера и вызывала realloc() по мере необходимости. Только не хоцца actual_size и cur_pos в статик хранить... некошерно. А, нифига, нормально - в FILE это все есть.
При выходе - ужать буфер до итогового размера и передать ссылку


Сообщение отредактировал _Pasha - Feb 26 2013, 15:41
Go to the top of the page
 
+Quote Post
igorle
сообщение Feb 26 2013, 15:41
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



про str_printf:
Цитата(demiurg_spb @ Feb 26 2013, 16:48) *
А оно ИМХО и не реализуемо.

Таки реализуемо. Обратите внимание - в английском варианте challengа требование к участникам из Jungo - реализоавть эти функции тоже. И кода должно быть не много 05.gif
Go to the top of the page
 
+Quote Post
SSerge
сообщение Feb 26 2013, 15:55
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



А потом этих гениев примут в штат и посадят очедную опердень писать.
Вот счастье-то.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 26 2013, 16:01
Сообщение #25


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(SSerge @ Feb 26 2013, 18:55) *
Вот счастье-то.

Счастье есть... sm.gif
Go to the top of the page
 
+Quote Post
Слесарь
сообщение Feb 26 2013, 16:54
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 884
Регистрация: 7-11-09
Из: Ростовская обл.
Пользователь №: 53 484



Цитата(igorle @ Feb 25 2013, 19:18) *
- есть тесты, которые он должен пройти, чтобы его приняли за идеальный.

Помнится в программистском детстве прибаливал получить сертификат программиста ответив на подборку вопросов на сайте. Глупости все это...
А проработав несколько лет программером и казалось бы все знавше в своей области, несмог ответить на вопросы анкеты одной конторки, у них наверно была какая-то своя специфика кодинга. Например, мне ясно дали понять, если буду писать имена классов C++ не с буквы "К", а с буквы "C" как привык, я им не подхожу. у них своя особая идеология.
Олимпиада, это все очень сомнительно. Не подпадаеш под шаблон, выбываешь...
Go to the top of the page
 
+Quote Post
igorle
сообщение Feb 26 2013, 17:06
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Слесарь @ Feb 26 2013, 19:54) *
... Например, мне ясно дали понять, если буду писать имена классов C++ не с буквы "К", а с буквы "C" как привык, я им не подхожу. у них своя особая идеология


Это не имеет отношения к теме ветки совсем. Но раз уж мы все здесь собрались.... Code Convention - очень полезная вещь. Помогает читать код друг друга. На интервью (и на тестах) не важно как ты писал раньше, но если программист в _работе_ отказывается следовать правилам, принятым в фирме - это сильный аргумент за его увольнение.

А вообще, похоже что на этом форуме концентрация "волков-одиночек" выше, чем в среднем по больнице.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 26 2013, 17:12
Сообщение #28


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(igorle @ Feb 26 2013, 20:06) *
А вообще, похоже что на этом форуме концентрация "волков-одиночек" выше, чем в среднем по больнице.

Не ведутся на crappy papers? biggrin.gif
Go to the top of the page
 
+Quote Post
Слесарь
сообщение Feb 26 2013, 17:27
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 884
Регистрация: 7-11-09
Из: Ростовская обл.
Пользователь №: 53 484



Цитата(igorle @ Feb 26 2013, 20:06) *
На интервью (и на тестах) не важно как ты писал раньше, но если программист в _работе_ отказывается следовать правилам, принятым в фирме - это сильный аргумент за его увольнение.

Наверное по этой причине из 30 лет сознательной жизни у меня только 3 года официального трудового стажа.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 26 2013, 17:34
Сообщение #30


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Слесарь @ Feb 26 2013, 20:27) *
Наверное по этой причине из 30 лет сознательной жизни у меня только 3 года официального трудового стажа.

beer.gif У меня из 43-х минус 18 = 25 сознательной sm.gif также 3 года. Виват, новые цыгане!

Сообщение отредактировал _Pasha - Feb 26 2013, 17:36
Go to the top of the page
 
+Quote Post
Слесарь
сообщение Feb 26 2013, 17:39
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 884
Регистрация: 7-11-09
Из: Ростовская обл.
Пользователь №: 53 484



Незнаю как и кто, но я ощущаю счастье в том, что пока еще могу себе позволить не работать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2013, 17:51
Сообщение #32


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Воры в законе? disco.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 26 2013, 17:58
Сообщение #33


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ViKo @ Feb 26 2013, 20:51) *
Воры в законе? disco.gif

Вы ж поймите, что мы не виноватыя, что определенная категория населения нашей всеобъемлющей Родины живет по такому же распорядку дня sm.gif
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 18 2013, 10:08
Сообщение #34


Профессионал
*****

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


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 19 2013, 14:39
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ Mar 18 2013, 14:08) *
Может вот так попробовать:
...

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

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

Пока никто не смог.
Go to the top of the page
 
+Quote Post
skripach
сообщение Mar 19 2013, 14:52
Сообщение #36


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



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

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


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 19 2013, 17:27
Сообщение #37


Профессионал
*****

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



Цитата(igorle @ Mar 19 2013, 18:39) *
Я обещал не комментировать и никак иначе не помогать участникам. Так что, извините. Скажу только, что направление правильное, но пока что это не годится.

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

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


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


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 20 2013, 05:17
Сообщение #38


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(igorle @ Mar 19 2013, 18:39) *
Пока никто не смог.
Ой-ли...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 20 2013, 07:09
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(demiurg_spb @ Mar 20 2013, 08:17) *
Ой-ли...

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

Сообщение отредактировал igorle - Mar 20 2013, 07:10
Go to the top of the page
 
+Quote Post
federal
сообщение Mar 20 2013, 07:40
Сообщение #40


Участник
*

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



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

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

Сообщение отредактировал federal - Mar 20 2013, 08:46
Go to the top of the page
 
+Quote Post
am1808
сообщение Mar 20 2013, 10:08
Сообщение #41


Частый гость
**

Группа: Участник
Сообщений: 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!
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 20 2013, 10:09
Сообщение #42


Профессионал
*****

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



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

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


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
am1808
сообщение Mar 20 2013, 10:13
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337



размер типа правильно определять в runtime
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 20 2013, 10:17
Сообщение #44


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(am1808 @ Mar 20 2013, 14:13) *
размер типа правильно определять в runtime
compiletime всё же cool.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 20 2013, 10:23
Сообщение #45


Профессионал
*****

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



Цитата(am1808 @ Mar 20 2013, 14:13) *
размер типа правильно определять в runtime


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

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


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
am1808
сообщение Mar 20 2013, 10:25
Сообщение #46


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337



Цитата(demiurg_spb @ Mar 20 2013, 14:17) *
compiletime всё же B)

да, конечно же compile-time, извиняюсь
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 20 2013, 10:27
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Буратино @ Mar 20 2013, 14:23) *
Но ведь char всегда 8 бит...

Далеко не всегда.
Go to the top of the page
 
+Quote Post
gerber
сообщение Mar 20 2013, 10:28
Сообщение #48


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(Буратино @ Mar 20 2013, 13:09) *
Скажите, а нафига "sizeof(char)" делать?

Есть несколько правил "хорошего", "структурного" стиля программирования на C, которым учат в вузах. Например, "не использовать в С оператор goto", "использовать локальные переменные вместо глобальных, где это возможно", "давать переменным говорящие имена" и т. п.
sizeof(char) - это следствие из усвоенного правила "не использовать прямых констант в тексте программы, заменяя их по возможности дефайнами или константами".
Код
strlen(from_str)*sizeof(char)

Хотя в приведённом коде, по-моему, это явный перебор. И свидетельствует, скорее, о формальном подходе к программированию и непониманию происходящего.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
am1808
сообщение Mar 20 2013, 10:31
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337



Цитата(Буратино @ Mar 20 2013, 14:23) *
Видимо в целом направление не верное в решении этой задачи.

В целом, постановка задачи неправильная.
Что вас в коде не устроило? приведите те ситуации, когда он не отработает?

зы
вот нафиг я от работы отвлекся)), теперь с этими израилитянами переписываюсь, жду, что они скажут(думаю, что ничего не скажут)



Цитата(gerber @ Mar 20 2013, 14:28) *
Код
strlen(from_str)*sizeof(char)

Хотя в приведённом коде, по-моему, это явный перебор. И свидетельствует, скорее, о формальном подходе к программированию и непониманию происходящего.

Ну, вам виднее, товарисчь. Пиписьками меряться не стану с вами.
Хотя соглашусь, лишнее
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 20 2013, 10:39
Сообщение #50


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(aaarrr @ Mar 20 2013, 14:27) *
Далеко не всегда.
Верно сказать что sizeof(char)==1 байт всегда и везде, ну а байт может быть любой размерности. Поэтому формально Буратино прав и нет никаких доводов в пользу использования sizeof(char) вместо 1 кроме эстетических.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 20 2013, 11:06
Сообщение #51


Профессионал
*****

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



am1808, если открыть реализацию realloc, то там похоже есть проверка аргументов. Еще мне не очень, что вы несколько раз strlen вызываете, наверняка можно обойтись и одним разом на функцию.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 21 2013, 11:54
Сообщение #52


Профессионал
*****

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



Вот так еще можжно:
Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

    
void str_cpy (char **a,   char *b) {  
   *a = b;
}


void str_cat (char **a,  char *b){
   int _size1 = strlen(b);  
   int _size2 = strlen(*a);  
   char * tmp = NULL;
  
   tmp = realloc(tmp, _size1 + _size2 + 2);
   memmove(tmp , *a, _size2);
   memmove(tmp + _size2, b, _size1);
  
   *a = tmp;
}

int main() {
   char *s = NULL;
  
   str_cpy(&s, "Hola Mola");    
   str_cpy(&s, s+5);    
   str_cat(&s," World");  
      
   return 0;
}


проверку аргументов пока вынесем за скобкиsm.gif


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Mar 21 2013, 11:58
Сообщение #53


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(demiurg_spb @ Mar 20 2013, 11:39) *
Верно сказать что sizeof(char)==1 байт всегда и везде, ну а байт может быть любой размерности.

А у нас в char`е два байта, при том, что в байте восемь бит. Двоичных, на всякий случай, а то мало ли у кого как.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 21 2013, 12:20
Сообщение #54


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Огурцов @ Mar 21 2013, 15:58) *
А у нас в char`е два байта, при том, что в байте восемь бит. Двоичных, на всякий случай, а то мало ли у кого как.
У вас это где, в компиляторе для TI dsp'шок?. Стандарт однозначно говорит, что sizeof(char)=1. А у вас сколько sizeof(char) выдаёт?

Цитата(Буратино @ Mar 21 2013, 15:54) *
Код
void str_cpy (char** a, char* b) {*a = b;}
А как насчёт того, что в ТЗ сказано, что каждая функция должна быть порядка 7 строк? А тут всё в 1 влезло...wink.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 21 2013, 14:37
Сообщение #55


Профессионал
*****

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



Цитата(demiurg_spb @ Mar 21 2013, 16:20) *
А как насчёт того, что в ТЗ сказано, что каждая функция должна быть порядка 7 строк? А тут всё в 1 влезло...wink.gif


"не более чем 7 строк кода на функцию"


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 21 2013, 14:44
Сообщение #56


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ Mar 21 2013, 17:37) *
"не более чем 7 строк кода на функцию"

Проблема общения в виртуале - никогда не уверен - человек шутит, или серьезно. Ваш вариант выглядит как троллинг.
Вы действительно хотите комментариев к этому коду?

Сообщение отредактировал igorle - Mar 21 2013, 14:45
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 21 2013, 15:10
Сообщение #57


Профессионал
*****

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



Цитата(igorle @ Mar 21 2013, 17:44) *
Проблема общения в виртуале - никогда не уверен - человек шутит, или серьезно. Ваш вариант выглядит как троллинг.
Вы действительно хотите комментариев к этому коду?


А какой смысл размещать его тут кроме как получить каменты? Конечно хочу! Кстати данный код работает и выполняет функции. Почему так нельзя сделать!?


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 21 2013, 15:52
Сообщение #58


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ Mar 21 2013, 18:10) *
А какой смысл размещать его тут кроме как получить каменты? Конечно хочу! Кстати данный код работает и выполняет функции. Почему так нельзя сделать!?

Ну, некоторые пишут, чтобы получать лулзы, глядя как люди рвут на себе волосы
"Код работает" - это совсем не аргумент. Надо не код, который один раз сработает с данным примером, а код, который будет работать в библиотеке. Он будет вызываться миллионы раз как с короткими, так и мегабайтными строками.
Код
void str_cpy (char **a,   char *b) {  
   *a = b;
}
Кто сказал что сорс будет существовать после вызова функции? Может быть я работаю с буфером, потом копирую строку и снова пишу в буфер. Или освобождаю буфер. Что будет с сохраненным значением?
Код
void str_cat (char **a,  char *b){
   int _size1 = strlen(b);  
   int _size2 = strlen(*a);

Функция может быть вызвана для неинициализированного дестинейшена. strlen для NULL - крэш
Код
   char * tmp = NULL;
  
   tmp = realloc(tmp, _size1 + _size2 + 2);
Зачем вызывать реаллок для NULL? Зачем двойка добавлена?
Код
   memmove(tmp , *a, _size2);
   memmove(tmp + _size2, b, _size1);
  
   *a = tmp;
}
Старое значение *a перетерто. Память, на которую указывала *a - потеряна. Результирующая строка не ограничена нулем.

Сообщение отредактировал igorle - Mar 21 2013, 15:55
Go to the top of the page
 
+Quote Post
msalov
сообщение Mar 22 2013, 06:10
Сообщение #59


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(gerber @ Mar 20 2013, 13:28) *
Код
strlen(from_str)*sizeof(char)

Хотя в приведённом коде, по-моему, это явный перебор. И свидетельствует, скорее, о формальном подходе к программированию и непониманию происходящего.
В таком виде - да. Идея хорошая, но реализация чуть подкачала. Для данного случая то же самое по сути
Код
strlen(from_str)*sizeof(*from_str)
, но если char станет wchar отработает нормально.
Go to the top of the page
 
+Quote Post
am1808
сообщение Mar 22 2013, 07:18
Сообщение #60


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 29-05-11
Из: Nizhny Novgorod, Russian Federation
Пользователь №: 65 337



нее, не прокатит, множитель в виде sizeof(char) лишний, но ничего плохого в нем нет.

Типы параметров функции точно определены, поэтому sizeof(*from_str) строго определено.
Перегрузки тут нет никакой, это в плюсах можно так сделать.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 22 2013, 07:30
Сообщение #61


Профессионал
*****

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



igorle, замечания обдумываю, но вот например не ясно почему "покрошится" strlen от NULL? Это же просто 0 что собственно эквивалентно "\0"
realloc можно вызывать с NULL, но у меня оно конечно не к селу ни к городу, однако realloc и NULL вполне себе ничего и есть причины так делать.

Вот еще вариант ,но єто практически максимум того на что способен мой "мозг". Проверки и исключения пока не прикручивал ,важно понять это правильная идея или нет!?
Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

    
void str_cpy (char **a,   const char *  b) {
   char * tmp = NULL;
   int size_str = strlen(b)+1;
  
   tmp = realloc(tmp, size_str);
   memmove (tmp, b, size_str);
   free (*a);
   *a = tmp;
}


void str_cat (char **a,  const char *b){
   int size_str_1 = strlen(b);
   int size_str_2 = strlen(*a);
  
   *a = realloc(*a, size_str_1 + size_str_2 + 1);
   memmove (*a + size_str_2, b, size_str_1 + 1);
}

int main() {
   char *s = NULL;

   str_cpy(&s, "Hola Mola");    
   str_cpy(&s, s+5);    
   str_cat(&s," World");
      
   return 0;
}


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 22 2013, 07:52
Сообщение #62


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ Mar 22 2013, 11:30) *
...не ясно почему "покрошится" strlen от NULL? Это же просто 0 что собственно эквивалентно "\0"

Чтобы почуствовать разницу, забегите вот этот код:
Код
static void foo(char *str)
{
    printf("%p\n", str);
}

int main(void)
{
    foo(NULL);
    foo("\0");
    return 0;
}
После этого попытайтесь объяснить, почему ваше утверждение неверно.

По поводу всего остального. Я подписал обязательство, согласно которому, если станет известно что я консультирую участников конкурса Холы, то я должен буду вернуть полученую от них приемию. А я премию уже потратил на детальки. Так что дальше - самостоятельно. Адью sm.gif
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 22 2013, 11:28
Сообщение #63


Профессионал
*****

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



Если бы я мог как-то обезапасить строку от изменений на ее текущем месте, то получилось бы интереснее, но я так понимаю, что кроме как выделить память под строку и перелить в это мето данные не получится гарантировать ее сохранность! Создать в памяти резервирование под существующую строку (то есть под то место где она текущая лежит) так же не получится ибо наверное на архитектуре завязано много.
Склеивать строки нельзя на пустом месте, нужно быть уверенным в том что это склейка разместится в свободном и безопасном пространстве.
Что касается strlen, то мне нужно посмотреть как она, функция, сделана.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
federal
сообщение Mar 22 2013, 12:29
Сообщение #64


Участник
*

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



Буратино, какой же ты деревянный все таки lol.gif
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 22 2013, 13:08
Сообщение #65


Профессионал
*****

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



Цитата(federal @ Mar 22 2013, 15:29) *
Буратино, какой же ты деревянный все таки lol.gif


Я лично был свидетелем того, как тигр в зоопарке сожрал резинового утенка, как вор и бандит становится президентом страны и как можно штуку баксов потратить на туфельки. А уж Дуремаров разного сорта и помола, я столько раз встречал, что Вы даже просто статистически ничего для меня не значите.
bb-offtopic.gif


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 25 2013, 11:29
Сообщение #66


Профессионал
*****

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



igorle, Вы наверное хотели написать
Код
'\0'

а не
Код
"\0"


Вот код который печатает трижды NULL
Код
void foo(char *str) {
    printf("%s \n", str );
}

int main(void) {
    foo(NULL);
    foo('\0');
    foo(0);
    
    return 0;
}

Код
stdout:
(null)
(null)
(null)


Вот некая реализация strlen
Код
/*
* Copyright (C) 2002     Manuel Novoa III
* Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
*
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/

#include "_string.h"

#ifdef WANT_WIDE
# define Wstrlen wcslen
#else
# define Wstrlen strlen
#endif

size_t Wstrlen(const Wchar *s)
{
    register const Wchar *p;

    for (p=s; *p; p++);

    return p - s;
}
libc_hidden_weak(Wstrlen)


На первый взгляд ничего криминального в передаче NULL в функцию нет, но те не менее strlen c NULL компилится с ошибкой.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 25 2013, 14:18
Сообщение #67


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Я Вас теряю.
Вы пишите
Цитата
не ясно почему "покрошится" strlen от NULL? Это же просто 0 что собственно эквивалентно "\0"

Когда я объясняю, в чем разница между 0 и "\0", вы говорите
Цитата
igorle, Вы наверное хотели написать '\0' а не "\0"

Нет. Вы написали "\0", поэтому я говорил об "\0", а не об '\0'. Логично, да?

После этого я даю вам пример, где распечатываю поинтер (%p), и показываю в чем разница между 0 и "\0", а вы печатаете совсем другой пример, где распечатываете строку (%s) и даете совсем другие аргументы. Я не улавливаю ход Вашей мысли.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 25 2013, 16:41
Сообщение #68


Профессионал
*****

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



Сори, но я имел в виду именно '\0', не строковой литерал.
Кое-что почитал и думаю что нулевой указатель нельзя использовать с strlen, потому что нельзя разименовывать нулевой указатель.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 25 2013, 18:15
Сообщение #69


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Буратино @ Mar 25 2013, 20:41) *
Кое-что почитал и думаю что нулевой указатель нельзя использовать с strlen, потому что нельзя разименовывать нулевой указатель.

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

strlen(NULL) у вас вряд ли компилируется с ошибкой, скорее с предупреждением. а вот в процессе выполнения этого кода результат будет непредсказуем. точнее, если платформа вам хорошо знакома - результат можно предсказать, но он будет явно бессмысленным, т.к. по адресу памяти 0x0000 у вас наверняка никакой строки нет.




--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 26 2013, 07:22
Сообщение #70


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ Mar 25 2013, 19:41) *
Сори, но я имел в виду именно '\0', не строковой литерал.
Кое-что почитал и думаю что нулевой указатель нельзя использовать с strlen, потому что нельзя разименовывать нулевой указатель.

Абсолютно верно. NULL означает, что объект находится по адресу ноль. Обычно - защищенная область. Как поется в песне "Ай-ай-ай туда нельзя"
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 27 2013, 15:12
Сообщение #71


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



отправил им решение, посмотрим что ответят. Сделал поиск на str_free, нашел еще одну страницу этого соревнования с другой датой и уже с решением.

https://compilr.com/timaner/test/HelloWorld.c
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 27 2013, 20:33
Сообщение #72


Профессионал
*****

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



Жаль что больше нет времени. 28го все закончится(
Вот моя последняя реализация. Прокачал защиту от NULL, оптимизировал некоторые участки и обдумал траблу с перекрытием данных в строках.

Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

    
void str_cpy ( char **a, const char * b ) {

   int size_src;
   char overlap;
  
   if ( b ) size_src = strlen( b ) + 1; else return;
   overlap = (*a <= b && *a + size_src >= b) || (b <= *a && b + size_src >= *a);
   *a = realloc( *a, size_src );
   if ( overlap )  
      for (*a += size_src, b += size_src; size_src--; *--*a = *--b);
   else
       memcpy( *a, b, size_src );
}


void str_cat ( char **a,  const char *b ){
   int size_src, size_des;
      
   if ( *a ) size_des = strlen( *a ); else size_des = 0;
   if ( b )  size_src = strlen( b ); else return;
  
   *a = realloc( *a, size_src + size_des + 1 );
   memmove ( *a + size_des, b, size_src + 1 );
}

int main() {
   char *s = NULL;
  
   str_cpy( &s, "Hola Mola" );    
   str_cpy( &s, s+5 );      
   str_cat( &s," World" );  
  
   return 0;
}


Очень интересно как правильно, ждем ответ ответ на этот вопрос от организаторов! sm.gif

(EDIT: Утром немного допилил и исправил ошибки)


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 05:19
Сообщение #73


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Буратино @ Mar 28 2013, 00:33) *
обдумал траблу с перекрытием данных в строках.
А чего её обдумывать?
Посмотрите реализацию memmove. В ней всё уже обдумано: если нет перекрытия то вызывается memcpy. Оптимальнее вряд ли напишете.
Я тоже отправил свой вариант в день размещения этой темы, но никакого ответа пока так и не получил. Завтра могу показать.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 28 2013, 06:01
Сообщение #74


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(demiurg_spb @ Mar 28 2013, 09:19) *
Я тоже отправил свой вариант в день размещения этой темы, но никакого ответа пока так и не получил.

Это странно. Они всегда отвечают если не в тот же день, то на следующий. Скажите, пожалуйста, свой емэйл. Можно частично. Я им прямо сейчас позвоню и спрошу как так получилось, что не ответили.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 06:05
Сообщение #75


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(igorle @ Mar 28 2013, 10:01) *
Это странно. Они всегда отвечают если не в тот же день, то на следующий. Скажите, пожалуйста, свой емэйл. Можно частично. Я им прямо сейчас позвоню и спрошу как так получилось, что не ответили.
Отправлял и с
demiurg_spb @ _ _ _.ru
и с
___ @ kipspb.ru


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 28 2013, 06:16
Сообщение #76


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(demiurg_spb @ Mar 28 2013, 10:05) *
Отправлял и с ... и с ...

Я позвонил человеку, который просил меня сделать перевод. Он сегодня не работает (в Израиле сейчас неделя праздников), поэтому сгодня проверить как так получилось не может. Вернется на работу во вторник.
Сопроводительное письмо было? На английском?

Сообщение отредактировал igorle - Mar 28 2013, 06:16
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 06:23
Сообщение #77


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(igorle @ Mar 28 2013, 10:16) *
Сопроводительное письмо было? На английском?
Нет. Только код. А надо?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 28 2013, 06:40
Сообщение #78


Профессионал
*****

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



Скажите, а как можно переписать покрасивше вот это:
Код
if ( b )  size_src = strlen( b ); else return;


В Libc вместо char используют Wchar. Приблизительно я понимаю о чем речь, но вот конкретно для данной задачи оно нужно?
Спасбио!

Цитата(demiurg_spb @ Mar 28 2013, 08:19) *
А чего её обдумывать?
Посмотрите реализацию memmove. В ней всё уже обдумано: если нет перекрытия то вызывается memcpy. Оптимальнее вряд ли напишете.
Я тоже отправил свой вариант в день размещения этой темы, но никакого ответа пока так и не получил. Завтра могу показать.



Вот такая реализация мне доступна. Если я не ошибаюсь, здесь несколько упрощена проверка перекрытия.
Код
/*
* Copyright (C) 2002     Manuel Novoa III
* Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
*
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/

#include "_string.h"

#ifdef WANT_WIDE
# define Wmemmove wmemmove
#else
# define Wmemmove memmove
#endif

Wvoid *Wmemmove(Wvoid *s1, const Wvoid *s2, size_t n)
{
    register Wchar *s = (Wchar *) s1;
    register const Wchar *p = (const Wchar *) s2;

    if (p >= s) {
        while (n) {
            *s++ = *p++;
            --n;
        }
    } else {
        while (n) {
            --n;
            s[n] = p[n];
        }
    }

    return s1;
}

#ifndef WANT_WIDE
libc_hidden_def(memmove)
#endif


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 06:40
Сообщение #79


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Код
char* p;
size_t n = (p)? strlen(p) : 0;


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 28 2013, 06:45
Сообщение #80


Профессионал
*****

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



Цитата(demiurg_spb @ Mar 28 2013, 09:40) *
Код
char* p;
size_t n = (p)? strlen(p) : 0;


Нет, в случае если указатель нулевой то выход из функции осуществить! Зачем ноль присваивать если это уже не имеет смысла в нашем контексте например!?

А зачем Вы используетет size_t, чем например int не подходит? (я понимаю, что это связано с важными моментами, но не ясно с какими)


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 06:48
Сообщение #81


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Буратино @ Mar 28 2013, 10:45) *
А можно и не делать выход а дальше выполнять алгоритм со значением 0...
Всё от задачи зависит.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
igorle
сообщение Mar 28 2013, 06:53
Сообщение #82


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(demiurg_spb @ Mar 28 2013, 09:23) *
Нет. Только код. А надо?

Нет, не надо.
Просто подумал, что если пришло письмо на русском, это могло их сбить с толку.
Я их буду трясти во вторник.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 28 2013, 07:00
Сообщение #83


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Буратино @ Mar 28 2013, 10:45) *
А зачем Вы используетет size_t, чем например int не подходит?

Самодокументирование кода.
Тем что int знаковый.
sizeof() возвращает size_t.
+
Посмотрите как написана libc.
Например посмотрите прототип memcpy. Видите какой тип у третьего аргумента?
Или что возвращает strlen. Ну и т.д. и т.п.
Вообщем если измеряется кол-во или размер самое место для size_t.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Буратино
сообщение Mar 28 2013, 07:11
Сообщение #84


Профессионал
*****

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



Да, нужно почитать что-то на эту тему. Спс.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 28 2013, 12:54
Сообщение #85


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Буратино @ Mar 28 2013, 01:40) *
Скажите, а как можно переписать покрасивше вот это:
Код
if ( b )  size_src = strlen( b ); else return;


Код
if ( !b )  return;
size_src = strlen( b );

Go to the top of the page
 
+Quote Post
igorle
сообщение Apr 2 2013, 16:08
Сообщение #86


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(demiurg_spb @ Mar 28 2013, 09:05) *
Отправлял и с
demiurg_spb @ _ _ _.ru
и с
___ @ kipspb.ru

Посмотрели. Говорят, что с @kipspb.ru был один участник. Давно. Ответили ему в тот же день.
От demiurg_spb получили письмо только 28 марта. Были праздники, но скоро ответят (может быть уже ответили)
Очень удивлялись, что люди обсуждают на форуме и выкладывают решения конкурсных задач. Считают что это нелогичным. тем более, что конкурс продолжается.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Apr 2 2013, 17:55
Сообщение #87


Профессионал
*****

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



Цитата(igorle @ Apr 2 2013, 19:08) *
Посмотрели. Говорят, что с @kipspb.ru был один участник. Давно. Ответили ему в тот же день.
От demiurg_spb получили письмо только 28 марта. Были праздники, но скоро ответят (может быть уже ответили)
Очень удивлялись, что люди обсуждают на форуме и выкладывают решения конкурсных задач. Считают что это нелогичным. тем более, что конкурс продолжается.


Как так продолжается? А когда заканчивается?


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение Apr 2 2013, 19:33
Сообщение #88


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ Apr 2 2013, 20:55) *
Как так продолжается? А когда заканчивается?

Они этот процесс уже год как ведут. Можете посмотреть список "победителей". Там есть даты. Я не знаю, зачем он конечную дату публикуют, а потом корректируют. Хозяин - барин.
Ну и, как помните, конкурс индивидуальный, а не коллективный. Так что лучше свои решения не публиковать.

Сообщение отредактировал igorle - Apr 2 2013, 19:35
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 3 2013, 05:16
Сообщение #89


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(igorle @ Apr 2 2013, 20:08) *
Посмотрели. Говорят, что с @kipspb.ru был один участник. Давно. Ответили ему в тот же день.
Ничего не получил.
Цитата
От demiurg_spb получили письмо только 28 марта. Были праздники, но скоро ответят (может быть уже ответили)
Вчера прислали оповещение, что получили моё решение и извинились за задержку. Но пока никаких результатов и комментариев...

Цитата(igorle @ Apr 2 2013, 23:33) *
Так что лучше свои решения не публиковать.
ок.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 5 2013, 05:20
Сообщение #90


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Получил таки ответ от них:
Цитата
Thanks for taking the Hola Challenge! Our engineer has reviewed your solution, and I'd like to speak with you about the results. Please call me at ...

Хотелось бы спросить... C ними только на английском изъясняться можно или они и по-русски разумеют?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
igorle
сообщение Apr 5 2013, 08:13
Сообщение #91


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(demiurg_spb @ Apr 5 2013, 08:20) *
Получил таки ответ от них:

Хотелось бы спросить... C ними только на английском изъясняться можно или они и по-русски разумеют?

На английском. Там есть как минимум один человек, говорящий по русски. Но он обычно не занимается внешними связями.
Помните что в Израиле выходные - пятница и суббота.
Go to the top of the page
 
+Quote Post
Буратино
сообщение May 17 2013, 10:41
Сообщение #92


Профессионал
*****

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



Так чем дело кончилось? Какое правильное решение?


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ARV
сообщение May 18 2013, 18:17
Сообщение #93


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Буратино @ May 17 2013, 14:41) *
Так чем дело кончилось? Какое правильное решение?

правильное решение - игнорировать глупые задания


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
igorle
сообщение May 19 2013, 20:02
Сообщение #94


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ May 17 2013, 13:41) *
Так чем дело кончилось? Какое правильное решение?

Дело не кончилось. Они продлевают это мероприятие. Судя по таблице победителей, последними на сегодня призы получили люди 18 и 19 марта. Всего я насчитал 52 победителя.
Также можно видеть, что за всю историю из не израильтян приз получил только один человек из Норвегии. Русских было не менее одиннадцати (судя по типично русским именам), но все они - израильтяне (судя по адресу).
Go to the top of the page
 
+Quote Post
Буратино
сообщение May 20 2013, 12:01
Сообщение #95


Профессионал
*****

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



Для меня важно понять: правильное решение лежит исключительно в проф. плоскости или тут еще есть место всяким подколам/приколам и т.п. ?



--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
igorle
сообщение May 20 2013, 17:07
Сообщение #96


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(Буратино @ May 20 2013, 15:01) *
Для меня важно понять: правильное решение лежит исключительно в проф. плоскости или тут еще есть место всяким подколам/приколам и т.п. ?

Исключительно в профплоскости. Людей интересует понимание программистом сути происходящего. Не более того. Когда-то они открыли фирму Jungo и проинтервьюировали кучу народа в Израиле. Статистика была такова - проходил один из 120. Вопросы были достаточно простые, типа операций с указателями. 119 писали в различных форумах о том, какие дебилы в этом Jungo. Вы можете и сейчас найти эти темы в русскоязычных форумах.

Ну и не забываем, что профессиональные плоскости у разных достойных людей могут быть взаимно перпендикулярными. Вот тут недавно у нас решили провести конкурс из нескольких задач. Первую задачу я решил успешно. А потом организаторы обнародовали свои коментарии к решениям участников и сказали, что для них было важным, а что второстепенным. После этого я забил на конкурс и на возможный приз. Потому что мне их критерии не понравились. Задачу следующего тура даже поленился прочитать. Мне там не интересно.

PS. На всякий случай уточню - этот второй конкурс проводится другими людьми и ни какого отношения к теме топика не имеет.
Go to the top of the page
 
+Quote Post
Idle
сообщение May 20 2013, 18:54
Сообщение #97


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(igorle @ May 20 2013, 21:07) *
119 писали в различных форумах о том, какие дебилы в этом Jungo

не - маркетинг там на высоте!

Цитата
How does Hola make the Internet faster?
The Internet is slowed down by server response times, Internet congestion, round trip times, and poorly written communication stacks in operating systems. Hola removes these bottlenecks by securely caching content on peers as they view it, and later serving it up to other nearby peers as they need it. Hola also compresses communication between peers to further speed the net. As more people install and use Hola, the faster and less congested it will be!
Go to the top of the page
 
+Quote Post

7 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 23:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.02634 секунд с 7
ELECTRONIX ©2004-2016