Granos

Granos

Fácil

Introducción

Érase una vez un sirviente sabio que salvó la vida de un príncipe. El rey prometió pagarle todo lo que el sirviente fuera capaz de imaginar. Sabiendo que al rey le encantaba el ajedrez, el sirviente le dijo que le gustaría tener granos de trigo. Un grano en la primera casilla de un tablero de ajedrez, y el número de granos duplicándose en cada casilla sucesiva.

Instrucciones

Calcula el número de granos de trigo en un tablero de ajedrez.

Un tablero de ajedrez tiene 64 casillas. La casilla 1 tiene un grano, la casilla 2 tiene dos granos, la casilla 3 tiene cuatro granos, y así sucesivamente, duplicándose cada vez.

Escribe código que calcule:

  • el número de granos en una casilla determinada
  • el número total de granos en el tablero de ajedrez

GNU awk y la aritmética de precisión arbitraria

De forma predeterminada, los números en awk se representan como números de coma flotante de doble precisión. Esto proporciona 53 bits de precisión (consulta la Tabla 16.3 del manual). Lamentablemente, no es suficiente para completar este ejercicio (alerta de spoiler: un test requiere 63 bits de precisión).

«Precisión insuficiente» tiene este aspecto:

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

GNU awk tiene la capacidad de usar números de precisión arbitraria, si las bibliotecas correspondientes se han compilado en el ejecutable de awk. Comprueba tu versión de awk y busca «GNU MPFR»:

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

Si está presente, activa la capacidad con la opción -M:

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

¿Y si mi awk no tiene -M? Tendrás que llamar a un programa externo que pueda hacer aritmética de precisión arbitraria, como bc. Consulta la sección Usar getline en una variable desde una tubería para ver un ejemplo de cómo hacerlo.

Para saber más: Aritmética de precisión arbitraria

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
AWK Exercism

¿Listo para empezar Granos?

Regístrate en Exercism para aprender y dominar AWK con 3 conceptos92 ejercicios y mentoría humana real, todo gratis.