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

Άβαταρ μέλους
nick
Δημοσιεύσεις: 5052
Εγγραφή: 25 Μάιος 2018, 22:21

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

Μη αναγνωσμένη δημοσίευση από nick » 23 Ιούλ 2018, 11:36

Nameless Ghoul έγραψε:
23 Ιούλ 2018, 10:14
Πράγματι, αυτή είναι ακόμα καλύτερη λύση - για την ακρίβεια, η καλύτερη δυνατή (χωρίς παράλληλες επεξεργασίες). Για πες όμως, πως επιτυγχάνεις αυτήν τη "σωστή σειρά";

(Δεν είναι ερώτηση παγίδα, υπάρχει συγκεκριμένη απάντηση, και μάλιστα είναι σχετικά απλή.)
ελέγχουμε ποιο θα γίνει μεγαλύτερο, αυτό που θα του προσθέσουμε 659 ή 943

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

if(mult659+659>mult943+943)
    mult943+=943;
    print 'buzz'
else if(mult659+659<mult943+943)
    mult659+=659;
    print 'fizz'
else 
    mult659+=659;
    mult943+=943;
    print 'fizzbuzz'

Spiros252
Διαχειριστής
Δημοσιεύσεις: 11581
Εγγραφή: 13 Μαρ 2018, 19:22
Phorum.gr user: Spiros252
Τοποθεσία: Αθήνα

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

Μη αναγνωσμένη δημοσίευση από Spiros252 » 23 Ιούλ 2018, 12:12

Νέα έκδοση, υλοποίηση του σκεπτικού μου με τη συμπλήρωση φύλλου:

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

<?php

$a = 659;
$b = 947;
$c = $a * $b;
$lim = pow(10,7); 
$lima = $lim - $a;
$limb = $lim - $b;
$limc = $lim - $c;

for ($n = 1; $r1 <= $lima; $n++) { 
	$r1 = $n * $a; 
  	$array[$r1] = 'FIZZ'; 
}

for ($n = 1; $r2 <= $limb; $n++) { 
	$r2 = $n * $b; 
  	$array[$r2] = 'BUZZ';
}

for ($n = 1; $r3 <= $limc; $n++) { 
	$r3 = $n * $c; 
  	$array[$r3] = 'FIZZ-BUZZ';
}

  
for ($i = 1; $i <= $lim; $i++) { 	
	
 	$value = $array[$i];
	print "$i | $value <br />"; 
}

?>
Επεξήγηση:
  • Παράγω τα γινόμενα του αριθμού a και αποθηκεύω στην αντίστοιχη γραμμή με τον αριθμό - αποτέλεσμα που βρίσκω ενός εικονικού κενού πίνακα το 'FIZZ'.
  • Παράγω τα γινόμενα του αριθμού b και αποθηκεύω στην αντίστοιχη γραμμή με τον αριθμό - αποτέλεσμα που βρίσκω το 'BUZZ'. Αν έχει 'FIZZ' εκεί θα αντικατασταθεί.
  • Παράγω τα γινόμενα του γινομένου a*b και αποθηκεύω στην αντίστοιχη γραμμή με τον αριθμό - αποτέλεσμα που βρίσκω το 'FIZZ-BUZZ'. Θα έχει 'BUZZ' εκεί και θα αντικατασταθεί.
  • Δημιουργώ τους αριθμούς από 1 έως 10^7 και κάθε έναν τον τυπώνω, τυπώνοντας παράλληλα δίπλα του την τιμή που έχει στην αντίστοιχη γραμμή από τον παραπάνω πίνακα. Αν δεν υπάρχει τίποτα, δεν θα τυπωθεί τίποτα.
Έχω εξαιρέσει τις πράξεις μέσα στους βρόχους, δεν κάνω καθόλου ταξινόμηση πίνακα, δεν κάνω συγκρίσεις (συνθήκες if), έχω μόνο έναν πίνακα με ~25.000 γραμμές.
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας»
.
Stephen Hawking


Άβαταρ μέλους
nick
Δημοσιεύσεις: 5052
Εγγραφή: 25 Μάιος 2018, 22:21

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

Μη αναγνωσμένη δημοσίευση από nick » 23 Ιούλ 2018, 12:38

Spiros252 έγραψε:
23 Ιούλ 2018, 12:12
Νέα έκδοση, υλοποίηση του σκεπτικού μου με τη συμπλήρωση φύλλου:

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

<?php

$a = 659;
$b = 947;
$c = $a * $b;
$lim = pow(10,7); 
$lima = $lim - $a;
$limb = $lim - $b;
$limc = $lim - $c;

for ($n = 1; $r1 <= $lima; $n++) { 
	$r1 = $n * $a; 
  	$array[$r1] = 'FIZZ'; 
}

for ($n = 1; $r2 <= $limb; $n++) { 
	$r2 = $n * $b; 
  	$array[$r2] = 'BUZZ';
}

for ($n = 1; $r3 <= $limc; $n++) { 
	$r3 = $n * $c; 
  	$array[$r3] = 'FIZZ-BUZZ';
}

  
for ($i = 1; $i <= $lim; $i++) { 	
	
 	$value = $array[$i];
	print "$i | $value <br />"; 
}

?>
Επεξήγηση:
  • Παράγω τα γινόμενα του αριθμού a και αποθηκεύω στην αντίστοιχη γραμμή με τον αριθμό - αποτέλεσμα που βρίσκω ενός εικονικού κενού πίνακα το 'FIZZ'.
  • Παράγω τα γινόμενα του αριθμού b και αποθηκεύω στην αντίστοιχη γραμμή με τον αριθμό - αποτέλεσμα που βρίσκω το 'BUZZ'. Αν έχει 'FIZZ' εκεί θα αντικατασταθεί.
  • Παράγω τα γινόμενα του γινομένου a*b και αποθηκεύω στην αντίστοιχη γραμμή με τον αριθμό - αποτέλεσμα που βρίσκω το 'FIZZ-BUZZ'. Θα έχει 'BUZZ' εκεί και θα αντικατασταθεί.
  • Δημιουργώ τους αριθμούς από 1 έως 10^7 και κάθε έναν τον τυπώνω, τυπώνοντας παράλληλα δίπλα του την τιμή που έχει στην αντίστοιχη γραμμή από τον παραπάνω πίνακα. Αν δεν υπάρχει τίποτα, δεν θα τυπωθεί τίποτα.
Έχω εξαιρέσει τις πράξεις μέσα στους βρόχους, δεν κάνω καθόλου ταξινόμηση πίνακα, δεν κάνω συγκρίσεις (συνθήκες if), έχω μόνο έναν πίνακα με ~25.000 γραμμές.
Δεν γίνεται αυτό διότι $r1, $r3 $r3 φτάνουν το 10^7.
(Έχεις θέσει ~25000 τιμές , οι υπόλοιπες είναι 0)

Spiros252
Διαχειριστής
Δημοσιεύσεις: 11581
Εγγραφή: 13 Μαρ 2018, 19:22
Phorum.gr user: Spiros252
Τοποθεσία: Αθήνα

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

Μη αναγνωσμένη δημοσίευση από Spiros252 » 23 Ιούλ 2018, 12:47

Nameless Ghoul έγραψε:
23 Ιούλ 2018, 10:35
Αυτή είναι η βέλτιστη δυνατή λύση χωρίς χρήση mod, δηλαδή αυτή που πλησίασε περισσότερο ο nick:

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

auto nextMult659 = 659;
auto nextMult947 = 947;
for(i =1; i < 10^7; i++)
{
auto isMult = false;
if (i == nextMult659)
 {
 cout << "fizz";
 isMult = true;
 nextMult659 += 659;
 }
if (i == nextMult947)
 {
 cout << "buzz";
 isMult = true;
 nextMult947 += 947;
 } 
if (!isMult) { cout << i; }
cout << " ";
}
Όντως, πολύ καλή η σκέψη του nick.
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας»
.
Stephen Hawking

Spiros252
Διαχειριστής
Δημοσιεύσεις: 11581
Εγγραφή: 13 Μαρ 2018, 19:22
Phorum.gr user: Spiros252
Τοποθεσία: Αθήνα

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

Μη αναγνωσμένη δημοσίευση από Spiros252 » 23 Ιούλ 2018, 12:54

nick έγραψε:
23 Ιούλ 2018, 12:38
Δεν γίνεται αυτό διότι $r1, $r3 $r3 φτάνουν το 10^7.
(Έχεις θέσει ~25000 τιμές , οι υπόλοιπες είναι 0)
Δεν γεμίζω τον πίνακα με τα κενά.

Είναι κάπως έτσι:

ΑΡ. ΠΙΝΑΚΙΔΑΣ | ΕΤΟΣ ΚΤΗΣΗΣ
ΑΑΑ 1111 | 1970
ΑΑΑ 1890 | 1971
ΑΑΑ 2991 | 1982
ΑΑΑ 5152 | 1993
ΑΑΑ 9199 | 2000

Όταν του λέω τύπωσέ μου το έτος κτήσης για τον αριθμό πινακίδας ΑΑΑ 3013 απλά δεν βρίσκει τίποτα και δεν τυπώνει τίποτα.
Είναι σαν να φτιάχνεις ένα txt με το παραπάνω πινακάκι στη μνήμη. Εκτός αν κάνω κάπου λάθος.
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας»
.
Stephen Hawking

Άβαταρ μέλους
shrike
Δημοσιεύσεις: 4282
Εγγραφή: 02 Απρ 2018, 08:39
Phorum.gr user: Isildur
Τοποθεσία: Παρά θῖν' ἁλὸς

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

Μη αναγνωσμένη δημοσίευση από shrike » 23 Ιούλ 2018, 13:01

Spiros252 έγραψε:
23 Ιούλ 2018, 12:54
nick έγραψε:
23 Ιούλ 2018, 12:38
Δεν γίνεται αυτό διότι $r1, $r3 $r3 φτάνουν το 10^7.
(Έχεις θέσει ~25000 τιμές , οι υπόλοιπες είναι 0)
Δεν γεμίζω τον πίνακα με τα κενά.

Είναι κάπως έτσι:

ΑΡ. ΠΙΝΑΚΙΔΑΣ | ΕΤΟΣ ΚΤΗΣΗΣ
ΑΑΑ 1111 | 1970
ΑΑΑ 1890 | 1971
ΑΑΑ 2991 | 1982
ΑΑΑ 5152 | 1993
ΑΑΑ 9199 | 2000

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


Άβαταρ μέλους
nick
Δημοσιεύσεις: 5052
Εγγραφή: 25 Μάιος 2018, 22:21

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

Μη αναγνωσμένη δημοσίευση από nick » 23 Ιούλ 2018, 13:08

Spiros252 έγραψε:
23 Ιούλ 2018, 12:54
nick έγραψε:
23 Ιούλ 2018, 12:38
Δεν γίνεται αυτό διότι $r1, $r3 $r3 φτάνουν το 10^7.
(Έχεις θέσει ~25000 τιμές , οι υπόλοιπες είναι 0)
Δεν γεμίζω τον πίνακα με τα κενά.

Είναι κάπως έτσι:

ΑΡ. ΠΙΝΑΚΙΔΑΣ | ΕΤΟΣ ΚΤΗΣΗΣ
ΑΑΑ 1111 | 1970
ΑΑΑ 1890 | 1971
ΑΑΑ 2991 | 1982
ΑΑΑ 5152 | 1993
ΑΑΑ 9199 | 2000

Όταν του λέω τύπωσέ μου το έτος κτήσης για τον αριθμό πινακίδας ΑΑΑ 3013 απλά δεν βρίσκει τίποτα και δεν τυπώνει τίποτα.
Είναι σαν να φτιάχνεις ένα txt με το παραπάνω πινακάκι στη μνήμη. Εκτός αν κάνω κάπου λάθος.
α οκ , είναι όπως στη javascript

Spiros252
Διαχειριστής
Δημοσιεύσεις: 11581
Εγγραφή: 13 Μαρ 2018, 19:22
Phorum.gr user: Spiros252
Τοποθεσία: Αθήνα

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

Μη αναγνωσμένη δημοσίευση από Spiros252 » 23 Ιούλ 2018, 13:11

shrike έγραψε:
23 Ιούλ 2018, 13:01
Αν κατάλαβα καλά τι εννοείς, μάλλον δεν κατάλαβες σωστά την αρχική εκφώνηση.

Δηλαδή, πρέπει να τυπώνονται όλοι οι αριθμοί, απλά δίπλα στους συγκεκριμένους να εμφανίζεται και το σχετικό string.
Ναι shrike, το κατάλαβα. Απλώς δεν το είχα κάνει στα προηγούμενα θεωρώντας το τυπική διαδικασία και με ενδιέφερε περισσότερο αν είμαι σε σωστό δρόμο.

Στην τελευταία λύση μου τους τυπώνει όλους. Διάβασε την επεξήγηση.
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας»
.
Stephen Hawking

Άβαταρ μέλους
shrike
Δημοσιεύσεις: 4282
Εγγραφή: 02 Απρ 2018, 08:39
Phorum.gr user: Isildur
Τοποθεσία: Παρά θῖν' ἁλὸς

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

Μη αναγνωσμένη δημοσίευση από shrike » 23 Ιούλ 2018, 13:23

ΟΚ.


Spiros252
Διαχειριστής
Δημοσιεύσεις: 11581
Εγγραφή: 13 Μαρ 2018, 19:22
Phorum.gr user: Spiros252
Τοποθεσία: Αθήνα

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

Μη αναγνωσμένη δημοσίευση από Spiros252 » 27 Ιούλ 2018, 16:04

Την τελευταία μου λύση, στο προηγούμενο πώς την κρίνετε; Αξίζει τίποτα κι αν όχι γιατί;
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας»
.
Stephen Hawking

Άβαταρ μέλους
Χουργιατς
Δημοσιεύσεις: 6700
Εγγραφή: 02 Απρ 2018, 02:06

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

Μη αναγνωσμένη δημοσίευση από Χουργιατς » 28 Ιούλ 2018, 16:29

Spiros252 έγραψε:
27 Ιούλ 2018, 16:04
Την τελευταία μου λύση, στο προηγούμενο πώς την κρίνετε; Αξίζει τίποτα κι αν όχι γιατί;


Την κρίνω σωστή. Έχεις φυσικά την ποινή του να χρησιμοποιείς μια πρόσθετη δομή με απαιτήσεις μνήμης (το 'λεξικό' με το ζεύγος κλειδιά-τιμές που λένε στη παηθον) μα η λύση είναι δεκτή.
Συγχαρητήρια από μένα για την απλότητα της λύσης :bravo:

Άβαταρ μέλους
shrike
Δημοσιεύσεις: 4282
Εγγραφή: 02 Απρ 2018, 08:39
Phorum.gr user: Isildur
Τοποθεσία: Παρά θῖν' ἁλὸς

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

Μη αναγνωσμένη δημοσίευση από shrike » 30 Ιούλ 2018, 09:53

Μάλλον κάτι δεν πήγε καλά μετά το split, Spiros252.

Ενώ δεν είμαι ο OP, δείχνει εμένα σαν δημιουργό του νήματος αντί για τον χωριάτη.


Spiros252
Διαχειριστής
Δημοσιεύσεις: 11581
Εγγραφή: 13 Μαρ 2018, 19:22
Phorum.gr user: Spiros252
Τοποθεσία: Αθήνα

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

Μη αναγνωσμένη δημοσίευση από Spiros252 » 31 Ιούλ 2018, 14:06

Διορθώθηκε.
«Η παρουσία μας επιλέγει από ένα τεράστιο σύνολο μόνο σύμπαντα συμβατά με την ύπαρξή μας.
Αν και είμαστε μικροί και ασήμαντοι σε κοσμικό επίπεδο, αυτό μας κάνει κατά κάποιο τρόπο, κύριους της δημιουργίας»
.
Stephen Hawking

Απάντηση


  • Παραπλήσια Θέματα
    Απαντήσεις
    Προβολές
    Τελευταία δημοσίευση

Επιστροφή στο “Μαθηματικοί Γρίφοι”

Phorum.com.gr : Αποποίηση Ευθυνών