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]
34
ist die erste Nummer, die immer original ist und in Gruppe . Bisherige Ausgabe:[[34]]
9
ist auch original:[[34,9]]
4
ist auch original:[[34,9,4]]
-34
ist das Negativ der früheren Zahl34
, also in Gruppe :[[34,9,4],[-34]]
19
ist original:[[34,9,4,19],[-34]]
-199
kann durch die zwei früheren Zahlen gebildet werden19
und9
ist daher in Gruppe :[[34,9,4,19],[-199],[-34]]
34
ist eine exakte Kopie einer früheren Nummer, also in Gruppe :[[34,9,4,19],[-199],[-34],[34]]
-213
ist original:[[34,9,4,19,-213],[-199],[-34],[34]]
94
kann durch die zwei früheren Zahlen gebildet werden9
und4
ist daher in Gruppe :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
kann 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]]
213
ist das Negativ der früheren Zahl-213
, also in Gruppe :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
ist original:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
ist original:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
kann durch die zwei früheren Zahlen213
und4
(oder die drei früheren Zahlen21
,3
und 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]]
44449
kann durch die zwei früheren Zahlen viermal gebildet werden4
und9
ist daher in Gruppe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
kann 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
-2134
wir immer Gruppe eine Zahl , die eine Verkettung von anderen Zahlen mit so wenig wie möglich ist (gebildet durch213
und4
- zwei Zahlen, und nicht durch21
,3
und4
- drei Zahlen). - Wie Sie im Beispiel für eine Ganzzahl sehen können
1934499
, können Sie eine frühere Zahl (9
in diesem Fall die mehrfache) mehrmals verwenden (ähnlich wie bei der44449
Verwendung von vier4
s und a9
im 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 + 1
also eine spezielle Gruppe für exakte Kopien undX
eine Gruppe für andere Zahlen, die aus Kopien einer einzelnen Zahl gebildet werden können, wie z. B. deren Negation?