φιζζ - μπαζζ (Google Interview test)
Re: φιζζ - μπαζζ (Google Interview test)
Δεύτερη απόπειρα. Δεν ξέρω αν προγραμματιστικά είναι ανοησία.
1. Διαιρώ με 659. Αν 0 γράφω φιζζ. Αν όχι 0 γράφω κενό και πάω στο 2
2. Διαιρώ το ίδιο νούμερο με 647. Αν 0 γράφω μπαζ δίπλα σε αυτό που έγραψα στο 1. Αν όχι 0 πάω στο επόμενο νούμερο
1. Διαιρώ με 659. Αν 0 γράφω φιζζ. Αν όχι 0 γράφω κενό και πάω στο 2
2. Διαιρώ το ίδιο νούμερο με 647. Αν 0 γράφω μπαζ δίπλα σε αυτό που έγραψα στο 1. Αν όχι 0 πάω στο επόμενο νούμερο
Re: φιζζ - μπαζζ (Google Interview test)
Πλησιασες πολύ. Μόνο μια λεπτομέρεια σου ξέφυγε.
-
- Διαχειριστής
- Δημοσιεύσεις: 11591
- Εγγραφή: 13 Μαρ 2018, 19:22
- Phorum.gr user: Spiros252
- Τοποθεσία: Αθήνα
Re: φιζζ - μπαζζ (Google Interview test)
Κώδικας: Επιλογή όλων
<?php
$lim = pow(10,7);
for ($n = 1; $r1 <= $lim; $n++) {
$r1 = $n * 659;
$r2 = $n * 947;
$r3 = $n * (659 * 947);
if ($r1 <= $lim) { $array['1'."$n"] = $r1; }
if ($r2 <= $lim) { $array['2'."$n"] = $r2; }
if ($r3 <= $lim) { $array['3'."$n"] = $r3; }
}
asort($array);
foreach ($array as $r => $v) {
if (substr($r,0,1) == 1) { print "| $v | fizz <br />"; }
if (substr($r,0,1) == 2) { print "| $v | buzz <br />"; }
if (substr($r,0,1) == 3) { print "| $v | fizz-buzz <br />"; }
}
?>

«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
Re: φιζζ - μπαζζ (Google Interview test)
να τυπώσω τις λέξεις από τα βήματα 1 και 2;
-
- Διαχειριστής
- Δημοσιεύσεις: 11591
- Εγγραφή: 13 Μαρ 2018, 19:22
- Phorum.gr user: Spiros252
- Τοποθεσία: Αθήνα
Re: φιζζ - μπαζζ (Google Interview test)
Γράφω σε απλά ελληνικά τη δική μου λύση:
1. Δημιουργούμε όλα τα γινόμενα του 659 μικρότερα ή ίσα του 107 και τα αποθηκεύουμε σε πίνακα.
2. Δημιουργούμε όλα τα γινόμενα του 947 μικρότερα ή ίσα του 107 και τα αποθηκεύουμε σε πίνακα.
3. Δημιουργούμε όλα τα γινόμενα του (659*947) μικρότερα ή ίσα του 107 και τα αποθηκεύουμε σε πίνακα.
4. Ταξινομούμε και τυπώνουμε τον πίνακα από το μικρότερο στο μεγαλύτερο αποτέλεσμα, τυπώνοντας δίπλα αν προέρχεται από την 1 πράξη fizz, από τη 2 πράξη buzz, από την 3 πράξη fizz-buzz.
Δεν χρειάζεται να κάνουμε εκατομμύρια διαιρέσεις!
Αν θέλουμε και τους ενδιάμεσους αριθμούς που δεν είναι fizz, buzz τους τυπώνουμε κι αυτούς απλά με τη σειρά, μεταξύ των παραπάνω αποτελεσμάτων.
Υποψιάζομαι όμως ότι ο Χουργιατς έχει άλλη πολύ έξυπνη λύση την οποία έχω ψυλλιαστει και την ψάχνω. Υποψιάζομαι ότι θα γίνεται με 1 γραμμή κώδικα..

«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
Re: φιζζ - μπαζζ (Google Interview test)
και ο Nameless Ghoul αν κατάλαβα καλά μίλησε για 2 πράξεις όχι για 3.
Ο πολλαπλασιασμός απαιτεί λιγότερη υπολογιστική ισχύ από την διαίρεση επειδή δεν έχεις να υπολογίσεις υπόλοιπο;
Η τελική ταξινόμηση των αριθμών από τους 3 πίνακες είναι εύκολη;
Τώρα που βλέπω την δική σου λύση καταλαβαίνω ότι από την δική μου λείπει η σύγκριση κάθε αποτελέσματος ώστε να μην ξεπεράσω το νούμερο του ορίου.
- shrike
- Δημοσιεύσεις: 4282
- Εγγραφή: 02 Απρ 2018, 08:39
- Phorum.gr user: Isildur
- Τοποθεσία: Παρά θῖν' ἁλὸς
Re: φιζζ - μπαζζ (Google Interview test)
Σπύρο, μου φαίνεται λίγο δύσκολο να είναι πιο γρήγορο αυτό που προτείνεις (μια που το θέμα είναι η ταχύτητα σύμφωνα με τον Nameless Ghoul). Κυρίως λόγω του sorting που θες να κάνεις συνδυάζοντας 4 πίνακες, ο ένας εκ των οποίων έχει 10.000.000 στοιχεία.Spiros252 έγραψε: ↑21 Ιούλ 2018, 09:38Γράφω σε απλά ελληνικά τη δική μου λύση:
1. Δημιουργούμε όλα τα γινόμενα του 659 μικρότερα ή ίσα του 107 και τα αποθηκεύουμε σε πίνακα.
2. Δημιουργούμε όλα τα γινόμενα του 947 μικρότερα ή ίσα του 107 και τα αποθηκεύουμε σε πίνακα.
3. Δημιουργούμε όλα τα γινόμενα του (659*947)
μικρότερα ή ίσα του 107 και τα αποθηκεύουμε σε πίνακα.
4. Ταξινομούμε και τυπώνουμε τον πίνακα από το μικρότερο στο μεγαλύτερο αποτέλεσμα, τυπώνοντας δίπλα αν προέρχεται από την 1 πράξη fizz, από τη 2 πράξη buzz, από την 3 πράξη fizz-buzz.
Δεν χρειάζεται να κάνουμε εκατομμύρια διαιρέσεις!
Αν θέλουμε και τους ενδιάμεσους αριθμούς που δεν είναι fizz, buzz τους τυπώνουμε κι αυτούς απλά με τη σειρα, μεταξύ των παραπάνω αποτελεσμάτων.
Υποψιάζομαι όμως ότι ο Χουργιατς έχει άλλη πολύ έξυπνη λύση την οποία έχω ψυλλιαστει και την ψάχνω. Υποψιάζομαι ότι θα γίνεται με 1 γραμμή κώδικα..
Μπορώ να κάνω μια δοκιμή γι' αυτό που λες, στις άλλες τις δικές μου λύσεις που δοκίμασα πάντως, όντως η δεύτερη ήταν πιο γρήγορη (περίπου κατά 100ms) όπως είπε κι ο Ghoul.
Στο μεταξύ, χθες βράδυ σκεφτόμουν τη λύση στο... εχμμμ... ξες... αγαπημένο μέρος του Nameless Ghoul (παραδόξως εκεί μου 'ρχονται όλες οι εμπνεύσεις και έχω βρει πολλές φορές λύσεις σε πράματα που είχα μπλοκάρει) και σκέφτηκα κάτι άλλο, επειδή ακριβώς πιάστηκα από το hint του να κάνω αποθήκευση δεδομένων. Σκέφτηκα λοιπόν να τρέξω το βρόχο μια φορά μόνο μέχρι το 624073 και να κρατήσω τα αποτελέσματα (πότε είναι φιζζ, πότε μπαζζ κλπ) συν τη μία φορά που θα είναι φιζζμπαζ. Αυτό λογικά θα επαναλαμβάνεται για κάθε ομάδα των 624073 αριθμών (δηλ. από 624074 έως 2 * 624073 κλπ). Θέλει απλά να το οργανώσω λίγο στο μυαλό μου πώς θα το μετατρέψω σε κώδικα...
Re: φιζζ - μπαζζ (Google Interview test)
Πολύ καλή ιδέα. Αν διαιρέσεις το 10 στην 7 με το 624073 βρίσκεις πόσες φορές και με πια νούμερα πρέπει να πολλαπλασιάσεις την αρχική ομάδαshrike έγραψε: ↑21 Ιούλ 2018, 10:21Σκέφτηκα λοιπόν να τρέξω το βρόχο μια φορά μόνο μέχρι το 624073 και να κρατήσω τα αποτελέσματα (πότε είναι φιζζ, πότε μπαζζ κλπ) συν τη μία φορά που θα είναι φιζζμπαζ. Αυτό λογικά θα επαναλαμβάνεται για κάθε ομάδα των 624073 αριθμών (δηλ. από 624074 έως 2 * 624073 κλπ). Θέλει απλά να το οργανώσω λίγο στο μυαλό μου πώς θα το μετατρέψω σε κώδικα...
ΥΓ Το αρχικό ερώτημα μιλά για ακεραίους. Μήπως πρέπει κάπου στο τέλος να συμπεριλάβουμε και όλες τις αρνητικές λύσεις;
- shrike
- Δημοσιεύσεις: 4282
- Εγγραφή: 02 Απρ 2018, 08:39
- Phorum.gr user: Isildur
- Τοποθεσία: Παρά θῖν' ἁλὸς
Re: φιζζ - μπαζζ (Google Interview test)
Λέει από 1 έως 10^7, οπότε φαντάζομαι αφορά μόνο τους θετικούς.ST48410 έγραψε: ↑21 Ιούλ 2018, 10:30Πολύ καλή ιδέα. Αν διαιρέσεις το 10 στην 7 με το 624073 βρίσκεις πόσες φορές και με πια νούμερα πρέπει να πολλαπλασιάσεις την αρχική ομάδαshrike έγραψε: ↑21 Ιούλ 2018, 10:21Σκέφτηκα λοιπόν να τρέξω το βρόχο μια φορά μόνο μέχρι το 624073 και να κρατήσω τα αποτελέσματα (πότε είναι φιζζ, πότε μπαζζ κλπ) συν τη μία φορά που θα είναι φιζζμπαζ. Αυτό λογικά θα επαναλαμβάνεται για κάθε ομάδα των 624073 αριθμών (δηλ. από 624074 έως 2 * 624073 κλπ). Θέλει απλά να το οργανώσω λίγο στο μυαλό μου πώς θα το μετατρέψω σε κώδικα...
ΥΓ Το αρχικό ερώτημα μιλά για ακεραίους. Μήπως πρέπει κάπου στο τέλος να συμπεριλάβουμε και όλες τις αρνητικές λύσεις;
Re: φιζζ - μπαζζ (Google Interview test)
Δίκιο έχεις. Δεν πρόσεξα καλά την αρχική διατύπωση.shrike έγραψε: ↑21 Ιούλ 2018, 10:31Λέει από 1 έως 10^7, οπότε φαντάζομαι αφορά μόνο τους θετικούς.ST48410 έγραψε: ↑21 Ιούλ 2018, 10:30Πολύ καλή ιδέα. Αν διαιρέσεις το 10 στην 7 με το 624073 βρίσκεις πόσες φορές και με πια νούμερα πρέπει να πολλαπλασιάσεις την αρχική ομάδαshrike έγραψε: ↑21 Ιούλ 2018, 10:21Σκέφτηκα λοιπόν να τρέξω το βρόχο μια φορά μόνο μέχρι το 624073 και να κρατήσω τα αποτελέσματα (πότε είναι φιζζ, πότε μπαζζ κλπ) συν τη μία φορά που θα είναι φιζζμπαζ. Αυτό λογικά θα επαναλαμβάνεται για κάθε ομάδα των 624073 αριθμών (δηλ. από 624074 έως 2 * 624073 κλπ). Θέλει απλά να το οργανώσω λίγο στο μυαλό μου πώς θα το μετατρέψω σε κώδικα...
ΥΓ Το αρχικό ερώτημα μιλά για ακεραίους. Μήπως πρέπει κάπου στο τέλος να συμπεριλάβουμε και όλες τις αρνητικές λύσεις;
Re: φιζζ - μπαζζ (Google Interview test)
Το 624073 χωράει 16 φορές στον 10.000.000 αλλά έχει και υπόλοιπο 14832 συνεπώς πρέπει να εξεταστούν και τα φιζζ ή μπαζ που υπάρχουν εκεί.
για ν από 1 έως 624073
1. Διαιρώ με 659. Αν 0 γράφω φιζζ. Αν όχι 0 γράφω κενό και πάω στο 2
2. Διαιρώ το ίδιο νούμερο με 647. Αν 0 γράφω μπαζ δίπλα σε αυτό που έγραψα στο 1. Αν όχι 0 πάω στο επόμενο νούμερο
3. Πολλαπλασιάζω και τυπώνω διαδοχικά τα μέχρι τώρα αποτελέσματα x1 x2 χ3 κλπ έως χ17
4. Πετάω τα τελευταία νούμερα > 10.000.000
για ν από 1 έως 624073
1. Διαιρώ με 659. Αν 0 γράφω φιζζ. Αν όχι 0 γράφω κενό και πάω στο 2
2. Διαιρώ το ίδιο νούμερο με 647. Αν 0 γράφω μπαζ δίπλα σε αυτό που έγραψα στο 1. Αν όχι 0 πάω στο επόμενο νούμερο
3. Πολλαπλασιάζω και τυπώνω διαδοχικά τα μέχρι τώρα αποτελέσματα x1 x2 χ3 κλπ έως χ17
4. Πετάω τα τελευταία νούμερα > 10.000.000
Τελευταία επεξεργασία από το μέλος ST48410 την 21 Ιούλ 2018, 11:01, έχει επεξεργασθεί 1 φορά συνολικά.
- shrike
- Δημοσιεύσεις: 4282
- Εγγραφή: 02 Απρ 2018, 08:39
- Phorum.gr user: Isildur
- Τοποθεσία: Παρά θῖν' ἁλὸς
Re: φιζζ - μπαζζ (Google Interview test)
Το αστείο είναι ότι το 'κανα, το έτρεξα, είναι όντως τραγικά πιο γρήγορο στον υπολογισμό των τιμών, αλλά τρώω κάποια σκαλώματα με την απόδοσή τους σε μεταβλητή (πόσο μάλλον με την εκτύπωση). Λογικά είναι κάποιο πρόβλημα της γλώσσας που χρησιμοποιίησα (VB6), πρέπει να μπουκώνει πολύ στη μετατροπή σε string (όπου δηλαδή πρέπει να προστεθούν τα "φιζζ" κλπ και δεν το βλέπει σαν αριθμό), δεν ξέρω...
Κώδικας: Επιλογή όλων
Dim t(624073)
For r = 1 To 624072
If r Mod 947 = 0 Then
t(r) = " μπαζζ"
ElseIf r Mod 659 = 0 Then
t(r) = " φιζζ"
End If
Next
t(624073) = " φιζζμπαζ": i = 0
For r = 1 To 10 ^ 7
i = i + 1: If i > 624073 Then i = 1
Print r & t(i)
Next
-
- Διαχειριστής
- Δημοσιεύσεις: 11591
- Εγγραφή: 13 Μαρ 2018, 19:22
- Phorum.gr user: Spiros252
- Τοποθεσία: Αθήνα
Re: φιζζ - μπαζζ (Google Interview test)
Μόνο 25.749 αριθμοί από τους 10.000.000 ανήκουν στα ζητούμενα αποτελέσματα.ST48410 έγραψε: ↑21 Ιούλ 2018, 09:54
και ο Nameless Ghoul αν κατάλαβα καλά μίλησε για 2 πράξεις όχι για 3.
Ο πολλαπλασιασμός απαιτεί λιγότερη υπολογιστική ισχύ από την διαίρεση επειδή δεν έχεις να υπολογίσεις υπόλοιπο;
Η τελική ταξινόμηση των αριθμών από τους 3 πίνακες είναι εύκολη;
Τώρα που βλέπω την δική σου λύση καταλαβαίνω ότι από την δική μου λείπει η σύγκριση κάθε αποτελέσματος ώστε να μην ξεπεράσω το νούμερο του ορίου.
Δεν έχω κέρδος όταν τους βρίσκω / παράγω κατευθείαν; αντί να διαιρώ 10.000.000 αριθμούς με δυο ή τρεις ;
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
- shrike
- Δημοσιεύσεις: 4282
- Εγγραφή: 02 Απρ 2018, 08:39
- Phorum.gr user: Isildur
- Τοποθεσία: Παρά θῖν' ἁλὸς
Re: φιζζ - μπαζζ (Google Interview test)
Ναι ρε συ, οκ, κατανοητό. Δεν θα διαιρείς με 10.000.000, αλλά θα έχεις κάνει μια σειρά πολλαπλασιασμούς για να βρεις τους 25.749, να τους αποθηκεύσεις όπως λες σε ένα array (φαντάζομαι) και στη συνέχεια, θα πρέπει να κάνεις νέες συγκρίσεις αυτών με τους 10.000.000 για να δεις πότε ισχύει τι. Πώς γίνεται αυτό πιο γρήγορα;Spiros252 έγραψε: ↑21 Ιούλ 2018, 11:06Μόνο 25.749 αριθμοί από τους 10.000.000 ανήκουν στα ζητούμενα αποτελέσματα.ST48410 έγραψε: ↑21 Ιούλ 2018, 09:54
και ο Nameless Ghoul αν κατάλαβα καλά μίλησε για 2 πράξεις όχι για 3.
Ο πολλαπλασιασμός απαιτεί λιγότερη υπολογιστική ισχύ από την διαίρεση επειδή δεν έχεις να υπολογίσεις υπόλοιπο;
Η τελική ταξινόμηση των αριθμών από τους 3 πίνακες είναι εύκολη;
Τώρα που βλέπω την δική σου λύση καταλαβαίνω ότι από την δική μου λείπει η σύγκριση κάθε αποτελέσματος ώστε να μην ξεπεράσω το νούμερο του ορίου.
Δεν έχω κέρδος όταν τους βρίσκω / παράγω κατευθείαν; αντί να διαιρώ 10.000.000 αριθμούς με δυο ή τρεις ;
Παρεμπιπτόντως, το τελευταίο που έγραψα είναι περίπου 6 φορές πιο γρήγορο από το προηγούμενο... "γρήγορό" μου.
Αν δεν σκάλωνα και στο θέμα των strings που λέω, νομίζω θα ήταν η λύση. Ίσως σε μια πιο "σοβαρή" γλώσσα, να είναι όντως αυτή η λύση.
-
- Διαχειριστής
- Δημοσιεύσεις: 11591
- Εγγραφή: 13 Μαρ 2018, 19:22
- Phorum.gr user: Spiros252
- Τοποθεσία: Αθήνα
Re: φιζζ - μπαζζ (Google Interview test)
Γιατί βρε; Ποιος πίνακας έχει 10 μύρια; Οι 3 πίνακές μου έχουν 25.749 στοιχεία συνολικά.
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας».
Stephen Hawking
-
- Παραπλήσια Θέματα
- Απαντήσεις
- Προβολές
- Τελευταία δημοσίευση
-
- 162 Απαντήσεις
- 3332 Προβολές
-
Τελευταία δημοσίευση από yorgoschrysikos
07 Δεκ 2024, 12:49
-
-
Νέα δημοσίευση Δημοσκόπηση interview Μάιος 2024
από KRAKEN » 14 Μάιος 2024, 16:45 » σε Εσωτερική Πολιτική - 113 Απαντήσεις
- 2641 Προβολές
-
Τελευταία δημοσίευση από Αλιόσα
03 Ιουν 2024, 12:58
-
-
-
Νέα δημοσίευση Δημοσκόπηση Interview Ιούνιος 2024
από Τοξοβόλος_UK » 04 Ιουν 2024, 10:59 » σε Εσωτερική Πολιτική - 3 Απαντήσεις
- 216 Προβολές
-
Τελευταία δημοσίευση από KRAKEN
04 Ιουν 2024, 18:15
-
-
-
Νέα δημοσίευση Δημοσκόπηση Interview Φεβρουάριος 2025 (2)
από KRAKEN » 25 Φεβ 2025, 19:29 » σε Εσωτερική Πολιτική - 71 Απαντήσεις
- 951 Προβολές
-
Τελευταία δημοσίευση από Jimmy81
26 Φεβ 2025, 02:09
-