Aplicació: Castells i catapultes

Aquesta lliçó presenta una simple modelació amb booleans de l’èxit o el fracàs d’un atac a un castell medieval.

El problema

Un castell medieval està assetjat. Disposem dels valors de l’alçada de les muralles, i també de l’alçada de les escales dels atacants. A més, sabem si els atacants tenen o no catapultes, i quantes pedres grosses poden disparar.

Les regles que regeixen l’èxit de l’atac són:

En qualsevol altre cas, l’atac fracassa.

La formulació booleana

Les dades que se’ns han donat es poden descriure en Python d’aquesta forma:

alcada_muralles    : float      # alçada de les muralles del castell (en metres)
alcada_escales     : float      # alçada de les escales dels atacants (en metres)
catapultes         : bool       # indica si els atacants disposen o no d'alguna catapulta
pedres             : int        # nombre de pedres grosses disponibles

El tipus d’alcada_muralles i d’alcada_escales s’ha triat com a un real perquè contenen una mida amb possibles decimals. El tipus de pedres s’ha triat com a un enter perquè, justament, conté un nombre natural (no es poden tenir tres perdre grosses i quart). El tipus de catapultes s’ha triat com a un booleà, perquè indica la mera presència o no de catapultes.

Suposem que aquestes variables s’han omplert amb unes certes dades. Ara volem calcular si l’atac té èxit o no, i guardar-ho en una variable booleana:

atac_amb_exit : bool            # indica si l'atac al castell té èxit

Segons les regles descrites anteriorment, ens cal fer servir una operació de disjunció (or) per unir les dues condicions. La primera condició és el resultat d’una comparació: alcada_escales > alcada_muralles. La segona condició és la conjunció (and) de dues nessitats: la presència de catapultes i l’existència de prou pedres grosses. Per tant, es pot escriure com catapultes and pedres >= 10.

Tot plegat, tenim:

atac_amb_exit = alcada_escales > alcada_muralles or (catapultes and pedres >= 10)

Els parèntesis són importants per desambigüar aquesta expressió de (alcada_escales > alcada_muralles or catapultes) and pedres, que és diferent (i incorrecta segons les nostres regles).




Lliçons.jutge.org
Jordi Petit, Salvador Roura
Universitat Politècnica de Catalunya, 2023

Prohibit copiar. Tots els drets reservats.
No copy allowed. All rights reserved.