Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: jdc en 9 Abril 2010, 03:14 am



Título: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 9 Abril 2010, 03:14 am
Quiero saber como podría generar cadenas desde 1 a zzz, es decir:
 
1
2
3
...
9
1a
1b
...
zzzzzz


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 9 Abril 2010, 04:00 am
Pero en que momento pasa de ser un numero a ser letra?, es decir,
1...9
1a...1z
2a...2z
[Snip]
8a...8z
9a...9z
Aquí que sigue?


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Castg! en 9 Abril 2010, 04:02 am
guardas las cadenas en un array, y despues ordenas ese array:

Código
  1. $cadenas = array("1", "cuatro", "3", "5inco", "5zinco", "2", "11", "967", "janito", "elhacker.net", "3 cadenas eran pocas");
  2. natsort($cadenas);
  3. foreach($cadenas as $valor){
  4. echo "$valor\n";
  5. }

esto devuelve:

Código:
1
2
3
3 cadenas eran pocas
5inco
5zinco
11
967
cuatro
elhacker.net
janito


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 9 Abril 2010, 04:03 am
mmm creo que se podria hacer automatico...  :rolleyes:


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 9 Abril 2010, 04:51 am
Pero en que momento pasa de ser un numero a ser letra?, es decir,
1...9
1a...1z
2a...2z
[Snip]
8a...8z
9a...9z
Aquí que sigue?

Claro! mi problema es que necesito que mi sistema sepa que "1c" por ejemplo + 1 seria "1d" o ya mas largo "1abc" + 1 seria "1abd"


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 9 Abril 2010, 04:59 am
what the fuck!, creo que cambiaste lo que dijiste al inicio. Además sigo sin entender. Tenes que generar un algoritmo para generar esas cadenas, o al momento de sumarle un 1 el sistema diferencie algo?

1. Esto:
Código
  1. 1, 2, 3...
  2. 1a, 1b, 1c...
  3. 2a, 2b, 2c...
  4. [Snip]
  5. 8a, 8b, 8c...
  6. 9a, 9b, 9c...
  7. ... no sé que más sigue

2. Ó esto:
Código
  1. 1a + 1 = 1b
  2. 1b + 1 = 1c
  3. 1c + 1 = 1d
  4. [Snip]
  5. 9ab + 1 = 9ac
  6. 9ac + 1 = 9ad


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 9 Abril 2010, 05:10 am
 :P

Mira el sistema sabra por ejemplo que el ultimo codigo generado fue el "1asdf" por ejemplo y generara el "1asdg" entiendes? piensalo como un id que se incrementa de una unidad por vez.


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 9 Abril 2010, 05:54 am
Ok, Ok, ahora si entiendo, pero al inicio diste a entender que se generaria automaticamente, Bueno, ahora que ya tengo la idea de como es, tengo otra duda, cual seria el ultimo item? Tengo la duda porque dijistes zzzzz, osea, cuando se empieza y se termina los numeros, para continuar con las letras?


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 9 Abril 2010, 06:43 am
Ok, Ok, ahora si entiendo, pero al inicio diste a entender que se generaria automaticamente, Bueno, ahora que ya tengo la idea de como es, tengo otra duda, cual seria el ultimo item? Tengo la duda porque dijistes zzzzz, osea, cuando se empieza y se termina los numeros, para continuar con las letras?

Tecnicamente terminaria con "zzzzzz" lo estoy pensando para hacer un acortador de urls

mas o menos asi

inicio
consulto si existe url
si existe muestro el id sino muestro el ultimo id y le sumo 1
guardo el id
muestro el id
fin xD



Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 9 Abril 2010, 06:56 am
Si, pero como pasa de numero a letra?
Es decir, si tengo un numero, como paso a zzzzz
Código:
1abc
[Snip]
zzzzzz


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 9 Abril 2010, 07:05 am
no pasas mmm

sino que sigues por ejemplo 0,1,2,3,4,5,6,7,8,9,1a.1b.1c...2a,2b,2c...3a, aaaaa ahi esta el error mira


0 1 2 3 4 5 6 7 8 9 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d.... 10 11 12 13 14 15 16 17 18 19 1a 1b... s0 s1 s2 s3... zzzzz0 zzzzz1.... zzzzzx zzzzzy zzzzzz fin

Ahi?


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: luiggy2 en 9 Abril 2010, 17:14 pm
Más o menos puedes hacerlo así:

Código:
1. guardas en un array las letras/numeros
2. lees el último código generado
3. explotas el código
4. lees lo último que explotó
5. comparas con el array inicial.
    5.1.       si es igual a z, lo último explotado=0 y penúltimo ++
    5.2.       si no => lo último explotado ++
6. vuelves a unir lo explotado
7. guardas para poder leerlo la próxima vez.

Nota: La instrucción 5 se repetiría si el penúlimo es z, o el antepenúltimo, etc etc


No se si te he entendido / me entiendes


Saludos!


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 9 Abril 2010, 19:12 pm
Joder, Janito, aun no me entiendes, jejejeje como fuck pasa de ser un numero a ser letra...


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: luiggy2 en 9 Abril 2010, 20:52 pm
Código
  1.  
  2. $letras=array("0","1","2"/*......*/"8","9","a","b","c",/*......*/"x";"y";"z");
  3.  
  4. /*
  5. Desde $letras['0'] -> $letras ['9'] => son numeros
  6. desde $letras['10'] -> $letras['¿?'] => son letras.
  7. */
  8.  

No se si me entindes


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 9 Abril 2010, 21:28 pm
Claro algo asi como dice luiggy2...

Piensa en fuerza bruta ;) generando palabras desde 1 a zzzzzz no trato de reemplazar letras por numeros ni al revez, sino buscar una forma de obtener en orden las posibles combinaciones teniendo como base la ultima cadena generada...

Seria facil desde 1 a 999999 pero feo :s ademas que se multiplican por muchisimo las posibilidades si lo piensas con numeros y letras


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Castg! en 9 Abril 2010, 23:57 pm
que complicada la haces! jaja, tendiras que hacer lo que luiggy te dice y dwe ahi, con un bucle y un par de condiciones, las nuevas cadenas, o sino, escribir todas las posibilidades en una base de datos y de ahi manejarlo por id xD el problema es que serian un monton de datos.

y si usas mi metodo ? ajaja, es mucho mas facil!


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 10 Abril 2010, 00:17 am
A ver postealo


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 10 Abril 2010, 00:22 am
....

Pero creo que se podria generar automaticamente, pero joder, no entiendo cuando cambia de ser numero a ser letra...


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Castg! en 10 Abril 2010, 00:47 am
Código
  1. <?php
  2. function clave(){
  3. $chars='7539846210qazwsxedcrfvtgbyhnu7539846210jmikolpPOIUYTREWQALKJHGFDSMNBVCXZ';
  4. $l_chars=strlen($chars);
  5. $l_max=8;
  6. $clave='';
  7. for($i=0;$i<$l_max;$i++){
  8. $l_rand=rand(1,$l_chars);
  9. $clave .= substr($chars,$l_rand,1);
  10. }
  11. return $clave;
  12. }
  13. ?>

link al post completo! (http://foro.elhacker.net/php/acortador_de_links-t285145.0.html)

para mi, despues comprobas si el valor devuelto no es repetido en la base de datos, y listo.


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: KrossPock en 11 Abril 2010, 19:28 pm
....

Pero creo que se podria generar automaticamente, pero joder, no entiendo cuando cambia de ser numero a ser letra...

Pero sos duro de entender eh ¬¬, yo lei el primer post y ya lo entendi xD

Viste el sistema hexadeciamal? que va del 0 a la F, bueno el quiere hacer algo igual pero del 0 a la Z


Código
  1. <?php
  2. $a=1;
  3.  
  4. for($i=1;$i<=100;$i++){
  5. echo "$a<br>";
  6. $b=substr($a,-1);
  7. $c=substr($a,0,-1);
  8.  
  9. if($b==9){
  10. $a=$c."a";
  11. }elseif($b=="z"){
  12. $c++;
  13. $a=$c."0";
  14. }else{
  15. $a++;
  16. }
  17. }
  18. ?>
  19.  

Me habra llevado unos 15' hacelo xD, lo que pasa es que no se me ocurria como, espero que te sirva ;)


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Castg! en 11 Abril 2010, 20:51 pm
bue, perdon krosspock, talvez no todos somos inteligentes como vos ¬¬


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: KrossPock en 11 Abril 2010, 20:55 pm
bue, perdon krosspock, talvez no todos somos inteligentes como vos ¬¬

Lo comprendo :P.... nah no es para que se enojen xD, yo soy asi, no se lo tomen tan a pecho


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Og. en 11 Abril 2010, 21:37 pm
es como hacer un nuevo sistema de conteo base 38 :P

orita hago un codigo aver si es lo que ocupas :P


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Og. en 11 Abril 2010, 22:10 pm
Código
  1. #include <iostream>
  2.  
  3. void muestra(int num);
  4.  
  5. int main()
  6. {
  7.    for(int i=1; i<36*36; i++)
  8.    {
  9.        muestra(i);
  10.        std::cout<< "\t";
  11.    }
  12. }
  13.  
  14. void muestra(int num)
  15. {
  16.    char a[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  17.    int cont=0;
  18.    while(a[++cont]);
  19.  
  20.    int tmp[5], ctp=0;
  21.    if(num==0)
  22.        tmp[ctp]=0;
  23.    while(num!=0)
  24.    {
  25.        tmp[ctp]=num%cont;
  26.        num-=tmp[ctp++];
  27.        num/=cont;
  28.    }
  29.    while(ctp!=0)
  30.        std::cout << a[tmp[--ctp]];
  31. }
  32.  

algo asi?


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Skeletron en 11 Abril 2010, 22:58 pm
Muchos FOR anidados tio..
Concatenas y listo...


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Shell Root en 11 Abril 2010, 23:03 pm
Pero sos duro de entender eh ¬¬, yo lei el primer post y ya lo entendi xD
:-X

Muchos FOR anidados tio..
xD que raro, apenas veo 1...  :silbar:


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Skeletron en 11 Abril 2010, 23:05 pm
Fucking 2º pagina.... nunca la veo!


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Castg! en 11 Abril 2010, 23:22 pm
jajajaj, ahora, esta joya, pero eso es C na?? en php como iria? porq todavia no me puse a aprender c xD


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: isseu en 11 Abril 2010, 23:24 pm
No se si te entendi pero hay va
yo hice algo parecido en otro codigo (en c#, pero se me perdio)
en c++ seria algo asi:
Código:
diccionario: abcdefg
1.- tenemos la palabra (char[]) a "sumar" --> dfg
2.- cada caracter se transforma a un array int[] de acuerdo al lugar en el diccionario (parte en 0)--> array int[] {3,5,6}
3.- sumamos al ultimo --> array int [] {3,5,7}
4.- revismos que ninguno sea mayor a 6, como 7>6, se cambia a 0 y proximo se le suma 1 --> array int[] {3,6,0}
5.- Revisamos nuevamente --> no hay mayores a 6
6.- se pasa array int a char[] --> 3=d 6=g 0=a --> dga = dfg+1


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: Og. en 12 Abril 2010, 00:27 am
xDD
juraria que el tema estaba en el subforo de C xD
 mi error,
el codigo en php seria asi:

Código
  1. <?php
  2. function muestra($num)
  3. {
  4.  $a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  5.  $cont=strlen($a);
  6.  $ctp=0;
  7.  while($num!=0)
  8.  {
  9.    $tmp[$ctp]=$num%$cont;
  10.    $num-=$tmp[$ctp++];
  11.    $num/=$cont;
  12.  }
  13.  while($ctp!=0)
  14.    echo $a[$tmp[--$ctp]];
  15. }
  16. for($i=1;$i<75; $i++)
  17. {
  18.  muestra($i);
  19.  echo "<br>";
  20. }
  21. ?>

Saludos!


Título: Re: Necesito un algoritmo para armar cadenas en orden.
Publicado por: jdc en 12 Abril 2010, 21:36 pm
Muchas gracias a todos, por ahora ocupó el script de Castg! Pero para no limitar a 8 caracteres y perder las combinaciones de menos caracteres le puse un valor random entre 1 y 8 a la longitud de la cadena. Luego reviso el último código que se ve muy interesante también.
 
Saludos