Евгений О.
2989 повідомлень
#14 років тому
ИМХО в таких случая практичнее сделать свой разборщик. Что-то вроде такого:

$s = '{Пожалуйста|Просто} сделайте так, чтобы это {удивительное|крутое|простое} тестовое предложение {изменялось {быстро|мгновенно} случайным образом|менялось каждый раз}';
echo $s.'<br /><br />';
$matches = find_item($s);
echo '<pre>';
print_r($matches);
echo '</pre>';

function find_item($s) {
$r_arr = array();
$l = strlen($s);
$bc = 0;
$ec = 0;
$rs = '';
for($i = 0; $i < $l; $i++) {
$c = substr($s, $i, 1);
$rc .= $c;
if ($c == '{') {
$bc++;
} elseif ($c == '}') {
$ec++;
if ($bc == $ec) {
$r_arr = $rc;
$rc = '';
}
}
}
if (is_array($r_arr)) {
foreach($r_arr as $k => $v) {
$s1 = trim($v, '{');
if ($s1 and $n = strpos($s1, '{')) $r_arr = array($v, find_item(substr($s1, $n)));
}
}
return $r_arr;
}

В выходном массиве есть все возможные комбинации, чтобы собрать новый вариант строки (хотя в конкретном примере несколько кривовато )
Вадим Т.
3240 повідомлень
#14 років тому
elosoft, и как Вы с таким решением собираетесь вывести все комбинации? Некий парсинг в данном случае вижу, вывода всех комбинаций — не вижу.
Евгений О.
2989 повідомлень
#14 років тому
Да вот
Вроде там все разобралось.
Вадим Т.
3240 повідомлень
#14 років тому
Ну, и где все разобралось? Простите, не вижу. Вижу лишь некий массив в некиими фрагментами.
Можете ли пожалуйста вывести на экран то, что просил автор задачи, то есть все варианты текста?

(Чтобы не быть голословным, сегодня вечером, ближе к ночи, я тоже подумаю над своим вариантом решения данной задачи).
Роман Беляев
16382 повідомлення
#14 років тому
Посижу посижу и тоже авось тоже возьмусь решать

Оффтопик
Вообще было бы круто завести такую традицию - выкладывать на форум подобные задачи, думаю найдутся те, кому интересно будет размять мозги.
Кирилл Е.
2817 повідомлень
#14 років тому
Оффтопик
Цитата ("frig"):
думаю найдутся те, кому интересно будет размять мозги.


Если разминать мозги - то над усовершенствованием текущих проектов, так как постоянно есть куски кода над которыми можно поработать и доделать что нибудь интересное )

А вообще да - было бы прикольно..
Евгений Б.
5330 повідомлень
#14 років тому
Оффтопик
Цитата ("TomNorman"):
Оффтопик:
Moisha,
Работать в вашем банке большая честь?

я думал, что уже вымерли те люди, кто помнит фишку с "динамично развивающейся компанией"
Вадим Т.
3240 повідомлень
#14 років тому
Вот-с, родилось простое и изящное решение. Без графа. PHP 5.3.3.

<?php
$str = '{Пожалуйста|Просто} сделайте так, чтобы это {удивительное|крутое|' .
'простое} тестовое предложение {изменялось {быстро|мгновенно} ' .
'случайным образом|менялось каждый раз}.';

show($str);

function show($str, &$hash = array())
{
if (preg_match('/{(*)}/', $str, $match)) {
foreach (explode('|', $match) as $s) {
show(preg_replace('/{*}/', preg_quote($s), $str, 1), $hash);
}
} elseif (!isset($hash)) {
$hash = 1;
echo $str, PHP_EOL;
}
}


Недостаток этого решения: потребляет много памяти. Если тексты будут очень большими (сотни килобайт), и с большим количеством плейсхолдеров, то таки придется делать решение с графом, так как тогда потребление памяти будет сведено к минимуму, только на хранение самого графа и на текущий вариант строки. Но, думаю, в качестве тестового задания приведенное выше решение тоже вполне годится, так как поставленную задачу выполняет.
Александр В.
58 повідомлень
#14 років тому
tvv, боюсь спросить - сколько же времени у Вас отняло решение этой задачи?
16 строчек кода - это гениально, тут не чего сказать...... Пожалуй мне лучше дворником пойти работать...
Мое решение ещё не готово, но уже занимает 100 строк кода - там правда целый класс, и да по легкому пути я не пошел ) - храню после парсинга строки граф.

protected $_staticString = "%1% сделайте так, чтобы это %2% тестовое предложение %3%";
protected $_arrayStringVariant = array(
array("Пожалуйста","Просто"),
array("удивительное","крутое","простое"),
array("изменялось {быстро|мгновенно} случайным образом","менялось каждый раз"));

Вот пытаюсь теперь реализовать поиск в ширину на пхп чтобы обойти граф.
Вадим Т.
3240 повідомлень
#14 років тому
Минут 20 потратил на этот код.
Потом еще часа через полтора в голову пришла мысль, что возможна ситуация, вызывающая ошибку (например, если в строке будут служебные символы типа знака доллара), исправил.

Но на самом деле сходу с нуля, например на собеседовании, я бы в 20 минут не уложился, если бы мне задали бы эту задачу.
Я ведь еще днем ее прочитал, потом в течении дня, гуляя, в голове прокручивал, думал над вариантами, и т.д. (причем, в первую очередь продумал решение с графом, на PHP 5.3 красиво можно сделать, если для парсинга использовать preg_replace_callback с анонимными функциями и замыканиями). Так что суммарно потрачено времени значительно больше.
Сергей К.
1649 повідомлень
#14 років тому
Да ну их, таких тестовых задач. Я бы никогда не выполнял такую задачу как тестовую.
Решение этой задачи стоит денег. Что заказчик тут хочет проверять? Кто как хорошо программирует на PHP? В таких случаях дают совсем другие задачи.
tvv, вы решили ее за 20 минут. С вашими знаниями, думаю у вас час работы стоит не мало. 20 минут это 33% от того не мало Тем более, что решение задачи, вы предварительно строили в голове. Итого, на такой "тестовой" задачи можно тратить пару часиков только так. В чем смысл? Что бы потом получить задачу на 50-100 баксов? Глупость.
А вы знаете что есть "заказчики", которые сами только начинают учить программировать, и специально дают "тестовые" задания, так как это они сами решать не могут в рамках проекта, который они получили, и за него они деньги получат. А вы останетесь с решенной задачи и одной из фраз "Уже не надо", "Другой решил лучше" итд. За весь период что я работаю, нормальные заказчики, никогда не просили делать тестовое задание, что бы им что то доказать.
Когда начал работать, работал без предоплаты, что бы не был должен, если не получится выполнить данный заказ(хотя этого и не случилось ни разу).
Со временем, накапливается опыт, и уже можно сразу сказать если можешь решать конкретную какую то задачу. Сейчас я без СБС и предоплаты не работаю. И все хорошо. Так же, мое заказчики не просят выполнять тестовые задания. Им достаточно смотреть портфолио и отзывы других заказчиков.
То что Moisha говорит про килдаловство от фрилансеров с рейтингом, скорее всего бред. Я сомневаюсь что нормальный, здоровый человек рискнет своей репутацией(а рейтинг это и значит), что бы ничего не получить(если не взял предоплату) или получить какую то небольшую сумму в качестве аванса. Новички да, те еще могут кидать. Но кидаловство от фрилансеров с нормальным рейтингом. если даже есть, думаю это аномалия.
Я вообще думаю что тестовые задания это глупость. Если проект важный и сложный, не стоить дать его новичку, без опыта. И тут даже тестовое задание ничего не дает. Этот новичок, может искать ее решение на форумах, или кому то заплатить небольшую сумму денег, для получения большого заказа. В данном случае. заказчику лучше выбрать опытного человека, который может реально оценивать свои силы. А опытные программисты, фиг будут выполнять тестовые задания. Разве что эту заданию выполнять для получения хорошего постоянного места работы.
Наверное я слишком углубился в данном вопросе, так что тут ставлю точку.
А вам Moisha, стоит задуматься над тем что писали мои коллеги выше, и о том что я писал тут. И если вы сам программист, думаю уже все понятно.
Артем Л.
11416 повідомлень
#14 років тому
Цитата ("WebDesignStudio"):
То что автор темы говорит про килдаловство от фрилансеров с рейтингом, скорее всего бред.

Ну насчет фрилансеров не скажу, а вот заказчики с рейтингом бывает что кидают на ура. Недавно был случай у девушки одной
Хотя я с этим заказчиком работал неоднократно и все нормально было.
Сергей К.
1649 повідомлень
#14 років тому
Цитата ("Hungry_Hunter"):
а вот заказчики с рейтингом бывает что кидают на ура

это еще как бывает. Им же легче. Ну и что если будет отрицательный отзыв? Они всегда найдут исполнители для своих заказов. Что не скажу про фрилансеров, у которых есть отрицательные отзывы.
Если не ошибаюсь, сам работал с заказчиком у которого было отрицательных отзывов. Правда, по СБС или предоплате. :P
Кирилл Е.
2817 повідомлень
#14 років тому
Оффтопик
Неужели всё так худо? .. Если интересно что-то делать, например думать над разными задачами интереса ради - да ради Бога, разве это плохо? .. Нельзя всё сводить к деньгам и каждой минуте/часу ставить эквивалент в баксах, так же сгореть можно :P
Сергей К.
1649 повідомлень
#14 років тому
kirilev,
ну конечно, для себя можно решать какие то интересные задачи. Но когда заказчик просит выполнить ему "тестовое" задание, которая потянет для небольшого проекта с бюджетом 50-100 у.е., то я думаю лучше этого не делать.
Моисеенко П.
46 повідомлень
#14 років тому
Цитата ("WebDesignStudio"):
То что Moisha говорит про килдаловство от фрилансеров с рейтингом, скорее всего бред.

Каждый кулик своё болото хвалит. Это и естественно. Но прецедент был, когда человек с 9 положительными отзывами взял деньги одновременно у трёх заказчиков и потом написал что в больничку лёг

И вот после этого у меня отбилась всякая охота давать предоплату. Ваше дело не верить. Но хотя бы исходя из того, что и заказчики и фрилансеры - это теже самые люди, разумно предположить, что мразь встречается по обе стороны. А ваши высокие слова по репутацию - это красиво, но практика как обычно банальнее. Очень часто самые лучшие и преданные сотрудники вдруг срываются. Конечно у каждого своя причина, и случаи все индивидуальны, но они есть.

Цитата ("WebDesignStudio"):
А вам Moisha, стоит задуматься над тем что писали мои коллеги выше, и о том что я писал тут. И если вы сам программист, думаю уже все понятно.


Над чем же мне задуматься? Я разве у кого провинился? Или поведение моё вызывающее. Или может быть кого-то раздражает о том, что я говорю про кидалово среди фрилансеров? А ну... неприятно конечно такое слышать.

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

Некоторые умудрились приписать мне надменность, и я уже забыл что там А ну и мол вдруг я кину
(человек, который разрабатывает детальные ТЗ - обязательно делает их, чтобы кинуть -- логично).

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

А то, что цены фрилансеры часто завышают вместе со сроками - это правда. Причём делают это как люди с низким рейтингом, так и иногда с высоким. Да, а заказчики часто занижают стоимость и сроки. Только не стоит идеализировать одну сторону...
Артем Л.
11416 повідомлень
#14 років тому
Цитата ("Moisha"):
Именно по этой причине я предпочитаю постоянную работу - фрилансу.

Я так почему то сразу и подумал с первых строк.

Цитата ("Moisha"):
А то, что цены фрилансеры часто завышают вместе со сроками - это правда.

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

Оффтопик
Кастую в тему Ворона
Моисеенко П.
46 повідомлень
#14 років тому
Цитата ("WebDesignStudio"):
Но когда заказчик просит выполнить ему "тестовое" задание, которая потянет для небольшого проекта с бюджетом 50-100 у.е., то я думаю лучше этого не делать.

Исходя из этого принципа 3 года пытался использовать сдельное сотрудничество вместо тестовых ТЗ. И в результате успех был весьма никаков.
Когда сделал не сложное тестовое ТЗ, из серии "если знаешь", что решишь быстро - очень помогло.

В крупных компаниях обычно дают тестовые задания на 3 часа. И они все почти расчитаны на то, чтобы справится за час.
Вопрос тут в том: стоят ли три часа например 150$? Ведь можно сказать, что да. А с другой стороны, устраиваясь на работу за 3-4k - будете ли вы мелочится?
Сергей К.
1649 повідомлень
#14 років тому
Цитата ("Moisha"):
9 положительными отзывами

это не так уж и много. зависит от того какой рейтинг(это показатель общей суммы всех его проектов в сервисе) и как давно он тут.
Повторяюсь. ООООЧЕНь сомневаюсь что фрилансеры у которых есть хороший рейтинг и не первый месяц на сайте будут кидать, и ради незначительной суммы терять возможность работать тут и дальше. Не вижу логику.
Цитата ("Moisha"):
И вот после этого у меня отбилась всякая охота давать предоплату

есть еще СБС. Но почему то заказчики обычно от нее отказываются.
Цитата ("Moisha"):
Над чем же мне задуматься?

не буду комментировать, если вы так ничего и не поняли.
Цитата ("Moisha"):
Я разве у кого провинился?

а вас никто и не обвинял.
Цитата ("Moisha"):
Именно по этой причине я предпочитаю постоянную работу - фрилансу

ага. И в реале не кидают. Давайте не надо сказки рассказывать.
Цитата ("Moisha"):
а заказчики часто занижают стоимость и сроки

это в 90% случаев. Фрилансеры может и завышают немного(по вашему). Но а вот заказчики такие есть, которые создают проект с бюджетом в 50 баксов, хотя там работы на 500. Вот что бы фрилансеры так завышали, не думаю. У них конкуренция, они хотят получит работу. А вот заказчикам что. А вдруг какой то лох найдется. Я не зря это говорю. Недавно видело проект. Заказчик дает 30 баксов и пишет еще в комментариях, что он знает что работу можно сделать за ночь. Ради интереса открыл его ТЗ. Так вот, работы там было на неделю минимум. И бюджет конечно не меньше 500 баксов. Вот так.
Цитата ("Moisha"):
Только не стоит идеализировать одну сторону

согласен. Везде есть исключения.
Сергей К.
1649 повідомлень
#14 років тому
Hungry_Hunter,