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: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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:

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))
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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

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

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

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

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

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:

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

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

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

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.
Antworten