php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Sonstiges > Out of Order
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Out of Order Unsere Plauderecke. Hier könnt Ihr euch über alles unterhalten, was selbst im Off-Topic keinen Sinn ergibt!

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #16 (permalink)  
Alt 03-07-2008, 00:24
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Ok, ich denke, es kommt nix mehr rein. Herzlichen Glückwunsch onemorenerd, hier ist deine Medaille , und du bist dran, mit der nächsten Aufgabe
Mit Zitat antworten
  #17 (permalink)  
Alt 03-07-2008, 03:28
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard



Meine Aufgabe ist eher was für Knobler.

Gegeben sei eine Liste (Array) mit beliebig vielen natürlichen Zahlen (ohne 0). Das letzte Element der Liste ist das Ergebnis einer Berechnung der anderen Listenelemente mit den Grundoperationen +, -, * und /.
Gesucht ist eine Formel, die jedes Listenelement 1...n-1 mindestens einmal enthält und mit den Grundoperationen so anordnet, dass das Ergebnis der Formel das Listenelement n ist oder zumindest so gut wie möglich annähert.

Ein Beispiel:
Eingabe 2,56,10,4711,90
Ausgabe (4711 / 56) + 10 - 2 = 92.125

Es gewinnt die Lösung mit der besten Annäherung an das Ergebnis und der kürzesten Formel.

Geändert von onemorenerd (03-07-2008 um 03:30 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 03-07-2008, 11:36
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

PHP-Code:
// zahlen =  34,33,23,4,27

echo (34-33)*23+4
__________________
Wir werden alle sterben

Geändert von combie (03-07-2008 um 13:32 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 03-07-2008, 12:18
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Liste: 1,2,3
Formel: 1+2=3


Ich glaube aber auch, die Aufgabenstellung nicht ganz verstanden zu haben
Mit Zitat antworten
  #20 (permalink)  
Alt 03-07-2008, 12:54
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@unset: Meinem Verständnis der Aufgabenstellung nach müsstest du damit gewonnen haben

Grüße
Mit Zitat antworten
  #21 (permalink)  
Alt 03-07-2008, 13:03
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Nein ...

Liste: 1,1
Formel: 1=1

Mit Zitat antworten
  #22 (permalink)  
Alt 03-07-2008, 13:32
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Da ist jetzt aber keine einzige Operation mehr vorhanden. Setzen - 6!
Mit Zitat antworten
  #23 (permalink)  
Alt 03-07-2008, 13:32
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Hm, ist die Aufgabe wirklich so unverständlich? Dann versuche ich es nochmal.

Es gilt ein Script zu schreiben, dem man z.B. als GET-Parameter ?in=2,56,10,4711,90 übergibt. Die letzte Zahl in dieser Reihe ist das Ergebnis einer Berechnung aus den anderen Zahlen und den Grundrechenoperationen.

Das Script soll versuchen, aus der Eingabe die ursprüngliche Berechnung zu rekonstruieren. Von dieser Berechnung ist bekannt, dass sie beliebig oft die Zeichen +, -, *, /, (, ), außerdem jede der Zahlen aus der Eingabe mindestens einmal, jedoch die letzte Zahl der Eingabe genau einmal und genau ein = enthielt.

Einige Beispiele, zuerst ein ganz einfaches:
1,2,3 => Ausgabe "1+2=3"
Das nächste Beispiel zeigt, dass jede Zahl (außer die letzte, die ist ja das Ergbnis) beliebig oft verwendet werden kann:
2,3 => Ausgabe "2+2/2=3"
Im dritten Beispiel kommen Klammern vor:
5,9,3,4,2 => Ausgabe "5+9-(3*4)=2"

Ich werde gleich noch den Code posten, mit dem ich die Lösungsvorschläge teste und bewerte. Sobald ich ihn fertig habe.
Spätestens dann sollte jeder die Aufgabe verstehen können.
Mit Zitat antworten
  #24 (permalink)  
Alt 03-07-2008, 13:35
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Autsch. Und dafür Zeit bis Morgen früh?
Mit Zitat antworten
  #25 (permalink)  
Alt 03-07-2008, 13:51
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Das ist doch ***** !!!

1. Das setzen der Klammern
2. Die Mehrfachverwendung der Zahlen

Treiben Rechenzeit ins Unermessliche!
Die Anzahl möglicher Kombinationen ist unbegrenzt.
Permanent muß man auf eine div durch null aufpassen.
__________________
Wir werden alle sterben

Geändert von combie (03-07-2008 um 13:54 Uhr)
Mit Zitat antworten
  #26 (permalink)  
Alt 03-07-2008, 14:30
eintrachtemil
 Registrierter Benutzer
Links : Onlinestatus : eintrachtemil ist offline
Registriert seit: May 2004
Beiträge: 223
eintrachtemil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Quick & Dirty. Aber ohne Nährung, immer mit dem exakten Ergebnis nach den Vorgaben

PHP-Code:
<?php
$zahlen   
explode(','$_GET['in']);
$ergebnis $zahlen[count($zahlen)-1];

$reihe implode(' + 'array_splice($zahlen0count($zahlen)-1));

$berechnung = array();
for(
$i 1$i <= $ergebnis$i++){
    
$berechnung[] = "($reihe) / ($reihe)";        
}

echo  
implode(' + '$berechnung).' = '.$ergebnis;
?>
Mit Zitat antworten
  #27 (permalink)  
Alt 03-07-2008, 14:53
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Hier die Testroutine. Ich werde mir natürlich verschiedene Testformeln ausdenken.
Beim Aufruf eurer Lösung komme ich euch entgegen. Ihr müsst die Eingabe nicht über GET holen. Ich schau mir euren Code an und fummel mir das zurecht.
PHP-Code:
<?php
header
('Content-Type: text/plain');

// Testcase, von mir ausgedacht.
$formel '5+9-(3*4)';
$ergebnis = eval('return '.$formel.';');

echo 
"Testcase   : $formel=$ergebnis\n\n";


// Eingabe für eure Scripte vorbereiten.
$zahlen preg_split("/\+|\-|\*|\/|\(|\)|=/"$formel, -1PREG_SPLIT_NO_EMPTY);
$zahlen array_unique($zahlen);
shuffle($zahlen);
$eingabe implode(','$zahlen).','.$ergebnis;

echo 
"Eingabe    : $eingabe\n\n";


// Aufruf eures Scripts. Whitespace wird aus der Ausgabe entfernt.
$ausgabe file_get_contents('http://localhost/deinScript.php?in='.$eingabe);
$ausgabe str_replace(array(' '"\t""\r""\n"), ''$ausgabe);

echo 
"Ausgabe    : $ausgabe\n\n";


// Ausgabe in Formel und Ergebnis zerlegen.
$teile explode('='$ausgabe);

// Prüfe Bedingung "genau ein =".
if (count($teile) !== 2
    die(
'FEHLER: Nicht genau ein "=".');

// Prüfe Bedingung "jede Zahl mindestens einmal".
$zahlen_ausgabe preg_split("/\+|\-|\*|\/|\(|\)|=/"$teile[0], -1PREG_SPLIT_NO_EMPTY);
if (
count(array_diff($zahlen_ausgabe$zahlen)) !== 0
    die(
'FEHLER: Nicht jede Zahl der Eingabe mindestens einmal verwendet oder unerlaubte Zeichen.');

// Prüfe Korrektheit der Lösung. Rundung auf 2 Nachkommastellen.
$ergebnis_ausgabe round(eval('return '.$teile[0].';'), 2);
if (
$ergebnis_ausgabe !== round($teile[1], 2)) 
    die(
'FEHLER: Ausgabe ist nicht korrekt.');

echo 
"Genauigkeit: ".($ergebnis $ergebnis_ausgabe);    

?>
Mit Zitat antworten
  #28 (permalink)  
Alt 03-07-2008, 15:12
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Die Nacht ist übrigens schon vorbei. Also verlängern wir mal bis ... keine weiteren Lösungsvorschläge mehr zu erwarten sind.

Wegen Division durch Null muss niemand aufpassen. Die Eingabe besteht aus natürlichen Zahlen ohne 0.
Und ja, es stimmt, dass die Anzahl möglicher Lösungen i.A. unbegrenzt ist. Aber es sollen ja auch nicht alle sondern nur eine Lösung bestimmt werden.

Zitat:
Original geschrieben von combie
1. Das setzen der Klammern
2. Die Mehrfachverwendung der Zahlen

Treiben Rechenzeit ins Unermessliche!
Dann hast du den falschen Ansatz. Hier ist ein Lösung mit linearer Komplexität.
PHP-Code:
for ($i 1$i end($in); $i++)
    
$out .= '+'.$in[0].'/'.$in[0];
}
for (
$i 1$i count($in)-1$i++) {
    
$out .= '+('.$in[$i].'-'.$in[$i].')';
}
echo 
trim($out'+').'='.end($in); 
Vielleicht ist der Code jetzt nicht ganz korrekt. Der Ansatz ist jedenfalls dieser:
1,2,3 => Ausgabe "1/1+1/1+1/1+(2-2)=3"
2,3 => Ausgabe "2/2+2/2+2/2=3"
5,9,3,4,2 => Ausgabe "5/5+5/5+(9-9)+(3-3)+(4-4)=2"

Diese Lösung ist zwar wunderschön linear in ihrer Laufzeit, aber leider auch in der Länge der Ausgabe, so dass man damit sicher keinen Blumentopf gewinnt. Aber es ist bewiesen, dass es geht. Und es ist auch nicht besonders schwierig.

Geändert von onemorenerd (03-07-2008 um 15:14 Uhr)
Mit Zitat antworten
  #29 (permalink)  
Alt 03-07-2008, 15:27
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Ist ja doof, wenn du deine Aufgabe postest, wenn Leute die Arbeiten müssen schon im Bettchen sind, und die Lösung dann erwartest, wenn Leute die Arbeiten müssen ... arbeiten.

Poste mal ne Reihe von Testcases. Ich hab da ne Idee, die werde ich mir zuhause mal zusammenfrickeln

Wobei das echt ne harte Nuss ist. Wenn man nicht grade einen extrem großen Algorithmus zusammenschreiben will, muss man sich auf eine der beiden Kriterien konzentrieren: Exaktes Ergebnis oder kurze Formel.

Geändert von unset (03-07-2008 um 15:29 Uhr)
Mit Zitat antworten
  #30 (permalink)  
Alt 03-07-2008, 15:33
eintrachtemil
 Registrierter Benutzer
Links : Onlinestatus : eintrachtemil ist offline
Registriert seit: May 2004
Beiträge: 223
eintrachtemil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
...und der kürzesten Formel.
Shit, das habe ich ganz überlesen
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:23 Uhr.