La distance de Hamming entre deux chaînes de longueur égale est le nombre de positions auxquelles les caractères correspondants sont différents. Si les cordes ne sont pas de longueur égale, la distance de Hamming n'est pas définie.
Défi
Écrivez un programme ou une fonction qui trouve la plus grande distance de Hamming parmi toutes les paires de chaînes d'une liste de chaînes, complétées selon les besoins selon les règles décrites ci-dessous.
Les personnages seront de l'intérieur a-zA-Z0-9
.
Les chaînes peuvent ne pas être de longueur égale, donc pour chaque comparaison, la chaîne la plus courte doit être complétée comme suit:
- envelopper la chaîne depuis le début autant de fois que nécessaire pour correspondre à la longueur requise
- changer la casse des lettres à chaque emballage impair (1er, 3e, 5e, etc.)
- laisser les choses à l'extérieur
a-zA-Z
inchangées lors de l'emballage
Par exemple, disons que vous devez remplir la chaîne de 5 caractères ab9Cd
pour qu'elle se termine par 18 caractères. Vous vous retrouveriez avec:
ab9CdAB9cDab9CdAB9
^^^^^ ^^^
avec ^
ajouté sous les 1er et 3e tours pour mettre en évidence les changements de casse.
Entrée sortie
Le format d'entrée / sortie est flexible. Vous pouvez supposer que l'entrée a au moins deux chaînes et que toutes les chaînes auront au moins un caractère.
La sortie est un entier.
Règles
C'est du code-golf . Des règles standard s'appliquent.
Cas de test
[ "a", "b" ] => 1
[ "a", "b", "c" ] => 1
[ "a", "a", "c" ] => 1
[ "abc", "abcd" ] => 1
[ "abc12D5", "abC34d3", "ABC14dabc23DAbC89d"] => 17
[ "a", "Aaa", "AaaA", "aAaAa", "aaaaaaaaaaaaaa", "AAaAA", "aAa" ] => 8
["AacaAc", "Aab"] => 2
Implémentation de référence
J'ai testé les exemples avec du code R (complètement non golfé) que vous pouvez essayer ici pour comparer tous les autres exemples que vous pourriez essayer avec votre code.
["AacaAc", "Aab"] => 2
. Un golf intentionnel à ma réponse Jelly aurait échoué dans ce cas, mais aurait dépassé tous les autres.Réponses:
Gelée , 20 octets
Pas vraiment content avec ça. Devrait être jouable au golf, même à ~ 15 octets peut-être.
Essayez-le en ligne!
ou Découvrez une suite de tests!
Explication
la source
LÞ
et toujours obtenir le même maximum à la fin.ṁ/
couperait plutôt le plus long à la longueur du plus court dans certains cas, ce qui n'est pas ce que nous voulons ... Je suppose que les cas de test sont trop bien choisis (et c'est une coïncidence plutôt malheureuse) ...["AacaAc", "Aab"]
.Python 2 , 86 octets
Essayez-le en ligne!
Étant donné deux chaînes,
s,t
,zip((s+s.swapcase())*len(t),t))
seront une liste de tuples de longueurlen(t)
depuiszip
tronque à la plus courte itérables. Silen(s)<len(t)
, alors cela "se remplit"s
avec le changement de cas souhaité et nous calculons le nombresum
de caractères différents.Si
len(t)<=len(s)
, alors le résultatsum
sera inférieur ou égal ausum
si nous évaluionst,s
; il n'a donc aucun effet sur le résultatmax
dans ce cas.la source
y!=
au lieu de!=y
pour enregistrer 1 octetJavaScript (Node.js) , 111 octets
Essayez-le en ligne!
la source
Gelée , 19 octets
Essayez-le en ligne!
la source
Rubis ,
8982 octetsCrée le produit croisé de la liste d'entrée par rapport à lui-même avant de calculer la distance de Hamming de chaque paire, en utilisant une méthode de duplication similaire à la réponse de Chas Brown . Ruby ne peut pas compresser les chaînes ensemble ou ajouter des booléens sans surcharge supplémentaire, cependant, il devient donc nécessaire d'itérer manuellement la paire de chaînes à la place.
-7 octets de Go.
Essayez-le en ligne!
la source
Java 10 ,
748740667666616 octetsCe doit être le golf le plus dense et illisible, mais le plus long que j'aie jamais imaginé.
Méthode d'appel
h(String[])
avec un tableau explicite (pas d'arguments var): par exemple,retourne
1
.Vous pouvez l' essayer en ligne !
Non golfé et commenté:
Je sais qu'une meilleure solution peut être obtenue, en particulier pour la partie d'appariement de cordes.
EDIT : raser 8 octets en changeant la taille du tableau int
hammingDistance()
au carré du nombre de chaînes donné. Il corrige également unArrayIndexOutOfBounds
jet dans l'un des cas de test.EDIT 2 : 33 octets enregistrés grâce aux commentaires de Kevin Cruijssen : déclaration de classe supprimée, noms raccourcis à 1 caractère, opérateurs modifiés, etc.
EDIT 3 : économisez 1 octet et atteignez le score approuvé par Satan en changeant la méthode avec var-arg en tableau.
EDIT 4 : économisez encore 50 octets grâce à Kevin Cruijssen , encore une fois: mettez à jour la version Java de 8 à 10 pour utiliser le
var
mot-clé, l'StringBuilder
instance supprimée , etc.la source
hammingDistance
utiliserd
ou d'une autre variable inutilisée. La plupart d'entre vous&&
peuvent l'être&
et||
peuvent l'être|
.c^' '
peut êtrec^32
.boolean w = false;
peut êtreboolean w=0>1;
.i=0
dans l'initialisation de la boucle peut être supprimée et changer le,i,j
en,i=0,j
.++j
peut être supprimé et++
ajouté au fichier.charAt(j++)
..toString()
peut être+""
.for(j=i+1;j<l;++j)
peut êtrefor(j=0;++j<l;)
. Etc. etc.StringBuilder
peuvent l'êtreStringBuffer
(si vous passez à Java 10, cela pourrait l'êtrevar b=new StringBuffer(l);
. Leboolean
etchar
peut également l'êtrevar
. Si vous n'avez pas Java 10 localement, il est disponible sur TIO ). En outre,for(;i<n;++i){for(char c:s.toCharArray())b.append(e(w,c));w=!w;}
peut êtrefor(;i++<n;w=!w)for(char c:s.toCharArray())b.append(e(w,c));
. Et je suis presque sûr que vous pouvez supprimerStringBuffer
complètement et simplement utiliserString
et+=
au lieu deappend
.05AB1E ,
3329 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Peut très probablement être divisé par deux en nombre d'octets, mais cela fonctionne.
Explication:
la source
Java 11, 387 octets
Essayez-le en ligne. (REMARQUE: Étant donné que Java 11 n'est pas encore sur TIO, il
String.repeat(int)
a été émulé commerepeat(String,int)
pour le même nombre d'octets.)Explication:
la source
R , 173 octets
Essayez-le en ligne!
@ngm: J'ai fait de mon mieux pour jouer à votre code (avec mes personnalisations lourdes bien sûr) mais, comme vous le savez bien, R n'est pas très golfique pour manipuler les cordes: P
la source
outer
d'obtenir toutes les combinaisons et de faire de l'arithmétique modulaire sur les points de code au lieu dechartr
.