Code: Alles auswählen
sum(set(range(0,666,3)+range(0,666,5)))
Code: Alles auswählen
sum(set(range(0,666,3)+range(0,666,5)))
Hey, das war meins.numerix hat geschrieben:2 Bytes länger, aber auch ganz nett:Code: Alles auswählen
sum(set(range(0,666,3)+range(0,666,5)))
Code: Alles auswählen
sum(filter(lambda x: x%3*x%5==0,range(666)))
sum(i for i in range(666) if 0 in [i%3,i%5])
sum(set(range(0,666,3)+range(0,666,5)))
r=range;sum(set(r(0,666,3)+r(0,666,5)))
Code: Alles auswählen
sum(n for d in [3,5] for n in xrange(1,666) if n%d==0)
Vor allem, da das Ergebnis nicht stimmt. Zahlen die ohne Rest durch 15 geteilt werden können werden zweimal addiert.frabron hat geschrieben:Nicht ganz so schön:Code: Alles auswählen
sum(n for d in [3,5] for n in xrange(1,666) if n%d==0)
Code: Alles auswählen
sum(x for x in range(667)if not(x%5and x%3))
Code: Alles auswählen
sum(set(range(0,666,3)+range(0,666,5)))
Code: Alles auswählen
# 36 Zeichen
r=range(666);sum(set(r[::3]+r[::5]))
# 43 Zeichen
lambda r=range(666):sum(set(r[::3]+r[::5]))
Code: Alles auswählen
"o"6*> v
v\%3::<-1<
>5%*#v_:0v
vg00 +p0<
>: #v_$.@
Code: Alles auswählen
...0 in (x%3,x%5)...
Code: Alles auswählen
# 39 Zeichen
sum(i for i in range(666) if i%3*i%5<1)
# 44 Zeichen
r=range;sum(set(r(0,666,3))|set(r(0,666,5)))
# 47 Zeichen, bzw. 28 ohne den Import
import numpy;a=numpy.r_[:666];sum(a[a%3*a%5<1])
Code: Alles auswählen
print sum(i*(not i%3*i%5)for i in range(666))
Code: Alles auswählen
10 REM -----------------------------
20 REM PROJECT EULER (PROJECTEULER.NET)
30 REM
40 REM PROBLEM 1: FIND THE SUM OF ALL
50 REM THE MULTIPLES OF 3 OR 5 BELOW
60 REM 1000.
70 REM
80 REM -----------------------------
90 REM SETUP SOME VALUES FOR (ALMOST)
100 REM ALL THREE ALGORITHMS.
110 A=3:B=5:C=999:AB=A*B
120 REM -----------------------------
130 REM ASK USER WHICH ALGORITHM TO
140 REM USE, AND CALL AND TIME THE
150 REM CHOSEN ALGORITHM.
160 REM
170 POKE 53280,14:POKE 53281,14
180 PRINT "{BLU}{CLR}{RVS ON}PROJECT EULER - PROBLEM 1{RVS OFF}{DOWN}"
190 PRINT "FIND THE SUM OF ALL THE MULTIPLES OF 3"
200 PRINT "OR 5 BELOW 1000.{DOWN}"
210 PRINT "{LGRN}1{BLU}) NAIVE"
220 PRINT "{LGRN}2{BLU}) BETTER"
230 PRINT "{LGRN}3{BLU}) CLOSED FORMULA"
240 INPUT "{DOWN}CHOOSE ALGORITHM ({LGRN}1{BLU}-{LGRN}3{BLU})";I
250 PRINT "{DOWN}CALCULATING...{UP}"
260 REM N IS SET TO 0 BEFORE THE CALL AND
270 REM THE SUBROUTINE MUST RETURN THE
280 REM RESULT IN N.
290 TI$="000000":N=0:ON I GOSUB 380,490,630
300 PRINT "RESULT ={LGRN}";N;"{BLU}(";RIGHT$(TI$,2);" SECONDS)":END
310 REM -----------------------------
320 REM THE NAIVE SOLUTION. TESTS
330 REM EVERY NUMBER FROM 1 TO C IF
340 REM IT IS DIVISABLE BY A OR B AND
350 REM SUMS THEM UP. TAKES ABOUT
360 REM 21 SECONDS.
370 REM
380 FOR I=1 TO C:IF INT(I/A)*A=I OR INT(I/B)*B=I THEN N=N+I
390 NEXT:RETURN
400 REM -----------------------------
410 REM BETTER ALGORITHM, BUT RUNTIME
420 REM STILL DEPENDS ON THE VALUE OF
430 REM C. SUMS UP ALL MULTIPLES OF A
440 REM AND B AND THEN SUBRACTS ALL
450 REM THE NUMBERS THAT ARE DIVISABLE
460 REM BY A *AND* B. TAKES ABOUT
470 REM 2 SECONDS.
480 REM
490 FOR I=0 TO C STEP A:N=N+I:NEXT
500 FOR I=0 TO C STEP B:N=N+I:NEXT
510 FOR I=0 TO C STEP AB:N=N-I:NEXT
520 RETURN
530 REM -----------------------------
540 REM SAME IDEA AS LAST SOLUTION BUT
550 REM INSTEAD OF LOOPING THROUGH THE
560 REM MULTIPLES IT USES GAUSS' CLOSED
570 REM FORMULA TO CALCULATE THE SUMS.
580 REM TAKES LESS THAN A SECOND.
590 REM
600 REM G(X)=X*(FLOOR(C/X)**2+FLOOR(C/X))
610 REM F=(G(A)+G(B)-G(A*B))/2
620 REM
630 T=INT(C/A):D=A*(T*T+T)
640 T=INT(C/B):E=B*(T*T+T)
650 T=INT(C/AB):F=AB*(T*T+T)
660 N=(D+E-F)/2:RETURN
Das mag ich nicht glauben. Wer die Eignung eines Bewerbers, der seine Python-Fähigkeiten unter Beweis stellen soll, mit einer solchen Aufgabe meint ermitteln zu können, dem traue ich eine solche Spitzfindigkeit nicht zu.BlackJack hat geschrieben:Ich hatte mich übrigens mit dem nennen des Ergebnisses aus genau dem Grund zurückgehalten: die 666 ist ja so gewählt, dass es einen Unterschied macht ob man die noch mit zählt oder nicht. Ich vermutete da Absicht dahinter um zu sehen wie Aufmerksam der Aufgabentext gelesen wird.
Code: Alles auswählen
sum(num for num in range(666) if any(not num % x for x in [3, 5]))