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 code-golf , donc le code le plus court en octets dans chaque langue gagne.
Réponses:
Python 2 , 21 octets
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: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.la source
len(s)
plutôt que-2
?'
et"
, plus de 2 caractères auront été ajoutés car les guillemets doivent être échappés.[2:]
au lieu de[:len(s)]
16 caractères.05AB1E , 3 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
3733362926182119 octetsEssayez-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
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.
la source
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
la source
Haskell , 20 octets
Essayez-le en ligne!
Convertit en une chaîne de
F
etT
. Ce qui importe est que les personnagesF
etT
convertis les uns aux autres. Ceci est fait en vérifiant si le caractère est inférieurM
à getTrue
ouFalse
, puis en prenant le premier caractère de la représentation sous forme de chaîne.Haskell , 23 octets
Essayez-le en ligne
Remplace chaque caractère par
~
, sauf~
devient un espace.la source
q '~'
? Pourquoi ne peut-il pas être supprimé?'
tant que caractère dans les identifiants, doncq'~'=' '
serait analysé commeq' ~ '=' '
(rapportant une erreur lexicale parce que le dernier'
est incomparable.)Espaces blancs, 59 octets
Représentation visible
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:
la source
SSSTSSSSSN (push 32)
pourSSSTSSTN (push 9)
et leTSSS (add)
pourTSSN (multiply)
. Il imprimera un onglet pour chaque caractère avec une valeur unicode supérieure à 9 et unQ
(9 * 9 = 81) pour chaque caractère avec une valeur unicode de0..9
. Essayez-le en ligne brut 57 octets , ou essayez-le en ligne avec surlignage et explication ajoutésMATL ,
65 octetsEssayez-le en ligne!
Explication
la source
l'0f=
(si ça fait ce que je pense, c'est ça)Haskell , 19 octets
Une fonction anonyme qui prend et retourne un
String
. Utiliser comme(map$(!!1).show.succ) "1111"
.Essayez-le en ligne! (Utilisation du harnais de test de @ xnor.)
'
citation de départ .&
et~
, qui donnent à la place\
, parce que leurs successeurs'
et\DEL
se sont échappés dans les littéraux de caractère.la source
head
pouvez être sûr que vous pouvez utiliser(!!1)
un octet supplémentaire au lieu dehead
c'est(!!0)
pas(!!1)
. Cela échouerait sur le personnage'
.05AB1E , 5 octets
Essayez-le en ligne!
Explication
Remplace chaque caractère par le prochain caractère imprimable ascii, passant d’un tilde à l’espace.
la source
V , 7 octets
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.la source
9
seul, où incrémenté ajoute un autre caractère à la chaîneC (gcc) , 22 octets
Prend un pointeur de chaîne et modie le premier caractère en place.
Essayez-le en ligne!
la source
*s=159-*s
. Change toujours le dernier bit, donc ne donne jamais le même caractère. Notez que159 = ' ' + '~'
~
mauvais code de caractère .C (gcc) , 20 octets
Vu la réponse de Dennis, pensa à une amélioration essentielle de 2 octets.
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.)la source
Python 2 , 25 octets
Essayez-le en ligne!
Anders Kaseorg a sauvegardé un octet en extrayant le premier caractère de
True
ouFalse
.la source
'?'
à un code de caractère à 2 chiffres, mais Python n'est pas l'une de ces langues où vous pouvez faire cela :(lambda s:`+(s<'1')`+s[1:]
oulambda s:`s<'T'`[0]+s[1:]
Haskell,
3026 octetsEssayez-le en ligne!
Remplace chaque caractère par son prédécesseur et l'espace par un tilde.
la source
Octave ,
1918 octetsEssayez-le en ligne!
Explication:
la source
CJam , 5 octets
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é.
la source
Retina ,
10 à6 octets4 octets joués au golf grâce à @Neil
Essayez-le en ligne!
Ceci translittère
vers
~
,!
vers,
"
vers!
, ...,~
vers}
.la source
Japt , 4 octets
Essayez-le en ligne!
Explication:
la source
Cubix , 10 octets
Essayez-le en ligne! ou regardez-le courir!
Pour chaque caractère, imprime
1
si le caractère a un point de code pair,2
sinon;1
a un point de code impair et2
un pair, ainsi la sortie ne sera jamais égale à l'entrée.Explication
Ce code correspond au cube suivant:
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:
la source
Alice , 9 octets
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.
la source
t
pour le mod 10 est vraiment intelligent, gentil. :)Pushy , 1 octet
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
n
est mappé surchr(ord(n) % 26 + 65)
. Vous pouvez utiliser ce programme pour voir comment fonctionne le mappage.Le résultat:
n
tel quechr(ord(n) % 26 + 65) == n
, pour que ce soit vrai, il doit exister un entierx
tel que26x = 65
, pour lequel il n’existe aucune solution.1 octet
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
n
tel quechr(ord(n) % 26 + 97) == n
.la source
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!
la source
Gelée , 4 octets
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
la source
Bash + coreutils, 13
Translittère les caractères
en
~
(0x20 - 0x7e) avec~
, puisen
}
(0x7e, 0x20 - 0x7d).Essayez-le en ligne .
la source
PHP,
3027Modifie chaque caractère égal au premier caractère avec le caractère dont le bit le moins significatif a été inversé.
la source
~
fonctionne, en sortie1
.!$a
- ce ou~$a
fonctionne?!$a
se"12"
transforment"12"
car ilsfalse
sont convertis en une chaîne vide afin que rien ne soit remplacé et que~$a
tout 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.Ruby , 20 + 1 = 21 octets
Utilise le
-p
drapeau.Essayez-le en ligne!
Remplace le premier caractère de l'entrée par un
0
si c'est le cas1
ou1
autrement.la source
Brachylog , 9 octets
Essayez-le en ligne!
Explication
Ceci remplace tous les caractères par un espace, à l'exception des espaces qu'il remplace
"0"
.la source
PHP <7.1, 31 octets
Essayez-le en ligne!
la source
A non-numeric value encountered
. Et vous pouvez utiliser~
au lieu dea&
.Golfscript, 3 octets
Essayez-le en ligne!
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!
la source
Funky ,
26 à22 octetsCalcule
~a
lequel pour les non-chiffres retournera NaN. La1&
limite ensuite à 0 ou 1, pour le chiffre 0, ce sera1
et pour1
ce sera0
. Donc, cette chaîne est toujours unique.Essayez-le en ligne!
la source