Pensé en una nueva forma de generar mis contraseñas, y aunque probablemente no sea muy inteligente a largo plazo, aún podría ser un divertido código de golf.
Tomando una cadena de palabras, la contraseña se genera así:
- Elija el enésimo carácter en la enésima palabra
- Si n es más grande que la palabra, continúe contando hacia atrás
Ejemplo:
This is a fun task!
T s a u !
T es el primer personaje
s es el segundo
a es el primero, pero yendo y viniendo también es el tercero
u es el segundo, pero por contar hacia atrás también es el cuarto
'!' es el quinto personaje en 'tarea!' y así se incluirá en la contraseña final,Tsau!
Reglas
- La entrada será una cadena
- Separe la cadena en espacios, todos los demás caracteres deben estar incluidos
- Las letras mayúsculas deben permanecer en mayúsculas, igual que en minúsculas
- Realizas n pasos en cada palabra, donde n es la cantidad de palabras que han aparecido antes más una
- Si n es más grande que la palabra, debe retroceder a través de la palabra, si presiona el inicio, avanzará nuevamente hasta que haya pisado n veces
- El primer y último personaje solo se sube una vez, así que 'diversión' en la séptima posición como ejemplo va 'funufun' y termina en n, no 'funnuff' y termina en f
- La salida debe ser una cadena
Ejemplos:
Input Output
Once Upon A Time OpAe
There was a man Taaa
Who made a task Waak
That was neat! Taa
This is a long string to display how the generator is supposed to work Tsagnoyotoipto
¡El código más corto en bytes gana!
to
es la palabra 12 (0-indexada) en la larga cadena, y por lo tanto la letra del código debe sert
, noo
.Tsau!
es chino paraFuck!
Respuestas:
Python 2 , 72 bytes
Pruébalo en línea!
fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
Java 10,
148117114110 bytes-31 bytes gracias a @SamYonnou al crear un puerto de la respuesta JavaScript de @ user71546 .
-4 bytes gracias a @SamYonnou nuevamente, optimizando el algoritmo para Java.
Pruébalo en línea.
Explicación:
fuente
s->{int i=-1,j;for(var a:s.split(" ")){System.out.print(a.charAt(++i>(j=a.length()-1)?j>0?i/j%2==0?i%j:j-i%j:0:i));}}
==0
a<1
.++i>(j=a.length()-1)
condición ya que las matemáticas funcionan de la misma manera, independientemente del resultado de esa condición:s->{int i=-1,j;for(var a:s.split(" "))System.out.print(a.charAt(0<(j=a.length()+i-++i)?i/j%2<1?i%j:j-i%j:0));}
0<(j=a.length()+i-++i)?
a,(j=a.length()-1)>0*i++?
por lo que la explicación fue un poco más fácil de escribir (sin embargo, no se guardaron bytes).Carbón , 16 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
No suelo usar el último parámetro de Slice.
fuente
JavaScript (Node.js) ,
78706968 bytes-1 byte @Arnauld
Pruébalo en línea!
Explicación
fuente
Rojo , 135 bytes
Pruébalo en línea!
Legible:
fuente
Perl 5 , 76 bytes
Pruébalo en línea!
fuente
k ,
313028 bytesPruébalo en línea!
fuente
|-1_
->1_|
Pyth , 12 bytes
Pruébalo en línea
fuente
Japt
-P
, 11 bytesIntentalo
Intentalo
Explicaciones
fuente
C (gcc) , 148 bytes (versión de cadena), 114 bytes (versión impresa)
Si debo devolver una cadena (versión larga):
Pruébalo en línea!
De lo contrario, solo imprimo y no me preocupo por un búfer (versión corta):
Pruébalo en línea!
fuente
-(j>1)-1
puede ser reemplazado por+~(j>1)
1 byte menos, creo.putchar( t[ j=strlen(t)-1, k = i++ % (j ? j*2 : 1), k<j ? k : j+j-k ]);
Pruébelo en línea!*u++
conc[i]
y eliminar u.AWK, 79 bytes
¡Principalmente porque tengo curiosidad por ver mejores soluciones awk o bash!
Pruébalo en línea!
fuente
C # (.NET Core) , 111 bytes
Pruébalo en línea!
fuente
Haskell,
656261 bytesPruébalo en línea!
Requiere la última versión de las
Prelude
cuales presenta la<>
función.Editar: -3 bytes gracias a @ user28667, -1 byte gracias a @B. Mehta
fuente
zipWith(\i w->(cycle$id<>reverse.drop 1.init$w)!!i)[0..].words
también funciona.\i->(!!i).cycle.(id<>reverse.drop 1.init)
factorizar law
mención explícita (TIO)Stax , 9 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
PHP , 77 bytes
Pruébalo en línea!
fuente
foreach(...){$c=...;echo$c[...];}
aforeach(...)echo($c=...)[...];
. Pruébelo en línea: 87 bytes.=
guardar dos bytes:while(ord($w=$argv[++$i]))echo($w.=strrev(substr($w,1,-1)))[~-$i%strlen($w)];
pruébelo en líneaPowershell
208186170 bytesSin golf:
Pruebe los casos a continuación o pruébelo en línea
fuente
""|%{
con$args|%{
, pero creo que se puede jugar golf con mayor eficacia también;)J, 43 bytes
sin golf
<;._1 ' '&,
dividido en espacios(, }.@}:)&.>
por cada palabra, mata el primer y el último olmo y agrega palabra#@> | i.@#
tomar el resto de la longitud de cada palabra dividido en su índice> {~"_1
toma ese resultado y sácalo de cada palabra.Pruébalo en línea!
fuente