Δημοσιεύτηκε: 06 Αύγ 2011, 23:24
από migf1
pmav99 έγραψε:Δουλεύουν.

Το πρώτο είναι περίπου ισοδύναμο (αλλά πιο γρήγορο) με αυτό:
Κώδικας: Επιλογή όλων
tot = 0
for i, name in enumerate(sorted(names)):
for char in name:
tot += (i + 1) * (1 + ord(char) - ord("A"))

print tot

To '1 - ord("Α")' είναι σταθερή ποσότητα (=64) οπότε δε χρειάζεται να υπολογίζεται μέσα στο loop αλλά το άφησα για να είναι πιο κοντά στο πρωτότυπο.

:)
Αν η python μπορεί να βγάλει ανεξάρτητα εκτελέσιμα αρχεία, απλά από περιέργεια θα μπορούσες να κάνεις time -p τα παραπάνω με το εκτελέσιμο του κώδικα C που έχω δώσει στο ideone.com? Κατά προτίμηση εκείνου με τις λιγότερες συναρτήσεις.

Για να τα κάνεις compile, κι αν υποθέσουμε πως έχεις σώσει τον κώδικα ως "euler22.c", γράψε στο τερματικό σου:
Κώδικας: Επιλογή όλων
gcc -O3 euler22.c -o euler22

και μετά:
Κώδικας: Επιλογή όλων
time -p euler22
(τρέξτο 5-6 φορές για να υπολογίσεις χοντρικά με το μάτι τον μέσο όρο του: real time)

Προφανώς θα πρέπει να κάνεις το ίδιο και για το εκτελέσιμο της python.

Είμαι πολύ περίεργος να δω αν και πόση διαφορά υπάρχει σε ταχύτητα εκτέλεσης.