Einführung:
Ich sammle verdrehte Rätsel. Die meisten kurvenreichen Puzzles werden von chinesischen Unternehmen hergestellt und verkauft. Die meisten bekannten Unternehmen bitten Puzzle-Designer um Erlaubnis, ihre Designs zu produzieren und gemeinsam auf ein Produkt auf dem Markt hinzuarbeiten. In diesem Fall sind Puzzle-Designer natürlich sehr glücklich und stolz darauf, dass eines ihrer Puzzles auf den Markt kommt.
Es gibt jedoch auch chinesische Unternehmen, die Fälschungen herstellen. Bei diesen Nachahmungen handelt es sich entweder um Designs, die ohne Genehmigung des ursprünglichen Erstellers verwendet wurden, oder um deutlich billigere Kopien bereits vorhandener Rätsel von geringerer Qualität.
Herausforderung:
Wir werden die Originalität von Zahlen bestimmen, die in einer bestimmten Reihenfolge (von links nach rechts † ) "freigegeben" werden .
Gruppieren und geben Sie anhand einer Liste von Ganzzahlen diese nach ihrer Originalität aus.
Wie wird die Originalität der Zahlen bestimmt?
- Ist eine Zahl ein genaues Duplikat einer früheren Zahl? Gruppe (am wenigsten original), wobei Gruppe nach allen anderen Gruppen hinterherhinkt.
- Ist eine Zahl ein Duplikat einer früheren Zahl, aber stattdessen negativ (dh die ursprüngliche Zahl war , aber jetzt ; oder umgekehrt)? Gruppe .
- Kann der Absolutwert der Zahl durch Verketten einer oder mehrerer früherer Absolutzahlen gebildet werden und gehört er nicht zu den zuvor genannten Gruppen oder ? Gruppe , wobei die Anzahl der in der Verkettung verwendeten unterschiedlichen Zahlen ist (und ).
- Passt die Nummer nicht in eine der oben genannten Gruppen, ist sie also bisher völlig eindeutig? Gruppe (am originellsten), die vor allen anderen Gruppen führend ist.
Dies mag ziemlich vage klingen, daher hier ein schrittweises Beispiel :
Eingabeliste: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34ist die erste Nummer, die immer original ist und in Gruppe . Bisherige Ausgabe:[[34]]9ist auch original:[[34,9]]4ist auch original:[[34,9,4]]-34ist das Negativ der früheren Zahl34, also in Gruppe :[[34,9,4],[-34]]19ist original:[[34,9,4,19],[-34]]-199kann durch die zwei früheren Zahlen gebildet werden19und9ist daher in Gruppe :[[34,9,4,19],[-199],[-34]]34ist eine exakte Kopie einer früheren Nummer, also in Gruppe :[[34,9,4,19],[-199],[-34],[34]]-213ist original:[[34,9,4,19,-213],[-199],[-34],[34]]94kann durch die zwei früheren Zahlen gebildet werden9und4ist daher in Gruppe :[[34,9,4,19,-213],[-199,94],[-34],[34]]1934499kann durch die vier früheren Nummern gebildet werden19,34,4, und zwei Mal9, so ist es in der Gruppe :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]213ist das Negativ der früheren Zahl-213, also in Gruppe :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]3ist original:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]21ist original:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]-2134kann durch die zwei früheren Zahlen213und4(oder die drei früheren Zahlen21,3und gebildet werden4, aber wir verwenden immer die geringste Anzahl an verkettenden Zahlen, um die Originalität zu bestimmen), also in Gruppe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]44449kann durch die zwei früheren Zahlen viermal gebildet werden4und9ist daher in Gruppe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]44kann durch eine einzelne frühere Zahl gebildet werden4, die zweimal wiederholt wird, also in Gruppe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Für die Eingabe ist [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]die Ausgabe also [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]].
Herausforderungsregeln:
- E / A ist flexibel. Sie können als Liste / Array / Stream von Ganzzahlen oder Zeichenfolgen eingeben, diese einzeln über STDIN eingeben usw. Die Ausgabe kann eine Karte mit den Gruppen als Schlüssel, eine verschachtelte Liste als Beispiel und Testfälle in dieser Herausforderung sein, die gedruckt werden Newline getrennt usw.
- Sie dürfen die Eingabeliste in umgekehrter Reihenfolge verwenden (möglicherweise nützlich für stapelbasierte Sprachen). † In diesem Fall ist das erwähnte von links nach rechts natürlich von rechts nach links.
- Wie Sie am Beispiel für integer sehen
-2134wir immer Gruppe eine Zahl , die eine Verkettung von anderen Zahlen mit so wenig wie möglich ist (gebildet durch213und4- zwei Zahlen, und nicht durch21,3und4- drei Zahlen). - Wie Sie im Beispiel für eine Ganzzahl sehen können
1934499, können Sie eine frühere Zahl (9in diesem Fall die mehrfache) mehrmals verwenden (ähnlich wie bei der44449Verwendung von vier4s und a9im Beispiel). Sie werden jedoch nur einmal zur Bestimmung der Gruppe gezählt. - Sie dürfen keine leeren inneren Listen in der Ausgabe für leere Gruppen haben. Daher führt der Testfall
[1,58,85,-8,5,8585,5885,518]möglicherweise nicht zu[[1,58,85,8,5],[518],[5885],[8585],[],[]]stattdessen, wenn die leeren Gruppen und , und das obige Beispiel führt möglicherweise nicht dazu , dass die leere Gruppe .X - 3[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]] - Die Reihenfolge der Gruppen ist streng (es sei denn, Sie verwenden eine Karte, da die Gruppen dann von den Schlüsseln abgezogen werden können), aber die Reihenfolge der Zahlen innerhalb einer Gruppe kann in beliebiger Reihenfolge erfolgen. So kann die
[34,9,4,19,-213,3,21]für Gruppe im obigen Beispiel auch oder sein .[21,3,-213,19,4,9,34][-213,4,34,19,9,21,3] - Sie werden garantiert, dass es niemals Zahlen geben wird, die aus mehr als neun vorherigen Zahlen bestehen können. Sie werden also niemals Gruppen haben, und die größtmögliche Anzahl von Gruppen ist 12:
- Sie können davon ausgehen, dass die Ganzzahlen maximal 32 Bit betragen, also innerhalb des Bereichs
[−2147483648,2147483647].
Allgemeine Regeln:
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln . Sie können also STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardschlupflöcher sind verboten.
- Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code (dh TIO ) hinzu.
- Es wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
[1, 1111111111]
X + 1also eine spezielle Gruppe für exakte Kopien undXeine Gruppe für andere Zahlen, die aus Kopien einer einzelnen Zahl gebildet werden können, wie z. B. deren Negation?