Mon Compte est BON !...

Bon, le look est pas terrible, mais c'est l'agorithme qui m'a intéressé...(il est bien décrit içi)

Avec N plaques,
on teste au préalable si une plaque n'est pas le résultat cherché...
sinon si N>1
on cherche tous les couples de plaques possibles:
par exemple avec  (1, 2, 3, 4) on a ( 1 2, 1 3, 1 4, 2 3, 2 4, 3 4)
à tous ces couples on applique les 4 opérations
pour chaque opération on obtient une nouvelle plaque + les N-2 restantes, on relance la procédure avec ces N-1 plaques,


comptebon
Sources et exécutables

Pour le mot le plus long

c'est beaucoup plus simple....
Il faut un dictionnaire (par exemple)
dés lors on balaye ce dictionnaire et on teste si chaque mot est inclus dans le tirage...
si oui c'est une solution....on triera ensuite les solutions sur leur longueur pour avoir la plus longue
Par exemple en Delphi, avec un dictionnaire chargé dans MemoDico:

procedure TFrmLMLPL.BtnChercheClick(Sender: TObject);
var
  i: Integer;
  tirage, mot: str25;
begin
  MemoSolutions.Clear;
  tirage := EditTirage.Text;
  for i := 0 to MemoDico.Lines.Count - 1 do
  Begin
    mot := MemoDico.Lines.Strings[i];
    if inclus(mot, tirage) then MemoSolutions.Lines.add(mot+' '+IntToStr(length(mot)));
   end;
  TriSurLaLongueur(MemoSolutions);
end;

trop facile !...
Une possibilté pour inclus s1 dans s2:
function inclus(s1, s2: str25): boolean;
var
  i, p: Integer;
  r: boolean;
begin
 if (length(s1)>length(s2)) then result:=false
else begin
    r := true;
    for i := 1 to length(s1) do
    begin
      p := Pos(s1[i], s2, 1);
      if p > 0 then s2[p] := ' '
      else begin r := False; break; end;
    end;
    result := r
end;
end;

Sources et exécutables
lmlpl delphi




d'autres exemples en JS