Tracks
/
AWK
AWK
/
Übungen
/
Weizenkörner
Weizenkörner

Weizenkörner

Einfach

Einführung

Es war einmal ein weiser Diener, der das Leben eines Prinzen rettete. Der König versprach, ihm alles zu geben, was er sich nur wünschen konnte. Der Diener wusste, dass der König Schach liebte, und bat ihn um Weizenkörner. Ein Korn auf dem ersten Feld eines Schachbretts, und auf jedem weiteren Feld sollte sich die Anzahl der Körner verdoppeln.

Anleitung

Berechne die Anzahl der Weizenkörner auf einem Schachbrett.

Ein Schachbrett hat 64 Felder. Feld 1 hat ein Korn, Feld 2 hat zwei Körner, Feld 3 hat vier Körner und so weiter, wobei sich die Anzahl jeweils verdoppelt.

Schreibe Code, der Folgendes berechnet:

  • die Anzahl der Körner auf einem bestimmten Feld
  • die Gesamtzahl der Körner auf dem Schachbrett

GNU awk und Arithmetik mit beliebiger Genauigkeit

Standardmäßig werden Zahlen in awk als Gleitkommazahlen mit doppelter Genauigkeit dargestellt. Das liefert 53 Bit Genauigkeit (siehe Tabelle 16.3 im Handbuch). Leider reicht das nicht aus, um diese Übung zu lösen (Spoiler: Ein Test benötigt 63 Bit Genauigkeit).

„not enough precision“ sieht so aus:

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

GNU awk kann mit Zahlen beliebiger Genauigkeit rechnen, wenn die entsprechenden Bibliotheken in die ausführbare Datei von awk einkompiliert wurden. Prüfe die Version deines awk und achte auf „GNU MPFR“:

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

Wenn sie vorhanden ist, aktivierst du diese Fähigkeit mit der Option -M:

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

Was aber, wenn mein awk kein -M hat? Dann musst du ein externes Programm aufrufen, das mit beliebiger Genauigkeit rechnen kann, zum Beispiel bc. Ein Beispiel dafür findest du im Abschnitt Eine Variable mit getline aus einer Pipe lesen.

Weiterführende Lektüre: Arithmetik mit beliebiger Genauigkeit

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
AWK Exercism

Bereit, mit Weizenkörner zu starten?

Melde dich bei Exercism an, um AWK mit 3 Konzepte92 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.