La plupart des nombres carrés ont au moins 1 nombre carré différent avec lequel leur distance Levenshtein est exactement 1. Pour un carré donné , chaque carré qui remplit cette condition est appelé un voisin Levenshtein de . Par exemple, est un voisin Levenshtein de , car une seule modification ( ) est requise. Cependant, n'est pas un voisin Levenshtein de , car il nécessite un minimum de 2 modifications. Les nombres qui ont des 0 en tête ( ) ne sont pas des voisins de Levenshtein.
Votre tâche consiste à prendre un nombre carré en entrée et à afficher, dans un format raisonnable, la liste complète de ses voisins Levenshtein. Vous pouvez inclure des voisins répétés dans la liste, si vous le souhaitez, mais vous ne pouvez pas inclure l'entrée d'origine, car ce n'est pas un voisin Levenshtein en soi.
Tout format raisonnable devrait inclure une sorte de séparateur entre les sorties, comme ,
ou une nouvelle ligne, et peut produire des caractères avec la valeur Unicode correspondante (c'est-à-dire brainfuck) plutôt que les nombres eux-mêmes. L'ordre de sortie n'a pas d'importance.
Cette entrée sera toujours un nombre carré, supérieur à . Votre programme ne devrait avoir aucune limite théorique , mais s'il échoue pour de grands nombres pour des raisons pratiques (par exemple au-delà des nombres 32 bits), c'est tout à fait correct.
Si l'entrée n'a pas de voisins Levenshtein, la sortie doit clairement refléter cela, comme la sortie de rien, un tableau / chaîne vide, un entier négatif, , etc.
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Cas de test
Voici les résultats pour les carrés de à :
1: 4, 9, 16, 81
4: 1, 9, 49, 64
9: 1, 4, 49
16: 1, 36, 169, 196
25: 225, 256, 625
36: 16, 361
49: 4, 9
64: 4
81: 1, 841
100: 400, 900, 1600, 8100
121: 1521
144: 1444
169: 16, 1369
196: 16, 1296, 1936
225: 25, 625, 1225, 2025, 4225, 7225
256: 25
289: 2809
324: 3249
361: 36, 961
400: 100, 900, 4900, 6400
De plus, 1024
n'a pas de voisins, c'est donc un bon cas de test.
2025
.32 * 32 = 1024
n'a pas de voisins Levenshtein carrés.1024
n'a pas de voisins Levenshtein, je vais modifier cet exemple dansRéponses:
05AB1E ,
11 106 octets-4 merci à Grimy !! (le carré en premier plutôt que la recherche de carrés enregistre 3; utilisez 10 ^ n enregistre 1)
Prend un entier, sort une liste, éventuellement vide
Essayez-le en ligne! - C'est fou-lent en raison de la
°
, donc inutile de l'essayer même pour9
.Ou Essayez une version légèrement plus rapide - celle-ci en ajoute huit à la place,
8+
puis utilise la même approche.Comment?
la source
9s«
dans votre 11 octets aurait pu être9ì
. Belle réponse au point, cependant! +1 de moi.т+Lnʒ.L
. 6 ralentir Ridiculously:°Lnʒ.L
. 5 ralentir Infiniment:∞nʒ.L
.∞nʒ.L
réponse soit acceptable, car les soumissions doivent prendre fin . Indépendant: votre lien TIO pour la version 7 octets est utilisé9ì
, ce qui est environ 100 fois plus lent queT+
pour les grands nombres. Mon commentaire utiliséт+
(ajouter 100) pour être sûr, mais il s'avère que8+
c'est suffisant dans tous les cas.Rétine 0,8,2 ,
142138octetsEssayez-le en ligne! Explication:
Pour chaque chiffre, essayez a) de le retirer b) de le précéder d'un chiffre différent c) de le changer en un chiffre différent. Pour l'instant, le chiffre différent est marqué d'un
#
.Pour chaque chiffre différent potentiel, remplacez chaque chiffre possible.
Supprimez les nombres qui commencent maintenant par zéro.
Supprimez tous les numéros en double. (Cela laisse juste les lignes vides.)
Convertissez en unaire.
Conservez tous les nombres carrés, sauf le dernier (qui est toujours le numéro d'entrée).
Convertissez les nombres restants en décimal.
la source
R ,
4241 octetsEssayez-le en ligne!
la source
Python 2 ,
173167149148147144139138 octetsEssayez-le en ligne!
19 + 3 + 5 + 1 = 28! octets thx à Jonathan Allan .
la source
[p for p in...]
est redondant. Nous pouvons retourner un ensemble (ou des doublons).'0'<v[:1]
peut être'1'<=v
. C'est beaucoup plus lent maisrange(len(a)+1)
peut l'êtrerange(n)
. Utilisez une variable pouri
et desi+1
tranches pour éviter la somme. Utilisez un lambda. EDIT enregistrer 48 de votre précédent.Oracle SQL, 93 octets
Testez dans SQL * PLus.
la source
PHP , 62 octets
Essayez-le en ligne!
Ce script imprime les voisins Levenshtein d'entrée séparés par
_
un séparateur de fin, et si aucun voisin n'est trouvé, n'affiche rien.Heureusement, PHP a une distance intégrée pour Levenshtein ! Ce script parcourt tous les nombres carrés de 1 à
input * 91
, car tous les voisins Levenshtein valides (distance de 1) sont dans cette plage. Imprime ensuite chaque numéro de cette plage qui a une distance Levenshtein de 1 avec l'entrée.la source
JavaScript (V8) ,
129 125123 octetsPrend l'entrée sous forme de chaîne. Imprime les voisins Levenshtein vers STDOUT.
Essayez-le en ligne!
Commenté
la source
print()
mais je ne savais pas que Node l'avait aussi ...Gelée ,
5338 octetsEssayez-le en ligne!
Il n'y a pas de fonction intégrée pour la distance de Levenshtein, donc génère toutes les modifications possibles à 1 distance, puis exclut celles avec un zéro devant et ne conserve que des carrés parfaits. Ne filtre pas les doublons (comme autorisé).
la source
Wolfram Language (Mathematica) ,
6259 octetsEssayez-le en ligne!
En utilisant la limite de la réponse R .
la source