Introduction:
Je collectionne des puzzles tortueux. La plupart des puzzles tortueux sont produits et vendus par des entreprises chinoises. La plupart des entreprises bien connues demandent la permission des créateurs de puzzles pour produire leurs conceptions et travailler ensemble vers un produit sur le marché. Dans ce cas, les concepteurs de puzzles sont bien sûr très heureux et fiers qu'un de leurs puzzles arrive sur le marché.
Cependant, il existe également des entreprises chinoises qui fabriquent des puzzles de contrefaçon. Ces imitations sont soit des conceptions utilisées sans l'autorisation du créateur d'origine, soit des copies de moindre qualité de puzzles déjà existants.
Défi:
Nous allons déterminer l'originalité des numéros qui sont «publiés» dans un ordre spécifique (de gauche à droite † ).
Étant donné une liste d'entiers, regroupez-les et sortez-les par leur originalité.
Comment l'originalité des nombres est-elle déterminée?
- Un numéro est-il un double exact d'un numéro antérieur? Groupe (le moins original), où le groupe suit, après tous les autres groupes.
- Un nombre est-il un double d'un nombre antérieur, mais son négatif à la place (c'est-à-dire que le nombre d'origine était , mais maintenant ; ou vice-versa)? Groupe .
- La valeur absolue du nombre peut-elle être formée en concaténant un ou plusieurs nombres absolus antérieurs, et ne fait-elle pas partie des groupes mentionnés précédemment ou ? Groupe , où est la quantité de nombres distincts utilisés dans la concaténation (et ).
- Le nombre ne correspond-il à aucun des groupes ci-dessus, est-il donc complètement unique jusqu'à présent? Groupe (le plus original), qui mène devant tous les autres groupes.
Cela peut sembler assez vague, voici donc un exemple étape par étape :
Liste d'entrées: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
est le premier nombre, qui est toujours original et dans le groupe . Sortie jusqu'à présent:[[34]]
9
est aussi original:[[34,9]]
4
est aussi original:[[34,9,4]]
-34
est le négatif du nombre précédent34
, il est donc dans le groupe :[[34,9,4],[-34]]
19
est original:[[34,9,4,19],[-34]]
-199
peut être formé par les deux nombres précédents19
et9
, donc c'est dans le groupe :[[34,9,4,19],[-199],[-34]]
34
est une copie exacte d'un nombre antérieur, il fait donc partie du groupe :[[34,9,4,19],[-199],[-34],[34]]
-213
est original:[[34,9,4,19,-213],[-199],[-34],[34]]
94
peut être formé par les deux nombres précédents9
et4
, donc c'est dans le groupe :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
peut être formé par les quatre numéros antérieurs19
,34
,4
, et deux fois9
, il est donc dans le groupe :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
est le négatif du nombre précédent-213
, il est donc dans le groupe :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
est original:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
est original:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
peut être formé par les deux numéros précédents213
et4
(ou les trois numéros précédents21
,3
et4
, mais nous utilisons toujours le moins de chiffres concaténer pour déterminer l' originalité), il est donc dans le groupe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]
44449
peut être formé par les deux nombres précédents quatre fois4
et9
, donc c'est dans le groupe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
peut être formé par un seul nombre antérieur4
, répété deux fois, il fait donc partie du groupe :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Donc, pour l'entrée, [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
la sortie est [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Règles du défi:
- Les E / S sont flexibles. Vous pouvez saisir une liste / un tableau / un flux d'entiers ou de chaînes, les saisir un par un via STDIN, etc. La sortie peut être une carte avec les groupes comme clé, une liste imbriquée comme exemple et des cas de test dans ce défi, imprimés saut de ligne séparé, etc.
- Vous êtes autorisé à prendre la liste d'entrée dans l'ordre inverse (peut-être utile pour les langues basées sur la pile). † Dans ce cas, la mention de gauche à droite est bien sûr de droite à gauche.
- Comme vous pouvez le voir à l'exemple entier
-2134
, nous regroupons toujours un nombre qui est une concaténation d'autres numéros avec aussi peu que possible (formé par213
et4
- deux nombres, et non par21
,3
et4
- trois numéros). - Comme vous pouvez le voir dans l'exemple pour entier
1934499
, vous pouvez utiliser un nombre antérieur (le9
dans ce cas) plusieurs fois (similaire à l'44449
utilisation de quatre4
s et de a9
dans l'exemple). Ils ne sont cependant comptés qu'une seule fois pour déterminer le groupe. - Vous n'êtes pas autorisé à avoir des listes internes vides dans la sortie pour les groupes vides. Ainsi, le scénario de test
[1,58,85,-8,5,8585,5885,518]
peut ne pas aboutir à la[[1,58,85,8,5],[518],[5885],[8585],[],[]]
place, où les groupes vides sont et , et l'exemple ci-dessus peut ne pas aboutir à la place, où le groupe vide est .X - 3[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]
- L'ordre des groupes est strict (sauf si vous utilisez une carte, car les groupes peuvent alors être déduits des clés), mais l'ordre des numéros au sein d'un groupe peut être dans n'importe quel ordre. Ainsi, le
[34,9,4,19,-213,3,21]
groupe dans l'exemple ci-dessus peut également être ou .[21,3,-213,19,4,9,34]
[-213,4,34,19,9,21,3]
- Vous avez la garantie qu'il n'y aura jamais de numéros pouvant être formés par plus de neuf numéros précédents. Vous n'aurez donc jamais de groupes , et le plus grand nombre possible de groupes est 12:
- Vous pouvez supposer que les entiers seront de 32 bits au maximum, donc dans la plage
[−2147483648,2147483647]
.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
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]]
la source
X + 1
Est-ce donc un groupe spécial pour les copies exactes, etX
un groupe pour d'autres nombres qui peuvent être formés à partir de copies d'un seul numéro, comme sa négation?[1, 1111111111]
Réponses:
Gelée ,
3633 octetsEssayez-le en ligne!
Je suis sûr que cela peut être joué plus. Inspiration tirée de la réponse de Grimy 05AB1E , alors assurez-vous de voter aussi!
la source
Python 3 ,
565564524523500437399394393389385372 octetsMise en œuvre de la force brute en utilisant
itertools
; tous les cas de test ne s'exécutent pas dans la limite de 60 secondes sur TIO.Essayez-le en ligne!
Merci à ArBo pour le golf de 101 octets, à Galen Ivanov pour le golf de 19 octets, à ElPedro pour le golf de 5 octets, à movatica pour le golf de 17 octets, à Black Owl Kai pour le golf de 2 octets, à calmar pour le golf de 2 octets et à Kevin Cruijssen pour golf 1 octet.
Explication:
Python 2 ,
406379374373372368355 octetsMême approche, mais plus courte en raison de certaines astuces de golf, Python 3 ne prend plus en charge. Merci à ArBo pour le backport et au golf 28 octets, à ElPedro pour le golf 5 octets, à movatica pour le golf 17 octets et au calmar pour le golf 1 octet de plus.
Essayez-le en ligne!
la source
str(abs(x))
(ou abs (x) avec des raccourcis en Python 2) vers l'appel de fonction et en changeant x dans la définition de fonction en y supprimant y = str (abs (x)). Désolé, impossible de faire fonctionner TIO pour le moment.len
pour raser un autre octet, non?any()
appels, ce qui en fait un générateur normal, qui fonctionne aussi bien et vous fait économiser 4 octets supplémentaires :)(x in sum(l,[]))
au lieu deany(x in s for s in l)
pour les deuxx
et-x
économise 13 octets de plus!Python 2 ,
235234232246245244241240238237236 octetsEssayez-le en ligne!
-1 octet grâce au commentaire de Squid sur l'autre réponse Python
Cette réponse n'a aucun espoir de résoudre, sauf le plus trivial des cas de test. Dans le lien TIO,
s*11
a été remplacé pars*2
, en sacrifiant la justesse dans certains cas , rapide er temps d'exécution, mais pour autant que je peux voir, la version dans ce post donne toujours la bonne réponse, en théorie.Explication
la source
int
même dans la version 64 bits).05AB1E ,
4341383527 octetsEssayez-le en ligne!
Explication:
Étant donné que les numéros de groupe ne font pas partie de la sortie, nous sommes libres d'utiliser tous les numéros que nous voulons, tant que l'ordre est correct. Cela utilise 0 pour les numéros d'origine, 2 ^ -N pour le groupe XN, 1 pour le groupe X, 2 pour le groupe X + 1.
la source
Python 2, 195 octets
Le cas de test le plus lent ne peut pas être terminé sur TIO , mais cela ne prend que 10 secondes environ sur ma machine.
Il peut être raccourci de 2 octets sur les versions LP64 Python en le remplaçant
'%s-%%s'%a%n
par`a`+'-'+`n`
.la source
JavaScript (Node.js) ,
211205 octetsEssayez-le en ligne!
En utilisant l'hypothèse qu'il y a au plus 12 groupes.
JavaScript (Node.js) ,
267226221218211 octetsEssayez-le en ligne!
... ou 193 octets si le renvoi d'un dictionnaire est correct:
Essayez-le en ligne!
Dans ce cas, clé
-Infinity
signifie Groupe 1 et autres clés signifie GroupeX+key
.la source