Wie Brute Force arithmetisches Puzzle?

8

Ein Freund hat dieses Puzzle geteilt:

  

Wie mache ich 21 aus den Zahlen 1, 5, 6, 7?

     

Sie können die Operationen Addition, Subtraktion, Multiplikation und Division sowie Klammern verwenden. Sie müssen jede Nummer einmal verwenden.

Ich habe es schließlich auf Papier gelöst - zwei Tage später. Kein Zweifel, ein Computer könnte alle Lösungen in einer Sekunde erzwingen.

Wie auch? Ich habe versucht, alle Zeichenketten a.b.c.d zu erzeugen, die die Zahlen für Buchstaben und Operationen für Punkte einfügen, aber es verfehlte meine Lösung.

Bonusrätsel:

  • Wie macht man 11 von 1,5,6,7?
  • Wie macht man 16 von 1,5,6,7?
Colonel Panic 30.03.2015, 18:19
quelle

2 Antworten

9

Ein naheliegender Ansatz wäre folgender:

  1. Sie beginnen mit einem Vektor S von vier Zahlen: S = ( 1, 5, 6, 7 )
  2. Wähle zwei beliebige Zahlen a und b von S , entferne sie aus S
  3. Wenden Sie eine beliebige arithmetische Operation auf a und b an und erhalten Sie so eine neue Zahl c (achten Sie darauf, Division durch Null zu vermeiden und genaue Division zu überprüfen, falls das Problem es erfordert)
  4. Fügen Sie c in S ein und erhalten Sie so S'
  5. Fahren Sie mit Schritt 1 fort und verwenden Sie jetzt S' anstelle von S

Brute-Force-Verzweigung wird in Schritt 2 (Auswählen von zwei Zahlen) und Schritt 3 (Auswählen von Operationen) durchgeführt. Der Zyklus sollte wiederholt werden, bis sich S auf nur 1 Element reduziert, was das Ergebnis für diesen speziellen Brute-Force-Zweig ist.

Klammern werden nicht explizit verwendet, aber sie sind implizit vorhanden.

Wenn eine Verzweigung mit 21 in S endet, haben Sie eine Lösung, an der Sie entweder verzweigen oder die Verzweigung fortsetzen können, um nach anderen Lösungen zu suchen.

    
AnT 30.03.2015, 18:25
quelle
2

Hier ist der Algorithmus "pop two, combine, recurse" wie von AnT vorgeschlagen, in Python kodiert. Der schwierigste Teil war das Zusammenstellen der Ausdrücke nach der Rekursion. Ich habe Suchen und Ersetzen verwendet.

%Vor%

Lösungen für die drei Rätsel:

%Vor%

(Das dritte Puzzle ist unmöglich)

    
Colonel Panic 31.03.2015 10:18
quelle

Tags und Links