Skip to content

Instantly share code, notes, and snippets.

@made2591
Created February 5, 2023 11:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save made2591/3c47a713fee8dc5ebbaf24f71b384955 to your computer and use it in GitHub Desktop.
Save made2591/3c47a713fee8dc5ebbaf24f71b384955 to your computer and use it in GitHub Desktop.
This Cingo script helps you find the best Fantasanremo team by looking for artists quotation, and a few bonus malus rules evaluated with my personal estimation. Enjoy the ASP!
#const max_singer = 5.
#const max_baudi = 100.
singer(marco_mengoni,35,1,2,0,1,26).
singer(giorgia,40,0,0,0,2,25).
singer(ultimo,40,2,0,0,0,27).
singer(lazza,110,1,0,0,1,22).
singer(elodie,90,0,0,0,2,24).
singer(madame,110,0,1,0,1,22).
singer(colapesce_dimartino,150,1,0,0,1,20).
singer(mara_sattei,170,1,0,0,2,21).
singer(gianluca_grignani,310,2,0,0,2,20).
singer(gianmaria,410,1,0,0,1,17).
singer(tananai,260,2,0,0,1,22).
singer(ariete,260,1,0,0,1,21).
singer(levante,410,1,1,0,2,20).
singer(articolo_31,610,2,0,0,1,21).
singer(colla_zio,810,1,0,1,1,16).
singer(coma_cose,510,1,0,1,1,20).
singer(moda,410,1,0,0,1,18).
singer(paola_e_chiara,1510,0,1,0,2,22).
singer(lda,1210,1,0,0,1,21).
singer(leo_gassman,1010,1,0,0,1,18).
singer(mr_rain,810,1,0,1,1,19).
singer(anna_oxa,1010,0,2,0,1,18).
singer(rosa_chemical,810,1,0,0,1,19).
singer(i_cugini_di_campagna,1510,2,0,0,1,21).
singer(olly,2010,1,1,1,1,16).
singer(sethu,2010,1,1,1,1,16).
singer(shari,1010,1,1,1,1,17).
singer(will,2010,1,1,1,1,16).
% dai il cinque a Morandi (+10)
% vieni scalzo (+5)
% sbaglia nome (-10)
% inciampa sulla scalinata (-30)
% #maximize{S : operation_cost(S)}.
max_singer { selected(Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi) : singer(Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi) } max_singer.
operation_cost(S) :- S = #sum{ I, Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale : singer(Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, I), selected(Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, I) }.
quotation_cost(Q) :- Q = #sum{ I, Nome, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi : singer(Nome, I, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi), selected(Nome, I, CinqueMorandi, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi) }.
cinque_a_morandi(Cinque) :- Cinque = #sum{ I, Nome, Quotazione, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi : singer(Nome, Quotazione, I, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi), selected(Nome, Quotazione, I, VieneScalzo, SbagliaNome, CadeDalleScale, Baudi) }.
viene_scalzo(Scalzo) :- Scalzo = #sum{ I, Nome, Quotazione, CinqueMorandi, SbagliaNome, CadeDalleScale, Baudi : singer(Nome, Quotazione, CinqueMorandi, I, SbagliaNome, CadeDalleScale, Baudi), selected(Nome, Quotazione, CinqueMorandi, I, SbagliaNome, CadeDalleScale, Baudi) }.
sbaglia_nome(Sbaglia) :- Sbaglia = #sum{ I, Nome, Quotazione, CinqueMorandi, VieneScalzo, CadeDalleScale, Baudi : singer(Nome, Quotazione, CinqueMorandi, VieneScalzo, I, CadeDalleScale, Baudi), selected(Nome, Quotazione, CinqueMorandi, VieneScalzo, I, CadeDalleScale, Baudi) }.
inciampa_scale(Scale) :- Scale = #sum{ I, Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, Baudi : singer(Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, I, Baudi), selected(Nome, Quotazione, CinqueMorandi, VieneScalzo, SbagliaNome, I, Baudi) }.
#minimize{Quotazione : quotation_cost(Quotazione)}.
#maximize{Cinque : cinque_a_morandi(Cinque)}.
#maximize{Scalzo : viene_scalzo(Scalzo)}.
#minimize{Sbaglia : sbaglia_nome(Sbaglia)}.
#minimize{Scale : inciampa_scale(Scale)}.
:- operation_cost(S), S > max_baudi.
#show selected/7.
#show operation_cost/1.
#show quotation_cost/1.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment