Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Αυτο πρεπει να τρεχει 21 φορες πιο γρηγορα

var arr = [];
for (var i=1;i<21;i++){
    if (i % 3 === 0){
        if (i % 5 === 0){
            arr.push ("FizzBuzz");
        }
        else{
            arr.push ("Fizz");
        }
    }
    else if (i % 5 === 0){
       arr.push("Buzz")
    }
    else{
        arr.push (i);
    }
}
console.log(arr);
  • Like 4
  • Απαντ. 33
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Δημοσ.

Ω δεν το πρόσεξα καλά, δεν το βγάζει σε μια λέξη. ;)

Αυτό έγινε λόγω του "%d";

Καμμία σχέση. Νόμιζα αυτό το είχες καταλάβει από την πρώτη λύση που σου έδωσα.

 

Εδώ έχει σχέση το if-elseif-else.

 

Αν γράψεις κάτι τέτοιο:

if (A) {}
else if ( {}
else if (C) {}
.
.
.
else {Z}

τότε ελέγχονται οι συνθήκες από πάνω προς τα κάτω. Αν ισχύει κάποια, τότε δεν εξετάζονται οι επόμενες.

 

Αν όμως είχες κάτι τέτοιο:

if (A) {}

if ( {}

if (C) {}

.
.
.

Εδώ πάλι γίνονται οι έλεγχοι με τη σειρά, αλλά αν απότύχει κάποιος, πχ ο Α, τότε θα εξεταστούν και τα υπόλοιπα. Σε αυτό βασίστηκα για τη λύση που σου έδωσα κι έτσι γλύτωσα μία περίπτωση ("FizzBuzz") σα μία λέξη.

 

Άσχετο, εφόσον είσαι σε Javascript, μη χρησιμοποιείς το %d. Βάλε κατευθείαν το i.

  • Like 1
Δημοσ.

Σόρρυ, δεν το κατάλαβα αμέσως, σκέφτηκα όπως στο if, που αν μπεί στο ένα, δεν μπαίνει στο άλλο κλπ. Εδώ μπαίνει και στα 3 άρα, κομπλέ. :)


 

Αυτο πρεπει να τρεχει 21 φορες πιο γρηγορα

var arr = [];
for (var i=1;i<21;i++){
    if (i % 3 === 0){
        if (i % 5 === 0){
            arr.push ("FizzBuzz");
        }
        else{
            arr.push ("Fizz");
        }
    }
    else if (i % 5 === 0){
       arr.push("Buzz")
    }
    else{
        arr.push (i);
    }
}
console.log(arr);

Μα σε τί ωφελεί να χτίσεις μια array για κάτι τέτοιο; Τους ελέγχους που κάνω και εγώ για να logάρω στην κονσόλα τους κάνεις και εσύ για να βάλεις δεδομένα στην array, και στο καπάκι κάνεις log όλη την array. Μου φαίνεται too much, αλλά αν μπορείς να μου πεις γιατί τρέχει πιο γρήγορα, δεκτό :)

Δημοσ.

Σόρρυ, δεν το κατάλαβα αμέσως, σκέφτηκα όπως στο if, που αν μπεί στο ένα, δεν μπαίνει στο άλλο κλπ. Εδώ μπαίνει και στα 3 άρα, κομπλέ. :)

Μα σε τί ωφελεί να χτίσεις μια array για κάτι τέτοιο; Τους ελέγχους που κάνω και εγώ για να logάρω στην κονσόλα τους κάνεις και εσύ για να βάλεις δεδομένα στην array, και στο καπάκι κάνεις log όλη την array. Μου φαίνεται too much, αλλά αν μπορείς να μου πεις γιατί τρέχει πιο γρήγορα, δεκτό :)

:) :)

Η κλήση της log επιφέρει πολύ μεγαλύτερο κόστος από αυτό μιας εισαγωγής σε array καθώς γίνονται πιο πολύπλοκες διαδικάσίες για να εμφανιστεί το μήνυμα στην οθόνη, απ'ότι να βάλεις ένα στοιχείο σε ένα απλό array. Μετά την εκτύπωση την καλείς μόνο μία φορά στο τέλος.

 

@papi έχω line buffering stdio, οπότε κάνει τη δουλεία με τα arrays αυτό για μένα :P.

  • Like 2
Δημοσ.

Κοιτα να γαραφεις οσο το πιο απλο κωδικα μπορεις.

Νόμιζα ότι ήταν ήδη πολύ απλό, δεν ήξερα ότι μπορεί να γίνει τόσο απλούστερο.

 

Ευχαριστώ για τις απαντήσεις, πολύ ωραίοι και οι τρόποι σας

Δημοσ.

Δεν συμφωνώ με το

 

!(i % 3) && printf("Fizz");

 

Θεωρώ δεν σου προσφέρει τίποτα σε σχέση με το

 

if (i % 3) printf("Fizz");

 

Απλά ένα κολπάκι σε εισαγωγικά που χωρίς να κάνει τον κώδικα πιο σύντομο τον κάνει δυσαναγνωστο.

  • Like 3
Δημοσ.

Δεν συμφωνώ με το

 

!(i % 3) && printf("Fizz");

 

Θεωρώ δεν σου προσφέρει τίποτα σε σχέση με το

 

if (i % 3) printf("Fizz");

 

Απλά ένα κολπάκι σε εισαγωγικά που χωρίς να κάνει τον κώδικα πιο σύντομο τον κάνει δυσαναγνωστο.

 

σωστό αυτό που λες άλλα κάνεις δεν είπε το αντίθετο.

Δημοσ.

:) :)

Η κλήση της log επιφέρει πολύ μεγαλύτερο κόστος από αυτό μιας εισαγωγής σε array καθώς γίνονται πιο πολύπλοκες διαδικάσίες για να εμφανιστεί το μήνυμα στην οθόνη, απ'ότι να βάλεις ένα στοιχείο σε ένα απλό array. Μετά την εκτύπωση την καλείς μόνο μία φορά στο τέλος.

...

 

Δεν είμαι τόσο σίγουρος ότι τα 20 logs έχουν τόσο δραματικό overhead έναντι του log 20 στοιχείων του array + 20 push.

 

Όπως και να 'χει, αν το readability είναι πιο σημαντικό από την ταχύτητα, δοκίμασε κι αυτό (είναι σε C):

 

	for (int i=1; i < 21; i++) {
		bool by3 = 0 == i % 3;
		bool by5 = 0 == i % 5;
		if ( by3 && by5 )
			puts( "FizzBuzz" );
		else if ( by5 )
			puts("Buzz");
		else if ( by3 )
			puts("Fizz");
		else printf( "%d\n", i );
	}

Δημοσ.

μπορείς σε javascript να τα εκτυπώνεις με την document.write είναι πολύ πιο γρήγορη από την console.log:

var arr = [];
for(var i=1; i<=20; i++)
{
if(!(i % 3)) arr.push("Fizz");
else if(!(i % 5)) arr.push("Buzz");
else if(!(i % 15)) arr.push("FizzBuzz");
else if((i % 3) && (i % 5)) arr.push(i);
}
document.write(arr);

περίπου στα 9-20ms φορτώνει ενώ με con.log περίπου στα 19-30+ ms.

τώρα ανάλογος τον browser, σε μένα που το έτρεξα σε chromium στα 9-20ms ερχεται.

  • Like 1
Δημοσ.

Δεν συμφωνώ με το

 

!(i % 3) && printf("Fizz");

 

Θεωρώ δεν σου προσφέρει τίποτα σε σχέση με το

 

if (i % 3) printf("Fizz");

 

Απλά ένα κολπάκι σε εισαγωγικά που χωρίς να κάνει τον κώδικα πιο σύντομο τον κάνει δυσαναγνωστο.

To πιο σωστό είναι έτσι:

for (i = 1; i <= 20; i++) {
    (!(i % 3) && printf("Fizz"),
     !(i % 5) && printf("Buzz"))
    ||(i % 5) && (i % 3) && printf("%d", i);
}

JK. :P

  • Like 1
Δημοσ.

Ρε παδια τι του λετε του παιδιου. Το παιδι ρωτησε πως θα κανει optimize τον κωδικα του. Το optimize εμπεριεχει το performance optimization, αλλα δεν ταυτιζονται σε καμια περιπτωση. Ειδικοτερα για αρχαεριους καλυτερα να τους δειξουμε πως να γραφουν κωδικα σκεπτομενοι την επεκτασιμοτητα του, παρα να τους μαθουμε ποιο ειναι πιο γρηγορο, το console log η το array push. Για παραδειγμα παλικαρε δοκιμασε να κανεις παραμετρικο το ευρος των αριθμων που θα τρεξει ο αλγοριθμος

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...