Teksty zagadek zaczerpnąłem z broszurki zatytułowanej “GŁÓWKOŁAMKI” - bezpłatnego dodatku do tygodnika “Wiedza i Życie” ISSN 0137-8929

ZIMNE ŻARCIE
Czterech braci wybrało się na lody. Każdy z nich zamówił inne lody i pochłonął inną liczbę gałek. Ten z braci, który kupił lody czekoladowe, zjadł tyle gałek, ile razem zjedli Jacek i ten z braci, który kupił lody pistacjowe. Placek nie jadł lodów waniliowych i skonsumował parzystą liczbę gałek, a chłopiec, który zamówił lody kawowe zjadł ich dwa razy więcej niż Wacek. Jakie lody jadł każdy z chłopców i ile gałek kupił ?

Rozwiązanie:
Zakładam następującą kolejność imion:
1- Jacek
2- Wacek
3- Placek
4- Gacek
Tworzę listę zawierającą liczby gałek oraz listę zawierającą rodzaje lodów, a następnie ich permutacje. W ten sposób załatwiam warunki, że liczby gałek i rodzaje lodów nie mogą się powtarzać.
{4,7,8,11} oznacza, że Jacek kupił 4 gałki, Wacek 7, Placek 8, a Gacek - 11. Podobnie {czek,wanil,kaw,pist} oznacza, że Jacek wybrał lody czekoladowe, Wacek - waniliowe, Placek - kawowe, a Gacek  - pistacjowe.

liczbagałek={4,7,8,11};

pliczba=Permutations[liczbagałek]

rodzajlodów={czek,wanil,kaw,pist};

Simplify[rodzajlodów[[3]]==kaw]

prodzaj=Permutations[rodzajlodów]

(* Nam się to wydaje oczywiste, ale trzeba o tym zawiadomić program Mathematica *)

$Assumptions=(wanil≠ kaw)&&(wanil≠ czek)&&(wanil≠ pist);

(* Pokazuję operacje na wybranych listach. Najważniejsza z instrukcji, Position, pokazuje numer wybranego elementu w liście. *)

prodz=prodzaj[[4]]

plicz=pliczba[[7]]

Position[prodz,czek]

(* podwójny nawias, którego nie potrzebujemy ! *)

Position[prodz,czek][[1]]

(* Został wciąż pojedynczy nawias. Aby pozbyć się tych niepotrzebnych nawiasów, piszemy w ten sposób:  *)

posczk=Position[prodz,czek][[1]][[1]]

pospist=Position[prodz,pist][[1]][[1]]

poskaw=Position[prodz,kaw][[1]][[1]]

(* A tak, chwilowo dla wybranych permutacji, zapisuję wszystkie warunki podane w zadaniu ... *)

w1=plicz[[posczk]]==plicz[[1]]+plicz[[pospist]];

w2=Simplify[prodz[[3]]≠ wanil];

w3=(plicz[[3]]==4)||(plicz[[3]]==8);

w4=plicz[[poskaw]]==2*plicz[[2]];

(* ... oraz ich iloczyn logiczny *)

w=w1&&w2&&w3&&w4;

Do[{
prodz=prodzaj[[prdz]];plicz=pliczba[[plb]];posczk=Position[prodz,czek][[1]][[1]];
pospist=Position[prodz,pist][[1]][[1]];
poskaw=Position[prodz,kaw][[1]][[1]];
w1=plicz[[posczk]]==plicz[[1]]+plicz[[pospist]];
w2=Simplify[prodz[[3]]≠ wanil];
w3=(plicz[[3]]==4)||(plicz[[3]]==8);
w4=plicz[[poskaw]]==2*plicz[[2]];
w=w1&&w2&&w3&&w4;
If[w,Print[prodz,"  ",plicz]]},{prdz,1,24},{plb,1,24}]

Mamy więc jednoznaczne rozwiązanie:
Jacek zjadł 7 gałek lodów waniliowych,
Wacek zjadł 4 gałki lodów pistacjowych,
Placek zjadł 8 gałek lodów kawowych,
Gacek zjadł 11 gałek lodów czekoladowych !

Kryptogramy
W kryptogramie po zastąpieniu liter przez cyfry otrzymujemy prawidłowe równanie arytmetyczne.

Kryptogram nr 1
TRÓJSKOK: HOP + HOP + HOP = SKOK

(* w pierwszej wersji możliwe są powtórzenia *)

Do[If[3*(100*h+10*o+p)==1000*s+100*k+10*o+k,Print["h=",h,"  o=",o,"  p=",p,"  s=",s,"  k=",k]],{h,1,9},{o,0,9},{p,0,9},{s,1,9},{k,0,9}]

(* w tej wersji mamy jednoznaczne rozwiązanie *)

Do[If[(3*(100*h+10*o+p)==1000*s+100*k+10*o+k)&&({h,o,p,s,k}==DeleteDuplicates[{h,o,p,s,k}]),Print["h=",h,"  o=",o,"  p=",p,"  s=",s,"  k=",k]],{h,1,9},{o,0,9},{p,0,9},{s,1,9},{k,0,9}]

Kryptogram nr 2
TENIS: GEM + GEM +GEM +GEM +GEM + GEM = SET

(* w pierwszej wersji możliwe są powtórzenia *)

Do[If[6*(100*g+10*e+m)==100*s+10*e+t,Print["  g=",g,"  e=",e,"  m=",m,"  s=",s,"  t=",t]],{g,1,9},{e,0,9},{m,0,9},{s,1,9},{t,0,9}]

(* w tej wersji mamy jednoznaczne rozwiązanie *)

Do[If[(6*(100*g+10*e+m)==100*s+10*e+t)&&({g,e,m,s,t}==DeleteDuplicates[{g,e,m,s,t}]),Print["  g=",g,"  e=",e,"  m=",m,"  s=",s,"  t=",t]],{g,1,9},{e,0,9},{m,0,9},{s,1,9},{t,0,9}]