Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  154 10503
Har snekra sammen en side som går ut på å løse programmingsoppgaver med færrest mulig kode (bytes). Språket er da som folk flest skjønner PHP.

Er nå 10 oppgaver som folk kan prøve seg på, de er ikke alt for vannskelige, så utfordringen blir da å bruke lure løsninger for å få koden minimal.

Jeg har skrevet en blogpost om noen tips og triks her.

Her er adressa til siden:
http://phpgolf.org

Lykke til!

(Trenger flere oppgaver, så bare ta kontakt om noen har noen ideér)
Er det ikke mer hensiktsmessig å produsere den mest effektive koden? Er ikke alltid at kortest er best
raze: Dette har ingenting med hva som er mest effektivt å gjøre. Dette er bare for gøy, å se hvor få bytes man kan løse oppgaver med
Dette hadde vært veldig interessant om det hadde vært i python, som er det eneste jeg kan foreløpig.
Er da ikke så lang vei fra Python til PHP :>
Sitat av ubrukelig Vis innlegg
Er da ikke så lang vei fra Python til PHP :>
Vis hele sitatet...
Godt mulig, men holder meg til python en stund til
Jeg synes dette var et litt artig konsept. Er forsåvidt litt enig med raze om effektiv kode. Hva om du hadde en time-trial modus på oppgavene også? Her kunne du eksempelvis ha fyrt av den innsendte oppgaven i en lang loop, og deretter tatt gjennomsnittet av kjøretiden og laget en score basert på dette.

Skjønt, dette kan gi litt forskjellige svar basert på hvor mye serveren har å gjøre i et gitt øyeblikk så her må man vel gjerne gjøre en eller annen form for lastbalansering eller køing av oppgaver.
Sist endret av m0b; 17. september 2010 kl. 16:28.
Virker som en kul idé, men jeg føler det fint går an å jukse.

Sett for eksempel at du har fem if-elseif-else statements. Disse kan du skrive på én linje, med short-ifs (ternary operators). Det blir både uleselig for en tredjepart, samtidig som det er treigere enn konvensjonell.

Med andre ord er jeg enig med førstepost (KP gitt). Jeg mener heller det bør belønnes etter den mest effektive måten, evt. "the most beautiful code".

For å sitere Wordpress: Code is Poetry.

Edit: |d13m0b har et godt poeng. Kjør benchmarks på hver kode, så ser vi fort hvilke som er raskest.

Jeg må også påpeke at jeg er ganske uenig i de ulike "tipsene" du har kommet med i blogginnlegget. Mange av disse er utdatert, dårlig praksis og generelt ekle.. Det som definerer en flink programmerer er å løse oppgaver intuitivt, og kun benytte seg av de verktøyene han trenger. Det finnes et uttall ulike løsning på et problem: å skrive koden kortere er ikke en av dem.
Sist endret av davste; 17. september 2010 kl. 17:21.
Da kan noen lage en konkurranse om å lage den fineste og raskeste koden, men dette er ikke poenget her davste. Her gjør det ingenting om koden er stygg og uleselig, det er i utgangspunktet ingen andre som skal lese koden enn deg selv, om du ikke deler den med andre. Dette er "just for fun", dette er ikke en side som omhandler "best practise", og det samme gjelder den bloggposten min.

Du kan kanskje lese litt om golf-konseptet her
Hehe,jepp. Jeg har allerede brynet meg på noen oppgaver, men merker jeg har lite å stille opp mot. Har som regel +20 bytes mer enn 1. plass. Gøyalt konsept, nonetheless! Kult du har slengt inn oppgaver innen matematikk, da. Det gjør det jo bare mer spennende!
Sist endret av davste; 17. september 2010 kl. 18:01.
Expected utputt:

Kode

							  1
                                                      1     1
                                                   1     2     1
                                                1     3     3     1
                                             1     4     6     4     1
                                          1     5    10    10     5     1
                                       1     6    15    20    15     6     1
                                    1     7    21    35    35    21     7     1
                                 1     8    28    56    70    56    28     8     1
                              1     9    36    84   126   126    84    36     9     1
                           1    10    45   120   210   252   210   120    45    10     1
                        1    11    55   165   330   462   462   330   165    55    11     1
                     1    12    66   220   495   792   924   792   495   220    66    12     1
                  1    13    78   286   715  1287  1716  1716  1287   715   286    78    13     1
               1    14    91   364  1001  2002  3003  3432  3003  2002  1001   364    91    14     1
            1    15   105   455  1365  3003  5005  6435  6435  5005  3003  1365   455   105    15     1
         1    16   120   560  1820  4368  8008 11440 12870 11440  8008  4368  1820   560   120    16     1
      1    17   136   680  2380  6188 12376 19448 24310 24310 19448 12376  6188  2380   680   136    17     1
   1    18   153   816  3060  8568 18564 31824 43758 48620 43758 31824 18564  8568  3060   816   153    18     1
1    19   171   969  3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628  3876   969   171    19     1
Min utputt:

Kode

1
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1 
1 10 45 120 210 252 210 120 45 10 1 
1 11 55 165 330 462 462 330 165 55 11 1 
1 12 66 220 495 792 924 792 495 220 66 12 1 
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1 
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1 
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1 
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1 
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1 
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1
Hva er galt? Burde ikke det der funke? (Newline på siste linja er med)
Sist endret av Ozma; 17. september 2010 kl. 18:02.
davste: Hehe, kan da ikke tenke slik. Man må gjerne jobbe med kodene over litt tid ;>

Ozma: Ser din output og expected output lik ut? :P
Sist endret av dassmongo; 17. september 2010 kl. 18:05.
Burde nevne det i oppgaven da.
Det er jo ganske åpenlyst at Pascals trekant faktisk skal være en trekant. Ellers forsvinner jo hele logikken med det matematiske mønsteret i den.
Ozma: Oppgaven sier ganske konkret hva forventet output skal være.
Så er det litt lurt å merke seg at man kan ta snarveier.. Selv om det korrekte er:

Kode

echo "Variabelen er:" . $var . " !";
Så må man skrive:

Kode

echo "Variabelen er: $var !";
Håper og foressten du brukte <pre></pre> HTML rundt output. Fordi jeg kommer IKKE til å bruke <br />. For det er irrelevant.
Katalysator: tror nok de fleste vet om det der :P
Bruker <pre></pre> på output ja.
Er det lov med hint? Kan du som klarte "Words" med 79 bytes si om du brukte fakultet eller ei?
På pascals trekant får jeg bare failed. Må jeg gjøre slik at alt er midtstilt i den oppgaven?
etse: Den skal være identisk til den du ser i instruksen
ok, siden du spesifiserer at den skal være newline på hver linje kunne du spesifisert den skulle vært midtstilt og
Hva om en lager en kode, slik at php-scriptet henter "oppsettet" fra en annen link/side? Slik at outputen blir slik oppgaven skal være.
Sitat av Adrian Vis innlegg
Hva om en lager en kode, slik at php-scriptet henter "oppsettet" fra en annen link/side? Slik at outputen blir slik oppgaven skal være.
Vis hele sitatet...
Om du tar deg bryet til å lese reglene står det at dette ikke er lov.
Hvordan vet man hvor mange poeng man har? Det vises jo ikke noen sted hvis man ikke er blant topp 15, eller?
Sitat av esl Vis innlegg
Om du tar deg bryet til å lese reglene står det at dette ikke er lov.
Vis hele sitatet...
Ok. Satt meg ikke stort inn i reglene. Leste fort igjennom oppgavene, uten og ha mulighet eller kompetanse til å delta.
Adrian: Om du hadde hatt tilgang til å inkludere kode fra et annet sted, ville den koden fortsatt blitt telt med i størrelsen på koden

Kråkelefse: Trykk på "Top 250"
Sitat av ubrukelig Vis innlegg
Kråkelefse: Trykk på "Top 250"
Vis hele sitatet...
Ok, men hva når du får mer enn 250 medlemmer?

Problem: Hvis man laster opp et program og så trykker oppdater ser det ut til at programmet lastes opp på nytt.
Kråkelefse: Da får du pr. dags dato ikke sett poenga dine nei, men alt du har lasta opp kan du iallfall se på 'View code'
Edit: Haha, slo ut regjerende mester "helge" på "phpGolf"!
Sist endret av Kråkelefse; 17. september 2010 kl. 22:43.
Kråkelefse: Om jeg skulle ha lista opp alle funksjonene som ikke var lov, så hadde det blitt et par sider tror jeg ;>
Hvilken funksjon er det du prøver på?
1) Kan jeg få se en phpinfo();?
2) Kan du gjøre det så en ser hva scriptet faktisk printer ut hvis det feiler? -- EDIT: Scratch that, fant det nå. Litt gjemt.

Min elegante 95-slags løsning på phpGolf feiler av ukjent grunn, sannsynligvis fordi du ikke har den medfølgende extensionen Zlib installert, selv om det da står at kun PECL/PEAR ikke er der.

Og hva er dette med ingen advarsler tillatt? Poenget med golf er jo å bruke de skitneste triksene tilgjengelig og da må man jo knuse de metaforiske eggene, så lenge det funker.
Sist endret av Akhkharu; 17. september 2010 kl. 22:48.
Men i gamperæven, nå ble den plutselig omgjort til failed
Akhkharu: Ingen zip-funksjoner er lov. Om du går til 'View code' og trykker på 'Failed', så kommer opp forskjellen på din og forvendet output. Det holder med at E_NOTICES er off, ellers blir det heeelt mayhem.
Kråkelefse: Om jeg skulle ha lista opp alle funksjonene som ikke var lov, så hadde det blitt et par sider tror jeg ;>
Vis hele sitatet...
Så lag et par sider.

Sjekk denne:
http://img190.imageshack.us/img190/3347/golfe.png
Kråkelefse: Jeg vet, jeg hadde glemt å fjerne den funksjonen du brukte.
Sitat av ubrukelig Vis innlegg
Her er adressa til siden:
http://phpgolf.org
Vis hele sitatet...
Flott side, ikke ubrukelig i det hele tatt Kudos!

Bare så synd at den er myntet på PHP-utviklere. Har du noen planer om å utvide (evt. gjenbruke kodebasen) for å lage tilsvarende for andre språk?
tormaroe: Takk, takk. Har nok ikke planer om å lage for andre språk og, men det finnes noen andre golf-sider fra før:

Perl Golf: http://perlgolf.sourceforge.net
C Golf: http://shiva.norgrind.net/~tom/cgolf
Code Golf (Ruby, PHP, Perl, Python): http://codegolf.com
Jeg ser at du bruker javascript for å åpne ting i nytt vindu. Ikke gjør det, det er så sinnsykt irriterende for det gjør at når man bruker browserens åpne-i-nytt-vindu-funksjon virker den ikke. Hvis du absolutt vil bestemme om at en link skal åpnes i nytt vindu, bruk target="_new" på tagen.
Kråkelefse: Browsern min klarer det (Chrome), men jeg kan ta en titt på det
The bush kangaroo
Sk!ppy's Avatar
Prøver meg på den 99 bottles of beer til å starte med, ser at den minste fila er på 199 bytes, min er på 360 elns... Er ikke lett detta, sitter du forresten å validerer kode selv?
Sk!ppy: Hehe, er du gal?!
The bush kangaroo
Sk!ppy's Avatar
Noen sier så

Har fått ned fila til 270 bytes! Woho, nærmer meg :P
Er det mulig å "avslutte" konkurransene etter en viss tid, slik at det er mulig å se andres koder? Tror jeg aldri før har vært så nysgjerrig på å se andre sine koder..
davste: Haha, skjønner hva du mener
Jeg skal vurdere saken!
Forresten: når oppgaven gir deg en input (og du failer), kan du vise inputten i "View difference" i lag med koden?
davste: Mener du verdien av konstanten eller hele ouputen av koden din?
Konstanten, i tillegg til det som er der i dag. (konstant+output)
Sist endret av davste; 18. september 2010 kl. 15:49.
The bush kangaroo
Sk!ppy's Avatar
60 bytes må fjernes fra koden min, jeg blir gal, hvordan klarer man 199 bytes på 99bottles?
(Blir det failed uansett, så lenge du er over laveste ang. bytes?)
Sist endret av Sk!ppy; 18. september 2010 kl. 16:02.
Sitat av ubrukelig Vis innlegg
Kråkelefse: Browsern min klarer det (Chrome), men jeg kan ta en titt på det
Vis hele sitatet...
Det er uansett bare feil måte å gjøre det på. Hva hvis man har javascript av?
Sk!ppy: Du får fjerne kode som gjentar seg.
Koden din blir failed om den ikke er lik og passed om den er lik. Hvor mange bytes koden din er, har ingenting med saken å gjøre