WN

WN (https://www.wn.se/forum/index.php)
-   Off Topic (https://www.wn.se/forum/forumdisplay.php?f=7)
-   -   Gissa PHP-funktionen (https://www.wn.se/forum/showthread.php?t=9063)

koala 2005-07-25 18:34

Ok, jag är väl en aning störd som postar det här, det är nog så långt offtopic man kan komma, men jag hade fruktansvärt roligt åt att skriva följande "obfuscerade" PHP-kod.

Vad är meningen med funktionen p() i koden nedan? Det är inte allt för svårt att lista ut om man lyckas "tyda" koden. (Men koden fungerar utmärkt att köra som den är, bortsett från att det är överdrivet otydligt skrivet.)

Jag kan tipsa om att funktionen p är av intresse när man studerar heltal (matematik). ;)

Den första som gissar rätt kan kalla sig smart.



Kod:

<?php
echo p(3); // Vad kommer att skrivas ut, och hur ska detta resultat tolkas?

function p($d){
        return(int)$d!=$d ? isset($$_SERVER) : $d<2 ? function_exists('+') : (($d==(strlen($_SERVER['SCRIPT_FILENAME'])!= !($d===$d)) + preg_match("/l/", "linux")) ? ($_SERVER===$d) : d($d));
}

function d($d){
        for ($x = !NULL + (bool)"x"; $x*$x <= $d; $x++) {
 if(!($d%$x))
        return !$d===$d;
 }
        return!$d===!$d;
}
?>


Jonas 2005-07-25 19:34

Citat:

Originally posted by koala@Jul 25 2005, 18:34
Kod:

<?php
echo p(3); // Vad kommer att skrivas ut, och hur ska detta resultat tolkas?

function p($d){
        return(int)$d!=$d ? isset($$_SERVER) : $d<2 ? function_exists('+') : (($d==(strlen($_SERVER['SCRIPT_FILENAME'])!= !($d===$d)) + preg_match("/l/", "linux")) ? ($_SERVER===$d) : d($d));
}

function d($d){
        for ($x = !NULL + (bool)"x"; $x*$x <= $d; $x++) {
 if(!($d%$x))
        return !$d===$d;
 }
        return!$d===!$d;
}
?>


Får man poäng om man kan skriva den mest svår tydliga funktion???

Skulle inte skada med några <ENTER> och tabbar i den koden :P

FredrikMH 2005-07-25 19:34

Funktionen P() skriver ut 1 om talet som matas in är ett primtal.

koala 2005-07-25 19:37

Rätt! Inte illa Fredrik :)

koala 2005-07-25 19:40

Citat:

Ursprungligen postat av Jonas
Citat:

Ursprungligen postat av koala
Kod:

<?php
echo p(3); // Vad kommer att skrivas ut, och hur ska detta resultat tolkas?

function p($d){
        return(int)$d!=$d ? isset($$_SERVER) : $d<2 ? function_exists('+') : (($d==(strlen($_SERVER['SCRIPT_FILENAME'])!= !($d===$d)) + preg_match("/l/", "linux")) ? ($_SERVER===$d) : d($d));
}

function d($d){
        for ($x = !NULL + (bool)"x"; $x*$x <= $d; $x++) {
 if(!($d%$x))
        return !$d===$d;
 }
        return!$d===!$d;
}
?>


Får man poäng om man kan skriva den mest svår tydliga funktion???

Skulle inte skada med några <ENTER> och tabbar i den koden :P

Visst gör ett försök, alltid kul att klura på något. Låt oss göra det här till en knep & knåp-tråd :)


Så här såg min funktion ut innan jag förvrängde koden:


Kod:

function is_prime($d) {
  if ((int)$d != $d) {
    return false;
  } else {
    if ($d<2) {
      return false;
    } else {
      if ($d==2) {
        return true;
      } else {       
        $sqrt = sqrt($d);
        $x=1;
        while (++$x < $sqrt+1) {
          if ($d % $x == 0) {
            return false;
          }
        }
        return true;
      }
    }
  }
}


EDIT:

Så här såg det ut innan jag drog till med alla onödigheter:
Kod:

for($i=0;$i<1000;$i++){print(p($i)?$i.'<br />':NULL);}
function p($d){return(int)$d!=$d?0:$d<2?0:($d==2?1:d($d));}
function d($d){for($x=2;$x*$x<=$d;$x++){if(!($d%$x))return 0;}return 1;}

Detta skriver ut alla primtal mellan 0 och 1000 (på tre rader kod hehe...)

Per 2005-07-25 19:52

Kod:

for($i=1;$i<1000;print($p==false?"":$i."\n"),$i+=2,$p=true){for($j=2;$j<$i;$j++)$p=$i%$j==0?$p=false:$p;}
En rad! :-)

koala 2005-07-25 19:56

Citat:

Originally posted by Per@Jul 25 2005, 19:52
Kod:

fori=1;i1000;printp==false?i.n,i+=2,p=true{forj=2;ji;j++p=i%j==0?p=falsep;}
En rad :-)

Inte illa :) Snart kan vi ge oss på RSA-1024

Per 2005-07-25 19:57

Citat:

Ursprungligen postat av koala
Citat:

Ursprungligen postat av Per
Kod:

fori=1;i1000;printp==false?i.n,i+=2,p=true{forj=2;ji;j++p=i%j==0?p=falsep;}
En rad :-)

Inte illa Snart kan vi ge oss på RSA-1024

Haha, lätt!

nomicon 2005-07-25 20:56

Gissa vad denna gör då:

<?
function skrivUtnamn($namn) {
echo $namn;
}
skrivUtnamn('kalle');
?>

Den som får fel är en nöt.

-Martin

eg0master 2005-07-25 22:07

Om du gillar sånt ska du titta på "orginalet": http://www.ioccc.org/

Kolla koden för en av vinnarna 1994: dodsond1 (http://www.de.ioccc.org/years.html)
Ett prgram som spelar othello och där koden ser ut som ett othellobräde...


Alla tider är GMT +2. Klockan är nu 23:54.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson