Skip to content

Instantly share code, notes, and snippets.

@saska-gist
Created December 21, 2018 00:19
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 saska-gist/5aec3e0783105f87fda3d8fd0c6e53c2 to your computer and use it in GitHub Desktop.
Save saska-gist/5aec3e0783105f87fda3d8fd0c6e53c2 to your computer and use it in GitHub Desktop.
# A scip model for solving the puzzle at
# https://www.puzzleprime.com/brain-teasers/deduction/send-more-money/
set letters := { 'D', 'E', 'M', 'N', 'O', 'R', 'S', 'Y' };
# what digit does each letter represent?
var digits[letters] integer >=0 <=9;
# all digits must be different
subto d: forall <l1,l2> in letters*letters with l1 > l2 do
abs(digits[l1] - digits[l2]) >= 1;
# the leftmost digit cannot be zero
subto d1: digits['S'] >= 1;
subto d2: digits['M'] >= 1;
# the three numbers behind the words
var number_1 ; var number_2 ; var number_3 ;
subto f1: number_1 ==
digits['S']*1000 + digits['E']*100 + digits['N']*10 + digits['D']*1;
subto f2: number_2 ==
digits['M']*1000 + digits['O']*100 + digits['R']*10 + digits['E']*1;
subto f3: number_3 ==
digits['M']*10000 + digits['O']*1000 + digits['N']*100 + digits['E']*10 + digits['Y']*1;
subto total: number_1 + number_2 == number_3;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment