Granos

Granos

Fácil

Introducción

Había una vez un sirviente sabio que salvó la vida de un príncipe. El rey prometió pagarle lo que el sirviente fuera capaz de imaginar. Como sabía que al rey le encantaba el ajedrez, el sirviente le dijo que quería granos de trigo. Un grano en la primera casilla de un tablero de ajedrez, y el número de granos se duplicaba en cada casilla siguiente.

Instrucciones

Calcula la cantidad de granos de trigo que hay 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:

  • la cantidad de granos que hay en una casilla dada
  • la cantidad total de granos en el tablero de ajedrez

GNU awk y aritmética de precisión arbitraria

Por defecto, los números en awk se representan como números de punto flotante de doble precisión. Esto brinda 53 bits de precisión (ver la tabla 16.3 del manual). Lamentablemente, no alcanza para completar este ejercicio (alerta de spoiler: una prueba requiere 63 bits de precisión).

«Precisión insuficiente» se ve así:

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

GNU awk puede usar números de precisión arbitraria si las bibliotecas correspondientes se compilaron en el ejecutable de awk. Verifica 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, habilita esa 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? Vas a tener que llamar a un programa externo que pueda hacer aritmética de precisión arbitraria, como bc. Consulta la sección Usar getline hacia una variable desde una tubería para ver un ejemplo de cómo hacerlo.

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

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

¿Todo listo para empezar Granos?

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