Quiero saber como podría generar cadenas desde 1 a zzz, es decir:
1
2
3
...
9
1a
1b
...
zzzzzz
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?
guardas las cadenas en un array, y despues ordenas ese array:
$cadenas = array("1", "cuatro", "3", "5inco", "5zinco", "2", "11", "967", "janito", "elhacker.net", "3 cadenas eran pocas");
natsort($cadenas);
foreach($cadenas as $valor){
echo "$valor\n";
}
esto devuelve:
1
2
3
3 cadenas eran pocas
5inco
5zinco
11
967
cuatro
elhacker.net
janito
mmm creo que se podria hacer automatico... :rolleyes:
Cita de: Alex@ShellRoot 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?
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"
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:
1, 2, 3...
1a, 1b, 1c...
2a, 2b, 2c...
[Snip]
8a, 8b, 8c...
9a, 9b, 9c...
... no sé que más sigue
2. Ó esto:
1a + 1 = 1b
1b + 1 = 1c
1c + 1 = 1d
[Snip]
9ab + 1 = 9ac
9ac + 1 = 9ad
: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.
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?
Cita de: Alex@ShellRoot 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?
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
Si, pero como pasa de numero a letra?
Es decir, si tengo un numero, como paso a zzzzz
1abc
[Snip]
zzzzzz
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?
Más o menos puedes hacerlo así:
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!
Joder, Janito, aun no me entiendes, jejejeje como fuck pasa de ser un numero a ser letra...
$letras=array("0","1","2"/*......*/"8","9","a","b","c",/*......*/"x";"y";"z");
/*
Desde $letras['0'] -> $letras ['9'] => son numeros
desde $letras['10'] -> $letras['¿?'] => son letras.
*/
No se si me entindes
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
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!
A ver postealo
....
Pero creo que se podria generar automaticamente, pero joder, no entiendo cuando cambia de ser numero a ser letra...
<?php
function clave(){
$chars='7539846210qazwsxedcrfvtgbyhnu7539846210jmikolpPOIUYTREWQALKJHGFDSMNBVCXZ';
$l_chars=strlen($chars);
$l_max=8;
$clave='';
for($i=0;$i<$l_max;$i++){
$l_rand=rand(1,$l_chars);
$clave .= substr($chars,$l_rand,1);
}
return $clave;
}
?>
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.
Cita de: Alex@ShellRoot 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...
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
<?php
$a=1;
for($i=1;$i<=100;$i++){
echo "$a<br>";
$b=substr($a,-1);
$c=substr($a,0,-1);
if($b==9){
$a=$c."a";
}elseif($b=="z"){
$c++;
$a=$c."0";
}else{
$a++;
}
}
?>
Me habra llevado unos 15' hacelo xD, lo que pasa es que no se me ocurria como, espero que te sirva ;)
bue, perdon krosspock, talvez no todos somos inteligentes como vos ¬¬
Cita de: Castg! en 11 Abril 2010, 20:51 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
es como hacer un nuevo sistema de conteo base 38 :P
orita hago un codigo aver si es lo que ocupas :P
#include <iostream>
void muestra(int num);
int main()
{
for(int i=1; i<36*36; i++)
{
muestra(i);
std::cout<< "\t";
}
}
void muestra(int num)
{
char a[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int cont=0;
while(a[++cont]);
int tmp[5], ctp=0;
if(num==0)
tmp[ctp]=0;
while(num!=0)
{
tmp[ctp]=num%cont;
num-=tmp[ctp++];
num/=cont;
}
while(ctp!=0)
std::cout << a[tmp[--ctp]];
}
algo asi?
Muchos FOR anidados tio..
Concatenas y listo...
Cita de: KrossPock en 11 Abril 2010, 19:28 PMPero sos duro de entender eh ¬¬, yo lei el primer post y ya lo entendi xD
:-X
Cita de: Skeletron en 11 Abril 2010, 22:58 PMMuchos FOR anidados tio..
xD que raro, apenas veo 1... :silbar:
Fucking 2º pagina.... nunca la veo!
jajajaj, ahora, esta joya, pero eso es C na?? en php como iria? porq todavia no me puse a aprender c xD
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:
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
xDD
juraria que el tema estaba en el subforo de C xD
mi error,
el codigo en php seria asi:
<?php
function muestra($num)
{
$a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$cont=strlen($a);
$ctp=0;
while($num!=0)
{
$tmp[$ctp]=$num%$cont;
$num-=$tmp[$ctp++];
$num/=$cont;
}
while($ctp!=0)
echo $a[$tmp[--$ctp]];
}
for($i=1;$i<75; $i++)
{
muestra($i);
echo "<br>";
}
?>
Saludos!
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