Même longueur, chaîne différente

53

Défi

Étant donné une chaîne non vide S de longueur L se composant entièrement de caractères ASCII imprimables, sortie une autre chaîne de longueur L qui est entièrement constitué de caractères ASCII imprimables, mais est différent de S .

Pour les besoins de ce défi, un caractère ASCII imprimable est un caractère compris entre U + 0020 et U + 007E inclus. c'est-à-dire de (espace) à ~(tilde). Les nouvelles lignes et les onglets ne sont pas inclus.

Par exemple, étant donné que "abcde"certaines sorties valides pourraient être:

  • "11111"
  • "abcdf"
  • "edcba"

Mais ceux-ci seraient invalides:

  • "abcde"
  • "bcde"
  • "abcde0"

Cas de test

"asdf"
"1111"
"       "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
"  0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

Règles

  • Vous pouvez supposer que la saisie est entièrement composée de caractères imprimables ASCII.
  • Vous ne pouvez pas supposer que l’entrée ne contient pas les 95 caractères imprimables.
  • Vous pouvez supposer que l’entrée contient au moins un caractère et moins de 256 caractères.
  • La sortie doit également être entièrement composée de caractères imprimables ASCII. Vous ne pouvez pas, par exemple, générer l'octet \ x7F pour l'entrée "~".
  • La sortie doit être différente de l'entrée avec la probabilité 1; Autrement dit, vous pouvez générer des chaînes aléatoires jusqu'à ce que l'une d'elles soit différente de l'entrée, mais vous ne pouvez pas simplement générer L caractères aléatoires et espérer que ce soit différent.
  • Les nouvelles lignes ne sont pas autorisées dans la sortie, mais vous pouvez générer une nouvelle ligne qui ne compte pas dans la chaîne.

Notation

C'est du , donc le code le plus court en octets dans chaque langue gagne.

ETHproductions
la source
Notez que "positif" exclut la chaîne vide. Pour plus de clarté, remplacez peut-être "positif" par "non nul"?
CalculatriceFeline
5
@CalculatorFeline Mais cela inclurait des chaînes de longueur négative / s
ETHproductions
1
... Ceux-là n'existent pas.
CalculatriceFeline
@CalculatorFeline Mieux, maintenant?
ETHproductions
3
Un autre défi simple mais non trivial.
Weijun Zhou

Réponses:

34

Python 2 , 21 octets

lambda s:`s`[:len(s)]

Essayez-le en ligne!

Prend la représentation sous forme de chaîne de la chaîne en entrée et la tronque à la longueur de la chaîne en entrée. Pour une chaîne typique, cela le met entre 'guillemets et coupe la fin:

abc  ->   'abc'  ->  'ab
     rep        chop

Notez que la nouvelle chaîne commence par '. Montrons que la sortie diffère toujours de l'entrée.

  • Si l'entrée n'a pas ', la sortie commence par 'et l'entrée ne le fait pas.

  • Si l'entrée contient un 'et mais non ", alors Python utilisera "les guillemets extérieurs en donnant un premier caractère "qui ne figure pas dans la chaîne d'entrée.

  • Si l'entrée a les deux 'et ", alors les guillemets extérieurs sont 'et chacun 'est échappé comme \'. Où que le premier "apparaisse dans l'entrée, il est décalé de l'initiale 'dans la sortie et de toute fuite éventuelle. Cela signifie qu'il ne peut pas correspondre à a "dans la position correspondante dans la sortie.

Enfin, notez que le fait de citer l'entrée et éventuellement les caractères d'échappement augmente toujours le nombre de caractères. Par conséquent, le fait de tronquer la sortie lui donne la même longueur que l'entrée.

Notez qu'il était crucial que Python passe de manière adaptative à "dans le second cas. Sinon, la saisie à trois caractères échouerait '\'. Ou, tout préfixe plus long de la chaîne d'affichage du correctif à l' aide de '. Donc, cette méthode ne fonctionnera pas pour la plupart des langues.

Xnor
la source
Quel est le raisonnement pour l'indexation jusqu'à len(s)plutôt que -2?
Julian Wolf
1
@JulianWolf Pour une entrée contenant à la fois 'et ", plus de 2 caractères auront été ajoutés car les guillemets doivent être échappés.
Anders Kaseorg
Logique; n'avait pas considéré cela. Merci!
Julian Wolf
Vous pouvez utiliser [2:]au lieu de [:len(s)]16 caractères.
xbarbie
@xbarbie Cela ne donne pas toujours la même longueur, s'il y a des caractères à échapper.
xnor
16

05AB1E , 3 octets

ÇÈJ

Essayez-le en ligne!

Ç   # Convert to ASCII values
 È  # is even? (0 is 48 and 1 is 49 therefore 0 -> 1 and 1 -> 0)
  J # Join
Riley
la source
Nice, très intelligent
Adnan
15

JavaScript (ES6), 37 33 36 29 26 18 21 19 octets

s=>s.slice(1)+ +!+s

Essayez-le en ligne!

-4 octets grâce à ETHProductions

-7 + -5 + -2 octets grâce à CalculatorFeline

-3 octets grâce à Rick Hitchcock

Déplace le premier caractère à la fin et le définit sur 0 s'il est numérique et différent de zéro, et sur 1 sinon.

Explication

s=>                    anonymous function with parameter s
                 +s    convert s to a number
                !      not (converts to boolean; relevant: 0->true,1->false)
               +       convert !+s back to number (true->1, false->0)
   s.slice(1)+         prefix the rest of the string
              ␣        needed to avoid the +s combining

Preuve

Parce que le deuxième caractère devient le premier, le troisième caractère devient le deuxième, etc. Tous les caractères doivent être identiques. Le dernier caractère restant ne peut être qu'un 0 ou un 1; le caractère répété doit donc être 0 ou 1. Mais toute chaîne de 0 génère un 1 à la fin, et inversement; par conséquent, il est impossible de créer une entrée égale à sa sortie. -ETHProductions

Voir les modifications des versions précédentes et des explications.

f=
s=>s.slice(1)+ +!+s

console.log(f("000"))
console.log(f("111"))
console.log(f("001"))
console.log(f("110"))
console.log(f("~"))
console.log(f("111111111111111111111111111111111111111111111111111"))
console.log(f("Hello world!"))
console.log(f("23"))
console.log(f(" "))
console.log(f("1x"))

Stephen S
la source
13

Gelée , 3 octets

~Ṿṁ

La sortie est une chaîne de chiffres, de virgules et de caractères très faibles, dont le premier caractère sera différent du premier.

Essayez-le en ligne!

Comment ça fonctionne

~Ṿṁ  Main link. Argument: s (string)

~    Map bitwise NOT over the characters c in s.
     This attempts to cast c to int and then apply bitwise NOT, mapping
     '0', ..., '9' to 0, ..., 9 (before ~), then -1, ..., -10 (after ~).
     For non-digits, the attempt fails, mapping c to 0.
 Ṿ   Uneval, yielding a comma-separated string of integers in [-10, ..., 0].
     The first character will be '-' if s starts with a digit and '0' if not.
  ṁ  Mold; truncate the result to the length of s.
Dennis
la source
6

Haskell , 20 octets

map$head.show.(<'M')

Essayez-le en ligne!

Convertit en une chaîne de Fet T. Ce qui importe est que les personnages Fet Tconvertis les uns aux autres. Ceci est fait en vérifiant si le caractère est inférieur Mà get Trueou False, puis en prenant le premier caractère de la représentation sous forme de chaîne.


Haskell , 23 octets

q '~'=' '
q _='~'
map q

Essayez-le en ligne

Remplace chaque caractère par ~, sauf ~devient un espace.

Xnor
la source
Quelle est la signification de l'espace q '~'? Pourquoi ne peut-il pas être supprimé?
Cyoce
@Cyoce Haskell autorise en 'tant que caractère dans les identifiants, donc q'~'=' 'serait analysé comme q' ~ '=' '(rapportant une erreur lexicale parce que le dernier 'est incomparable.)
Ørjan Johansen
5

Espaces blancs, 59 octets

Représentation visible

NSSNSSSTSSSSSNSNSSNSSNSTNTSTTTTSSTNTTSNSNSTSSSNSSSNTNSSNSNN

Ce qu'il fait:

Pour chaque caractère lu, il imprime un espace, sauf s'il s'agit d'un espace, il imprime ensuite un @.

Démontage:

loop:
    push 32
     dup
      dup
       dup
        ichr
       get
       sub
      jn not_32
     dup
      add
not_32:
     pchr
    jmp loop
CensoredUsername
la source
Toujours agréable de voir une solution dans les espaces blancs. Surtout quand vous êtes normalement incapable de le voir . +1
Josiah Winslow
Bonne réponse! J'ai essayé de trouver quelque chose de plus court que la structure, mais je n'ai rien trouvé. Mais vous pouvez jouer au golf 2 octets en modifiant le SSSTSSSSSN (push 32)pour SSSTSSTN (push 9)et le TSSS (add)pour TSSN (multiply). Il imprimera un onglet pour chaque caractère avec une valeur unicode supérieure à 9 et un Q(9 * 9 = 81) pour chaque caractère avec une valeur unicode de 0..9. Essayez-le en ligne brut 57 octets , ou essayez-le en ligne avec surlignage et explication ajoutés
Kevin Cruijssen
Ignorer mon commentaire ci-dessus. Pour relever le défi, une tabulation n'est pas considérée comme un caractère imprimable ASCII.
Kevin Cruijssen
5

MATL , 6 5 octets

Qo!V!

Essayez-le en ligne!

Explication

Q     % Implicitly input a string. Add 1 to each code point.
o     % Parity: 0 if odd, 1 if even. Note that '0' has ASCII code 48, so after
      % having added 1 it now gives 1. Similarly. '1' has ASCII code 49, so it
      % now gives 0. All other chars give 0 or 1. 
!V!   % Convert each number to the corresponding char. Implicitly display
Luis Mendo
la source
C'est 5 dans CJam: l'0f=(si ça fait ce que je pense, c'est ça)
Martin Ender
@MartinEnder Oui, c'est exactement ça :-) Je viens d'ajouter une explication
Luis Mendo
5

Haskell , 19 octets

Une fonction anonyme qui prend et retourne un String. Utiliser comme (map$(!!1).show.succ) "1111".

map$(!!1).show.succ

Essayez-le en ligne! (Utilisation du harnais de test de @ xnor.)

  • Pour chaque caractère de la chaîne d'entrée, incrémente le caractère, le convertit au format littéral de caractère, puis prend le deuxième caractère du littéral, qui est le caractère juste après la 'citation de départ .
  • Pour presque tous les caractères imprimables, il en résulte simplement le caractère incrémenté. Les exceptions sont &et ~, qui donnent à la place \, parce que leurs successeurs 'et \DELse sont échappés dans les littéraux de caractère.
Ørjan Johansen
la source
vous headpouvez être sûr que vous pouvez utiliser (!!1)un octet supplémentaire au lieu de
Julian Wolf
Non, headc'est (!!0)pas (!!1). Cela échouerait sur le personnage '.
Ørjan Johansen
Ah, d'accord. Je venais de lire la réponse en python et j'avais oublié que les citations nécessitaient généralement un traitement spécial.
Julian Wolf
4

05AB1E , 5 octets

žQDÀ‡

Essayez-le en ligne!

Explication

Remplace chaque caractère par le prochain caractère imprimable ascii, passant d’un tilde à l’espace.

žQ     # push a string of printable acsii chars (space to tilde)
  D    # duplicate
   À   # rotate left
    ‡  # translate
Emigna
la source
4

V , 7 octets

íÁ/a
g?

Essayez-le en ligne! ou Vérifiez tous les cas de test!

Comment ça marche?

Considérez toutes les chaînes constituées d’ASCII imprimable. Chaque chaîne doit soit 1) contenir des caractères alphabétiques, ou 2) ne pas contenir de caractères alphabétiques.

Ce programme fonctionne donc en convertissant d'abord un caractère non alphabétique en 'a', puis en exécutant ROT13 sur la chaîne d'entrée.

í       " Substitute:
 Á      "   A non-alphabetic character ([^a-zA-Z])
  /     "   with
   a    "   the letter 'a'
g?      " Perform ROT13 on...
        "   (Implicit) the current line.
DJMcMayhem
la source
Cela casse si vous avez un nombre comme 9seul, où incrémenté ajoute un autre caractère à la chaîne
nmjcman101
@ nmjcman101 Ah, c'est un bon point. Je suis revenu
DJMcMayhem
J'aime la chose ROT13 cependant, je ne savais pas que V (im) pourrait faire ça
nmjcman101
4

C (gcc) , 22 octets

f(char*s){*s=65+*s%2;}

Prend un pointeur de chaîne et modie le premier caractère en place.

Essayez-le en ligne!

Dennis
la source
1
Shorter: *s=159-*s. Change toujours le dernier bit, donc ne donne jamais le même caractère. Notez que159 = ' ' + '~'
celtschk
Je pense que vous voulez dire 158 = '' + '~'. 159-32 = 127, ce qui serait un caractère hors de portée. Mais bonne idée.
Computronium
@celtschk Les involutions ne peuvent pas fonctionner, car il existe une quantité impaire (95) de caractères imprimables, de sorte qu'au moins l'un d'entre eux mappe sur lui-même.
Dennis
@ Computronium: Oups, vous avez raison, j'ai le ~mauvais code de caractère .
celtschk
4

C (gcc) , 20 octets

Vu la réponse de Dennis, pensa à une amélioration essentielle de 2 octets.

f(char*s){*s^=*s/3;}

Essayez-le en ligne! (Pied de page de Dennis.)

Comme l'original, modifie le premier caractère de la chaîne en place, mais la modifie avec sa valeur divisée par 3 (le plus petit nombre qui fonctionne. 2 échoue sur le caractère unique 'U'qui donne 127, non imprimable.)

Ørjan Johansen
la source
4

Python 2 , 25 octets

lambda s:`s<'T'`[0]+s[1:]

Essayez-le en ligne!

Anders Kaseorg a sauvegardé un octet en extrayant le premier caractère de Trueou False.

Xnor
la source
Je suggérerais de passer '?'à un code de caractère à 2 chiffres, mais Python n'est pas l'une de ces langues où vous pouvez faire cela :(
CalculatorFeline
Variantes permettant d'économiser un octet (mais en abandonnant la compatibilité avec Python 3): lambda s:`+(s<'1')`+s[1:]oulambda s:`s<'T'`[0]+s[1:]
Anders Kaseorg
3

Haskell, 30 26 octets

f ' '='~'
f c=pred c
map f

Essayez-le en ligne!

Remplace chaque caractère par son prédécesseur et l'espace par un tilde.

nimi
la source
3

Octave , 19 18 octets

@(s)['',(s<66)+65]

Essayez-le en ligne!

Explication:

@(s)                 % Anonymous function taking a string s as input
         s<66        % A boolean vector with `1` for all characters below ASCII-66.
        (s<66)+65    % Add 65 to this, so that all elements that are 32-65 are now 66.
                     % All other elements are 65 
    ['',         ]   % Implicitly convert the list of 65 and 66 to the letters A and B
Stewie Griffin
la source
3

CJam , 5 octets

l)iA%

Essayez-le en ligne!

Convertit le dernier caractère en son point de code et prend celui de modulo 10. Ceci est clairement différent pour les caractères non numériques situés en dernière position. Mais les chiffres commencent au point de code 48. Par conséquent, si vous prenez le mod 10, ils seront décalés cycliquement vers la gauche et le dernier caractère sera donc toujours changé.

Martin Ender
la source
3

Retina , 10 à 6 octets

4 octets joués au golf grâce à @Neil

T`p`~p

Essayez-le en ligne!

Ceci translittère vers ~, !vers , "vers !, ..., ~vers }.

Kritixi Lithos
la source
3

Japt , 4 octets

®c v

Essayez-le en ligne!

Explication:

®c v
®    At each char:
 c     Convert to its ASCII value
   v   Return 1 if divisible by 2, otherwise return 0
Oliver
la source
3

Cubix , 10 octets

..@|i?2%)O

Essayez-le en ligne! ou regardez-le courir!

Pour chaque caractère, imprime 1si le caractère a un point de code pair, 2sinon; 1a un point de code impair et 2un pair, ainsi la sortie ne sera jamais égale à l'entrée.

Explication

Ce code correspond au cube suivant:

    . .
    @ |
i ? 2 % ) O . .
. . . . . . . .
    . .
    . .

L’IP (pointeur d’instruction) commence dans le coin supérieur gauche de la face extrême gauche et se dirige vers l’est. Il suit cette série d'instructions:

i     Grab a char-code from STDIN and push it to the stack (-1 if there is no more input).
?     If the top item is negative, turn left and hit @ which ends the program.
      If it's positive (any printable ASCII char), turn right. The IP runs through a bunch
        of no-ops, then hits:
)     Increment the top item.
|     Mirror the IP's direction horizontally (turns it around).
)     Increment the top item again. The IP then wraps around again until it hits:
?     The top item is positive, so turn right.
2     Push a 2 to the stack.
%     Push the modulus of the top two items (0 for even char-code, 1 for odd).
)     Increment the result (now 1 for even char-code, 2 for odd).
O     Output as a number. The IP wraps back around to the i and the process starts again.
ETHproductions
la source
3

Alice , 9 octets

#oi/
t i@

Essayez-le en ligne!

Explication

L'idée a été reprise de la soumission de Martin Ender à CJam. Le premier caractère est considéré comme un point de code, mod 10 réduit, et déplacé à la fin de la sortie. Comme exactement un caractère a été modifié, permuter les caractères ne peut pas avoir pour résultat de récupérer la même chaîne.

#   skip next command
o   (skipped)
i   push first byte onto stack
    STACK: [97]
/   reflect to SE, switch to ordinal mode (implicit reflect to SW)
i   push remaining input onto stack as string (implicit reflect to NW)
    STACK: [97, "sdf"]
o   output top of stack (implicit reflect to SW)
    STACK: [97]
t   implicitly convert code point to decimal string, and extract last character
    (implicit reflect to NE)
    STACK: ["9", "7"]
o   output this last digit (implicit reflect to SE)
i   push empty string, since there is no more input to take (implicit reflect to NE)
/   reflect to S, switch to cardinal mode
@   terminate
Nitrodon
la source
Utiliser tpour le mod 10 est vraiment intelligent, gentil. :)
Martin Ender
3

Pushy , 1 octet

Q

Essayez-le en ligne!

Ceci convertit la chaîne donnée en liste de codes de caractères ASCII, les indexe (indexation modulaire) en alphabet majuscule, puis affiche le résultat. Essentiellement, chaque personnage nest mappé sur chr(ord(n) % 26 + 65). Vous pouvez utiliser ce programme pour voir comment fonctionne le mappage.

Le résultat:

  • Aura toujours la même longueur que l'entrée, car les caractères sont directement mappés dans de nouveaux.
  • Comprend toujours uniquement des caractères ASCII imprimables (car il ne contient que des lettres majuscules)
  • Sera toujours différent de l’entrée, car il n’existe pas de caractère en entrée ntel que chr(ord(n) % 26 + 65) == n, pour que ce soit vrai, il doit exister un entier xtel que 26x = 65, pour lequel il n’existe aucune solution.

1 octet

q

Essayez-le en ligne!

Cette réponse est exactement la même, sauf qu'elle correspond à des caractères alphabétiques minuscules plutôt qu'à des caractères alphabétiques majuscules . Ceci est toujours valable car il n'y a aucun caractère d'entrée possible ntel que chr(ord(n) % 26 + 97) == n.

FlipTack
la source
2

Brain-Flak , 53 octets

Comprend +1 pour -c

([(((()()()()){}){}){}()]({}())){{}(<({}[()()])>)}{}

Cela décrémentera le premier caractère sauf s'il s'agit d'un espace. Dans ce cas, il incrémentera le premier caractère.

Essayez-le en ligne!

([(((()()()()){}){}){}()]      )                     # Push: input + 1 != 33 on top of...
                         ({}())                      #    input + 1
                                {{}(<          >)}{} # If (input + 1 != 33)
                                     ({}[()()])      #   Push: (input + 1) - 2
Riley
la source
2

Gelée , 4 octets

^1Ṿ€

Affiche une chaîne de chiffres. Aucun caractère de sortie ne sera égal au caractère d'entrée correspondant.

Essayez-le en ligne!

Comment ça fonctionne

^1Ṿ€  Main link. Argument: s (string)

^1    XOR each character c in with 1.
      This attempts to cast c to int, mapping '0', ..., '9' to 0, ..., 9.
      For non-digits, the attempt fails, mapping c to 0.
      After XORing with 1, we get 1, 0, 3, 2, 5, 4, 7, 6, 9, 8 for '0', ..., '9', 
      and 1 for all non-digits.
  Ṿ€  Uneval each; mapping 0, ..., 9 to '0', ..., '9'. This yields a character
      array, which is Jelly's string type.
      Note that no character is mapped to itself.
Dennis
la source
2

Bash + coreutils, 13

tr \ -~ ~\ -}

Translittère les caractères en ~(0x20 - 0x7e) avec ~, puis en }(0x7e, 0x20 - 0x7d).

Essayez-le en ligne .

Trauma numérique
la source
2

PHP, 30 27

<?=strtr($a=$argn,$a,$a^1);

Modifie chaque caractère égal au premier caractère avec le caractère dont le bit le moins significatif a été inversé.

Christoph
la source
Est-ce que "~" fonctionne?
CalculatriceFeline
En fait, il n'inverse pas le bit le moins significatif du premier caractère; elle le convertit en un nombre entier et retourne le bit le moins significatif de ce . Alors oui, @CalculatorFeline, ~fonctionne, en sortie 1.
ETHproductions
Oh. Est !$a- ce ou ~$afonctionne?
CalculatriceFeline
@ETHproductions J'ai effectué la dernière modification peu de temps avant d'aller me coucher et je n'ai pas eu le temps de la mettre à jour. Bien sûr, votre droit convertit d’abord en entier et par conséquent ne changera peut-être même pas le premier caractère, mais peut-être que le second, par exemple, "12" deviendra "13".
Christoph
@CalculatorFeline malheureusement, les deux échecs !$ase "12"transforment "12"car ils falsesont convertis en une chaîne vide afin que rien ne soit remplacé et que ~$atout ne devienne pas imprimable car ~"12"ne se convertit pas en int d'abord, mais renverse littéralement tous les bits de la chaîne.
Christoph
2

Ruby , 20 + 1 = 21 octets

Utilise le -pdrapeau.

sub(/./){$&=~/1/||1}

Essayez-le en ligne!

Remplace le premier caractère de l'entrée par un 0si c'est le cas 1ou 1autrement.

Valeur d'encre
la source
2

Brachylog , 9 octets

{¬Ṣ|∧Ịh}ᵐ

Essayez-le en ligne!

Explication

Ceci remplace tous les caractères par un espace, à l'exception des espaces qu'il remplace "0".

{      }ᵐ      Map on each char of the Input
 ¬Ṣ              The Input char is not " ", and the Output char is " "
   |             Or
    ∧Ịh          The Output char is "0"
Fataliser
la source
2

PHP <7.1, 31 octets

for(;~$c=$argn[$i++];)echo$c^1;

Essayez-le en ligne!

Jörg Hülsermann
la source
Veuillez supprimer la solution de 66 octets car elle est invalide.
CalculatriceFeline
Échec pour les entrées "1", "10", "101" etc. Vous ne pouvez pas uniquement dépendre de la longueur de la chaîne.
CalculatriceFeline
@CalculatorFeline "1" émet "0", "10" émet "01", "101" émet "010". Où est le problème?
Christoph
@CalculatorFeline "1" => 0, "10" => 01, "101" => 010 Où échoue-t-il?
Jörg Hülsermann
1
Les rendements de PHP 7.1 A non-numeric value encountered. Et vous pouvez utiliser ~au lieu de a&.
Tite
2

Golfscript, 3 octets

Essayez-le en ligne!

)5%

Prenez la valeur ASCII du dernier caractère modulo 5 et remplacez le dernier caractère par le résultat. Cela fonctionne évidemment pour les caractères non numériques, mais si le dernier caractère est un chiffre, il change également ("0" mod 5 = 3, "1" mod 5 = 4, etc.).

Cela fonctionnerait également avec 7 ou 9 tout en conservant la même longueur.

De plus, oui! J'ai une solution Golfscript aussi bonne que les meilleures solutions ici!

Josiah Winslow
la source
2

Funky , 26 à 22 octets

s=>s::gsub("."a=>1&~a)

Calcule ~alequel pour les non-chiffres retournera NaN. La 1&limite ensuite à 0 ou 1, pour le chiffre 0, ce sera 1et pour 1ce sera 0. Donc, cette chaîne est toujours unique.

Essayez-le en ligne!

ATaco
la source