SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 21.06.2006, 23:07:10
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
Coding-Contest - die wenigsten Zeilen gewinnen

Hallo!

Da ich immer noch versuche, Sudokus zu lösen und gerade dabei bin, sie zu erstellen (weil ich dann die Lösung einfach ablesen kann), bin ich auf ein Problem gestoßen, dass mich schon öfters gestört hat.

Ich habe meinetwegen die Zahlen 1 bis 5 und hätte diese gerne in allen möglichen Kombinationen, also 1 2 3 4 5, 1 3 2 4 5, 1 4 2 3 5 usw.

Wenn es bis 2 gehen soll sieht das komplett so aus:

1 2
2 1

Wenn es bis 3 gehen soll, so:

1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2

So. Ich war bis eben auf der Suche nach einem Algorithmus, der es mir für n = 9 erstellt. Ich war zu verknotet im Gehirn um einen schönes Programm zu schreiben, dass mir da ganze nacheinander aufbaut, und vorhin auf der Couch ist mir dann die Idee gekommen für etwas, das sich sehr schnell programmieren lässt, sehr kurz ist, aber relativ lange braucht.

Folgende Regeln: Man schreibe eine Funktion, wenn man in dieser auf andere selbstgeschriebene Funkionen zurückgreift, müssen diese mitgezählt werden.

Zurückgegeben wird für Argument $n ein Array mit $n ! (Fakultät) Elementen, die Schlüssel schön aufsteigend von 0 beginnend. Die Elemente sind wiederum Arrays mit den Zahlen, für $n = 2 sollte die Rückgabe also ein Array sein dass wie folgt aufgebaut ist:

array( array( 1 , 2 ) , array( 2 , 1 ) )

mal gucken, wer meine 18 zeilen unterbieten kann...
Mit Zitat antworten
  #2  
Alt 22.06.2006, 12:14:18
langwebdesign langwebdesign ist offline
Junior Member
 
Registriert seit: Oct 2002
Ort: Titting
Alter: 39
Beiträge: 251
AW: Coding-Contest - die wenigsten Zeilen gewinnen

Hi feuervogel,

ich hab noch nicht viel mit Algorithmen gemacht.
Kannst du mir villeicht deinen per pm schicken - oder hier posten - würde mir den gern mal anchauen.

mfg stephan
__________________
Affen benutzen oft Stöckchen als Hilfsmittel...
Mit Zitat antworten
  #3  
Alt 22.06.2006, 17:01:50
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 36
Beiträge: 1.476
AW: Coding-Contest - die wenigsten Zeilen gewinnen

also ich hab eins mit 17 zeilen... aber das geht nur gut solange es nicht zuviele Zahlen hat...also bei 9 Zahlen biste schon ein ganzes weilchen dran... wen er überhaupt mal fertig wird *g*

also neben dieser wirklich blöden Lösung hab ich bis jetzt noch nichts besseres gefunden :(
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs
Mit Zitat antworten
  #4  
Alt 22.06.2006, 17:08:07
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Coding-Contest - die wenigsten Zeilen gewinnen

Zitat:
Zitat von langwebdesign
Hi feuervogel,

ich hab noch nicht viel mit Algorithmen gemacht.
Kannst du mir villeicht deinen per pm schicken - oder hier posten - würde mir den gern mal anchauen.

mfg stephan
ich werde meine funktion mal anhängen, wer lust hat kann ja gucken...narf, php-dateien kann man nicht anhängen...na gut, dann eben so:

da: http://nopaste.php-q.net/220704

achja, bei n = 7 brauche ich unter einer sekunde, bei n = 8 6 sekunden und bei n = 9 so gut 1.5 minuten...

Geändert von feuervogel (22.06.2006 um 17:10:36 Uhr)
Mit Zitat antworten
  #5  
Alt 22.06.2006, 17:12:01
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Coding-Contest - die wenigsten Zeilen gewinnen

mir fiel grade ein: ich könnte auch noch ne zeile weglassen, aber dann dauerts bei n = 9 wieder ne minute länger...das ist mir zu doof *g*
Mit Zitat antworten
  #6  
Alt 22.06.2006, 17:37:20
MatMel MatMel ist offline
Member
 
Registriert seit: Aug 2005
Beiträge: 644
MatMel eine Nachricht über ICQ schicken
AW: Coding-Contest - die wenigsten Zeilen gewinnen

PHP-Code:
function zahlen($n) {
for(
$i=$n;$i>0;$i--){ 
   
$fak $fak $i;
}
for(
$u 1$u<=$fak$u++){
   
$gotone false;
   while(!
$gotone){
      for(
$w=1;$w<=$n;$w++){
         
$zufz rand(1,$n);
         if(!
in_array($zufz$zuf)){$zuf[$w] = $zufz;
         }
      }
   if(!
in_array($zuf$zahlen){
      
$zahlen[$u] = $zuf$gotone=true;
   }
}
return 
$zahlen;

Mein sehr toller Versuch mit der Brecheisenmethode ;)
Also es könnte gehn und hat nich so arg viele Zeilen ...

Gruß,
Matze
Mit Zitat antworten
  #7  
Alt 22.06.2006, 17:52:45
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Coding-Contest - die wenigsten Zeilen gewinnen

PHP-Code:
function zahlen($n) {
for(
$i=$n;$i>0;$i--){ 
   
$fak $fak $i;

alleine daran habe ich so meine zweifel...$fak ist ja nicht belegt. man müsste vor die for-schleife noch ein $fak = 1; setzen.
Mit Zitat antworten
  #8  
Alt 22.06.2006, 20:25:44
Benutzerbild von Morrandir
Morrandir Morrandir ist offline
Anfänger
 
Registriert seit: Jun 2006
Beiträge: 120
AW: Coding-Contest - die wenigsten Zeilen gewinnen

Tja Leute ich weiß nicht wie du Zeilen Zählst, wenn du einzelne geschweifte Klammern mitzählst sind es 16 Zeilen wenn du sie nicht mitzählst (was ich nach einem Blick auf dein Code mal gerechnet habe) sind es 13...

Kleine Info nebenbei... bei 9 Zahlen = 362880 Möglichkeiten dauer = 2 Sekunden *g*...

Hier meine Funktion:
PHP-Code:
function combo($n){
    
$fak 1;
    for(
$i=1;$i<=$n;$i++){
        
$array[]=$i;
        
$fak $fak $i;
    }
    while(
$z $fak)
        for(
$walk=0;$walk sizeof($array)-1;$walk++){
            
$ret[] = $array;
            
$buffer $array[$walk];
            
$array[$walk] = $array[$walk+1];
            
$array[$walk+1] = $buffer;
            
$z++;
        }
    return 
$ret;

Systemdaten stehen in der Signatur...

MfG
Morrandir

P.S.: Copyright by Morrandir 2006!!! Einstweilige Optimierungen an diesem Code bleiben mir alleine vorbehalten *g*...
__________________
Zitat:
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. (Rick Cook, The Wizardry Compiled)
Mit Zitat antworten
  #9  
Alt 22.06.2006, 20:31:30
Benutzerbild von Serp
Serp Serp ist offline
Member
 
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
AW: Coding-Contest - die wenigsten Zeilen gewinnen

So, ich denk, ich hab was ganz nettes gefunden... Allerdings muss ich zugeben, dass so was in der Art schon mal in ner Übungsaufgabe dran war, musste mich also nur noch erinnern... ;)

Länge kommt darauf an, was man alles als eine Zeile zählt. Ich würd vorschlagen, pro Anweisung (also pro ;) eine Zeile zu zählen. Zusätzlich noch jeweils eine Zeile pro Funktionsdefinition. Feuervogels Lösung käme damit auf 11 Zeilen, meine auf 8. Falls es ähnlich wie Feuervogels Script formatiert und dann gezählt werden soll, käme ich auf 13 Zeilen.

Laufzeit kann sich denk ich auch sehen lassen, auf meinem Rechner brauch ich für n = 7 etwa ne Zehntelsekunde, für n = 8 eine und für n = 9 etwa 12 Sekunden. Is denk ich ganz ordentlich. :)

Zugrundeliegender Code, auf Platzersparnis formatiert:

PHP-Code:
  function insertIntoPerm($value$list) {
    foreach(
perms($list) as $perm
      for(
$i 0$i <= count($perm); $i++) 
        
$newPerm[] = array_merge(array_slice($perm0$i), array($value), array_slice($perm$icount($perm)));
    
sort($newPerm);
    return 
$newPerm;
  }

  function 
perms($arr) {
    if(!
is_array($arr)) $arr range(1$arr);
    if(
count($arr) <= 1) return array($arr);
    return 
insertIntoPerm(array_pop($arr), $arr);
  } 
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')

Für 100% sauberen Code.

Geändert von Serp (22.06.2006 um 20:41:03 Uhr)
Mit Zitat antworten
  #10  
Alt 22.06.2006, 20:41:43
Benutzerbild von Morrandir
Morrandir Morrandir ist offline
Anfänger
 
Registriert seit: Jun 2006
Beiträge: 120
AW: Coding-Contest - die wenigsten Zeilen gewinnen

Hilf mir mal mit deiner Zählung... da hab ich dann 9, oder?
__________________
Zitat:
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. (Rick Cook, The Wizardry Compiled)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
aus Datei je 10 Zeilen neue Liste? doudie PHP für Fortgeschrittene und Experten 3 29.08.2002 20:58:46


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:47:55 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt