Κόκκοι

Κόκκοι

Εύκολο

Εισαγωγή

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

Οδηγίες

Υπολόγισε τον αριθμό των κόκκων σιταριού σε μια σκακιέρα.

Μια σκακιέρα έχει 64 τετράγωνα. Το τετράγωνο 1 έχει έναν κόκκο, το τετράγωνο 2 έχει δύο κόκκους, το τετράγωνο 3 έχει τέσσερις κόκκους, και ούτω καθεξής, διπλασιάζοντας κάθε φορά.

Γράψε κώδικα που υπολογίζει:

  • τον αριθμό των κόκκων σε ένα δεδομένο τετράγωνο
  • τον συνολικό αριθμό των κόκκων στη σκακιέρα

GNU awk και αριθμητική αυθαίρετης ακρίβειας

Από προεπιλογή, οι αριθμοί στην awk αναπαρίστανται ως αριθμοί κινητής υποδιαστολής διπλής ακρίβειας. Αυτό παρέχει 53 bits ακρίβειας (δες τον Πίνακα 16.3 στο εγχειρίδιο). Δυστυχώς, δεν αρκεί για να ολοκληρώσεις αυτή την άσκηση (προειδοποίηση spoiler: ένα test απαιτεί 63 bits ακρίβειας).

Η "ανεπαρκής ακρίβεια" μοιάζει κάπως έτσι:

$ gawk 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
not enough precision

Το GNU awk μπορεί να χρησιμοποιήσει αριθμούς αυθαίρετης ακρίβειας, αν οι σχετικές βιβλιοθήκες έχουν μεταγλωττιστεί στο εκτελέσιμο του awk. Έλεγξε την έκδοση του awk σου και ψάξε για το "GNU MPFR":

$ gawk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
...

Αν υπάρχει, ενεργοποίησε τη δυνατότητα με την επιλογή -M:

$ gawk -M 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
OK

Τι γίνεται αν το awk μου δεν έχει το -M; Θα πρέπει να καλέσεις ένα εξωτερικό πρόγραμμα που μπορεί να κάνει αριθμητική αυθαίρετης ακρίβειας, όπως το bc. Δες την ενότητα Χρήση του getline σε μεταβλητή από σωλήνα για ένα παράδειγμα του πώς γίνεται αυτό.

Περαιτέρω ανάγνωση: Αριθμητική αυθαίρετης ακρίβειας

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
AWK Exercism

Έτοιμος να ξεκινήσεις την άσκηση Κόκκοι;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις AWK με 3 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.