Desafío
Dada una cadena no vacía S de la longitud L compuesto enteramente de caracteres ASCII imprimibles, la salida de otra cuerda de longitud L que se compone enteramente de caracteres ASCII imprimibles, pero no es igual a S .
Para los propósitos de este desafío, un carácter ASCII imprimible es uno entre U + 0020 y U + 007E, inclusive; es decir, de
(espacio) a ~
(tilde). Las líneas nuevas y las pestañas no están incluidas.
Por ejemplo, dado "abcde"
, algunas salidas válidas podrían ser:
"11111"
"abcdf"
"edcba"
Pero estos serían inválidos:
"abcde"
"bcde"
"abcde0"
Casos de prueba
"asdf"
"1111"
" "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
" 0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
Reglas
- Puede suponer que la entrada consiste completamente en caracteres ASCII imprimibles.
- No puede suponer que la entrada no contiene los 95 caracteres imprimibles.
- Puede suponer que la entrada contiene al menos un carácter y tiene menos de 256 caracteres de longitud.
- La salida también debe consistir completamente en caracteres ASCII imprimibles. No podría, por ejemplo, generar el byte \ x7F para la entrada
"~"
. - La salida debe ser diferente a la entrada con probabilidad 1; es decir, puede generar cadenas aleatorias hasta que una sea diferente a la entrada, pero no puede simplemente generar caracteres aleatorios L y esperar que sea diferente.
- Las nuevas líneas no están permitidas en la salida, pero puede generar una nueva línea final que no se cuenta hacia la cadena.
Puntuación
Este es el código de golf , por lo que gana el código más corto en bytes en cada idioma.
Respuestas:
Python 2 , 21 bytes
Pruébalo en línea!
Toma la representación de cadena de la cadena de entrada y la trunca a la longitud de la cadena de entrada. Para una cadena típica, esto la pone entre
'
comillas y cortes al final:Tenga en cuenta que la nueva cadena comienza con
'
. Demostremos que la salida siempre difiere de la entrada.Si la entrada no tiene
'
, entonces la salida comienza con'
y la entrada no.Si la entrada contiene un
'
y pero no"
, entonces Python lo usará"
para las comillas externas, dando un primer carácter"
que no está en la cadena de entrada.Si la entrada tiene ambos
'
y"
, entonces las comillas externas son'
y cada una'
se escapa como\'
. Dondequiera que"
aparezca el primero en la entrada, se desplaza a la derecha por la inicial'
en la salida y por cualquier posible escape. Esto significa que no puede coincidir con a"
en la posición correspondiente en la salida.Finalmente, tenga en cuenta que citar la entrada y posiblemente escapar caracteres siempre aumenta el número de caracteres, por lo que truncar la salida hace que tenga la misma longitud que la entrada.
Tenga en cuenta que fue crucial que Python cambie adaptativamente
"
en el segundo caso. Si no lo hiciera, fallaría en la entrada de tres caracteres'\'
. O bien, cualquier prefijo más largo del arreglo muestra la cadena usando'
. Entonces, este método no funcionará para la mayoría de los idiomas.fuente
len(s)
que-2
?'
y"
, se habrán agregado más de 2 caracteres porque las comillas deben escaparse.[2:]
lugar de[:len(s)]
bajar a 16 caracteres.05AB1E , 3 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
3733362926182119 bytesPruébalo en línea!
-4 bytes gracias a ETHProductions
-7 + -5 + -2 bytes gracias a CalculatorFeline
-3 bytes gracias a Rick Hitchcock
Mueve el primer carácter al final y lo establece en 0 si es numérico y distinto de cero, y 1 en caso contrario.
Explicación
Prueba
Debido a que el segundo carácter se convierte en el primero, el tercer carácter se convierte en el segundo, etc. todos los caracteres deberían ser idénticos. El último carácter restante solo puede ser un 0 o un 1, por lo que el carácter repetido tendría que ser 0 o 1. Pero cualquier cadena de 0 produce un 1 al final, y viceversa; por lo tanto, es imposible crear una entrada que sea igual a su salida. -ETHProducciones
Ver ediciones para versiones anteriores y explicaciones.
fuente
Jalea , 3 bytes
La salida es una cadena de dígitos, comas y caracteres de menos, cuyo primer carácter diferirá del primer carácter de la cadena de entrada.
Pruébalo en línea!
Cómo funciona
fuente
Haskell , 20 bytes
Pruébalo en línea!
Convierte en una cadena de
F
yT
. Lo que importa es que los personajesF
yT
conversos entre sí. Esto se realiza comprobando si el carácter es menor queM
obtenerTrue
oFalse
, y luego tomando el primer carácter de la representación de cadena.Haskell , 23 bytes
Pruébalo en línea
Reemplaza cada personaje con
~
, excepto que se~
convierte en un espacio.fuente
q '~'
? ¿Por qué no se puede eliminar?'
como personaje en los identificadores, porq'~'=' '
lo que se analizaría comoq' ~ '=' '
(informando un error léxico porque el último'
no tiene parangón)Espacio en blanco, 59 bytes
Representación visible
Que hace:
Por cada personaje que lee, imprime un espacio, excepto cuando es un espacio, luego imprime una @.
Desmontaje
fuente
SSSTSSSSSN (push 32)
toSSSTSSTN (push 9)
y elTSSS (add)
toTSSN (multiply)
. Imprimirá una pestaña para cada carácter con un valor unicode superior a 9, y unQ
(9 * 9 = 81) para cada carácter con un valor unicode de0..9
. Pruébelo en línea sin procesar 57 bytes , o Pruébelo en línea con resaltado y explicación adicionalesMATL ,
65 bytesPruébalo en línea!
Explicación
fuente
l'0f=
(si hace lo que creo que hace)Haskell , 19 bytes
Una función anónima que toma y devuelve a
String
. Usar como(map$(!!1).show.succ) "1111"
.Pruébalo en línea! (Usando el arnés de prueba de @ xnor.)
'
cita inicial .&
y~
, que en cambio dan\
, porque sus sucesores'
y\DEL
escapan en literales de caracteres.fuente
head
se puede usar en lugar de(!!1)
un byte adicionalhead
es(!!0)
, no(!!1)
. Fallaría en el personaje'
.05AB1E , 5 bytes
Pruébalo en línea!
Explicación
Reemplaza cada char con el siguiente ascii char imprimible, envolviendo desde la tilde hasta el espacio.
fuente
V , 7 bytes
Pruébalo en línea! o Verifique todos los casos de prueba!
¿Como funciona?
Considere todas las cadenas que consisten en ASCII imprimible. Cada cadena debe 1) contener caracteres alfabéticos o 2) no contener caracteres alfabéticos.
Entonces, la forma en que funciona este programa es convirtiendo primero un carácter no alfabético
'a'
y luego realizando ROT13 en la cadena de entrada.fuente
9
solo, donde el incremento agrega otro carácter a la cadenaC (gcc) , 22 bytes
Toma un puntero de cadena y modifica el primer carácter en su lugar.
Pruébalo en línea!
fuente
*s=159-*s
. Siempre cambia el último bit, por lo tanto, nunca da el mismo carácter. Tenga en cuenta que159 = ' ' + '~'
~
incorrecto.C (gcc) , 20 bytes
Vio la respuesta de Dennis, pensó en una mejora esencial de 2 bytes.
Pruébalo en línea! (Pie de página por Dennis.)
Al igual que el original, modifica el primer carácter de la cadena en su lugar, pero lo divide con su valor dividido entre 3 (el número más pequeño que funciona. 2 falla en el carácter único
'U'
que da 127, no imprimible).fuente
Python 2 , 25 bytes
Pruébalo en línea!
Anders Kaseorg salvó un byte al extraer el primer personaje de
True
oFalse
.fuente
'?'
a un código de caracteres de 2 dígitos, pero Python no es uno de esos idiomas donde puede hacer eso :(lambda s:`+(s<'1')`+s[1:]
olambda s:`s<'T'`[0]+s[1:]
Haskell,
3026 bytesPruébalo en línea!
Reemplaza cada carácter con su predecesor y espacio con tilde.
fuente
Octava ,
1918 bytesPruébalo en línea!
Explicación:
fuente
CJam , 5 bytes
Pruébalo en línea!
Convierte el último carácter en su punto de código y toma ese módulo 10. Esto es claramente diferente para los caracteres que no son dígitos en la última posición. Pero los dígitos comienzan en el punto de código 48, por lo que tomar esos mod 10 los desplazará a la izquierda cíclicamente y, por lo tanto, el último carácter siempre cambia.
fuente
Retina ,
106 bytes4 bytes de golf gracias a @Neil
Pruébalo en línea!
Esto translitera
a
~
,!
a,
"
a!
, ...,~
a}
.fuente
Japt , 4 bytes
Pruébalo en línea!
Explicación:
fuente
Cubix , 10 bytes
Pruébalo en línea! o ¡ Míralo correr!
Para cada carácter, imprime
1
si el carácter tiene un punto de código par, de lo2
contrario;1
tiene un punto de código impar y2
un par, por lo que la salida nunca será igual a la entrada.Explicación
Este código corresponde al siguiente cubo neto:
El IP (puntero de instrucción) comienza en la esquina superior izquierda de la cara del extremo izquierdo, hacia el este. Sigue esta serie de instrucciones:
fuente
Alice , 9 bytes
Pruébalo en línea!
Explicación
La idea fue tomada de la presentación de Martin Ender CJam. El primer carácter se toma como un punto de código, se reduce el mod 10 y se mueve al final de la salida. Dado que se cambió exactamente un carácter, la permutación de los caracteres no puede hacer que se recupere la misma cadena.
fuente
t
para mod 10 es realmente inteligente, agradable. :)Pushy , 1 byte
Pruébalo en línea!
Esto convierte la cadena dada en una lista de códigos de caracteres ASCII, los indexa (indexación modular) en el alfabeto en mayúsculas, luego imprime el resultado. Esencialmente, cada personaje
n
está mapeadochr(ord(n) % 26 + 65)
. Puede usar este programa para ver cómo funciona el mapeo.La salida:
n
tal quechr(ord(n) % 26 + 65) == n
, para que esto sea cierto, debe haber un número enterox
tal que26x = 65
no tenga solución.1 byte
Pruébalo en línea!
Esta respuesta es exactamente la misma, excepto que se asigna a caracteres del alfabeto en minúsculas en lugar de caracteres del alfabeto en mayúsculas . Esto sigue siendo válido, ya que no hay caracteres de entrada posibles
n
como esechr(ord(n) % 26 + 97) == n
.fuente
Brain-Flak , 53 bytes
Incluye +1 para
-c
Esto disminuirá el primer carácter a menos que sea un espacio, en ese caso incrementará el primer carácter.
Pruébalo en línea!
fuente
Jalea , 4 bytes
Emite una cadena de dígitos. Ningún carácter de salida será igual al carácter de entrada correspondiente.
Pruébalo en línea!
Cómo funciona
fuente
Bash + coreutils, 13
Translitera los caracteres
a
~
(0x20 - 0x7e) con~
, luegoa
}
(0x7e, 0x20 - 0x7d).Pruébalo en línea .
fuente
PHP,
3027Cambia cada uno de los caracteres igual al primer carácter con el carácter que tiene el bit menos significativo invertido.
fuente
~
funciona , dando salida1
.!$a
o~$a
funciona?!$a
vueltas"12"
en"12"
porquefalse
se convierte en una cadena vacía para que nada es reemplazado y~$a
lo convierte todo en unprintables porque~"12"
no convierte a int principio, pero literalmente voltea todos los bits en la cadena.Ruby , 20 + 1 = 21 bytes
Usa la
-p
bandera.Pruébalo en línea!
Reemplaza el primer carácter en la entrada con un
0
si es1
, o de lo1
contrario.fuente
Brachylog , 9 bytes
Pruébalo en línea!
Explicación
Esto reemplaza todos los caracteres por un espacio, excepto los espacios con los que reemplaza
"0"
.fuente
PHP <7.1, 31 bytes
Pruébalo en línea!
fuente
A non-numeric value encountered
. Y puedes usar en~
lugar dea&
.Golfscript, 3 bytes
Pruébalo en línea!
Tome el valor ASCII del último carácter, módulo 5, y reemplace el último carácter con el resultado. Obviamente, esto funciona para caracteres que no son dígitos, pero si el último carácter es un dígito, también cambia ("0" mod 5 = 3, "1" mod 5 = 4, etc.).
Esto también funcionaría con 7 o 9 manteniendo la misma longitud.
Además, ¡yay! ¡Tengo una solución Golfscript tan buena como las mejores soluciones aquí!
fuente
Funky ,
2622 bytesCalcula
~a
cuál de los no dígitos devolverá NaN. Luego lo1&
limita a 0 o 1, para el dígito 0, esto será1
, y para1
esto será0
. Entonces esta cadena siempre es única.Pruébalo en línea!
fuente