Die hint van mij was misschien ook niet echt duidelijkquote:Op zondag 11 december 2005 22:03 schreef SuperRembo het volgende:
Het winnende scriptje van crisp:
[ code verwijderd ]
Ik heb er dus echt geen moment aan gedacht om de parameters om te wisselen (ondanks de hint van Light).
Maar hij kan nog korter
[ code verwijderd ]
49 tekens. bcadd() rondt trouwens naar beneden af.
1 |
Hoe apart, waarom daar niet?quote:Op zondag 11 december 2005 22:34 schreef SuperRembo het volgende:
Die truck met de X werkt in dit geval niet
1 |
Ik ben wel benieuwd naar je oplossing, volgens mij wordt ie niet genoemd op phpfreakz.quote:Op maandag 5 december 2005 01:46 schreef Ro�a� het volgende:
Is er ook een prijs voor meest originele inzending. Heb nog een leuke gevonden, die is echter wel 60 tekens, dus niet helemaal optimaal.
Roonaan wordt daar helemaal niet genoemd, vreemd genoeg.quote:Op zondag 11 december 2005 23:05 schreef SuperRembo het volgende:
[..]
Ik ben wel benieuwd naar je oplossing, volgens mij wordt ie niet genoemd op phpfreakz.
Ja...quote:Op zondag 11 december 2005 23:02 schreef Light het volgende:
printf verwacht een string met format specifiers, en een bijpassend aantal variabelen. Zie sprintf voor de mogelijkheden. %.2f geeft iig aan dat de parameter een floating point variabele met een precisie van twee decimalen is. Da's precies wat de bedoeling is
En die preg_replace is wat flauw natuurlijk. De constante X evalueert naar een lege string (omdat de constante X niet bestaat) en op die string wordt een lege expressie losgelaten. NOrmaal gesproken gebruik je delen van de expressie weer in de tweede variabele (met $0 of $1 bijvoorbeeld), maar hier dus niet. De /e modifier bij de expressie geeft aan dat de resultaatsting (de tweede parameter van de functie preg_replace dus) moet worden geevalueerd als php code.
End ten slotte levert het laatste element van de array op. De volgorde van de elementen in het formulier was met opzet gekozen.
Zo werkt het niet.quote:Op zondag 11 december 2005 23:02 schreef Light het volgende:
En die preg_replace is wat flauw natuurlijk. De constante X evalueert naar een lege string (omdat de constante X niet bestaat) en op die string wordt een lege expressie losgelaten.
Nee, X wordt gezien als een constante die leeg is. Als het als een string zou worden gezien zou de regexp niet meer werken. Maar dan snap ik nog steeds niet waarom het niet werkt in de code van Lightquote:Op zondag 11 december 2005 23:16 schreef SuperRembo het volgende:
[..]
Zo werkt het niet.
X is onbekend en wordt daarom gezien als constante string 'X'.
De // regexp matcht het begin en eind van de string 'X' (denk ik).
Correctquote:Op zondag 11 december 2005 23:16 schreef Swetsenegger het volgende:
wacht even, je gaat de input dus gewoon behandelen als php code, welke dus gewoon 2*3/4 uit zal voeren en de printf geeft die uitkomst als float met 2 decimalen.
Klopt dit?
Owja, als ik printf weghaal uit de functie en gewoon 2+3 als invoer geef dan krijg ik 5X5 als uitvoer. En X is natuurlijk geen nummer, dus bij de convertering naar een getal verdwijnt die.quote:Op zondag 11 december 2005 23:16 schreef SuperRembo het volgende:
[..]
Zo werkt het niet.
X is onbekend en wordt daarom gezien als constante string 'X'.
De // regexp matcht het begin en eind van de string 'X' (denk ik).
Het begin en eind wordt gereplaced door de uitkomst van de eval van de input ('3+4*5/3' => 9.6666666666667). Dit levert de string '9.6666666666667X9.6666666666667'.
Printf verwacht een float, en converteert daarom de string naar een float, dat levert 9.6666666666667. Dat getal wordt afgerond op 2 decimalen en geconverteerd naar een string: '9.67'.
quote:Op zondag 11 december 2005 23:05 schreef SuperRembo het volgende:
[..]
Ik ben wel benieuwd naar je oplossing, volgens mij wordt ie niet genoemd op phpfreakz.
1 |
Round levert bij 2+8 de uitkomst 10, niet 10.00.quote:Op zondag 11 december 2005 23:47 schreef SuperRembo het volgende:
Wel creatief, maar die gebruikt dus intern ook eval. Ik zie nergens dat je round niet mocht gebruiken.
het schijnt dat er áltijd twee cijfers achter de komma moest hebben, round doet dat niet, die geeft gewoon 2.5 voor 5/2, ipv 2.50.quote:Op zondag 11 december 2005 23:47 schreef SuperRembo het volgende:
Wel creatief, maar die gebruikt dus intern ook eval. Ik zie nergens dat je round niet mocht gebruiken.
1 |
jups. mijn fout. misread de opdracht klaarblijkelijk.quote:Op zondag 11 december 2005 23:47 schreef Light het volgende:
En je oplossing van 52 tekens, was dat ook met een round?
Dat round() iets anders doet dan de %.2f van printf() betekent niet dat je round() niet mag gebruiken.quote:Op zondag 11 december 2005 23:48 schreef Light het volgende:
[..]
Round levert bij 2+8 de uitkomst 10, niet 10.00.
1 2 3 4 5 | <form method="POST" action="base64.php"> <input type="text" name="input"> <input type="submit" value="base64"> </form> |
In dit geval wel. Uit de opdracht:quote:Op zondag 11 december 2005 23:49 schreef JeRa het volgende:
[..]
Dat round() iets anders doet dan de %.2f van printf() betekent niet dat je round() niet mag gebruiken.
quote:Output moet bestaan uit twee decimalen en de punt wordt als scheidingsteken gebruikt.
Dus volgens jou mag deze oplossing niet?quote:Op zondag 11 december 2005 23:52 schreef Light het volgende:
[..]
In dit geval wel. Uit de opdracht:
[..]
quote:Op maandag 12 december 2005 00:01 schreef JeRa het volgende:
[..]
Dus volgens jou mag deze oplossing niet?
<?=printf('%.2f',round(preg_replace('//e',end($_POST),''),2));
(naast het feit dat het dubbelop is)
Als kortste oplossing komt die niet in aanmerkingquote:Op maandag 12 december 2005 00:01 schreef JeRa het volgende:
[..]
Dus volgens jou mag deze oplossing niet?
<?=printf('%.2f',round(preg_replace('//e',end($_POST),''),2));
(naast het feit dat het dubbelop is)
Ik heb 'm nu in 283 karakters. 228 is wel erg weinig zegquote:Op zondag 11 december 2005 23:51 schreef crisp het volgende:
Iemand zin in een tussendoortje?
Men neme dit formulier:
[ code verwijderd ]
Schrijf nu base64.php zo kort mogelijk; de output moet hetzelfde zijn als de output van base64_encode() maar deze functie mag je uiteraard niet gebruiken
Verder dezelfde regels als voor reguliere Golfs, oplossingen mogen naar crisp@xs4all.nl (privacy gewaarborgt). Einddatum is Zondag 18 december 18:00 uur.
Om het scherp te zetten: ik heb zelf een oplossing van 228 karakters
De functie die je dan moet hebben heet wel printf, maar de argumenten zijn iets anders (en bieden ook meer mogelijkheden).quote:Op maandag 12 december 2005 22:51 schreef Chandler het volgende:
in basic ofzo kon je altijd printen met printf "##.##", getal maar dat werkt blijkbaar niet in PHP
zó ingewikkeld om php.net/printf is het toch niet?quote:Op maandag 12 december 2005 22:51 schreef Chandler het volgende:
in basic ofzo kon je altijd printen met printf "##.##", getal maar dat werkt blijkbaar niet in PHP
Dat vind ik al een aardige prestatiequote:Op maandag 12 december 2005 22:06 schreef SuperRembo het volgende:
[..]
Ik heb 'm nu in 283 karakters. 228 is wel erg weinig zeg![]()
Nee, dat is een implementatie van base64 en niet zozeer het algoritme zelf. Zo is het uitsplitsen naar lijnen van max 76 karakters geen karakteristiek van base64 zelf, dus ook niet nodig (base64_encode() doet dat ook niet).quote:Op dinsdag 13 december 2005 00:46 schreef JeRa het volgende:
Ik neem aan dat base64.php zich volledig aan het RFC 2045 moet houden?
Zat ik net eentje onder je vorige schepsel, kom je met dit nieuwsquote:Op dinsdag 13 december 2005 16:30 schreef crisp het volgende:
Ik zit zelf inmiddels op 208
Het is er niet netter op geworden though..
Ik neem aan dat zo'n beetje iedereen dezelfde bitwise operaties uitvoert om dit een beetje compact te kunnen uitvoeren. Dan kom ik nóg met geen mogelijkheid aan de 230-quote:Op dinsdag 13 december 2005 23:29 schreef crisp het volgende:
dat wordt een leuk lesje bitwise rekenen
Mwa, ik kan daar nog wel wat variaties op bedenken hoor.quote:Op dinsdag 13 december 2005 23:43 schreef JeRa het volgende:
[..]
Ik neem aan dat zo'n beetje iedereen dezelfde bitwise operaties uitvoert om dit een beetje compact te kunnen uitvoeren. Dan kom ik nóg met geen mogelijkheid aan de 230-
Je geeft me een geweldig idee *uitwerkt*quote:Op dinsdag 13 december 2005 23:48 schreef crisp het volgende:
[..]
Mwa, ik kan daar nog wel wat variaties op bedenken hoor.
Een groot deel van mijn code zit in het initialiseren van de geldige karakters (57 bytes). Daarna volgt het daarwerkelijke algoritme (78 bytes) en het verwerken van de 'rest' en padding (45 bytes). Input en output verwerking en nog wat verplichte overhead zit dan nog op 28 bytes...
Ben erg benieuwd naar de resultaten straksquote:Op woensdag 14 december 2005 00:52 schreef crisp het volgende:
Er zijn 2 algemene approaches voor dit probleem. De meest voorkomende is dat je 3 bytes gelijktijdig omzet naar base64 (4 bytes); ik doe echter een byte-naar-bit approach waarbij ik een remainder bijhou
Enig idee hoeveel tekens een return-statement inneemt?quote:Op woensdag 14 december 2005 08:46 schreef SuperRembo het volgende:
Misschien is het een idee om de opdracht iets aan te passen. Maak de body van een functie, in plaats van een heel script dat een form verwerkt. Dan hou je dingen als pos($_POST) er buiten, die kent iedereen toch wel.
Nou nee, ik zit op 262 maar bij dat aantal is het nog goed mogelijk om de boel leeg te laten lopenquote:Op woensdag 14 december 2005 09:57 schreef crisp het volgende:
Oeh, 206
Ik kan wel raden welke approach je hebt genomen dan; omzetten naar base128 (7 bits naar een byte) zou wel lastiger zijn dan denk ik?
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |