Sie haben ein Eingabearray der Größe m * n. Jede Zelle im Array wird entweder mit P oder T gefüllt. Die einzige Operation, die Sie für das Array ausführen können, ist das Umblättern von Spalten. Wenn Sie eine Spalte spiegeln, wechseln die Buchstaben in allen Zellen dieser Spalte (P wird zu T und umgekehrt). Wenn Sie eine 'x'-Anzahl von Zeilen mit demselben Buchstaben haben (z. B. PPPP), erhalten Sie einen Punkt. Entwerfen Sie einen Algorithmus, der das Array aufnimmt und eine Lösung (welche Spalten gespiegelt werden sollen) zurückgibt, sodass das resultierende Array die maximal mögliche Anzahl von Punkten aufweist.
Hinweis: Falls es mehrere Lösungen gibt, die die höchste Punktzahl erzielen, wählen Sie die mit der niedrigsten Anzahl von Flips. Beispiel:
Eingangsarray:
PPTPP
PPTPP
PPTTP
PPPTT
PPPTT
Ausgabe:
3
Erläuterung:
Eine Lösung, die die höchsten Punkte liefert: Spalte Nr. 3
Dann wäre das ursprüngliche Array:
PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT
//Total: 2 points
Beachten Sie, dass Sie auch die Spalten 4 und 5 spiegeln können, um eine Punktzahl von zwei zu erhalten, dies erfordert jedoch einen zusätzlichen Flip.
Sie können jedes geeignete Eingabeformat verwenden, um das zweidimensionale Array darzustellen, und Sie können auch zwei unterschiedliche, aber feste Werte verwenden, um P
und darzustellen T
.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Antworten:
APL, 37
Beispiel:
Hier getestet.
quelle
Pyth , 28
Nimmt Eingaben in Form einer verschachtelten Liste vor, z
Gibt den Ausgang 0-indiziert aus, z
^U2lhQ
: Erzeugt alle möglichen Listen von Nullen und Einsen mit der richtigen Länge._osZ
: Ordnet diese Listen von den meisten Einsen bis zu den wenigsten an.+/QN/Qm!dN
: Zählt, wie oft jede Liste (N
) und ihre Umkehrung, vertauschte 0s und 1s (m!dN
) in der Eingabe auftreten. Ersteres entspricht einer Reihe von Flips, bei denen alle Nullen und bei letzteren alle Einsen übrig bleiben.eo
: Ordnet die Liste nach dem obigen Schlüssel und nimmt das letzte Element, das das Ergebnis mit den am besten übereinstimmenden Spalten ist, und darunter das mit den am wenigsten übereinstimmenden.f@ ... TUhQ
: Konvertiert diese Liste der Einsen und Nullen in eine Liste der zu spiegelnden Indizes.Ändern Sie für die 1-Indizierung den Wert
d
in ak
und setzen Sie ihn dannmhd
an den Anfang.quelle
CJam,
5351 BytesDies liest ein zweidimensionales Array von 0s und 1s aus STDIN. ZB wäre das Beispiel in der Frage
Teste es hier.
Hiermit werden zunächst alle möglichen Teilmengen von Spalten in aufsteigender Reihenfolge abgerufen, dann die Kippvorgänge für jede Teilmenge ausgeführt und nach der Anzahl der Zeilen sortiert, in denen sich noch sowohl Nullen als auch Einsen befinden. Schließlich geben wir nur die erste solche Teilmenge zurück. Dies setzt voraus, dass die Sortierung stabil ist, so dass die anfängliche Reihenfolge mit zunehmender Länge für den Kabelbinder sorgt.
quelle
Haskell, 98
Das Eingabeformat ist eine Liste mit Ints. Sie können eine String-Version zum Testen verwenden:
oh nein die Räume! es tut weh!
Dies funktioniert, indem wir die Zeilen durchlaufen und die Anzahl der Punkte berechnen, die wir erhalten, wenn wir die Spalten so spiegeln, dass diese Zeile uns einen Punkt einbringt.
Als erstes ist zu bemerken, dass das Umkehren der Zeile in alle
True
oder alleFalse
keine Rolle spielt, da die Gitter genau umgekehrt zueinander sind und daher genau die gleiche Punktzahl haben.Die Art und Weise, wie wir die Anzahl berechnen, wenn eine bestimmte Zeile einen Punkt erhält, ist wie folgt: Wir iterieren erneut über die Zeilen und addieren die Punkte, die jede Zeile uns gibt, wobei wir die Tatsache zugrunde legen, dass sie genau dann funktionieren, wenn die Zeilen entweder identisch oder genau umgekehrt sind.
Wenn zum Beispiel die Zeile, die wir umdrehen,
TPPTP
und die aktuelle Zeile, über die wir iterieren, istPTTPT
oderTPPTP
die Zeile uns einen Punkt einbringt , aber wenn es sich um eine andere Zeile handelt, erhält sie uns keine Punkte.quelle
CJam, 37
Eingabeformat:
quelle
Mathematica - 76
quelle
Python 2, 234
Die Eingabe ist eine Liste von Listen:
Die Ausgabe ist ein Tupel von Flips mit Python-Indizierung von 0:
Wenn die Ausgabe von 1 indexiert werden muss, besteht der Code aus 272 Zeichen, wobei 0 bedeutet, dass keine Umkehrungen vorhanden sind:
quelle