Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Fasset euch kurz!“

blackout

Schaf im Wolfspelz

Die Regeln sind klar. Dass sie dir nicht passen ist eine andere Sache. Das fiele dann aber unter "ändern bitte" und nicht unter "unklar formuliert".
Das schöne an meinen Regeln ist, dass man sie leicht verwirklichen kann: markieren, Zeichen ablesen, ein paar Mal 50 addieren - fertig. Würde man sie verkomplizieren, z.B. Leerzeichen nicht mehr zählen, wäre das für einen Menschen schlecht nachzuprüfen - man bräuchte also eine PHP-Funktion, mit der man seinen Code füttert, und die einem die Anzahl der Punkte oder Zeichen oder was auch immer mitteilt. Das Problem ist, dass etwas derartiges ziemlich schwer zu schreiben ist; generisch wird es wohl etwa so aussehen:[php:1:cd5de247d0]function evaluate($string) {
$string = strtolower($string); // Bringen wir's mal in eine schöne Form...
$string = preg_replace('@[^\\x20-\\x7e]@i', '', $string); // Alle bis auf druckbare ASCII-Zeichen und Space entfernen
$string = preg_replace('@\\s{2,}@', ' ', $string); // Mehrfache Spaces kürzen
// Wie löscht man Kommentare? Man müsste theoretisch den kompletten String parsen... Oder was sonst will man mit "/*"/**/ machen?
$returncount = substr_count($string, 'returnn');
$languageconstructs = array( // Die Funktionen, die keine Punkte kosten sollen
'for',
'foreach',
'while',
'list',
'if',
'elseif',
// else ist hier aber blöd einzubauen...
);
preg_match_all('@'.implode('|', $languageconstructs).'@', $string, $constructcount); // Zählt alle Sprachkonstruktoren des Typs foo, sofern im Array genannt
print_r($constructcount);
$constructcount = count($constructcount[0]);
preg_match_all('@[a-z_][a-z0-9_]*\\(@i', $string, $functioncount); // Zählt alle Funktionen des Typs foo(
print_r($functioncount);
$functioncount = count($functioncount[0]);
$functionvalue = 0 // Bauen wir uns den Punktestand
+ strlen($string)
+ 10 * (($returncount > 0) ? $returncount - 1 : 0) // Das erste return ist kostenlos, jedes weitere kostet 10 Punkte. Kein einziges return zu haben bringt aber leider keine 10 Punkte.
+ 50 * $functioncount // Für jede Funktion gibt's 50 Punkte extra
- 50 * $constructcount // ...die Konstrukte werden allerdings wieder abgezogen
- strlen('function') // Function am Anfang nicht mitzählen
;
return $functionvalue;
}[/php:1:cd5de247d0]...wohlgemerkt: die Funktion entfernt keine Kommentare, zählt elseif als 2 Konstrukte (else+if), hat Probleme mit Klammern und was weiß ich noch alles. Außerdem gibt's Probleme, sobald die Konstruktoren keine Klammern haben (z.B. else). Das alles einzubauen wage ich zu behaupten ist eine Arbeit, die einen wohl mehrere Wochen beschäftigen wird.

Des weiteren haben furchtbar aussehende Codes auch einen Vorteil: man kann sie nicht mal so ankucken, man muss sie auseinanderfieseln und sich damit beschäftigen, sonst ist man chancenlos. Und wer schon unbedingt auf der Funktion jemanden anders aufbauen will, der soll das auch tun - oder gefälligst seine eigenen Ideen einbringen. (So war das auch eigentlich gedacht...)



So, nun zu Duddles Primzahl-Script: Ich hab's mal aus Spaß mit allen Zahlen bis 10.000 probiert und irgendwie baut es seltsame Sachen; ich hab's auseinandergebaut, aber wo der Fehler herkommt ist mir schleierhaft - vielleicht ein Bug in PHP? Jedenfalls gibt's bei mir bei 9998 2 Primfaktoren - 2 und 4999.
 
D

DocUhu

Guest

Und wo bleibt hier Faktor "Spaß" ? :eek:
Wer hat den läääängs... ach quatsch den kürzesten? :?

Ist hier null Lerneffekt, liest sich hier eher wie aus nem Thread von Fachidioten... :lol:
 

Duddle

Posting-Frequenz: 14µHz

blackout schrieb:
wo der Fehler herkommt ist mir schleierhaft

Juhuu, hab es geschafft, dass blackout etwas mathematisch nicht versteht :twisted: :p

Ich hab aber gerade mal auf primzahlen.de die 4999 getestet und die ist wohl eine Primzahl. Also lässt sich 9998 auf 4999 und 2 zerlegen.


Duddle
 

blackout

Schaf im Wolfspelz

Öh... das wundert mich jetzt. Das heißt wohl, dass 4999 die mit abstand größte merkbare Primzahl ist (Mersenne und den Rest kann wohl keiner in absoluter Form im Kopf behalten), die ich kenne.
An sich hätte ich das ja geglaubt, aber ich kann mich erinnern, dass das Programm 4999 zerlegen konnte... tut es aber nicht. Ich hab mich wohl verkuckt. (Oder ist es noch immer eine anerkannte Gesellschaftsform, seine Fehler auf Computer zu schieben? Wenn ja würde ich das gerne hiermit tun)
 

mammimonstA

grauhliebe

Wer schreibt diese Funktion kleiner und möglicherweise mit weniger Fremdfunktionen(wobei das wohl kaum geht)?!

[php:1:4d5d4baaf3]function f($b){$o="Ook";$r="";$d=".";$a="!";$f="?";$i=0;while(strlen($b)>$i){$s=substr($b,$i,8);(($s==$o.$d.$o.$d) && $r.="+")|(($s==$o.$a.$o.$a) && $r.="-")|(($s==$o.$d.$o.$f) && $r.=">")|(($s==$o.$f.$o.$d) && $r.="<")|(($s==$o.$a.$o.$f) && $r.="[")|(($s==$o.$f.$o.$a) && $r.="]")|(($s==$o.$a.$o.$d) && $r.=".")|(($s==$o.$d.$o.$a) && $r.=",");$i+=8;}; return $r;};
//Formt Ook in bf um - Zeichen 365+2*50; Autor: mammimonstA[/php:1:4d5d4baaf3]

Edit: Noch ein krasseres Feature (Ey alda, weissdu unso?!) wäre ein Hang zur Ignoranz von Leerzeichen.

_UPDATE_

[php:1:4d5d4baaf3]function f($b){$o="Ook";$r="";$d=".";$a="!";$f="?";$i=0;while($b{$i}){$s=$b{$i}.$b{$i+1}.$b{$i+2}.$b{$i+3}.$b{$i+4}.$b{$i+5}.$b{$i+6}.$b{$i+7} ;(($s==$o.$d.$o.$d) && $r.="+")|(($s==$o.$a.$o.$a) && $r.="-")|(($s==$o.$d.$o.$f) && $r.=">")|(($s==$o.$f.$o.$d) && $r.="<")|(($s==$o.$a.$o.$f) && $r.="[")|(($s==$o.$f.$o.$a) && $r.="]")|(($s==$o.$a.$o.$d) && $r.=".")|(($s==$o.$d.$o.$a) && $r.=",");$i+=8;}; return $r;};
//Formt Ook in bf um - Zeichen 393; Autor: mammimonstA[/php:1:4d5d4baaf3]

Ich hab die Funktionen mittels Untergrundwissen (siehe erste Seite ^^) beseitigt, allerdings bekomm ich jett so nen hässlichen "Notice:", eben error_reporting(E_ALL)...
Und das Leerzeichenproblem ist immernoch da. Und 393 Zeichen sind nicht grad wenig...
 

blackout

Schaf im Wolfspelz

Haha, das ist mal eine gute Idee... ich schreib mal meine eigene Funktion und kuck wie viele Zeichen ich bekomme :)

(Für alle, die nicht wissen was Ook bzw Brainfuck ist - Wikipedia hilft)

Edit:[php:1:3fdb58989d]function f($s){$t=array('..'=>'+','!!'=>'-','.?'=>'>','?.'=>
'<','!?'=>'[','?!'=>']','!.'=>'.','.!'=>',');$s=preg_replace('@[^.!?]@',''
,$s);$r='';for($i=0;isset($s[$i]);$i+=2){$r.=$t[$s[$i].$s[$i+1]];}return$r;}
// 260 (210+preg_replace) Zeichen und sicher noch schrumpfbar - blackout (3 Leerzeichen eingefügt, um nicht das Forum zu sprengen)[/php:1:3fdb58989d]
Die Funktion ignoriert alles außer die für Ook wirklich relevanten Zeichen: .!?
Man könnte ebenso statt "Ook? Ook." "Wo ist denn der Peter? Oh, ich habe ihn gefunden." schreiben. Außerdem gibt's Fehler, wenn der Ook-Code falsch ist - aber das macht ja jeder Compiler auch ;)

Und noch ein edit: ich lad mir jetzt die neueste Version von XAMPP, und damit wohl auch die aktuellste Version von PHP. Ich schlage daher vor, wir normen die Codes auf PHP 5.2.0, da diese wohl am einfachsten zu bekommen ist.

@Mammimamamamonster: Du brauchst hinter } keinen Strichpunkt zu setzen :)
 

Duddle

Posting-Frequenz: 14µHz

Tja, was macht ein Informatiker, der an heilig Abend nach 22 Uhr nix zu tun hat? Er hört irgendeine Elektro-Mucke, oder in meinem Fall Fatboy Slim, schmeisst PHP Designer an und schreibt eine kleine Schaltjahr-Funktion.
[php:1:e26ca6c8a0]<?php
function s($j){
return (($j % 4 == 0 && $j % 100 != 0) || ($j % 400 == 0)) ? 1 : 0;
}
// gibt 1 bei Schaltjahr zurück, sonst 0 - 85 Zeichen - Duddle
?>
[/php:1:e26ca6c8a0]

Dann stellt er fest, dass nach den allgemeinen Regeln in Wikipedia zur Prüfung eines Schaltjahres auch C-Code steckt, der dem eigenen 1:1 gleicht :?

Gebt mir mal Input, was man i. PHP verkürz. könnt. :)


Edit: Doofer Kaffee, hält mich wach :?

Funktion zwei, ein eigenes dec2bin. Kann aber leider nur 24Bit, nicht wie die originale 32. Egal, hier ist sie:

[php:1:e26ca6c8a0]
<?php
function b($z){
$m=0x800000;
while($m){
$r .= ($m & $z) ? "1" : "0";
$m>>= 1;
}
return $r;
}
//gibt die eingegebene Zahl als Binärzahl als String zurück - 100 Zeichen - Duddle
?>
[/php:1:e26ca6c8a0]



Duddle
 

blackout

Schaf im Wolfspelz

[php:1:f08be6d9c1]function schaltjahr($jahr){
return $jahr % 4 == 0 && $jahr % 100 OR $jahr % 400 == 0;
}
// ...oder zusammengekürzt:
function s($j){return$j%4==0&&$j%100OR$j%400==0;}
// Beides mit PHP 5.2.0 getestet.[/php:1:f08be6d9c1]

...an das Binär-Script wage ich mich nicht ran, ich habe keine Ahnung von binären Operatoren und verzweifle immer, wenn ich mich mal wieder rantraue. Falls jemand nen Tipp hat, wie man das unterbinden kann... Ritalin oder so?
Kannst du mal versuchen, deinen Code idiotensicher auszukommentieren? Etwas von der Sorte "$m >>= 1 schippt den Schnee um 1 Uhr von der Straße"? ;D
 

Duddle

Posting-Frequenz: 14µHz

Ich weiss, mein Output ist nicht der brillianteste, aber ich bereite gerade etwas größeres vor und brauchte dafür eine kleine pow()-Funktion:

[php:1:76b16703fd]
<?php
function p($b, $e){
$r=1;
while($e-->0) $r*=$b;
return $r;
}
//gibt $b hoch $e zurück - 62 Zeichen - Duddle
?>
[/php:1:76b16703fd]

Eine kleine Erläuterung zu dem dec2bin kommt gleich.


Duddle
 

Duddle

Posting-Frequenz: 14µHz

blackout schrieb:
Kannst du mal versuchen, deinen Code idiotensicher auszukommentieren? Etwas von der Sorte "$m >>= 1 schippt den Schnee um 1 Uhr von der Straße"? ;D

Hoffe, dass ist aussagekräftig:



So, ich muss jetzt glaub ich ins Bett. Ich war kurz davor, eine Funktion zu schreiben, die zurück gibt, ob schon Weltfrieden ist.... if(0) return true; o_O


Mü-Duddle
 
S

shadow_eye

Guest

Für die Sammler unter uns:

[php:1:e4300063dd]
function r($a,$b,$c,$d=1){$c?r($a,$b,--$c,($d+$a/$d)/$b):print $d;}
//gibt die Wurzel des Radikanden $a zum Wurzelexponenten $b mit $c annähernden Rechenschritten aus, geht leider mit return nicht - 67 Zeichen- shadow_eye (gekürzte Version)
//Langversion:
function r($a, $b, $c, $d = 1){
$c ? r($a, $b, --$c, ($d+$a/$d)/$b) : print $d;
}
[/php:1:e4300063dd]

Vielleicht kennt noch jemand eine Möglichkeit, Logarithmen zu berechnen?

edit:
Rekursion kostet ja 50, also +50
Dann ist es aber mit einer Schleife sicher günstiger.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.155
Beiträge
2.581.853
Mitglieder
67.221
Neuestes Mitglied
opaklaus
Oben