Um es einfach zu lösen:
Leistungsmäßig bedeutet das:
Für Kriterium 1:
Um es optimal zu lösen:
Ich glaube, dass das funktionieren wird. Es gibt nur einen Weg, das herauszufinden.
Hier ist mein Code zur Identifizierung von Kriterium 2 (Unterschied von 1, 2 oder 3):
let differFlag = true; let i = 1; while (differFlag && i < list.length) { let amount = Math.abs(list[i] - list[i - 1]); if (![1, 2, 3].includes(amount)) { differFlag = false; } i++; }
Hier ist mein Code zur Identifizierung von Kriterium 1 (alle Unterschiede nehmen zu oder ab):
let differFlag = true; let i = 1; let differences = []; while (differFlag && i < list.length) { let amount = list[i] - list[i - 1]; differences.push(amount); if (![1, 2, 3].includes(Math.abs(amount))) { differFlag = false; } i++; }
Hier ist die letzte Bedingung, die einen sicheren Bericht erfasst:
if ( differFlag && (differences.every((el) => el > 0) || differences.every((el) => el < 0)) ) { safeCount++; }
Insgesamt generiert mein Algorithmus die richtige Antwort für die Beispieleingabe.
Wird es dasselbe für meine Puzzle-Eingabe tun??
Yessssirrrreee!!
Süß!
Das macht die Sache sicherlich etwas komplizierter.
Ich möchte einen Algorithmus vermeiden, der jede mögliche Permutation eines Berichts prüft. Dafür müssten Millionen von Berichten erstellt werden.
Die erste gute Nachricht ist:
Für meine Rätseleingabe sind das ungefähr 200, bei denen ich keine Permutationen überprüfen muss.
Dennoch ist 800/1000 immer noch eine Menge an Listen, um Permutationen vollständig zu erkunden.
Ich sehe ehrlich gesagt keinen Weg, um zu vermeiden, dass mein Algorithmus bei jeder Permutation unsicherer Berichte ausgeführt wird.
Mist.
Es ist Zeit, eine Schleife hinzuzufügen, um jede Zahl in unsicheren Berichten zu durchlaufen – die Zahl, die entfernt werden soll, und dann die mutierte Liste auf eine bestandene Note zu überprüfen.
Am Ende habe ich meine while-Schleife mit den hinzugefügten Zeilen dupliziert, um eine Zahl aus jedem nachfolgenden Testbericht zu duplizieren und zu entfernen.
Es ist viel mehr Code.
Aber es funktioniert! Ich generiere die richtige Antwort für die Rätseleingabe!
Frage ist:
Lassen Sie es uns ausführen und sehen...
Hmmm, es läuft, aber ich bekomme eine Antwort, die nur geringfügig größer ist als meine Antwort in Teil 1. Das scheint falsch.
Es schadet nicht, es einzureichen, oder????
Es istrichtig!
Heiliger Rauch!
Das ist unglaublich!
Und es macht wirklich Spaß, es zu lösen!
Vier goldene Sterne für Tag 3.
Bring noch mehr wundervolle Rätsel!
Das obige ist der detaillierte Inhalt vonRotnasige Berichte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!