Gå til innhold

phpGolf - skriv den korteste koden


Anbefalte innlegg

Tviler på at det er noen forskjell på minnebruken på de to. Begge kodene er jo så og si identiske, bytt ut yield med print så er det akkurat samme kode.

Jo det er en klar forskjell,"yield" gjør at det lages et generator object.

Skal gi en rask forklaring hvordan dette virker eller så er det bare og lese mere om dette.

 

En av fordelene med en generator er at den ikke lagere alle elementer i en loop til minne.

>>> def num(n):
...     for i in range(n):
...         yield i
...         
>>> num(10)
<generator object num at 0x052AB350>
>>> #Vi har nå et generator object som må loopes over eller bruke next()
>>> n = num(10)
>>> n.next()
0
>>> n.next()
1
>>> for i in n:
...     print i
...     
2
3
4
5
6
7
8
9
>>> #Fordelen med denne løsning er at for hver loop blir kun et og et element lagret i minne.

Nå er vi litt off topic,så beklager det.

Endret av SNIPPSAT
Lenke til kommentar
Videoannonse
Annonse

Hadde koden vært noe slik som nedenfor, så hadde generatoren hatt en fordel.

 

def fib1(max):
   x,y,l=0,1,[]
   while y<max:
       l.append(x)
       x,y=y,x+y

   return l

for n in fib1(1000000000000000000000000**100):
   print n

# VS

def fib2(max):
   x,y=0,1
   while y<max:
       yield x
       x,y=y,x+y

for n in fib2(1000000000000000000000000**100):
   print n

 

 

Men koden du postet:

x,y=0,1
while y<1000000000000000000000000**100:print x;x,y=y,x+y

Denne er ikke noe dårligere enn generator versjonen. Den vil ikke bruke noe mer minne, siden den bare printer ut tallene, men ikke lagrer dem.

Lenke til kommentar
Gjest Slettet+9871234

Men dette er ikke kode i golf standaren,hvor stygg kode med alle triks som finnes stort sett er best.

 

Hvor finner jeg den? Tideligere i tråden?

http://www.phpgolf.org/

Interessant prosjekt

 

The term comes from Perl Golf where the point is to solve programming challenges with as few bytes as possible. Just like in real golf where players aspire to get the ball in the hole with as few strokes as possible.

 

This is not a place to learn about good programming practice, this is just for fun.

for de som har tid til det.

 

Nå er jo såvel Python som PHP tolket kode. Python er som nevnt en C løkke og PHP preprosessoren er også skrevet i C om jeg husker riktig. For å komme på toppen av den listen må man muligens grave seg ned i bytekode og enda lavere til assembly (1 - 1 relasjon med binær maskin kode) og sammenligne assembly koden som genereres av ulike funksjoner. Det er, om man har en moderne C kompilator, enkelt nok (i hvertfall om funksjonen skrives direkte i C):

 

http://www.oopschool.com/phpBB3/viewtopic.php?f=5&t=159

 

Men å forbedre (her i betydningen bit / byte redusere) den koden krever kunnskaper og kreativitet de ferreste har tid til å lære seg:

 

https://www.diskusjon.no/index.php?showtopic=633431

 

Se også:

 

https://www.diskusjon.no/index.php?showtopic=958029

 

Personer med et konkurranseinnstinkt som Marit Bjørgen og Petter Northug, går kanskje veien om assembly for å finne forslag til forbedringer og minimalistiske løsninger. Selv en moderne optimalisert C kompilator kan ta omveier ut i eller i minnet. Avansert optimalisert programmering med flekjerneprosessorer gjør ikke dette enklere. Det kan ta år å beherske dette. Men man vil nok lære mye av det.

 

Noen flere ressurser: http://www.kjellbleivik.com/Books/#assembly

 

God introduksjons bok http://www.kjellbleivik.com/Books Boken av Alex Varanese /GameDevelopment.php#gamescripting side 24 og spesielt kapittel 12 "Compiler Theory". En klassisk mursteinsbok som gjør dette enkelt og interessant og som er viktig for de som vil lære å utvikle avanserte spill der man integrerer skripts med C / C++.

 

Lykke til og fortsett tråden så lenge forumet lever. Jeg leser med interesse nye bidrag, men har ikke selv tid til å gå mer i dybden.

Endret av Slettet+9871234
Lenke til kommentar

Er en del gale løsninger på bit nivået. Men jeg trur det å lære seg assembly (eller C/C++) ikke vil komme deg noen vei.

Bit forståelsen kan jo hjelpe, men år på baken er også viktig. Er nok mer på forståelsen på hvordan ting fungerer enn å lære seg andre språk (som i praksis har liten eller ingen innvirkning på phpkoden)

Lenke til kommentar
Gjest Slettet+9871234

Her

 

package main

// fib returns a function that returns
// successive Fibonacci numbers.
func fib() func() int {
a, b := 0, 1
return func() int {
	a, b = b, a+b
	return b
}
}

func main() {
f := fib()
// Function calls are evaluated left-to-right.
println(f(), f(), f(), f(), f())
}

er en Fibonacci løsning i Googles relativt nye Go språk: http://golang.org/ lansert som språket der

 

Pythom meets C++

 

Guido van Rossum http://www.python.org/~guido/ som lagde Python jobber nå for Google.

Endret av Slettet+9871234
Lenke til kommentar
Gjest Slettet+9871234

Denne tråden skal handle om PHP

Det skulle du muligens nevnt tidligere i denne tråden. PHP er jo mitt favoritt skripting språk for web applikasjoner, ikke minst fordi:

  1. PHP 6 nærmer seg et fullgodt OO språk med navnerom, utf-8 støtte samt ORM muligheter etc. Intet språk er så tett integrert med (X)HT(ML) som PHP.
  2. En rekke "frameworks" som det lite kjente Ulysses og en rekke andre http://www.phpframeworks.com/ med ORM støtte.
  3. Kjent grensesnitt for de som bruker C++Builder og Delphi (Object Pascal):
    http://www.embarcadero.com/images/dm/technical-papers/delphi-php-in-action-technote-qadram-software.pdf

Men det var nok også utenomsnakk :blush: . Skal :no: nevne C++ / Python og php utenomsnakk mer i denne tråden. Kos dere med oppgaven og vær konsekvent med tråd modereringen :hmm: .

Lenke til kommentar
Gjest Slettet+9871234

Nevnt tidligere? Tittelen på tråden er phpGolf, jo. Hvordan kan det missforstås?

Enig i det. Går du tilbake i tråden, så burde det vært slått ned på utenomsnakk straks det oppstod.

 

Tilbake til emnet :roll:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...