Gå til innhold

PHP challenge 6: Leksikon sortering (update 2)


Anbefalte innlegg

Videoannonse
Annonse

Okay, vi kan utsette turneringen til neste søndag, altså 18 November så kan vi ta ei liten lett oppgave i mellomtiden.

 

edit: Ok, da første post blitt oppdatert med ny oppgave. Denne oppgaven er veldig kort, så jeg håper at flere blir med!

 

Kan også nevnes at jeg har nå gått tom for oppgaver som ikke er så fryktelig vanskelige. Så hvis noen har forslag så må dere gjerne sende dem inn!

Endret av MC2
Lenke til kommentar

Nja, funksjonene skal bli benket på min mindre imponerende maskin og jeg tror ikke jeg tør la maskina stå på med benking over natten, så de kommer nok ikke å bli spurt om primtall nummer 10 000 for å si det sånn. Men så er det også sånn at desto høyere tall man tester med, desto tydeligere blir fartsforskjellen.

 

Primtall nummer 10 000 er jo 104 729, så kanskje det er et bedre svar.

Endret av MC2
Lenke til kommentar

Har sendt inn svar nå, der du selv kan velge max grense, men det burde vere en fast max grense for max kan ha en del å si på hvor fort scriptet jobber (kommer ann på hvordan det er skrevet)

 

Edit: Satte max på 2mill jeg, tror ikke du trenger høyere, eller gjør du?

Endret av Sjark
Lenke til kommentar

Vel, jeg har en besvarelse liggende. Jeg har bare ikke hatt tid til å sende den (flytting er gøy :ermm:). Sender den om et par minutter :)

 

Red.: Sendt. En ting som slår meg er at PHP-kategorien ikke akkurat er videre befestet med folk med inngående kjennskap til PHP, ei heller folk med sterk bakgrunn innen programmering generelt. Min oppfattning er at de fleste her er stort sett selvlærte og har aldri vært borti ting som C, C++, Java el., og enda mindre tatt noe kurs/fag eller vært i nærheten av å snuse på kjente algoritmer o.l. Resultatet er at folk flest her ikke nødvendigvis har kunnskapen eller nivået til å f.eks effektivt generere og verifisere primtall, eller sortere en array.

Red.2: Enten har de ikke kunnskapen ellers så veit de at de kommer til å tape uannsett :p

Endret av Ernie
Lenke til kommentar

Tror nok erni har rett i mye av det han sier, men jeg tror det er mange her som har kunnskaper nok til å lage sortering for primtall, jeg har lært meg php selv og jeg klarer å sortere primtall så da er det sikkert flere som klarer det.

 

Når det kommer til litt mer avanserte ting så detter jeg rett av, men det er en annen sak :p

Har ikke hatt bruk for så mye avansert enda jeg.

Lenke til kommentar

Ok da har vi resultater fra 3 deltagere, men totalt 4 veldig bra forslag!

 

Alle funksjonene har blitt testet med å finne primtallene nummer 1, 20, 120, 300, 500, 900, 1300 og 2000. Samme benkealgoritme ble kjørt denne gangen som sist, og som vi ser var Ernie sin algoritme nok en gang raskest! Grattis!

 

Som sist er det otrolig kult at folk vil være med, håper flere kan være med på neste oppgave! :)

 

Ernie
	1	   2
	20	  71
	120	 659
	300	 1987
	500	 3571
	900	 6997
	1300	10657
	2000	17389

	Time:			0.214737176895


Ernie_2
	1	   2
	20	  71
	120	 659
	300	 1987
	500	 3571
	900	 6997
	1300	10657
	2000	17389

	Time:			0.214105844498


Runar0
	1	   2
	20	  71
	120	 659
	300	 1987
	500	 3571
	900	 6997
	1300	10657
	2000	17389

	Time:			0.462564229965


sjark
	1	   2
	20	  71
	120	 659
	300	 1987
	500	 3571
	900	 6997
	1300	10657
	2000	17389

	Time:			27.2068519592

 

Koden han vant med:

 

<?php

function Ernie_2($num)

{

  if ($num < 4)

  {

   if ($num === 1)

   {

	   return 2;

   }

   elseif ($num === 2)

   {

	   return 3;

   }

   else

   {

	   return 5;

   }

  }

  $primeNumber = 5;

  $i = 3;

  while($i !== $num)

  {

   $primeNumber += 2;

   if ($primeNumber % 3 === 0)

   {

	   continue;

   }

   elseif ($primeNumber % 5 === 0)

   {

	   continue;

   }

   else

   {

	   $max = (int)sqrt($primeNumber);

	   $prime = true;

	   for ($j = 3; $j <= $max; $j += 2)

	   {

		   if ($primeNumber % $j === 0)

		   {

			   $prime = false;

			   break;

		   }

	   }

	   if ($prime === true)

	   {

		   $i +=1;

	   }

   }

  }

  return $primeNumber;

}

 

 

 

Deltagere:

 

 

Ernie:

<?php
function Ernie($num) {
  if ($num < 4)
  {
   if ($num === 1)
   {
	   return 2;
   }
   elseif ($num === 2)
   {
	   return 3;
   }
   else
   {
	   return 5;
   }
  }
  $primeNumber = 5;
  $i = 3;
  while($i !== $num)
  {
   $primeNumber += 2;
   if ($primeNumber % 5 === 0)
   {
	   continue;
   }
   elseif (isPrime($primeNumber))
   {
	   $i +=1;
   }
  }
  return $primeNumber;
}

function isPrime($num)
{
  if ($num % 3 === 0)
  {
   return false;
  }
  else
  {
   $max = (int)ceil(sqrt($num));
   for ($i = 3; $i <= $max; $i += 2)
   {
	   if ($num % $i === 0)
	   {
		   return false;
	   }
   }
   return true;
  }
}

?>

Runar0

<?php
/**
* @desc Attempt to find prime number X using some really basic code
*/
function Runar0($no) {
$i		  = 0;
$cur		= 1;
// Loop untill we got prime X
while($i < $no) {
	$cur++;

	$root = sqrt($cur);
	$prime = true;
	for($t = 2; $t <= $root; $t++) {
			if(($cur % $t) == 0) {
					$prime = false;
					break;
			}
	}
	if(!$prime) continue;

	$i++;
}
// And by now we got out result prime
return $cur;
} 

?>

Sjark

<?php
function sjark($tall) {
	$tall = $tall - 1;
	$primes = array();
			for ( $x=0; $x<=2000000; $x++ ) {
					if ( $x == 2 ) {
							$primes[] = $x;
					}
					for ( $i=2; $i<$x; $i++ ) {
							$remainder = ($x % $i);	   
							if ( $remainder == 0 ) {
									$i = $x;
									} 
							elseif ( $i == ($x-1) ) {
									$primes[] = $x;
							}

					}
					if(!empty($primes[$tall])) {
							$x = 2000000;
					}
			}
	return $primes[$tall];
}
?>

 

 

 

Nå må folk seriøst hjelpe meg for at jeg har gått tom for ideer for oppgaver som faktisk er mulig å løse.

Endret av MC2
Lenke til kommentar

Vi nærmer oss bondesjakk turneringen og hittil har jeg ikke fått inn et eneste bidrag... Vil folk ha mer tid eller er folk forsatt skuffa pga 2-1 i går?

 

Vi kunne i så fall ta neste oppgave i mellomtiden.

Endret av MC2
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...