Défi:
Étant donné un entier positif, sortez la sous-séquence à un chiffre la plus longue qui se produit au moins deux fois, ET a les limites d'un autre chiffre (ou le début / la fin de l'entier).
Un exemple:
Entrée: 7888885466662716666
La sous-séquence la plus longue d'un seul chiffre serait 88888
( 7[88888]5466662716666
) avec une longueur de 5. Cependant, cette sous-séquence ne se produit qu'une seule fois dans l'entier.
Au lieu de cela, le résultat de l'entrée 7888885466662716666
doit être 6666
(78888854[6666]271[6666]
), car il se produit (au moins) deux fois.
Règles du défi:
- La longueur des sous-séquences a priorité sur la quantité de fois où elle se produit. (C'est-à-dire avec entrée
8888858888866656665666
, nous sortons88888
([88888]5[88888]66656665666
; longueur 5, se produit deux fois), et non666
(88888588888[666]5[666]5[666]
; longueur 3, se produit trois fois). - Si la longueur de plusieurs sous-séquences est égale, nous sortons celle avec le plus grand nombre d'occurrences. C'est-à-dire avec une entrée
3331113331119111
, nous sortons111
(333[111]333[111]9[111]
; longueur 3, se produit trois fois), et non333
([333]111[333]1119111
; longueur 3 également, mais se produit deux fois) - Si le nombre d'occurrences et la longueur de plusieurs sous-séquences sont égaux, vous pouvez sortir l'un d'eux ou tous (dans n'importe quel ordre). -À- dire avec entrée
777333777333
, les sorties possibles sont:777
;333
;[777, 333]
; ou[333, 777]
. - La sous-séquence doit avoir des limites d'autres chiffres (ou le début / la fin de l'entier). C'est-à-dire qu'avec l'entrée,
122222233433
le résultat est33
(1222222[33]4[33]
; la longueur 2, se produit deux fois) et non222
(1[222][222]33433
, la longueur 3, se produit deux fois avec les deux invalides).- Cela s'applique à tous les nombres qui sont comptés dans le compteur d'occurrences. C'est-à-dire avec une entrée
811774177781382
le résultat est8
([8]117741777[8]13[8]2
; la longueur 1, se produit trois fois) et non77
(811[77]41[77]781382
/811[77]417[77]81382
; la longueur 2, se produit deux fois avec un invalide) ni1
(8[1][1]774[1]7778[1]382
; la longueur 1, se produit quatre fois avec deux invalides).
- Cela s'applique à tous les nombres qui sont comptés dans le compteur d'occurrences. C'est-à-dire avec une entrée
- Vous pouvez supposer que l'entrée ne contiendra aucun chiffre
0
(elle correspondra[1-9]+
). (C'est pour éviter d'avoir à traiter des cas de test comme10002000
celui-ci devrait sortir000
, où la plupart des langues sortiraient0
par défaut.) - Vous pouvez supposer que l'entrée contiendra toujours au moins une sortie valide.
- Les E / S sont toutes deux flexibles. Peut être une liste / tableau / flux de chiffres / octets / caractères ou sous forme de chaîne au lieu d'un seul entier.
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 autres que le golf 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, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
Input: 7888885466662716666 / [7,8,8,8,8,8,5,4,6,6,6,6,2,7,1,6,6,6,6]
Output: 6666 / [6,6,6,6]
Input: 3331113331119111 / [3,3,3,1,1,1,3,3,3,1,1,1,9,1,1,1]
Output: 111 / [1,1,1]
Input: 777333777333 / [7,7,7,3,3,3,7,7,7,3,3,3]
Possible outputs: 777; 333; [777,333]; [333;777] / [7,7,7]; [3,3,3]; [[7,7,7],[3,3,3]]; [[3,3,3],[7,7,7]]
Input: 122222233433 / [1,2,2,2,2,2,2,3,3,4,3,3]
Output: 33 / [3,3]
Input: 811774177781382 / [8,1,1,7,7,4,1,7,7,7,8,1,3,8,2]
Output: 8 / [8]
Input: 555153333551 / [5,5,5,1,5,3,3,3,3,5,5,1]
Output: 1 / [1]
Input: 12321 / [1,2,3,2,1]
Possible outputs: 1; 2; [1,2]; [2,1] / [1]; [2]; [[1],[2]]; [[2],[1]]
Input: 944949949494999494 / [9,4,4,9,4,9,9,4,9,4,9,4,9,9,9,4,9,4]
Output: 4 / [4]
Input: 8888858888866656665666 / [8,8,8,8,8,5,8,8,8,8,8,6,6,6,5,6,6,6,5,6,6,6]
Output: 88888 / [8,8,8,8,8]
Input: 1112221112221111 / [1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,1]
Output: 111; 222; [111,222]; [222,111] / [1,1,1]; [2,2,2]; [[1,1,1],[2,2,2]]; [[2,2,2],[1,1,1]]
Input: 911133111339339339339339 / [9,1,1,1,3,3,1,1,1,3,3,9,3,3,9,3,3,9,3,3,9,3,3,9]
Output: 111 / [1,1,1]
8888858888866656665666
. Si j'ai correctement interprété le défi, les solutions Brachylog et 05AB1E échouent.222
lorsqu'il est délimité par d'autres entiers. Je suppose que nous ne devrions tout simplement pas compter l'occurrence qui est une sous-chaîne de1111
. Il vaut mieux attendre le PO cependant.1112221112221111
ce sont les séquences et leurs chefs:1111 (1)
,111 (2)
,222 (2)
. Étant donné que nous sorties uniquement des séquences se produisant au moins deux fois, la sortie peut être l' une:111
,222
,[111,222]
,[222,111]
. (Voir la quatrième règle pour plus d'informations.) Fondamentalement1111
, ne comptera que comme1111
, et non comme1
et111
ou11
et11
. J'ajouterai votre cas de test, mais la sortie est l'un ou les deux de111
et222
.Réponses:
05AB1E , 14 octets
Essayez-le en ligne!
Explication
la source
Gelée , 12 octets
Essayez-le en ligne!
Version précédente - 14 octets
Essayez-le en ligne!
Comment ça fonctionne?
la source
JavaScript (ES6),
797368 octetsPrend l'entrée sous forme de chaîne. Renvoie un entier.
Essayez-le en ligne!
Commenté
la source
...s
convertit l'entrée en une liste de caractères numériques, n'est-il pas plus court de simplement prendre l'entrée comme une liste de caractères numériques pour commencer, au lieu d'une chaîne? J'ai autorisé des E / S flexibles. (Mais je suppose que cela interfère avec une autre partie de votre code?)[...s,0]
même s'ils
existe déjà une liste.Rétine , 56 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Liste toutes les sous-séquences de chiffres répétées au maximum.
Triez la liste dans l'ordre.
Répertoriez toutes les sous-séquences multiples avec leur "nombre".
Trier par ordre croissant de comptage.
Supprimez les comptes.
Trier par ordre croissant de longueur. (Lorsque les longueurs sont égales, l'ordre précédent dû au comptage est conservé.)
Gardez la dernière valeur, c'est-à-dire la plus longue.
la source
R , 102 octets
Essayez-le en ligne!
Puisqu'il n'y avait pas encore de réponse R, j'ai décidé de faire un essai, et bien ... ce n'était pas facile. Je ne sais pas vraiment si c'est une bonne approche, mais c'est parti.
Entrées et sorties de vecteurs de caractères.
la source
Perl 6 ,
5856 octetsEssayez-le en ligne!
la source
Python 2 ,
123120 octetsEssayez-le en ligne!
la source
Powershell, 101 octets
Script de test expliqué:
Production:
la source
Python 2 ,
114113 octets-1 octet grâce à TFeld .
Essayez-le en ligne!
la source
Haskell, 72 octets
Comment ça fonctionne
la source
Gloss
pour une sortie graphique ouMatrix
). J'utilise "Haskell + quelque chose" si je ne veux pas inclure le nombre d'octets pour les importations. Je pense que nous avions ce sujet sur la méta, mais je ne le trouve plus. Si je me souviens bien, nous n'avions pas de définition générale de "bibliothèque standard". Quelle devrait être la référence pour Haskell? Le rapport Haskell, la base du GHC, la plate-forme Haskell, autre chose?Data.Lists
bibliothèque n'est-elle pas disponible sur TIO ou sur un autre compilateur Haskell en ligne?Data.Lists
est manquant sur TIO. Vous pouvez le tester avec cette version .R , 85 octets
Essayez-le en ligne!
Entrée: un vecteur de chiffres entiers séparés, par exemple
c(1,8,8...)
Sortie: un vecteur de chiffres entiers séparés
Code déroulé avec explication:
Version alternative acceptant le vecteur de chiffres entiers ou caractères:
R , 88 octets
Essayez-le en ligne!
Entrée: un vecteur de caractères ou de chiffres séparés, par exemple
c("1","8","8"...)
ouc(1,8,8...)
Sortie: un vecteur de caractères séparés si l'entrée était un vecteur de caractères, un vecteur de chiffres si l'entrée était un vecteur de chiffres
la source
Rouge ,
256250 octetsEssayez-le en ligne!
Vraiment, solution vraiment longue cette fois ... (soupir)
Prend l'entrée sous forme de chaîne.
Explication:
la source
Java (JDK 10) , 213 octets
Essayez-le en ligne!
Explication (obsolète)
Crédits
la source
j*o>M
chèque. Si je comprends bien, cela prend le maxlength * occurrence-count
. Mais pour un cas de test comme1113311133933933933933
par exemple, le111
serait (3 * 2 = 6) et le33
serait (2 * 6 = 12). Il génère donc33
l'occurrence la plus élevée, au lieu d'111
être la plus longue au moins deux fois. En outre,var r="";for(;O-->0;)r+=D;return r;
peut être à golfedfor(;O-->0;)System.out.print(D);
en Java 10, ou encore plus court en Java 11:return(D+"").repeat(O);
.int X[][]=new int[10][99],d,l=99,
àint l=99,X[][]=new int[10][l],d,
.d++<9
place de++d<10
. Désolé pour le reste: je suis plutôt fatigué aujourd'hui = _ =Rubis ,
6867 octetsEssayez-le en ligne!
Tableaux d'entrées et de sorties de caractères.
L'approche est assez simple: nous identifions les séries de chiffres consécutifs (en
chunk
utilisant unaire+
comme fonction d'identité) et prenons le maximum - d'abord par la taille de la série (remis à zéro si son nombre d'occurrences est <2), puis par le nombre lui-même .la source
PCRE, 152 octets
Voyez-le en action sur: https://regex101.com/r/0U0dEp/1 (il suffit de regarder le premier match dans chaque cas de test)
C'est juste pour le plaisir, car regex n'est pas un véritable langage de programmation en soi, et la solution est limitée: P
Parce qu'un groupe de largeur nulle tel que
(?:)+
ne correspond qu'une seule fois et ne se répète pas indéfiniment, et parce que PCRE fait en interne des copies de groupes quantifiés avec des limites, j'ai dû y utiliser un nombre magique ("{1,592}"), qui signifie que nous ne pouvons rechercher que 592 ensembles de chiffres contigus à venir pour trouver un ensemble concurrent qui pourrait être plus long que celui actuellement sous inspection. Plus d'informations sur ce concept ici .la source
Perl 5 , 88 octets
Essayez-le en ligne!
Légèrement non golfé, avec des tests:
la source
Wolfram Language (Mathematica) , 67 octets
Fonction pure. Prend une liste de chiffres en entrée et renvoie une liste de sous-séquences (sans ordre particulier) en sortie. Je ne sais pas si la clause "doit apparaître au moins deux fois" peut être gérée plus proprement. Essayez-le en ligne!
la source
Japt
-h
, 12 octetsL'entrée et la sortie sont des chaînes.
Essayez-le
la source