παπι Δημοσ. 19 Σεπτεμβρίου 2015 Δημοσ. 19 Σεπτεμβρίου 2015 Αυτο πρεπει να τρεχει 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); 4
gon1332 Δημοσ. 19 Σεπτεμβρίου 2015 Δημοσ. 19 Σεπτεμβρίου 2015 Ω δεν το πρόσεξα καλά, δεν το βγάζει σε μια λέξη. Αυτό έγινε λόγω του "%d"; Καμμία σχέση. Νόμιζα αυτό το είχες καταλάβει από την πρώτη λύση που σου έδωσα. Εδώ έχει σχέση το if-elseif-else. Αν γράψεις κάτι τέτοιο: if (A) {} else if ( {} else if (C) {} . . . else {Z} τότε ελέγχονται οι συνθήκες από πάνω προς τα κάτω. Αν ισχύει κάποια, τότε δεν εξετάζονται οι επόμενες. Αν όμως είχες κάτι τέτοιο: if (A) {} if ( {} if (C) {} . . . Εδώ πάλι γίνονται οι έλεγχοι με τη σειρά, αλλά αν απότύχει κάποιος, πχ ο Α, τότε θα εξεταστούν και τα υπόλοιπα. Σε αυτό βασίστηκα για τη λύση που σου έδωσα κι έτσι γλύτωσα μία περίπτωση ("FizzBuzz") σα μία λέξη. Άσχετο, εφόσον είσαι σε Javascript, μη χρησιμοποιείς το %d. Βάλε κατευθείαν το i. 1
Dinos_12345 Δημοσ. 19 Σεπτεμβρίου 2015 Μέλος Δημοσ. 19 Σεπτεμβρίου 2015 Σόρρυ, δεν το κατάλαβα αμέσως, σκέφτηκα όπως στο 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, αλλά αν μπορείς να μου πεις γιατί τρέχει πιο γρήγορα, δεκτό
παπι Δημοσ. 19 Σεπτεμβρίου 2015 Δημοσ. 19 Σεπτεμβρίου 2015 τα 21 array.push ειναι παααααααααααααααρα πολυ πιο γρηγορα απο 1 console.log. 1
gon1332 Δημοσ. 19 Σεπτεμβρίου 2015 Δημοσ. 19 Σεπτεμβρίου 2015 Σόρρυ, δεν το κατάλαβα αμέσως, σκέφτηκα όπως στο if, που αν μπεί στο ένα, δεν μπαίνει στο άλλο κλπ. Εδώ μπαίνει και στα 3 άρα, κομπλέ. Μα σε τί ωφελεί να χτίσεις μια array για κάτι τέτοιο; Τους ελέγχους που κάνω και εγώ για να logάρω στην κονσόλα τους κάνεις και εσύ για να βάλεις δεδομένα στην array, και στο καπάκι κάνεις log όλη την array. Μου φαίνεται too much, αλλά αν μπορείς να μου πεις γιατί τρέχει πιο γρήγορα, δεκτό :) Η κλήση της log επιφέρει πολύ μεγαλύτερο κόστος από αυτό μιας εισαγωγής σε array καθώς γίνονται πιο πολύπλοκες διαδικάσίες για να εμφανιστεί το μήνυμα στην οθόνη, απ'ότι να βάλεις ένα στοιχείο σε ένα απλό array. Μετά την εκτύπωση την καλείς μόνο μία φορά στο τέλος. @papi έχω line buffering stdio, οπότε κάνει τη δουλεία με τα arrays αυτό για μένα . 2
Dinos_12345 Δημοσ. 19 Σεπτεμβρίου 2015 Μέλος Δημοσ. 19 Σεπτεμβρίου 2015 That's cheating Ακόμα είμαι beginner, θα τα μάθω στο πανεπιστήμιο και αυτά. Καλή φάση.
παπι Δημοσ. 19 Σεπτεμβρίου 2015 Δημοσ. 19 Σεπτεμβρίου 2015 Κοιτα να γαραφεις οσο το πιο απλο κωδικα μπορεις. 1
Dinos_12345 Δημοσ. 20 Σεπτεμβρίου 2015 Μέλος Δημοσ. 20 Σεπτεμβρίου 2015 Κοιτα να γαραφεις οσο το πιο απλο κωδικα μπορεις.Νόμιζα ότι ήταν ήδη πολύ απλό, δεν ήξερα ότι μπορεί να γίνει τόσο απλούστερο. Ευχαριστώ για τις απαντήσεις, πολύ ωραίοι και οι τρόποι σας
Papakaliati Δημοσ. 20 Σεπτεμβρίου 2015 Δημοσ. 20 Σεπτεμβρίου 2015 Δεν συμφωνώ με το !(i % 3) && printf("Fizz"); Θεωρώ δεν σου προσφέρει τίποτα σε σχέση με το if (i % 3) printf("Fizz"); Απλά ένα κολπάκι σε εισαγωγικά που χωρίς να κάνει τον κώδικα πιο σύντομο τον κάνει δυσαναγνωστο. 3
Giorgos65ert Δημοσ. 20 Σεπτεμβρίου 2015 Δημοσ. 20 Σεπτεμβρίου 2015 Δεν συμφωνώ με το !(i % 3) && printf("Fizz"); Θεωρώ δεν σου προσφέρει τίποτα σε σχέση με το if (i % 3) printf("Fizz"); Απλά ένα κολπάκι σε εισαγωγικά που χωρίς να κάνει τον κώδικα πιο σύντομο τον κάνει δυσαναγνωστο. σωστό αυτό που λες άλλα κάνεις δεν είπε το αντίθετο.
migf1 Δημοσ. 20 Σεπτεμβρίου 2015 Δημοσ. 20 Σεπτεμβρίου 2015 :) Η κλήση της 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 ); }
Giorgos65ert Δημοσ. 20 Σεπτεμβρίου 2015 Δημοσ. 20 Σεπτεμβρίου 2015 μπορείς σε 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 ερχεται. 1
gon1332 Δημοσ. 20 Σεπτεμβρίου 2015 Δημοσ. 20 Σεπτεμβρίου 2015 Δεν συμφωνώ με το !(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. 1
groot Δημοσ. 20 Σεπτεμβρίου 2015 Δημοσ. 20 Σεπτεμβρίου 2015 Εφόσον είναι σε js τότε θα πρότεινα το Stream αντί for loop και την map για τον έλεγχο.
ntellos Δημοσ. 21 Σεπτεμβρίου 2015 Δημοσ. 21 Σεπτεμβρίου 2015 Ρε παδια τι του λετε του παιδιου. Το παιδι ρωτησε πως θα κανει optimize τον κωδικα του. Το optimize εμπεριεχει το performance optimization, αλλα δεν ταυτιζονται σε καμια περιπτωση. Ειδικοτερα για αρχαεριους καλυτερα να τους δειξουμε πως να γραφουν κωδικα σκεπτομενοι την επεκτασιμοτητα του, παρα να τους μαθουμε ποιο ειναι πιο γρηγορο, το console log η το array push. Για παραδειγμα παλικαρε δοκιμασε να κανεις παραμετρικο το ευρος των αριθμων που θα τρεξει ο αλγοριθμος
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα