À partir d'une chaîne en tant qu'entrée, trouvez la plus longue sous-chaîne contiguë ne comportant aucun caractère deux fois ou plus. S'il existe plusieurs sous-chaînes de ce type, vous pouvez générer l'un ou l'autre. Vous pouvez supposer que l’entrée se situe sur la plage imprimable ASCII si vous le souhaitez.
Notation
Les réponses seront d'abord classées en fonction de la longueur de leur plus longue sous-chaîne non répétée, puis de leur longueur totale. Des scores plus bas seront meilleurs pour les deux critères. En fonction de la langue, cela ressemblera probablement à un défi de code-golf avec une restriction de source.
Banalité
Obtenir des notes de 1, x (lenguage) ou 2, x (Brain-flak et autres tarpits) est assez facile dans certaines langues , mais il existe d’autres langues dans lesquelles réduire au minimum la plus longue sous-chaîne non répétitive est un défi. J'ai eu beaucoup de plaisir à obtenir un score de 2 à Haskell, je vous encourage donc à rechercher des langues où cette tâche est amusante.
Cas de test
"Good morning, Green orb!" -> "ing, Gre"
"fffffffffff" -> "f"
"oiiiiioiiii" -> "io", "oi"
"1234567890" -> "1234567890"
"11122324455" -> "324"
Soumission de scoring
Vous pouvez évaluer vos programmes en utilisant l'extrait suivant:
la source
11122324455
Jonathan Allan s'est rendu compte que ma première révision ne le traitait pas correctement.11122
se produit après324
, mais se dédupliquer12
.Réponses:
C, score 2,
747720662 octetsFonctionne au moins sur MinGW 32 bits (avec optimisations désactivées). N'utilise pas un mot clé unique.
Fonctionne apparemment sur TIO avec gcc et clang aussi: essayez-le en ligne! (Merci @Dennis!)
Appeler avec:
Sortie:
Le code avec un format légèrement plus lisible:
Et cela peut être utilisé pour générer un espacement correct pour arriver au formatage avec le score 2: Essayez-le en ligne!
C, score 3, 309 octets
Essayez-le en ligne!
la source
Haskell , score 2,
492...307224212209207 octetsEssayez-le en ligne!
Golfé littéralement des centaines d'octets grâce à WW et Ørjan Johansen !
Explication
La fonction
(??)
prend un caractèrec
et une chaînes
et renvoie le préfixe le plus long des
celui que ne contient pasc
. Non golfé et non optimisé pour le score:La fonction
ss
utilise(??)
pour trouver le préfixe le plus long des caractères uniques d'une chaîne donnée:(##)
est une fonction qui prend deux chaînes et renvoie la plus longue. La comparaison de longueur fonctionne en répétant la chaînex
aussi souvent quex
long (x>>y
) ety
long (y>>x
), et en vérifiant laquelle des chaînes résultantes est lexicographiquement plus grande.Finalement,
ff
récursive sur la chaîne d'entrée, génère le préfixe le plus long avecss
, détermine de manière récursive la sous-chaîne non répétée la plus longue de la fin de la chaîne et renvoie le plus long des deux avec(##)
:la source
@
astuce coûtait en réalité 2 octets de plus que la création de?
deux caractères: 207Lua, score 3, 274 octets
Note: Lua 5.2 ou Lua 5.3 est requis
Usage:
Idée principale: tout entrelacer d'espaces, insérer
" "
(deux espaces) pour diviser des identifiants longsCode non golfé:
Programme actuel (après suppression de toutes les paires d'espaces):
BTW, l'extrait de code JS pour calculer le score échoue sur mon code.
la source
Retina 0.8.2 , 37 octets, score 9
Essayez-le en ligne! La traduction directe de cette réponse sur Retina 1 enregistre un octet en utilisant à la
N
place deO#
. Cependant, si vous golfez naïvement la réponse de Retina 1 à 28 octets, son score passe à 10! Explication:Génère tous les suffixes de l'entrée.
Pour chaque suffixe, prenez le préfixe jusqu'au premier caractère dupliqué.
Triez les chaînes restantes dans l'ordre inverse de la longueur (c'est-à-dire la plus longue en premier).
Prends le plus long.
la source
Gelée , score 2, 14 octets
Merci à @JonathanAllan pour le score -1, +7 octets et pour avoir remarqué un bogue.
Essayez-le en ligne!
Comment ça marche
la source
Nettoyer , marquer
75, 276 octetsEssayez-le en ligne! Merci à @ Οurous de m'avoir montré qu'il est possible d'appeler le code machine ABC directement à partir de Clean. Cela permet de se débarrasser du goulot précédent
import
qui fixait le score minimal à 7, mais nécessite le mot-clécode
fixant le score minimal à 5 pour cette approche.Une version non golfée et non optimisée du score du code ci-dessus peut être trouvée ici: Essayez-le en ligne!
Version précédente avec note 7,
158154130 octetsEssayez-le en ligne!
Avec le
import
score, on ne peut pas descendre en dessous de 7. Sans l'importation, il serait nécessaire d'implémenter l'égalité sur les chaînes ou les caractères sans aucune fonction de bibliothèque, ce qui n'estprobablement paspossible, comme on peut le voir dans la nouvelle version ci-dessus.la source
A code block with raw ABC instructions, which can be used for primitive functions like integer addition, for linking with C, bypassing the type system... welcome down the rabbit hole!
( de cloogle ) sonne certainement invitant. Je vais y regarder demain, merci pour la suggestion!-IL
indicateurs, car rien n'est importé.Python 3 , score 4, 155 octets
Ceci définit une fonction
l
.Merci à @xnor pour avoir signalé que des chaînes de longueur 3 ne soulèvent pas le score, ce qui permet d'économiser 32 octets.
Essayez-le en ligne!
la source
Brachylog , score 2, 19 octets
Essayez-le en ligne!
Juste un vieux ennuyeux "espace tout" réponse. Au moins, j’ai appris que les métaprédicats peuvent être espacés des prédicats et fonctionnent toujours (et que les sous-scripts et les exposants (paramétriques) ne le peuvent pas).
s ᶠ
- trouver toutes les sous-chaînes de la chaîne donnéel ᵒ
- les classer par longueur (croissant par défaut)≠ ˢ
- sélectionnez ceux qui ont tous les éléments distinctst
- récupère la queue (dernier élément) de celui-ci - celui qui a la plus grande longueurla source
Pyth , 11 octets, score 4
-4 score grâce à Dennis
Essayez-le en ligne!
la source
Husk , score 2, 10 octets
Essayez-le en ligne!
Explication
Le programme est équivalent à ceci:
L'intégré
Ë
évalue≠
toutes les paires ordonnées de son argumentx
et retournelength(x)+1
si tous les résultats sont vrais, sinon0
. Lorsque nous maximisons cela, nous trouvons la chaîne la plus longue qui ne contient pas de caractères répétés.Dans la soumission, je viens d'insérer la fonction d'identité
I
entre chaque fonction, deux fois. PuisqueIË
est le même queË
,I≠
est le même que≠
et ainsi de suite, cela ne change pas la sémantique. Le seul danger est qu'une fonction d'ordre supérieur puisse décider d'utiliser l'un desI
s comme argument, mais heureusement, cela conduit à une erreur de type dans notre programme, de sorte que cela ne se produit pas.la source
Clojure, score 4
Oh mec c'était douloureux!
N
implémentenext
,R
estreduce
,C
estcount
,J
estconj
(ne fonctionne que pour les vecteurs) etI
estiterate
.apply str
existe-t-il deux fois, sinon l'entrée "aaaa" ne renverrait pas une chaîne mais un vecteur[\a]
. Heureusement, j'ai eu l'occasion de l'utiliserapply
etassoc
je ne savais pas que vous pouviez associer un indice au-delà du dernier élément d'un vecteur: ola source
Gelée , score 5, 10 octets
Essayez-le en ligne!
la source
ẆµQQ ⁼ µ Ðf µ Ṫ
(probablement ajouté trop d'espaces maintenant, mais ce n'est qu'un exemple. Je vous laisserai l'optimisation du nombre d'octets par rapport aux espaces).Python 3 , score 4, 317 octets
Essayez-le en ligne!
Code non spécifié:
lambda a
contientmbda
ce qui a un score de 5, et une fonctionreturn
qui ne peut apparemment pas êtreexec
modifiée (il faut donc un score d'au moins 5 poureturn
), donc un programme complet était nécessaire. Il est probablement possible de jouer un peu plus bas sur la taille du code non spécifié, mais je ne vois pas d'amélioration rapide.la source
Alice , 40 octets
(Retour à la ligne)
Essayez-le en ligne!
Le pointeur d'instruction se déplaçant diagonalement en mode ordinal, seul un autre caractère est exécuté.
la source
Perl 6 , score:
15 108, longueur:46 5562 octetsEssaye-le
Essaye-le
Essaye-le
Étendu:
la source
Java 8, score
9 (384 B)7 (401 B)Version initiale. Va descendre d'ici. Le score est de 9 en raison de"ubstring "
, cesubstring
sera donc la première partie à remplacer." length"
, ce que je ne pourrai probablement pas réduire davantage. Je doute qu'il soit possible de supprimer les quatre utilisations delength
. Si cela est possible," eturn"
(6) pourrait réduire le score de 1 en amélioration finale, mais je suppose que c'est le cas (sauf peut-être une petite réduction du nombre d'octets ..)Essayez-le en ligne.
la source
Haskell , score 7
-4 Merci à Laikoni.
Essayez-le en ligne!
la source
f s=snd$maximum[(0<$i,i)|i<-tails=<<inits s,nub i==i]
enregistre un octet et deux sur le score.Mathematica, partition
119Raser quelques octets de la plus longue chaîne non répétée en masquant le nom de la fonction:
la source
Kotlin , score:
11109 octets, longueur:227246245 octetsLe plus long est
ubstring
, qui est de 9 caractèresCela s'appelle comme ça:
la source
roupingBy
et{
?roupingBy
(qui est de 9 caractères) , maiseachCount
(avec l' espace de fuite).roupingBy
a un espace de fin (visible dans le démarquage, mais le rendu semble l’Pyth , score 3 (
18 à14 octets)Essayez-le en ligne!
La plus longue sous-chaîne non répétée est
.:
.la source
e f {I T .:
.05AB1E , 22 octets | Score: 2
-1 score + 7 octets grâce à HeebyJeeby
Essayez-le en ligne!
05AB1E , 15 octets | Score: 3
Essayez-le en ligne!
05AB1E , 8 octets | Score: 8
Essayez-le en ligne!
05AB1E peut réellement faire quelque chose d'assez bon marché ... ajouter des espaces dans 05AB1E ne fait rien.
S'il y a une règle contre cela, je peux aussi utiliser
´
et aimer 7 autres caractères.la source