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]]
quelle
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?[1, 1111111111]
Antworten:
Gelee ,
3633 BytesProbieren Sie es online aus!
Ich bin sicher, das kann mehr Golf gespielt werden. Einige Inspirationen stammen aus Grimys 05AB1E-Antwort. Stimmen Sie also auch dieser zu!
quelle
Python 3 ,
565564524523500437399394393389385372 BytesBrute-Force-Implementierung mit
itertools
; Nicht alle Testfälle werden innerhalb der 60-Sekunden-Grenze für TIO ausgeführt.Probieren Sie es online aus!
Dank an ArBo für das Golfen von 101 Bytes, an Galen Ivanov für das Golfen von 19 Bytes, an ElPedro für das Golfen von 5 Bytes, an movatica für das Golfen mit 17 Bytes, an Black Owl Kai für das Golfen von 2 Bytes, an Squid für das Golfen von 2 Bytes und an Kevin Cruijssen für Golfen 1 Byte.
Erläuterung:
Python 2 ,
406379374373372368355 BytesGleicher Ansatz, aber aufgrund einiger Golftricks kürzer Python 3 unterstützt nicht mehr. Vielen Dank an ArBo für den Backport und für das Golfen von 28 Bytes, an ElPedro für das Golfen von 5 Bytes, an movatica für das Golfen von 17 Bytes und an Squid für das Golfen von 1 weiteren Bytes.
Probieren Sie es online aus!
quelle
str(abs(x))
(oder abs (x) mit Backticks in Python 2) zum Funktionsaufruf verschieben und x in der Funktionsdefinition in y ändern, indem Sie y = str (abs (x)) entfernen. Entschuldigung, ich kann TIO momentan nicht zum Arbeiten bringen.len
, um ein weiteres Byte zu entfernen, oder?any()
Aufrufen entfernen und so zu einem normalen Generator machen, der genauso gut funktioniert und Ihnen 4 weitere Bytes spart :)(x in sum(l,[]))
stattany(x in s for s in l)
für beidex
und-x
spart 13 weitere Bytes!Python 2 ,
235234232246245244241240238237236 BytesProbieren Sie es online aus!
-1 Byte dank Squids Kommentar zur anderen Python-Antwort
Diese Antwort hat keine Hoffnung auf irgendwelche, aber die banalsten von Testfällen zu lösen. In der Verbindung TIO,
s*11
wurde ersetzt durchs*2
, Korrektheit für die schnellen in einigen Fällen zu opfern er die Ausführungszeit, aber soweit ich sehen kann, ist die Version in diesem Beitrag liefert immer die richtige Antwort, in der Theorie.Erläuterung
quelle
int
selbst in der 64-Bit-Version).05AB1E ,
4341383527 BytesProbieren Sie es online aus!
Erläuterung:
Da Gruppennummern nicht Teil der Ausgabe sind, können wir beliebige Zahlen verwenden, solange die Reihenfolge korrekt ist. Dies verwendet 0 für Originalnummern, 2 ^ -N für Gruppe XN, 1 für Gruppe X, 2 für Gruppe X + 1.
quelle
Python 2, 195 Bytes
Der langsamste Testfall kann auf TIO nicht abgeschlossen werden , auf meinem Computer dauert es jedoch nur etwa 10 Sekunden.
Es kann durch 2 Bytes verkürzt werden auf LP64 Python baut durch den Ersatz
'%s-%%s'%a%n
mit`a`+'-'+`n`
.quelle
JavaScript (Node.js) ,
211205 ByteProbieren Sie es online aus!
Unter der Annahme, dass es höchstens 12 Gruppen gibt.
JavaScript (Node.js) ,
267226221218211 BytesProbieren Sie es online aus!
... oder 193 Bytes, wenn die Rückgabe eines Wörterbuchs in Ordnung ist:
Probieren Sie es online aus!
In diesem Fall
-Infinity
bedeutet Schlüssel Gruppe 1 und andere Schlüssel GruppeX+key
.quelle