sabato 26 settembre 2015

Susi n. 927 reloaded

Nel precedente post ho risolto il Quesito con la Susi n. 927. Per via di una svista, notata grazie al commento di un lettore, non ho preso in considerazione un'informazione fondamentale; la conseguente correzione in linea ha reso l'articolo un po' pasticciato e perciò propongo questo post come alternativa.

Grazie alla nuova informazione (i prezzi sono interi)1 la soluzione del problema a mano può essere trovata a partire dalla

\[ R(49 - 6b - 4c) = 3 \cdot 119 \]

osservando che 119 = 17×7. Poiché R deve essere intero, 49 − 6b − 4c deve dividere esattamente il membro di destra, cioè può avere tra i suoi fattori solo 17, 7 e 3 e comunque non può essere maggiore o uguale a 49 (b e c sono interi strettamente positivi), ma nemmeno minore di 15: il dominio di b e c è {1, 2, 3, 4, 5} (perché a + b + c = 7 e inoltre deve valore b + c ≤ 6 perché a ≥ 1). Avremmo comunque scartato 49 − 6b − 4c = 3 perché dà R = 119 che rende impossibile soddisfare aS + bB + cR = 1192. Del resto tra i fattori di 49 − 6b − 4c non può esserci il 3, perché altrimenti R non sarebbe più divisibile esattamente per 3 e i prezzi S e B non sarebbero più interi (B = R/3 e S = 7R/3).

Dunque i valori che effettivamente può assumere 49 − 6b − 4c sono dati dall'intersezione tra l'insieme {7, 17} e {39, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15} (ottenuto assegnando a b e c tutti i valori possibili3, ricordando che a + b + c = 7 e che tutti devono essere maggiori di zero). Non ci resta che 17 e dividendo 3×7×17 per 17 otteniamo R=21; da cui troviamo che il prezzo di una bottiglia di spumante è 49.

Questo (come altri quesiti di Susi qui trattati) è chiaramente un problema di soddisfacimento dei vincoli (CSP in inglese)4; per questo pensavo di impostarlo usando Mozart/Oz, come accennato in una nota.

Ma per questo giro di giostra avevo scelto il Python e rimaniamo sul Python. Questo pacchetto fa proprio al caso nostro; sarebbe interessante implementare qualcosa a mano ad hoc per il problema… ma non mi va!5


  1. E qualche altra considerazione “ovvia”: le bottiglie non sono gratis e nella cassa c'è almeno una bottiglia di ciascun tipo.

  2. Di nuovo non dimentichiamoci che a, b e c non possono essere zero e nemmeno i prezzi delle bottiglie.

  3. Possiamo risparmiarci la fatica? Possiamo usare la stessa strategia ma partendo da scelte diverse, per esempio esprimendo tutto in funzione di S e procedendo come fatto (in sostanza), per finire ad ottenere direttamente S invece che R da cui poi dobbiamo ricavare S? La risposta a queste domande è sì, ma lascio al lettore il divertimento.

  4. Nella formulazione originale del problema potrebbe non essere lampante: sta a noi riformulare il problema in certi termini e magari aggiungere dei vincoli dedotti. In questo caso per esempio da un vincolo esplicito sappiamo che il prezzo di una bottiglia non può assumere un valore più grande di 119; ma limitiamo ulteriormente il dominio dei prezzi di una bottiglia considerando anche informazioni implicite, per esempio «nessuna delle bottiglie è gratis», che ci permette di escludere lo 0. L'assunzione «nessuna delle bottiglie è gratis» è ragionevole, ma in realtà non c'è se traduciamo il problema senza tener conto del “contesto” e del “significato” dei numeri R, B e S: siamo in un'enoteca e quei numeri sono i prezzi di una merce che un commerciante vuole vendere per realizzare un guadagno con cui campare… Non sarebbe stato irragionevole pensare che alla cassetta da sette vini fosse applicato uno sconto… ma ciò avrebbe reso il problema così com'è irrisolvibile (per mancanza delle informazioni necessarie).

  5. Mettiamoci un classico malanno di cambio stagione (?); ovviamente si acuisce nel finesettimana per poi dileguarsi il lunedì.

Nessun commento:

Posta un commento

Sii educato, costruisci con cura le frasi, rifletti prima di pubblicare, evita parolacce e offese dirette, non uscire dal tema, cerca di non omettere la punteggiatura, evita errori ortografici, rileggi quel che hai scritto.