Kurzusok
/
AWK
AWK
/
Feladatok
/
Gabonaszemek
Gabonaszemek

Gabonaszemek

Könnyű

Bevezetés

Volt egyszer egy bölcs szolga, aki megmentette egy herceg életét. A király megígérte, hogy megadja neki mindazt, amit a szolga csak kigondol. A szolga tudta, hogy a király szeret sakkozni, ezért azt kérte tőle, hogy búzaszemeket kapjon. Egy szem a sakktábla első mezőjén, a szemek száma pedig minden következő mezőn megduplázódik.

Utasítások

Számítsd ki, hány búzaszem van egy sakktáblán.

A sakktábla 64 mezőből áll. Az 1. mezőn egy szem van, a 2. mezőn kettő, a 3. mezőn négy, és így tovább, minden mezőn megduplázódik a szemek száma.

Írj kódot, amely kiszámítja:

  • az adott mezőn lévő szemek számát
  • a sakktáblán lévő szemek összes számát

GNU awk és tetszőleges pontosságú aritmetika

Alapértelmezés szerint az awk-ban a számok dupla pontosságú lebegőpontos számként vannak ábrázolva. Ez 53 bitnyi pontosságot biztosít (lásd a kézikönyv 16.3. táblázatát). Sajnos ez nem elegendő a feladat teljesítéséhez (spoilerveszély: az egyik teszt 63 bitnyi pontosságot igényel).

A „nem elegendő pontosság” így néz ki:

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

A GNU awk képes tetszőleges pontosságú számok használatára, ha a megfelelő könyvtárakat belefordították az awk futtatható állományába. Ellenőrizd az awk verzióját, és keresd a „GNU MPFR” szöveget:

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

Ha megvan, engedélyezd ezt a lehetőséget a -M kapcsolóval:

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

Mi van, ha az awk-om nem támogatja a -M kapcsolót? Egy külső programot kell meghívnod, amely képes tetszőleges pontosságú aritmetikára, például a bc-t. Nézd meg a getline használata változóba olvasáshoz csőből szakaszt, ahol példát találsz erre.

További olvasnivaló: Tetszőleges pontosságú aritmetika

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
AWK Exercism

Készen állsz elkezdeni a(z) Gabonaszemek feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) AWK nyelvet 3 fogalom92 feladat segítségével, valódi emberi mentorálással, mindez ingyen.