[Reto Batch] Variaciones con repetición,con 26 elementos [abecedario inglés]

Iniciado por Eleкtro, 8 Julio 2012, 13:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Aquí pueden comentar todo lo que quieran, sus dudas, avances o soluciones acerca del siguiente reto:

Reto iniciado por binary_death

Reto Nº 15 BATCH

Nombre:          Variaciones con repetición, con 26 elementos [abecedario inglés] (binary_death)
Dificultad:        7/10
Objetivo:         Realizar un batch script al que, dado una longitud máxima de carácteres especificada, los combine de todas las formas posibles.
                         Esto puede servir como un generador de diccionarios para usar en programas de frute force.
Pista:               Recursividad, for anidados, todo sirve aunque hay formas más óptimas que otras.
Ejemplo:         








Binary_Death

Procurad innovar lo máximo posible  :P aburriría un poco ver un montonazo de for's anidados como http://foro.elhacker.net/scripting/batch_aporte_generador_diccionario-t349722.0.html , por poner un ejemplo de los muchos códigos iguales que hay.

Ah, una cosa más: usando cualquier tipo de recursividad la función queda unas 10 veces más lenta, aunque con menos código. Una pista es que hay un punto intermedio entre los for's anidados y la función corta, y esa es la forma más eficaz de hacer las variaciones de 26 elementos tomados de X en X.

Un saludo, y suerte.

BatchianoISpyxolo

#2
Teniendo en cuenta que son variaciones con repetición de 26 elementos cogidos de 26 en 26...

VR(26,26) = 2626 = 6156119580207157310796674288400203776 combinaciones posibles...

Aunque en la imagen aparecen cadenas de 4 caracteres lo que equivale a...

VR(26,4) = 264 = 456976 combinaciones posibles...

En definitiva, ¿cadenas de qué longitud? ¿O cadenas de 1..26?
Puede que desees aprender a programar desde 0: www.espascal.es

Binary_Death

La idea es que genere cadenas de X carácteres, donde X lo elige el usuario.
En mi caso, ese programa que ves en la imagen recibe la longitud de la cadena en forma de parámetro.


Eleкtro

supongo que lo que quiso decir binary_death (26 elementos) se refirió a que el code debe soportar las 26 letras del abecedario inglés, donde no está la Ñ... En el abecedario español son 27.

Saludos









BatchianoISpyxolo

#5
Entonces, como son cadenas de longitud x...

26 · 26 · 26 · ... · 26 (x veces) = 26x = ∏xi=1 26 (x∈Ν)

combinaciones totales
Puede que desees aprender a programar desde 0: www.espascal.es

79137913

HOLA!!!

Código (dos) [Seleccionar]
@ECHO OFF
SETLOCAL enabledelayedexpansion

SET "CHARS=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,w,w,x,y,z"
SET "INI=0"
SET /P LONGITUD=Inserte la longitud deseada:

CALL :GENERAR

PAUSE
EXIT

:GENERAR
IF %INI% neq %LONGITUD% (
SET /a "INI+=1"
FOR %%c IN (!CHARS!) DO CALL :GENERAR "%~1%%~c"
SET /a "INI-=1"
) else (
SET "CADENA=%~1"
ECHO.!CADENA!
)
GOTO:EOF


http://pastebin.com/9Wy2Msw7

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*


79137913

HOLA!!!

Sip, eso se llama venganza por las soluciones que colocaba yo eran de autoria propia y caia otro y hacia copypaste de otro lado.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Binary_Death

Cita de: 79137913 en 17 Julio 2012, 19:10 PM
HOLA!!!

Sip, eso se llama venganza por las soluciones que colocaba yo eran de autoria propia y caia otro y hacia copypaste de otro lado.

GRACIAS POR LEER!!!

Ciertos códigos son tan comunes ya que ni se pueden considerar copiados, como este... que se usa en todos los programas brute force en batch.

Pero hay más formas de hacer lo mismo y muy divertidas. Venga, exprímanse un poco los sesos que siempre viene bien  :P