Newsgroup: it.comp.macintosh
Titolo: [SW] Programma per scomporre un numero...

Scusate la domanda un po' confusa, ma non sono un matematico... 
Vorrei sapere se esiste un programmino che faccia questo semplice
calcolo:
dato un numero X e una serie di altri numeri a, b, c, d... mi trovi
delle serie che sommate diano come risultato X.
Es:
X = 120
serie di numeri: 2 6 10 14 18 22 26 30 34 38 42
120 = 42 + 30 + 22 + 26
120 = 10 + 10 + 18 + 18 + 30 + 34
... e tutte le altre combinazioni (mi servono per certi giochini
enigmistici)
Lo so che con un minimo di pazienza, se le serie non sono molto lunghe,
ci si riesce bene anche a mano, ma visto che abbiamo i computer... :-)
-- 
D  I  E  G  O    C  U  O  G  H  I
---------------------------------
 
www.diegocuoghi.com

 
(Remove the hyphen! Spambusters at work!)
listen to aaria (two and a Mac): 
http://www.mp3.com/aaria
*** I vecchi computer fanno ognuno qualcosa di diverso;
    quelli nuovi fanno tutti le stesse cose. (newo)

Diego Cuoghi wrote:

E` un problema classico di money change, Hai una banconota da X e la vuoi
cambiare in (somma di) banconote piu` piccole. Mi ricordo di aver visto
una trattazione di questo argomento su D. Knuth "seminumerical algorithms"
forse nel capitolo sulle funzioni/serie generatrici. Quanto al software
non ne so nulla.
Ciao
Norberto

Norberto Gavioli wrote:

Ora ricordo l'argomento sulle serie generatrici.
Supponi di voler cambiare x in banconote da x1, x2, ..., xn allora il numero
dei modi in cui puoi farlo si calcola cosi
sviluppa in serie 1/(1-t^(x1)), ...., 1/(1-t^(xn)),  e calcola  il prodotto P
delle serie ottenute. Il coefficiente di t^x in P e` il numero cercato.
Questo chiaramente non determina i modi ma solo il loro numero.
Ciao
Norberto

 esegui questo nello Script Editor, e poi guarda il risultato....
Grazie!
ma il mio problema è che non ho mai usato AppleScript, se non per un
programmino che lanciava Virtual PC escludendo il finder. E sono
completamente ignorante in fatto di programmazione in generale (un po'
come quando guido l'auto, so cosa devo fare per arrivare da un punto A a
un punto B, ma che non mi si chieda di spiegare cosa succede sotto al
cofano).
Comunque ho ricopiato il listato in Script Editor, l'ho salvato, vi ho
cliccato sopra per eseguirlo... ma ora cosa deve succedere??
Immagino di dover mettere i numeri scelti in qualche punto ma dove?
Inoltre devo scusarmi per il crossposting. Volevo inviare due messaggi
separati ma devo essermi sbagliato.


 Tipo (in BASIC cosi' si capisce [leggi: in BASIC cosi' lo so fare]):
Grazie.
Purtroppo perň siamo nella stessa situazione dell'AppleScript di
Marco...
Io frequentai un corso di Basic nel lontano 1983 (?) quando i computer
erano Sinclair, ZX80, Commodore Pet...
Ma non ricordo molto. Cosě come non ricordo niente delle lezioni di
Analisi I e Analisi II ad Architettura :-(
Cosě mi trovo a guardare sconsolato quel listato, senza sapere come
utilizzarlo.


 Se ti va bene lo modifico per fartele scrivere in un file di testo.
No, mi va bene anche solo visualizzarli. Grazie.


 
E naturalmente il msg del Balestra non lo vedo.
E naturalmente non c'e' rischio di trovarlo su
Google o simili.
Vabbe'.


   [x] Never show startup screen
Non vuole salvarlo se non come formato testo.
Se provo "Registra col nome" mi dice che c'è un errore.


 In questo esempio ti andrebbe bene anche la somma di 60 volte 2?
Potrebbe andare, ma non sarebbe certamente quello che cerco. Diciamo che
potrei avere lo stesso numero ripetuto 2 o 4 volte, ma in tutti i casi
la selezione potrei poi farla io.
L'utilizzo... sai quei giochi enigmistici tipo "Quesito con la Susi"
della Settimana Enigmistica?: Carlo ha sei fratelli, la somma dei loro
anni è 200, Aldo ha 20 anni, Biagio... quanti anni ha l'ultimo fratello
sapendo che nessuno ha 30, 40 o 50 anni? (ho scritto a casaccio, non era
un vero quiz)
E' che in questi giorni stavo ripensando a certi giochi enigmistici come
anagrammi, parole crociate (oltre a quell'esempio che ti ho fatto)... e
ai programmi che potrebbero esistere per risolverli o anche crearli.
Non molto tempo fa qualcuno chiese notizie di un programma per comporre
automaticamente parole crociate in base a una lista di vocaboli e io
avevo suggerito "Crossword Wizard" (se non ricordo male il nome).
Questo caso che ho prospettato potrebbe servire invece a selezionare
gruppi di cifre (che potrebbero avere un certo rapporto tra loro) che
sommate danno un certo risultato.


 numero finito di elementi semplifichi parecchio la vita...
La serie potrebbe essere formata al massimo da una trentina di numeri,
non di più, per poterli far corrispondere alle lettere di un alfabeto,
più qualche segno come punto, virgola, punto interrogativo...
Per questo dicevo che potrebbero esserci anche delle ripetizioni, perché
potrei così attribuire un numero ad ogni lettera di nomi come Anna
(1+14+14+1 = 30) o Marcello, Carlotta...
(Ma qui siamo già pronti per it.giochi.enigmistica :-)


 piu` lontano, sebbene meno elegante ;)
Marco, stai davvero lavorando come un matto su questa cosa... grazie
ancora... :-)
L'ho copiato e incollato in ScriptEditor, ma anche stavolta, quando
voglio salvarlo mi esce un messaggio di errore:
"Non posso compilare lo script Senza Titolo perchè può essere salvato
solo in formato testo"
Lo salvo in formato testo, ma prima provo a eseguirlo. Esce un messaggio
di errore anche stavolta:
"Mi attendevo "," ma ho trovato identifier"
e il cursore si piazza alla fine di questa riga:
set tot to the text returned of (display dialog ¬


 Vai nelle preferenze dello script editor, e passa all'inglese.
Ho il 9.1
Non ci sono "Preferenze", ma nel "Formato AppleScript" trovo già
impostato come unica opzione "AppleScript English"


 compilato alla tua email (su 
tin.it
)
Grazie, l'ho ricevuto e funziona, ma ho notato che basta mettere anche
solo sei o sette numeri per trovarsi con una lista lunghissima di
risultati. Mi sa che se voglio usare tutti i numeri corrispondenti alle
lettere dell'alfabeto dovrò aspettare giorni per l'elaborazione.
Forse ci vorrebbero più condizioni... come ad esempio non più di due
numeri uguali, ma non stare a studiarci sopra ancora.
Ho poi visto anche che è la versione I.5 di ScriptEditor, del Sys 9.1,
che mi dà errori, la versione 1.6 del Sys 9.2.1 invece con lo stesso
listato funziona bene.


 Diego Cuoghi = "gode giuochi" :-)
Bello! :-)
Sono molto intrigato dall'enigmistica, soprattutto perchč in famiglia č
una passione diffusissima: il nonno scriveva crittografie con lo
pseudonimo di Fra Ristoro e ha pubblicato dei libri sull'argomento, due
zii sono collaboratori di Penombra (una rivista enigmistica venduta solo
per abbonamenti), una sorella appassionata di rebus...
Io ci provo... ma mi stanco presto. Non ho pazienza in questo campo.
Vorrei trovare subito le soluzioni, per questo, da infingardo, cerco le
scorciatoie :-).


 Comunque intanto ti incollo il post perso:
Oh. Grazie. Cosi' posso inchinarmi alla semplicita'
e alla superiorita' di AS sul BASIC :-)


 120 = 10 + 10 + 18 + 18 + 30 + 34
Se hai accesso a Mathematica puoi ammirare la potenza della programmazione
rule-based (se qualcuno sa come si traduce me lo dica per favore).
Questo l'ho trovato su The Mathematica Journal, Volume 6 Issue 2, 1996
chiamiamo lista la lista di valori (sì, lo so... che fantasia...)
    lista={2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42}
e poi ci applichi una bella regola di sostituzione ritardata che ti estrae
solo gli elementi la cui somma equivale al tuo valore. Quello che riporto è
una versione manuale che prevee che tu scelga il numero di elementi
    sol=lista /.
             {___,a_,___,b_,___,c_,___,d_,___} :> {a,b,c,d} /;
             a+b+c+d==120
che tradotto a spanne significa : alla lista che contiene gli elementi
a,b,c,d anche separati da un numero qualunque di altri numeri sostituisci la
lista di tali numeri in modo che la loro somma sia 120.
___ (tre underscore) significa zero o più elementi
Nel tuo caso si tratta di costruire una serie di regole che si adattino al
numero di elementi che vuoi considerare
sol=lista /. {___,a_,___,b_,___} :> {a,b} /; a+b==120
sol=lista /. {___,a_,___,b_,___,c_,___} :> {a,b,c} /; a+b+c==120
sol=lista /. {___,a_,___,b_,___,c_,___,d_,___} :> {a,b,c,d} /; a+b+c+d==120
questo metodo ha il difetto di fermarsi non appena trova una soluzione e di
restituire la lista originaria in caso non ne trovi alcuna.
Se ti interessano tutte le soluzioni con n elementi, puoi usare questo
(tratto dalla stessa fonte)
    Needs["DiscreteMath`Combinatorica`"]
    Trova[lista_,n_,value_]:=Select[KSubsets[lista,n], Plus @@ ##==value&]
KSubsets non fa altro che estrarre dalla lista tutti i sottoinsiemi di
cardinalità n. Dopodiche si selezionano solo quelli i cui elementi diano
somma value. Credo che una cosa del genere la puoi realizzare con un
programmino procedurale.
Esempio:
    Trova[lista,4,120]
        {{6, 34, 38, 42}, {10, 30, 38, 42}, {14, 26, 38, 42},
          {14, 30, 34, 42}, {18, 22, 38, 42}, {18, 26, 34, 42},
          {18, 30, 34, 38}, {22, 26, 30, 42}, {22, 26, 34, 38}}
Adoro Mathematica.
(ringrazia Don Piele per questa elegante soluzione, non me : ))))) )
saluti,
Peltio

serie di numeri: 2 6 10 14 18 22 26 30 34 38 42
chiedere il goal: somma([2,6,10,14,18,22,26,30,34,38,42],120,C).
vengono trovate 7867 liste C ordinate in modo decrescente. Se due
liste con gli stessi numeri in ordine diverso dovessero essere
considerate distinte, il predicato somma si puo' semplificare:
somma(_,Neg,_):-Neg<0,!,fail.
somma(_,0,[]).
somma(L,N,[H|T]):-
  member(L,H),M=N-H,somma(L,M,T).
Ciao

 
http://www.crossbow.it/cgi-bin/addendi.cgi
Fantastico!
Ma funziona solo se si è collegati o posso registrare la pagina a parte?


 Crucchizzati tutto, dai!
Ich hab' im Moment kein Zeit, mich zum Krukkieren.
Zuviele Messagen müss ich archivieren, zuviele Gruppen
müss ich vom Newsserver downloaden. Und das Leben ist
sooooo kurz. Ich trinke Leberkleister, weil... ich kenne
nicht wieso. Jollala-hi-hu, gruetzi mitenand.


 contempo passi anche al *client* crucco! :-D
A questo punto dovete dirmi qual'è questo server crucco... 


 calcolo:
http://www.ilog.com/products/oplstudio/trial.cfm
fa quello che tu dici. Pero`...
"Trial Version of ILOG OPL Studio is available for Windows 95, Windows
98, Windows NT, Windows 2000, and Linux (Intel). (The full version runs
on Sun Solaris as well."
ho trovato questo
-- 
The  ___    +.      _______+.           +.                         +
 ___/ (_)__ _______/_  / _ \     +      Tonight OPEN at 11.00 PM    .
/ _  / (_-</ __/ _ \/ /\_, /    .     House & Disco back from '70s
\_,_/_/___/\__/\___/_//__[Club]     "Chic, not geek." - ICQ# 21184609

 "is available for Windows..."
Grazie
(lo dico sottovoce... ho anche un PC)


 server crucco...)
Per l'estero che vedo io, Mailgate o Google sono piu' che
sufficienti :-)


 ha un sito?
Proprio un sito di Penombra no, ma hanno realizzato un altro sito
enigmistico più generale, dove ci sono riferimenti a diverse riviste,
tra cui Penombra:
http://www.enignet.it/
