¡Su desafío es contraseña la cadena! ¿Qué es la contraseña?
Tome una cadena como entrada. Esta cadena solo contendrá letras mayúsculas, minúsculas, dígitos y espacios.
Debe reemplazar todos los espacios con guiones bajos y mover todos los números al final de la cadena en el orden en que aparecen de izquierda a derecha. Luego, para cada letra de la cadena, cámbiela al azar a mayúsculas o minúsculas.
Ejemplos (el caso de los caracteres debe variar cada vez):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
¡El código más corto en bytes gana!
¡Quien pregunte en Information Security SE si este es un buen algoritmo de hash gana! - No se preocupe, señores SE, solo bromeo.
Respuestas:
Pyth, 15 bytes
Demostración
fuente
Laberinto , 76 bytes
Otra colaboración con @ MartinBüttner y en el lado más loco del espectro Labyrinth: por primera vez, tenemos los cuatro
^>v<
en un solo programa. Pruébalo en línea!Explicación
El algoritmo general, que se ejecuta en un bucle, es el siguiente:
Para mantener la explicación compacta, aquí es más o menos cómo cada parte del programa corresponde al pseudocódigo anterior:
Aquí están las partes interesantes.
Obteniendo aleatoriedad en el laberinto
Solo hay una forma de obtener aleatoriedad en Labyrinth, y es cuando la IP intenta avanzar pero 1) no hay un camino hacia adelante ni hacia atrás y 2) hay caminos disponibles a izquierda y derecha. En este caso, la IP elige aleatoriamente entre las rutas izquierda y derecha.
Esto solo es posible utilizando los
^>v<
operadores, que muestrann
y desplazan la fila / columnan
en 1. Por ejemplo, el programa (¡ Pruébelo en línea! )genera 1 o 2 al azar, ya que
v
desplaza la columna con el desplazamiento 0 (es decir, la columna en la que está la IP) en 1, produciendoLa IP está orientada hacia la derecha e intenta avanzar (la parte superior de la pila es cero) pero no puede. Tampoco puede moverse hacia atrás, por lo que elige aleatoriamente entre izquierda o derecha.
Trucos de golf
El programa comienza desde el primer carácter en el orden de lectura, que notará que en realidad es el paso 6. Sin embargo, al saltar de una pila de Labyrinth vacía se obtiene 0, por lo que se producen los pasos 10 y 14, cambiando un cero a la pila auxiliar, que es efectivamente un no-op.
La pila principal está efectivamente vacía después de cada iteración, lo que nos permite jugar al diseño del código usando
>
y<
en los ceros implícitos en la parte inferior. La>
envuelve la fila inferior alrededor de modo que los movimientos IP desde la parte inferior derecha a la parte inferior izquierda, y los<
cambios de la fila de atrás. La IP luego felizmente se mueve hacia arriba en la columna izquierda para continuar el ciclo.Los dígitos en Labyrinth explotan
n
y empujan10*n + <digit>
. Además, los caracteres se toman en el módulo 256 antes de salir. Poniendo estos dos juntos nos permite la salida 95 (subrayado) haciendo`33
al 32 (espacio), que funciona porque-3233 % 256 = 95
. Aunque hay otras formas de convertir 32 en 95 (;95
siendo la más fácil), trabajar con un número negativo aquí nos permite compactar un poco el código con giros a la izquierda.fuente
05AB1E ,
222120 bytesCódigo:
Utiliza la codificación CP-1252 .
Pruébalo en línea!
fuente
CJam , 25 bytes
Pruébalo en línea!
Explicación
Traducción de mi respuesta MATL.
fuente
CJam, 23 bytes
Pruébalo aquí.
Explicación
fuente
Python, 107 bytes
Una mejora en las otras dos respuestas de Python porque:
[...,'_'][c<'!']
se usa en lugar des.replace(' ','_')
, ychoice(c+c.swapcase())
se usa en lugar dechoice([c.upper(),c.lower()])
fuente
JavaScript (ES6),
114101 bytes47 bytes solo para aleatorizar el caso de un personaje ...
Editar: ahorró 13 bytes masivos gracias a @ edc65.
fuente
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 bytes
Pruébalo en línea!
fuente
Python 3,
128 122118 caracteresGracias a xnor por reducir 6 bytes.
fuente
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 bytesS///
es como,s///
excepto que no se modifica$_
en su lugarfuente
Pyth, 17 bytes
Pruébalo aquí!
Explicación
fuente
Mathematica, 86 bytes
Gracias a Sp3000 por guardar 1 byte.
Ahhh, el procesamiento de cadenas de Mathematica ... no es encantador. Esta es una función sin nombre que toma y devuelve una cadena.
Debido a todo el azúcar sintáctico, el orden de lectura es un poco divertido:
Divide la cadena en caracteres, de lo contrario no podemos hacer nada con ella.
Ordena los dígitos hasta el final. Al ajustar la función de prueba en una lista, hacemos que la ordenación sea estable.
Asigna la función de la izquierda sobre cada personaje de la lista.
Elige una función aleatoria de cambio de mayúsculas y minúsculas para el personaje actual.
Lo aplica al personaje actual.
Reemplaza los espacios con guiones bajos.
Finalmente une todos los personajes nuevamente en una cadena.
fuente
PowerShell, 113 bytes
PowerShell significa lenguaje de golf horrible. Dividir en matriz de caracteres y reemplazar espacios con guiones bajos. Toma cada personaje y proceso. Recopile números en la variable $ d para salida posterior. Cada otro carácter se convierte aleatoriamente en mayúsculas o minúsculas invocando una expresión usando
'char'.ToLower()
o'char'.ToUpper()
. Si se recogieron dígitos, agréguelos al final.fuente
$_-in0..9
y el-in
operador introducido en PowerShell v3 en lugar de la expresión regular-match
.Julia,
888778 bytesEsta es una función anónima que acepta una cadena y devuelve una cadena. Para llamarlo, asígnelo a una variable.
Primero, dividimos la cadena de entrada en una matriz de sus caracteres y clasificamos la matriz de acuerdo a si cada carácter es un dígito. Esto mantiene el orden en el texto y los dígitos, pero empuja los dígitos hasta el final. Luego, para cada personaje de la matriz, verificamos si es un espacio. Si es así, reemplácelo con un guión bajo, de lo contrario, elija aleatoriamente uno de
ucfirst
olcfirst
para aplicar al carácter, convirtiéndolo en mayúsculas o minúsculas, respectivamente. ¡Únete a la matriz en una cadena y listo!Pruébalo aquí
¡Guardado 9 bytes gracias a Sp3000!
fuente
Perl,
5148 bytesIncluye +2 para
-lp
Ejecutar con la entrada en STDIN:
passwordify.pl
:fuente
Factor, 154 bytes
o 222 con importación
kernel splitting sequences ascii combinators.random regexp
No soy demasiado bueno para jugar golf en factor, y no estoy seguro de si tomé el mejor enfoque aquí, pero pensé en intentarlo.
fuente
Ruby, 84 bytes
Función anónima. Eliminar el espacio anterior
c.downcase
causa un error de sintaxis por alguna razón y no estoy seguro de por qué.fuente
Lua, 125 bytes
Cuando el objeto se encuentra funcional, puedes hacer algunas cosas bonitas, ¡incluso en lua! No creo que pueda jugar golf, ya es un desastre, y ya estoy feliz de superar la mayoría de las respuestas de Python: D.
Sin golfos y explicaciones
fuente
En serio, 25 bytes
Pruébalo en línea!
Explicación:
fuente
IPOS : no competidor, 14 bytes
Sí, agregué builtins para este desafío, pero esos no están especialmente dirigidos a este problema.
Esto funciona con la versión 0.1 del intérprete .
Ejecución de ejemplo
Explicación
fuente
PHP, 368 bytes
Código sin golf:
fuente
Python 2, 179 bytes
Probablemente haya mucho margen de mejora aquí que resolveré más adelante.
fuente
AWK, 128 bytes
Se
srand()
necesita para darnos números aleatorios diferentes cada vez que se ejecuta.Para que esto funcione correctamente con entrada de varias líneas, tendríamos que poner algo como
A=N=""
antes delfor
bucle.fuente
Python 3.5 - 118 bytes:
Como puede ver, básicamente estoy usando la
choice
función del módulo aleatorio para elegir una función aleatoria (.upper () o .lower ()) para cada letra en la versión ordenada de la cadena dada, en la que todos los dígitos van al fin. Además, cada espacio se reemplaza con un guión bajo en la cadena ordenada.fuente
PHP
164caracteres / bytesEsto es mejor que el otro golf PHP , porque:
Guión
Ejemplo
fuente
> <> , 73 bytes
Nada loco aquí:
_
cuando se encuentra¡Puedes probarlo aquí !
fuente
Python 3, 151 bytes
fuente