Автор Тема: [PHP] Условности  (Прочетена 111356 пъти)

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
[PHP] Условности
« -: Mar 09, 2010, 22:17 »
Задачка:

Напишете PHP скрипт, който да изобразява (т.е. echo)  следните стойности за Z в зависимост от стойностите на X и Y:

* ако X е по-малко от 1, то Z = 0;
* ако X е между (вкл.) 1 и 23, то Z = X + Y;
* ако X е между (вкл.) 24 и 59, то Z = X + 23;
* ако X е по-голямо от 59, то Z = X + 59.


Уловката е следната ;) :

* "if" не може да се използва повече от 2 пъти;
* "{" не може да се използва повече от 1 път;
* "else" не може да се използва изобщо;
* "?" не може да се използва изобщо;
* "eval" не може да се използва изобщо;
* "switch" не може да се използва изобщо.

Успех!
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: [PHP] Условности
« Отговор #1 -: Mar 09, 2010, 22:54 »
А какво изобщо можем да използваме? Ако дадеш МяСял може и да стиснем ръце. Имам и един по-тъп въпрос, как ще ползвам два пъти иф, а средна скоба веднъж ???
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: [PHP] Условности
« Отговор #2 -: Mar 09, 2010, 23:21 »
Условието на задачката не е мое - беше даден в друг форум, но решения имаше бол - тка че не ревИ ;)

Условието е ясно - можеш да използваш всеки един от зададените елементи на езика, в комбинация в другите условия или не, но не повече от разрешения брой (ако изобщо е разрешено).

Идеята на задачката е да се намери нестандартно, но минималистично решение.
« Последна редакция: Mar 09, 2010, 23:23 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

shoshon

  • Гост
Re: [PHP] Условности
« Отговор #3 -: Mar 09, 2010, 23:27 »
Код
GeSHi (PHP):
  1. function f(x,y){
  2. return (x < 1) + ((x >= 1) and (x<23))*(x+y) + ((x>=24) and (x<59)) (x+23) + (x>59)*(x+59);
  3. }
  4.  
  5. echo "z=".f(x,y);


Не разбирам от PHP  но в нормалната математика тва БИ трябвало да е така :). Без нито един if.
Ето само с един if, ако някой се заядде за кастинга:
Код
GeSHi (PHP):
  1. function bool(eq){
  2. if(eq) return 1;
  3. return 0;
  4. }
  5.  
  6. echo "z=".bool(x < 1) + bool((x >= 1) and (x<23))*(x+y) + bool((x>=24) and (x<59)) (x+23) +bool (x>59)*(x+59)


Ама и тва не е интересно, защото най-вероятно, задачата е зададена с цел да не се изпълнят вички изчисления. Ама сега ме мързи да мисля :)
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: [PHP] Условности
« Отговор #4 -: Mar 09, 2010, 23:31 »
По дърварски му :)

Код
GeSHi (PHP):
  1. <?php
  2.  
  3. // $x=...;
  4. // $y=...;
  5.  
  6. $ar[-1]=(-1*$x);
  7. $ar[0]=(-1*$x);
  8. $ar[1]=1;
  9. $ar[2]=23;
  10. $ar[3]=59;
  11. $t=0;
  12.  
  13. for ($a=0;$a<=3;$a++) if ($x> $ar[$a] ) $t++;
  14.  
  15. $z=$x+$ar[$t-1];
  16. if ($t==1) $z=$x+$y;
  17. echo $z;
  18. ?>
  19.  

Мога да се опитам да вместя някъде и { ма няма смисъл :)
« Последна редакция: Mar 09, 2010, 23:40 от VladSun »
Активен

"Knowledge is power" - France is Bacon

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: [PHP] Условности
« Отговор #5 -: Mar 09, 2010, 23:51 »
Още, още! :)
Досега 1/2 от решенията май ... ;)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: [PHP] Условности
« Отговор #6 -: Mar 09, 2010, 23:53 »
Ама и тва не е интересно, защото най-вероятно, задачата е зададена с цел да не се изпълнят вички изчисления. Ама сега ме мързи да мисля :)

Мдам, и аз това подчертах в едно от моите решения. Но, не винаги 1/100 сек. време изпълнение е решаваща - в повечето случаи четливостта и гъвкавостта са по-важни.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: [PHP] Условности
« Отговор #7 -: Mar 09, 2010, 23:56 »
@gat3way

пробвай и друго решение с масиви ;)
« Последна редакция: Mar 09, 2010, 23:58 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: [PHP] Условности
« Отговор #8 -: Mar 10, 2010, 00:29 »
Няма, спи ми се :)
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: [PHP] Условности
« Отговор #9 -: Mar 10, 2010, 00:35 »
беше даден в друг форум, но решения имаше бол

URL-че?
Одавна не съм преписвал >:D
Активен

Perl - the only language that looks the same before and after encryption.

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: [PHP] Условности
« Отговор #10 -: Mar 10, 2010, 00:47 »
Моите двайсет:
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $x = '...';
  4. $y = '...';
  5.  
  6. $array = array(0 => 1, $x+$y => 24, $x+23 => 60, $x+59 => INF);
  7. foreach ($array as $z => $value)
  8.    if ($value-$x > 0) {
  9.            echo $z;
  10.            exit;
  11.    }
  12.  
  13. ?>

edit: Вече съм доволен. Замених граничната статична стойност с INF. Не знаех за това INF, не ми се беше налагало да го ползвам. Ако на някой му е интересно за възможността за играчка с безкрайността в различните езици, може да се зачете тук.
« Последна редакция: Mar 10, 2010, 01:24 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: [PHP] Условности
« Отговор #11 -: Mar 10, 2010, 11:04 »
Други идеи?

Ново ограничение:
* не могат да се използват цикли (for, while, foreach).


 >:D >:D >:D
« Последна редакция: Mar 10, 2010, 11:06 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: [PHP] Условности
« Отговор #12 -: Mar 10, 2010, 11:16 »
Тююю, язък. А как си се радвах какво кратичко стана >:D Както се трупат ограничения, накрая ще трябва да кажа на скрипта да хвърля боб, за да разбере
Код
GeSHi (Bash):
  1. <?php
  2.  
  3. $x = '...';
  4. $y = '...';
  5. $z = exec("echo $x | /usr/bin/bob", $results);
  6. echo $z;
  7.  
  8. ?>
Много интересна задача [_]3
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: [PHP] Условности
« Отговор #13 -: Mar 10, 2010, 11:43 »
Сега нали вкарват goto в PHP, върши същата работа щом като няма цикли :)

Код
GeSHi (PHP):
  1. //$x=...;
  2. //$y=...;
  3. $ar[-1]=(-1*$x);
  4. $ar[0]=(-1*$x);
  5. $ar[1]=1;
  6. $ar[2]=23;
  7. $ar[3]=59;
  8. $t=0;$a=0;
  9.  
  10. again:
  11. if (($t<4)&&($x>$ar[$a])) {$a++;$t++;goto again;}
  12.  
  13. $z=$x+$ar[$t-1];
  14. if ($t==1) $z=$x+$y;
  15.  
  16. echo "$z\n";
« Последна редакция: Mar 10, 2010, 11:55 от VladSun »
Активен

"Knowledge is power" - France is Bacon

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: [PHP] Условности
« Отговор #14 -: Mar 10, 2010, 11:56 »
Сега нали вкарват goto в PHP...

Анатема!  :P

* не може да се използва goto !
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P