Σελίδα 1 από 5

φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 19 Ιούλ 2018, 16:26
από Χουργιατς


Λοιπόν μιας και ο Σπύρος άνοιξε τον ασκό του άμαζον, ας δούμε παράλληλα και ένα προβληματάκι της γκουγκλ.
Να γραφεί κώδικας σε οποιαδήποτε γλώσσα (*) o οποίος θα τυπώνει τους ακεραίους από το 1 εώς το 10^7 σε διαδοχικές γραμμές, ώστε να εμφανίζεται φιζζ στα πολλαπλάσια του 659, μπαζζ στα πολλαπλάσια του 947, και φιζζμπαζ στα πολλαπλάσια του 624073.




(* μια γνωστή μου έχει αγαπημένη γλώσσα προγραμματισμού την html)
(*Λύσεις σε σισαρπ δε λαμβάνονται υπόψιν. ούστ)

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 19:51
από shrike
Χουργιατς έγραψε:
19 Ιούλ 2018, 16:26
Λοιπόν μιας και ο Σπύρος άνοιξε τον ασκό του άμαζον, ας δούμε παράλληλα και ένα προβληματάκι της γκουγκλ.
Να γραφεί κώδικας σε οποιαδήποτε γλώσσα (*) o οποίος θα τυπώνει τους ακεραίους από το 1 εώς το 10^7 σε διαδοχικές γραμμές, ώστε να εμφανίζεται φιζζ στα πολλαπλάσια του 659, μπαζζ στα πολλαπλάσια του 947, και φιζζμπαζ στα πολλαπλάσια του 624073.
Το εννοείς ή κάνεις πλάκα; Να ξέρω πώς να απαντήσω... :lol:

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:15
από Nameless Ghoul
Αν ξέρεις τι είδους παιχνίδι είναι το fizz buzz, είναι σχετικά απλή άσκηση.

* Είναι κάτι ανάλογο με το δικό μας εφτά-μπουμ.

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:19
από Nameless Ghoul
Για να τους εντυπωσιάσεις, πρέπει να ψυλλιαστείς ότι 659 x 947 = 624073. Δηλαδή στον αλγόριθμο σου να τσεκάρεις μονο δύο υπόλοιπα αντί για τρία.

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:24
από shrike
Nameless Ghoul έγραψε:
20 Ιούλ 2018, 20:15
Αν ξέρεις τι είδους παιχνίδι είναι το fizz buzz, είναι σχετικά απλή άσκηση.

* Είναι κάτι ανάλογο με το δικό μας εφτά-μπουμ.
Δεν είχα ιδέα τι είναι το fizz buzz, τώρα που το ανέφερες το έψαξα λίγο.
Στο μεταξύ, είχα γράψει λίγες γραμμές κώδικα και νόμιζα ότι το έκανα. Ακόμα το νομίζω, δηλαδή... απλά με το ψάξιμο διάβασα στα αρπαχτά ότι θεωρείται δύσκολο κλπ. Τι να πω; Εγώ σκέφτηκα ότι απλά θα πρέπει ο πρώτος έλεγχος να αφορά τον μεγάλο αριθμό (που είναι το ΕΚΠ των δύο πρώτων) και στη συνέχεια να ελέγχονται οι άλλοι δύο για να δουλέψει. Να υποθέσω ότι κάτι κάπου χάνω κι ότι πρέπει να το ψάξω παραπάνω; :102:

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:26
από shrike
Nameless Ghoul έγραψε:
20 Ιούλ 2018, 20:19
Για να τους εντυπωσιάσεις, πρέπει να ψυλλιαστείς ότι 659 x 947 = 624073. Δηλαδή στον αλγόριθμο σου να τσεκάρεις μονο δύο υπόλοιπα αντί για τρία.
Σου είπα στο μεταξύ, ότι όχι απλά το ψυλλιάστηκα, είδα ότι είναι και το ΕΚΠ τους. :wink

Αλλά πρέπει να τσεκάρεις και το 624073, έτσι δεν είναι; Άρα, τρία conditions.

Edit: πχ κάτι τέτοιο δεν στέκει;

Κώδικας: Επιλογή όλων

For r = 1 To 10 ^ 7
    If r Mod 624073 = 0 Then
        Print r & " φιζζμπαζ"
    ElseIf r Mod 947 = 0 Then
        Print r & " μπαζζ"
    ElseIf r Mod 659 = 0 Then
        Print r & " φιζζ"
    Else: Print r
    End If
Next

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:33
από Nameless Ghoul
Να σε βοηθήσω λίγο ακόμα: Τρία conditions, αλλά δύο υπόλοιπα. Αν δουν ότι υπολογίζεις το υπόλοιπο της διαίρεσης με 624073, κόπηκες.

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:43
από shrike
Nameless Ghoul έγραψε:
20 Ιούλ 2018, 20:33
Να σε βοηθήσω λίγο ακόμα: Τρία conditions, αλλά δύο υπόλοιπα. Αν δουν ότι υπολογίζεις το υπόλοιπο της διαίρεσης με 624073, κόπηκες.
Σόρυ, αλλά μάλλον δεν έχω καταλάβει ποιο είναι το ζητούμενο...

Δηλαδή, το παραπάνω που έγραψα θεωρείται λάθος, αλλά θα έστεκε κάτι τέτοιο;

Κώδικας: Επιλογή όλων

For r = 1 To 10 ^ 7
    If r Mod 947 = 0 Then
        If r Mod 659 = 0 Then
            Print r & " φιζζμπαζ"
        Else: Print r & " μπαζζ"        
        Endif
    ElseIf r Mod 659 = 0 Then
        Print r & " φιζζ"
    Else: Print r
    End If
Next
Ή είμαι πολύ μακριά και δεν έχω καταλάβει Χριστό;... :lol:

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:47
από Nameless Ghoul
Είσαι πάρα πολύ κοντά.

Η λύση που προτείνεις βγάζει σωστό αποτέλεσμα μεν, αλλά το mod είναι σχετικά ακριβός υπολογισμός. Μια λύση με 2 mod αντί για 3 ρίχνει το χρόνο εκτέλεσης στο 66%.

Hint: αποθήκευσε κάπου το αποτέλεσμα των mod. Η τελευταία λύση είναι πιο καλή αλλά υπάρχει μια πιο καθαρή, χωρίς nested if.

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 20:51
από shrike
Nameless Ghoul έγραψε:
20 Ιούλ 2018, 20:47
Είσαι πάρα πολύ κοντά.

Η λύση που προτείνεις βγάζει σωστό αποτέλεσμα μεν, αλλά το mod είναι σχετικά ακριβός υπολογισμός. Μια λύση με 2 mod αντί για 3 ρίχνει το χρόνο εκτέλεσης στο 66%.

Hint: αποθήκευσε κάπου το αποτέλεσμα των mod. Η τελευταία λύση είναι πιο καλή αλλά υπάρχει μια πιο καθαρή, χωρίς nested if.
Μα, δεν είναι 3. Είναι το πολύ 2 τα Mod. Σε καμμιά περίπτωση δεν χρησιμοποιούνται και τα 3, έτσι όπως το έγραψα.

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 22:55
από Nameless Ghoul
Ναι, γι'αυτό λέμε είναι καλύτερη. Αλλά υπάρχει μία ακόμη εκδοχή, πιο "καθαρή", που πιθανόν να υποτιμηθεί σε ανταγωνιστικές συνθήκες π.χ. συνεντεύξεις.

Χιντ: χωρίς else.

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 23:06
από nick
for(1 .. 10000000)
if(i mod 947==0) 'fizz'
if(i mod 659==0) 'buzz'

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 23:15
από ST48410
Εγώ που δεν ξέρω από προγραμματισμό μπορώ να παίξω;

θα έκανα πρώτα την διαίρεση του αριθμού με 624073

Αν το υπόλοιπο είναι μηδέν τότε φιζζμπαζ
Αν το υπόλοιπο είναι 659 τότε φιζζ
Αν το υπόλοιπο είναι 947 τότε μπαζ

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 23:21
από Nameless Ghoul
Όχι ακριβώς.

Σκέψου το έτσι:

Μεταξύ του 1 και του 624073, πόσοι είναι φιζζμπαζ;

(Πλησιασες λίγο όμως)

Re: φιζζ - μπαζζ (Google Interview test)

Δημοσιεύτηκε: 20 Ιούλ 2018, 23:21
από nick
Δεν διαιρείται μονο το 624073k+659 με το 659 αλλα και το 624073k+2*659, 624073k+3*659...