Bestimmen Sie anhand einer Additionspyramide , ob sie gelöst werden kann. Eine Additionspyramide besteht aus Schichten , von denen jede eine Nummer kleiner als die darunter liegende hat. Die Schicht wird als symbolisiert . ist die Basisschicht und ist die Schicht auf . Die te Zahl von wird als . ist die Zahl ganz links von und ist die Zahl rechts von . Sie können sich vorstellen, das sich aufund in der Mitte, daher der Name "addition Pyramide ".
- , dh jede Zahl in der Pyramide ist eine positive ganze Zahl ungleich Null.
- , dh jede Zahl, die sich nicht auf der Basisschicht der Pyramide befindet, ist die Summe von die zwei Zahlen darunter.
- Wenn hat Zahlen, hat Zahlen daher ist die am weitesten rechts liegende Anzahl von . Einfacher ausgedrückt hat jede Ebene eine Zahl weniger als die darunter liegende Ebene.
Ein Additionspyramiden-Puzzle ist eine Additionspyramide, bei der einige Zahlen entfernt (durch Ersetzt ) wurden. Seine Lösung ist eine Additionspyramide , in der , die Zahlen, die ursprünglich im Puzzle vorhanden waren, haben wurde unverändert gelassen. Ein solches Puzzle kann mehr als eine Lösung haben.
Ihre Aufgabe ist es, anhand eines zusätzlichen Pyramidenrätsels festzustellen, ob es genau eine Lösung gibt.
Eingang
Sie können Eingaben in einer der folgenden Formen erhalten, aber konsistent sein:
- Array von Schichten.
- Anordnung von Ebenen, die wie eine Pyramide geformt sind und einen konsistenten nicht-positiven ganzzahligen Wert als Trennzeichen zwischen Elementen (jeweils nur einmal verwendet) sowie linker und rechter Abstand verwenden. Der Separator und die Polsterung müssen identisch sein.
- Array von Ebenen mit einem konsistenten gültigen rechten oder linken Abstand (Sie müssen konsistent sein und dürfen in diesem Fall nicht den rechten und den linken Abstand mischen).
Bitte beachten Sie, dass ein konsistenter Wert, der keine streng positive Ganzzahl ist, verwendet werden muss, um eine fehlende Zahl darzustellen. Dieser Wert kann nicht als Auffüllung verwendet werden. Sie können die Ebenen auch verkettet nehmen (Sie können sie immer noch trennen), und die Reihenfolge kann entweder von der Basis nach oben oder von oben nach unten erfolgen.
Ausgabe
Einer von zwei konsistenten unterschiedlichen Werten, wobei einer das Vorhandensein einer eindeutigen Lösung und der andere das Fehlen einer Lösung oder das Vorhandensein von mehr als einer Lösung darstellt.
Regeln
- ist immer wahr, wenn , dh die Eingabe enthält garantiert keine Zahl über zwei anderen Zahlen, die nicht ihre Summe sind, wenn alle drei Zahlen bekannt sind.
- die Pyramide enthält mindestens eine bekannte Zahl.
- Tu diese Dinge nicht .
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort! Lassen Sie sich jedoch nicht davon abhalten, eine Lösung zu veröffentlichen, nur weil Ihre Sprache "zu ausführlich" ist.
Testfälle
Eine Anordnung mit den Schichten von der Oberseite zu der Basis ist für diese Testfälle verwendet, mit 0
repräsentierte.
[[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True
[[32], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] -> True
[[0], [1, 1]] -> True
[[1], [0, 0]] -> False
[[10], [5, 5], [2, 3, 2], [0, 0, 0, 0]] -> False
[[5], [0, 0], [0, 0, 0]] -> False
Arbeitsbeispiele
Die Testfälle werden hier bearbeitet.
Einzigartige Lösung 1
Schritt 1: .
Schritt 2: .
Schritt 3: .
Schritt 4: .
Die Schritte 5 bis 6 ähneln 4.
Hier haben wir also unsere einzigartige Lösung.
Einzigartige Lösung 2
Schritt 1: Hier gibt es keinen offensichtlichen Ansatz. Versuchen wir also, die minimal möglichen Werte zu verwenden.
Schritte 2-5: Es sieht so aus, als würden die Mindestwerte zu einer Lösung führen. Daher ist dies die einzige Lösung und daher eindeutig.
Hinweis: Es gibt einen Satz über Additionspyramiden-Rätsel im Zusammenhang mit diesem Rätsel, den Sie beweisen können, wenn Sie genau genug nachdenken.
Einzigartige Lösung 3
Dies ist eine offensichtlich einzigartige Lösung.
Keine Lösung 1
Keine Lösung 2
Nicht eindeutige Lösung
Zwei Lösungen:
Da es mindestens zwei Lösungen gibt, gibt es keine eindeutige Lösung.
quelle
Antworten:
Gelee ,
1816 BytesProbieren Sie es online aus!
Eine monadische Verbindung, die die Pyramide in umgekehrter Reihenfolge nimmt und 1 für wahr und 0 für falsch zurückgibt. Erzeugt alle möglichen Pyramiden mit einer Basis bis zur maximalen Anzahl in der Pyramide und prüft, ob es eine eindeutige Übereinstimmung für die Eingabe gibt.
Vielen Dank an @Arnauld für den Hinweis, dass dies fehlgeschlagen ist
[[1,0],[0]]
. jetzt korrigiert.Vielen Dank an @JonathanAlan für das Speichern von 2 Bytes!
Erläuterung
quelle
ṗ
der maximalen Zahl im Gitter mit der Länge der Basis. zB wenn die maximale Anzahl 10 und die Länge der Basis 4 wäre, würde es alles von[1,1,1,1]
bis testen[10,10,10,10]
, dh 10000 Möglichkeiten.[[0,0],[0]]
.‘
,»2
was auch den Vorteil hat, die mit meiner letzten Änderung verlorene Effizienz wiederzugewinnen, wenn auch auf Kosten eines Bytes....Ƭ€Ṗ€a@ċ⁼1
spart zwei Bytes (es sei denn, es gibt Randfälle mit dem UND, die von den Tests nicht berücksichtigt werden?)C # (Visual C # Interactive Compiler) ,
303227 ByteLöst eine Ausnahme aus, wenn true, wird normal ausgeführt, wenn false.
Probieren Sie es online aus!
quelle
Wolfram Language (Mathematica) ,
8588 BytesProbieren Sie es online aus!
+3 behoben.
Brute Force: Überprüfen Sie für alle Basen mit Werten , ob die resultierende Pyramide mit der angegebenen Form übereinstimmt, und prüfen Sie, ob die Gesamtzahl der Übereinstimmungen 1 beträgt. Die Eingabe erfolgt als Liste der Ebenen, Basis zuerst, mit Darstellung fehlender Zahlen.
1..(sum of all numbers)
0
quelle
05AB1E , 25 Bytes
Nimmt die Pyramidenschichten auf den Kopf, von der Basis bis zur Spitze (dh
[[0,0,0,1],[0,2,0],[0,0],[10]]
).Außerdem scheint es irgendwo in 05AB1E einen Fehler
.Γ
innerhalb einer Karte zu geben. Der©...®š
sollte nur...yš
für -1 Byte sein.Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
Eine kleinere Alternative für gleiche Bytes
©.ΓüO}®š
könnte sein[Ðg#üO}\)
: Probieren Sie es online aus.Erläuterung:
quelle
a%b == 0
eine Verknüpfung für zu verwendena == b || a == 0
, aber das funktioniert nicht, da a ein Vielfaches von b sein kann.[[0,0],[0]]
die es unendlich viele Lösungen gibt. Ich denke, ich wechsle nur>
zu den korrekt akzentuiertenI
Korrekturen..S*
anstelle von%
, also nur +2 Bytes.Haskell, 106 Bytes
Nimmt eine umgedrehte Pyramide, z
[[0,0,0,1],[0,2,0],[0,0],[10]]
.Probieren Sie es online aus!
Der Brute-Force-Ansatz in Haskell:
t
(mapM(\_->[1..sum(sum<$>x)])x
), wobei die Zahlen von 1 bis zur Summe aller Zahlen in der Eingabepyramide reichent
(iterate(z(+)=<<tail)t
)z(z(#))x
). Die Vergleichsfunktion gibta # b
zurück,True
wenn beide Zahlen gleich odera
Null sind (a*b==a*a
).1
für jede passende Pyramide ein und vergleichen Sie die resultierende Liste mit der Singleton-Liste[1]
.quelle