Einführung
Dies ist eines meiner Lieblingsrätsel.
Wenn Sie eine Ziffer (sagen Sie 3) und die Häufigkeit der Verwendung dieser Ziffer (sagen Sie 5) gegeben haben, generieren Sie 10 Ausdrücke, die mit nur + zu 1, 2, 3, 4, 5, 6, 7, 8, 9 und 10 führen. -, ×, ÷, ^ und √ (Wurzel) (Klammern dürfen Operationen gruppieren).
Beispielsweise:
(3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5
Beachten Sie, dass für alle obigen Werte fünf 3en und die mathematischen Operationen und das Ergebnis 5 verwendet werden. Sie können auch eine 3 vor √ verwenden, um eine Kubikwurzel zu bezeichnen. Gleiches gilt für die Verwendung von 4 vor √, um eine vierte Wurzel zu bezeichnen.
Beachten Sie auch, dass zwei Dreien verwendet werden können, um 33 zu bilden, oder drei Dreien können verwendet werden, um 333 zu bilden und so weiter.
Herausforderung
- Sie erhalten zwei Zahlen (beide von 1 bis 5) als Funktionsargument, STDIN oder Befehlszeilenargument.
- Die erste Zahl gibt an, welche Ziffer verwendet werden soll, und die zweite Zahl gibt an, wie oft diese Ziffer im Ausdruck verwendet werden soll.
- Ihr Programm sollte ein Array der Größe 10 (oder 10 durch Leerzeichen getrennte Zahlen) ausgeben, wobei jedes Element angibt, ob ein mathematischer Ausdruck (unter Verwendung nur der zulässigen Operatoren), der zur
(index + 1)
Zahl führt, möglich ist oder nicht, wobei ein wahrer / falscher Wert verwendet wird.
Zum Beispiel, wenn die Eingabe ist
1 3
Dann sollte der Ausgang sein
[1, 1, 1, 0, 0, 0, 0, 0, 0, 1]
weil nur 1, 2, 3 und 10 mit drei Einsen ausgedrückt werden können.
Ergebnis
- Dies ist ein Code-Golf, so dass die minimale Codelänge in Bytes gewinnt.
Bonus
Alles drucken [−50]
Subtrahieren Sie 50 von Ihrer Punktzahl, wenn die Elemente des Ausgangs-Arrays der Gesamtzahl der plausiblen Kombinationen entsprechen, um den (index + 1)
Wert anstelle von wahrheitsgemäßen oder falschen Werten zu erhalten.
Zum Beispiel, wenn es nur 3 mögliche Kombinationen von fünf 3s , die bis 5 zur Folge hat , dann 4 ist das Ausgangsarray th sollte Eintrag 3 sein.
Extreme Mathematik [−100]
Subtrahieren Sie 100 von Ihrer Punktzahl, wenn die Elemente des Ausgabearrays mindestens einen der tatsächlichen Ausdrücke enthalten, die zu dem (index + 1)
Wert führen.
Wenn zum Beispiel fünf 3s Verwendung des 4 der Ausgangs - Array - ten Eintrag kann entweder (3^3 + 3)/(3 + 3)
, (33 - 3)/(3 + 3)
oder3 + 3/3 + 3/3
Überfordert [−200]
Subtrahieren Sie 200 von Ihrer Punktzahl, wenn die Elemente des Ausgabearrays alle möglichen Kombinationen enthalten (getrennt durch |
). Dieser Bonus wird zusätzlich zum Extreme Maths- Bonus hinzugefügt , sodass Sie insgesamt −300 erhalten.
Wenn zum Beispiel fünf 3s Verwendung des 4 der Ausgangsarray - ten Element sollte(3^3 + 3)/(3 + 3)|(33 - 3)/(3 + 3)|3 + 3/3 + 3/3
Hinweis: Beliebige zwei Ausdrücke, um dasselbe Ergebnis zu erzielen, sollten logisch unterschiedlich sein und in beiden einen unterschiedlichen Ansatz haben.
Zum Beispiel, um 5 mit fünf 3en zu bekommen, 3 + 3/3 + 3/3
ist das Gleiche wie 3/3 + 3 + 3/3
oder 3/3 + 3/3 + 3
weil für jeden von ihnen der gleiche Ansatz gewählt wird. (3^3 + 3)/(3 + 3)
und (33 - 3)/(3 + 3)
unterscheiden sich, da die 30 im Zähler über verschiedene Ansätze erreicht wird.
UPDATE : Nachdem alle Antworten durchgesehen wurden, wurde festgestellt, dass alle Antworten Unvollkommenheiten aufgrund von Randfällen von unär -
und √ aufwiesen. Das Fehlen dieser Randfälle wurde daher als in Ordnung angesehen, soweit es um die Vollständigkeit der Antworten geht.
Dies ist eine schwierige, aber sehr interessante Frage.
Viel Spaß beim Golfen!
1
s auf 10 ?