Задачки для новичков

workOnFood

Новичок
Здравствуйте уважаемые форумчане. Я не то чтобы новичок в php, но и экспертом назвать себя пока не могу. Предлагаю профи поделиться мудростью с начинающими "мегапрограммерами" и задать пару интересных задачек (возможно из практики), на знание синтаксиса, логическое мышление и т.д. От себя предложу такой пример, автор не я, но задачка показалась мне интересной т.к. заставила задуматься.
PHP:
$a='Переменная a';
$b='Переменная b';
Необходимо переставить значения переменных т.е чтобы $a='Переменная b'; $b='Переменная a'; не используя третей переменной и не меняя типа на array() например)) А пятёрку с плюсом получит тот кто поменяет переменные в одном предложении ( для новичков
PHP:
Предложение;
Другое предложение;
)
 

zerkms

TDD infected
Команда форума
Обмен значений - одна из самых глупых задач, которая вообще ничего не выявляет, но которую при этом с упорством задают все и везде. Добавляя глупые ограничения типа "не использовать array()", чтобы своё любимое решение притянуть за уши.

list($b, $a) = array($a, $b);

Вот решение в одно выражение, ограничение - не несёт никакого практического смысла.

Программисты - решают реальные задачи, а философией занимаются философы.
 

workOnFood

Новичок
Ну мне вот например это принесло определённый практический смысл - я узнал про list(). Сначала написал сам вот так
PHP:
$b=substr($a,12,24);
$a=substr($a,0,12);
Как я и написал в топике я не профи, и мне куда интереснее решать задачи чем их задавать, тем более задавать пока не хватает знаний.
Конечно вы правы насчёт того что задача глупая, это понимаешь когда видишь решение, ну и конечно если не знал про list(), но в процессе то сколько мыслей прередумал, а думать для программиста полезно. Тем более для начинающего.
А практического применения у знаний новичка практически 0. Решать занудные задачки из учебника - скука смертная. Брать простенькие проектики на фрилансе, тока нервы себе и другим портить. Писать чёто своё из воображения, так не всем его хватает, да и надаедает в последствии. Совсем другое дело решать интересные задачи придуманные умными людьми, или взятые из собственного опыта например, ведь если хорошо знаешь тему, то видишь в чём сложность её понимания где загвоздка... Словом было бы оч круто порешать чёнть интересненькое.
 

zerkms

TDD infected
Команда форума
workOnFood
Вот именно, что есть задачи спортивные и полезные, потому что разминают мозг, а есть спортивные и скучные, потому что упираются лишь в знание конструкций языка.

Интереснее:
есть список чисел, целых. длинный. все числа, кроме одного, встречаются в списке дважды. найти это единственное число.

Задача простая, но интересная.
 

workOnFood

Новичок
Вобщем подумил, вот что пришло на ум
PHP:
$arr=array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8);
$arr1=array();
for($i=0;$i<count($arr);$i++){
	for($j=0;$j<count($arr);$j++){
		if($j==$i)$arr1[$j]='unik';
		else $arr1[$j]=$arr[$j];
	}
	if(!in_array($arr[$i],$arr1))echo 'Нашёл!!! это число = '.$arr[$i];
}
 

workOnFood

Новичок
Скорее всего конечно бред, хоть и пашет, но вы меня сильно не бейте, я тока учусь, плюс спать уже рубает конкретно. Не знаю как у вас а у меня 7:26 на часах.
 

workOnFood

Новичок
Короче работает тока если вот так сделать=)
PHP:
set_time_limit(0);
что как я сам понимаю не годится.
 

zerkms

TDD infected
Команда форума
workOnFood
Как работающее решение - почему бы и нет. Но сложность O(N^2) это многовато. Есть решение O(N)
 

workOnFood

Новичок
zerkms
И насчёт таких 'работающих решений' насколько я знаю принято называть их говнокодом, ведь полюбому же можно использовать нужные функции которые уже есть в языке и это будет намного быстрее. Лана пофиг, что мозг перестаёт уже варить - интересно)) Полезу в мануал.
 

zerkms

TDD infected
Команда форума
Не понятно про O(N^2) - это что? Или где про это почитать?
http://ru.wikipedia.org/wiki/O-большое

zerkms
И насчёт таких 'работающих решений' насколько я знаю принято называть их говнокодом, ведь полюбому же можно использовать нужные функции которые уже есть в языке и это будет намного быстрее. Лана пофиг, что мозг перестаёт уже варить - интересно)) Полезу в мануал.
В том-то и фишка, что задача решается не знанием определённых фич языка, а с помощью базовых знаний математики.
 

workOnFood

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

zerkms

TDD infected
Команда форума
workOnFood
математики и информатики, скорее, тогда уж :)
 

workOnFood

Новичок
Даже спорить не буду, в школе я пропинал. Но сейчас как бы тяжко это не было пытаюсь навёрстывать упущенное. Кстати вот нашёл решение без математики работает очень быстро)))
PHP:
sort($arr);
for($i=0;$i<count($arr);$i+=2){
	if($arr[$i]!=$arr[$i+1]){echo 'Нашёл!!! это число = '.$arr[$i];break;}
}
Можно потестить как оно будет по сравнению с вашим по скорости. Кстати хотелось бы его узнать))
 

Adelf

Administrator
Команда форума
workOnFood
если числа не подряд - не пройдет.

zerkms
красота :)
 

workOnFood

Новичок
Adelf
Почему не пройдёт? У меня всё проходит))) Либо у меня уже глюки от недосыпы либо вы кое-что упускаете
PHP:
sort($arr);
zerkms
Да круть, только непонятно нифига.)))
 
Сверху