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

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

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:

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))
[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

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

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

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

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

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

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:

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

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

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

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