Loading...
Eljei avatar Eljei 3 Точки

09.PokemonDontGo

Бая се поизмъчих на тази задача . Погледнах решения на колеги и знам , че моето не е много практично и може доста да се съкрати. И все пак искам да знам къде греша . Ако някой би могъл да ми обясни защо на вторият 'case' като условието си връща false програмата влиза в него , както и защо не влиза в първия 'case' като с var_dump условието връща true ... грешката е при подаване на вход 0. Например 0 >= 0 - false ? 

"решение"  - https://pastebin.com/CeR2mfi6

условие - https://softuni.bg/trainings/resources/officedocument/40842/exercise-php-fundamentals-may-2019/2344

Тагове:
1
PHP Fundamentals 20/09/2019 01:22:33
willystyle avatar willystyle 2472 Точки
Best Answer

Здравей, решението ти си е доста практично, четливо и кратко. Дори работи на 100, единствено не си разбрал как работи оператора switch: той влиза в различните случай (case) при условие, че променливата подадена на суитч е равна (не стриктно ==, не чак ===) на експрешъна подаден в кейс, прочети https://www.php.net/manual/en/control-structures.switch.php.

Та ти в експрешъните подаваш условия (булеви, които се коерсват до 0 или 1). Суитч се прилага само при изброими стойности, а не при диапазони.И това е в почти всички езици.

<?php 
$arr = array_map('intval', explode(' ', readline()));
$arrDeletedElements = [];
while (true) {
    if (count($arr) == 0) {
        $sum = 0;
        for($i = 0; $i < count($arrDeletedElements); $i++) {
            $sum += $arrDeletedElements[$i];
        }
        echo $sum;
        return;
    }
    $index = intval(readline());    
	if ($index >= 0 && $index < count($arr)) {
		$valueElement = $arr[$index];
        array_splice($arr, $index, 1);
        $arrDeletedElements[] = $valueElement;
        $arr = increaseOrDecrease($arr, $valueElement);
	} else if ($index < 0) {
		$valueElement = $arr[0];
        array_splice($arr, 0, 1, $arr[count($arr)-1]);
        $arrDeletedElements[] = $valueElement;
        $arr = increaseOrDecrease($arr, $valueElement);
	} else if ($index > count($arr)-1) {
		$valueElement = $arr[count($arr)-1];
        array_splice($arr, count($arr)-1, 1, $arr[0]);
        $arrDeletedElements[] = $valueElement;
        $arr = increaseOrDecrease($arr, $valueElement);
	}    
}
 
function increaseOrDecrease($array, $deletedEle)
{
    for($i = 0; $i < count($array); $i++) {
        if ($array[$i] <= $deletedEle) {
            $array[$i] += $deletedEle;
        } else {
            $array[$i] -= $deletedEle;
        }
    }
    return $array;
}

 

0
Eljei avatar Eljei 3 Точки

Много ти благодаря. Явно не съм обърнал достатъчно внимание на switch case. Поне вече ще знам :d. 

Благодаря отново и лек ден :) !

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.