individuelle Zahl x mal erneut um 1 erhöhen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
DasIch
User
Beiträge: 2404
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Samstag 30. August 2008, 15:24

Vergiss dass es input gibt, list ist ein Built-in dass du nicht überschreiben willst/solltest.
Statt range nimm doch gleich xrange welches einen Iterator zurückliefert, dass ist schneller und solange du die Liste nicht brauchst imho die bessere Lösung.

Desweiteren ist `a` und Zeile 8 völlig überflüssig.

EDIT: Mist zu spät :shock:
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 30. August 2008, 15:40

Ach mist, da habe ich wieder die offensichtliche Lösung vergessen:

Code: Alles auswählen

(lambda f, b, x: f(f,b,x))(lambda f, b, x: x and b+x+f(f, b, x-1)-1, int(raw_input("base:")), int(raw_input("x:")))
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Samstag 30. August 2008, 15:51

Und noch eine.. ;)

Code: Alles auswählen

a = int(raw_input())
b = int(raw_input())
c = b-1
print a*b+ (c+1)*(c/2)+(c%2*((c/2)+1))
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Beitragvon yipyip » Samstag 30. August 2008, 18:10

Hab' auch noch einen...

Code: Alles auswählen

def adder(a, i, acc=()):

  if i >= 0:
    return adder(a, i-1, acc=((a, i),) + acc)
  else:
    return acc

a = int(raw_input('a? '))
i = int(raw_input('i? '))
print sum(a + i for a, i in adder(a, i-1))

:wink:
yipyip
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Samstag 30. August 2008, 22:06

Warum benutzt eigentlich niemand einen Generator?

Code: Alles auswählen

def calc(x, y):
    while y:
        y -= 1
        yield x + y

x = int(raw_input('x := '))
y = int(raw_input('y := '))

print sum(calc(x, y))
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Sonntag 31. August 2008, 09:14

in meiner Lösung tu ich das. Ich benutz auch wirklich nur Generatoren :o
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Sonntag 31. August 2008, 09:33

Ja ist klar yipyip tut das ja auch, ist aber noch lange kein Grund yield zu verschmähen.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Sonntag 31. August 2008, 09:43

Man kann das Problem natürlich auch geometrisch auffassen:

Code: Alles auswählen

a = int(raw_input("Vorhanden: "))
n = int(raw_input("Benoetigt: "))

print n*(2*a+n-1)/2
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Sonntag 31. August 2008, 11:38

Darii hat geschrieben:Ja ist klar yipyip tut das ja auch, ist aber noch lange kein Grund yield zu verschmähen.

Du baust allerdings nur xrange nach :o

@Ey:
Endlich mal ein ordentlicher Ansatz ;)
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Beitragvon name » Sonntag 31. August 2008, 11:47

Hier hätten wir mal die Lösung in Haskell. Wobei 150 die Zahl ist und 5 die Wiederholungen.

Code: Alles auswählen

sum (take 5 [150..])

Bzw als Funktion:

Code: Alles auswählen

foo x y = sum (take x [y..])


In Python hätt ichs so gemacht:

Code: Alles auswählen

x, y = (150, 5)
sum(xrange(x, x+y))
Zuletzt geändert von name am Sonntag 31. August 2008, 12:30, insgesamt 2-mal geändert.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
BlackJack

Beitragvon BlackJack » Sonntag 31. August 2008, 12:16

In Io:

Code: Alles auswählen

foo := method(x, y, x to(x + y - 1) asList sum)
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Beitragvon yipyip » Sonntag 31. August 2008, 15:26

In Prolog:

Code: Alles auswählen

adder_acc(A, 0, 0).
adder_acc(A, N, A+M+REST) :-
    N > 0,
    M is N-1,
    adder_acc(A, M, REST).

adder(A, N, RESULT) :-
    adder_acc(A, N, M),
    RESULT is M.

:wink:
yipyip
BlackJack

Beitragvon BlackJack » Sonntag 31. August 2008, 16:28

Da füge ich mal noch Scheme hinzu:

Code: Alles auswählen

(define (foo a b) (if (= b 0) 0 (+ a (foo (+ a 1) (- b 1)))))


Edit: Assembler (NASM-Format):

Code: Alles auswählen

; extern unsigned int foo(unsigned int a, int b);
global   foo
foo:
   mov   eax, [esp+4]
   shl   eax, 1
   dec   eax
   mov   ebx, [esp+8]
   add   eax, ebx
   mul   ebx
   shr   eax, 1
.return:
   ret


Edit2: Assemblerquelltext durch Variante ohne Schleife ersetzt.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot]