Track
/
AWK
AWK
/
Esercizi
/
Chicchi di grano
Chicchi di grano

Chicchi di grano

Facile

Introduzione

C'era una volta un servo saggio che salvò la vita a un principe. Il re promise di pagare qualunque cosa il servo avesse potuto immaginare. Sapendo che il re amava gli scacchi, il servo disse al re che avrebbe voluto dei chicchi di grano. Un chicco sulla prima casella di una scacchiera, con il numero di chicchi che raddoppia a ogni casella successiva.

Istruzioni

Calcola il numero di chicchi di grano su una scacchiera.

Una scacchiera ha 64 caselle. La casella 1 ha un chicco, la casella 2 ha due chicchi, la casella 3 ha quattro chicchi, e così via, raddoppiando ogni volta.

Scrivi il codice che calcola:

  • il numero di chicchi su una data casella
  • il numero totale di chicchi sulla scacchiera

GNU awk e l'aritmetica a precisione arbitraria

Per impostazione predefinita, i numeri in awk sono rappresentati come numeri in virgola mobile a doppia precisione. Questo offre 53 bit di precisione (vedi la Tabella 16.3 nel manuale). Purtroppo non bastano per completare questo esercizio (attenzione allo spoiler: un test richiede 63 bit di precisione).

Una «precisione insufficiente» si presenta così:

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

GNU awk può usare numeri a precisione arbitraria, se le librerie necessarie sono state compilate all'interno dell'eseguibile awk. Controlla la versione di awk e cerca «GNU MPFR»:

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

Se è presente, abilita questa possibilità con l'opzione -M:

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

E se il mio awk non ha -M? Dovrai rivolgerti a un programma esterno in grado di fare aritmetica a precisione arbitraria, come bc. Guarda la sezione Usare getline per leggere una variabile da una pipe per un esempio di come si fa.

Per approfondire: Aritmetica a precisione arbitraria

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
AWK Exercism

Vuoi iniziare Chicchi di grano?

Iscriviti a Exercism per imparare e padroneggiare AWK con 3 concetti92 esercizi e il mentoring di persone reali, tutto gratis.