Underc0de

[In]Seguridad Informática => Wargames y retos => Mensaje iniciado por: LKI en Agosto 20, 2015, 10:04:11 PM

Título: [RETO] Ordenar caracteres (Dificultad=media)
Publicado por: LKI en Agosto 20, 2015, 10:04:11 PM

Ordenar de mayor a menor según cantidad de apariciones las siguientes letras del alfabeto. Si empatan, ordenar alfabéticamente. Dar la respuesta en minúscula.


qanwPVEAwnmSViNjTOLZPRRSaTAECnbArUjPmELcsWhdVMXYfdYLUGLpjLdOMdzvAEgfhXWNvRJZqMhlwocRPHKcwbUFJVjBjmLOwPVqjoYHLTtixQAnBHwuvfxDMPnAbpHBRNYTpKSzxLTWOusljvXidQjqbqjgcvpFMLbPPOkHdTTJbkswfdEeeFTbllerqvbFMpO

Se puede usar cualquier algoritmo y cualquier lenguaje!!

PD: Para que no se quejen el reto oficial es de la siguiente pagina http://hackealo.co/ (http://hackealo.co/) y siempre cambia solo me pareció un buen reto nada más que eso.


Ganadores:
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: fermino en Agosto 21, 2015, 01:51:00 AM
Array con abc...xyz, strtolower, for, substr_count y listo (?

Sino, se puede hacer sin usar el array y substr_count con unos cuantos bucles, fijandose qué caracteres hay, etc...

Saludos!
-fermino-
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: rollth en Agosto 21, 2015, 05:27:50 AM
Cuando tenga mi ordenador lo hago, pero no se si lo he entendido bien, hay que hacer un Script que te cuenta cuantas letras hay de cada letra (independientemente de si está en mayúscula o minúscula) y dar un output en plan A(si es la que más veces había) C (si es la segunda) y así continuado?
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: 79137913 en Agosto 21, 2015, 10:00:42 AM
HOLA!!!

Al fin retos de programacion!

En que lenguaje queres la respuesta?

GRACIAS POR LEER!!!
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: sancakoky en Agosto 21, 2015, 10:35:42 AM
Pero porqué no leeis?
Lo dice bien claro. En cualquier lenguaje y primero las que mas se repiten y si empatan en orden alfabético.

Yo solo lo he leído una vez y me parece que se explica como el agua, no entiendo como os surgen dudas o preguntáis en que lenguaje si lo dice.
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: 79137913 en Agosto 21, 2015, 11:26:10 AM
HOLA!!!

Aqui mi solucion[VBS] por que no tengo ningun compilador aca:

Código (vb) [Seleccionar]
Dim ABC (25)
Cadena = LCase(InputBox("Inserte cadena a analizar","RETO"))
For X = 1 To Len (Cadena)
    Letra = mid(Cadena,x,1)
    NumLetra = asc(Letra)-97
    ABC(NumLetra) = ABC(NumLetra) & Letra
Next

For x = 24 To 0 Step -1
    For y = 0 to x
        If Len(ABC(y)) > Len(ABC(y + 1)) Then
            temp = ABC(y+1)
            ABC(y + 1) = ABC(y)
            ABC(y) = temp
        End If
    Next
Next

Do
    Flag = True
    For x = 0 to 24
        If Len(ABC(x))=Len(abc(x+1)) Then
            If Asc(Right(ABC(x),1)) < Asc(Right(ABC(x + 1),1)) Then
                temp = ABC(x)
                ABC(x) = ABC(x + 1)
                ABC(x + 1) = temp
                Flag = Flase
            End If
        End If
    Next
Loop Until Flag

For X = 0 to 25
    Out = Out & RIGHT(ABC(x),1)
Next

Inputbox "Resultado", "RETO", strreverse(Out)


Para la cadena que colocas aqui sera:

lpjbvwmtadefhnoqrsxcukyzgi




@sancakoky (https://underc0de.org/foro/index.php?action=profile;u=49463)

Perdon, no lo vi, debi haberlo salteado sin darme cuenta, pero esas no son formas de contestar, intenta mantener el respeto que es fundamental para el foro.

GRACIAS POR LEER!!!
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: LKI en Agosto 21, 2015, 04:48:08 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Cuando tenga mi ordenador lo hago, pero no se si lo he entendido bien, hay que hacer un Script que te cuenta cuantas letras hay de cada letra (independientemente de si está en mayúscula o minúscula) y dar un output en plan A(si es la que más veces había) C (si es la segunda) y así continuado?

Ejemplo la cadena es esta = "BBAAba";  Es indiferente las mayusculas y minusculas se cuenta como la misma letra
b=> 3
a=>3
solucion => ab
Empataron entonces hay que devolverlos en orden alfabético y siempre dar la solución en minúscula.
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: LKI en Agosto 21, 2015, 11:45:02 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
HOLA!!!

Aqui mi solucion[VBS] por que no tengo ningun compilador aca:

Código (vb) [Seleccionar]
Dim ABC (25)
Cadena = LCase(InputBox("Inserte cadena a analizar","RETO"))
For X = 1 To Len (Cadena)
    Letra = mid(Cadena,x,1)
    NumLetra = asc(Letra)-97
    ABC(NumLetra) = ABC(NumLetra) & Letra
Next

For x = 24 To 0 Step -1
    For y = 0 to x
        If Len(ABC(y)) > Len(ABC(y + 1)) Then
            temp = ABC(y+1)
            ABC(y + 1) = ABC(y)
            ABC(y) = temp
        End If
    Next
Next

Do
    Flag = True
    For x = 0 to 24
        If Len(ABC(x))=Len(abc(x+1)) Then
            If Asc(Right(ABC(x),1)) < Asc(Right(ABC(x + 1),1)) Then
                temp = ABC(x)
                ABC(x) = ABC(x + 1)
                ABC(x + 1) = temp
                Flag = Flase
            End If
        End If
    Next
Loop Until Flag

For X = 0 to 25
    Out = Out & RIGHT(ABC(x),1)
Next

Inputbox "Resultado", "RETO", strreverse(Out)


Para la cadena que colocas aqui sera:

lpjbvwmtadefhnoqrsxcukyzgi




@sancakoky (https://underc0de.org/foro/index.php?action=profile;u=49463)

Perdon, no lo vi, debi haberlo salteado sin darme cuenta, pero esas no son formas de contestar, intenta mantener el respeto que es fundamental para el foro.

GRACIAS POR LEER!!!

Es correcto felicitaciones!!
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: sancakoky en Agosto 22, 2015, 11:26:31 AM
Tienes razon @79137913 (https://underc0de.org/foro/index.php?action=profile;u=21192) y pido disculpas. No se si tenia un mal día o que me paso por que a todos nos puede pasar que nos saltemos algo al leer por prisas o por lo que sea. Y los demas tambien pido disculpas por la contestación tan desagradable.

Bueno comentar que llevo toda la mañana con este reto y no he tenido huev.s de conseguirlo. Dar las gracias al compañero @LKI (https://underc0de.org/foro/index.php?action=profile;u=27369) y haber si se anima él o alguien mas a subir mas retos de este tipo.

Voy a pasarme por el subforo de python haber si alguien me hecha una mano con el dichoso reto ya que veo que me va a quitar el sueño y no lo consigo.

SUERTE PARA QUIEN LO INTENTE!
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: rollth en Agosto 22, 2015, 04:48:26 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Tienes razon @79137913 (https://underc0de.org/foro/index.php?action=profile;u=21192) y pido disculpas. No se si tenia un mal día o que me paso por que a todos nos puede pasar que nos saltemos algo al leer por prisas o por lo que sea. Y los demas tambien pido disculpas por la contestación tan desagradable.

Bueno comentar que llevo toda la mañana con este reto y no he tenido huev.s de conseguirlo. Dar las gracias al compañero @LKI (https://underc0de.org/foro/index.php?action=profile;u=27369) y haber si se anima él o alguien mas a subir mas retos de este tipo.

Voy a pasarme por el subforo de python haber si alguien me hecha una mano con el dichoso reto ya que veo que me va a quitar el sueño y no lo consigo.

SUERTE PARA QUIEN LO INTENTE!

Yo lo haré mañana que ya tendré mi pc (por fin), puedes mirar el código de @79137913 (https://underc0de.org/foro/index.php?action=profile;u=21192) para hacerte una idea, o el mío cuando lo haga mañana, saludos.
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: rochesto en Septiembre 16, 2015, 03:50:44 PM
Buenas,  aprovechando el reto, me he puesto al lio de los algoritmos de ordenación.
Aquí os dejo el código con los algoritmos: selección, insercción, shell y quicksort.

Estoy aprendiendo por lo que seguro que hay muchos errores , no sean crueles :o  ;D


Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

void seleccion(string&);
void insercion(string&);
void ordenacion_shell (string &);
void quicksort( string&, int, int );

int main()
{

    string str = "qanwPVEAwnmSViNjTOLZPRRSaTAErCnbArUjPmELcsWhdVMXYfdYLUGLpjLdOMdzvAEgfhXWNvRJZqMhlwocRPHKcwbUFJVjBjmcsWhdVMXYfdYLUGLpjLdOMdzvAEgfhXWNvRJZqMhlwocRPHK";

//Cambiar a minusculas  todas las letras
    string::size_type l;
    for (l = 0; l < str.length(); l++)
    {
        str[l] = tolower(str[l]);
    }
//~ Fin minusculas

//METODOS DE ORDENACION

        //Ordenación por selección
    //seleccion(str);

        //Ordenación por inserción
    //insercion(str);

        //Ordenación por shell
    //ordenacion_shell(str);

        //Ordenación rápida QUICKSOFT
    quicksort(str, 0, str.length()-1);

//~ FIN METODOS ORDENACION


//Contador
    int contador = 0;
    char letra = 'a';

    for (int i = 0; i < str.length(); i++)
    {
        if(str[i] == str[i+1]){
            contador++;
        }else{
            cout << letra << ": " << contador+1 << endl;
            contador = 0;
            letra++;
        }
    }
//~ Fin contador

    return 0;
}

//Ordenación por selección
void seleccion(string &str){

    string::size_type i, j, k;
    for(i = 0; i < str.length(); i++){
        for(k= i, j = i +1; j < str.length(); j++){

            if (str[j] < str[k]){

                char aux = str[i];
                str[i] = str[j];
                str[j] = aux;

            }
        }
    }
}

//Ordenacion por insercion
void insercion(string &str)
{
    char tmp;
    int j = 0;
    for (int i = 1; i < str.length(); i++){
        tmp = str[i];
        j = i -1;
        while( j>=0 && tmp < str[j])
        {
            str[j+1] = str[j];
            j--;
        }
        str[j+1] = tmp;
    }
}


//Ordenacion por shell
void ordenacion_shell (string &str)
{
    int incr = str.length()/2, p, j;
    char tmp;
    do
    {
        for (p = incr; p < str.length(); p++)
        {
            tmp = str[p];
            j = p - incr;
            while ((j >= 0) && (tmp < str[j]))
            {
                str[j + incr] = str[j];
                j -= incr;
            }
            str[j + incr] = tmp;
        }
        incr /= 2;
    }
    while (incr > 0);
}


//Ordenacion rapida QUICKSORT
void quicksort(string &array, int start, int end)
{
    int pivote, left, right;
    char temp;

    if (start < end){
       

        pivote = start;
        left = start;
        right = end;
        while(left < right)
        {
            while(array[right] > array[pivote]){
                right--;
            }
            while(left<right && array[left] <= array[pivote]){
                left++;
            }

            if (left < right){
                temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }

        temp = array[right];
        array[right] = array[pivote];
        array[pivote] = temp;

        pivote = right;


        quicksort(array, start, pivote-1);
        quicksort(array, pivote+1, end);
    }
}

Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: 79137913 en Septiembre 17, 2015, 01:31:09 PM
HOLA!!!

@rochesto (https://underc0de.org/foro/index.php?action=profile;u=46011) :

No sere duro, solo te dire que en los retos se estila hacer una UNICA funcion sin funciones externas, por que es la mejor forma para aprender.

GRACIAS POR LEER!!!
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: mf en Septiembre 24, 2015, 11:17:19 AM
buenas,

Código (python) [Seleccionar]

#stringtoConvert= raw_input("\n[+] Reto underc0de\nEnter string, please: ")
stringtoConvert= "qanwPVEAwnmSViNjTOLZPRRSaTAECnbArUjPmELcsWhdVMXYfdYLUGLpjLdOMdzvAEgfhXWNvRJZqMhlwocRPHKcwbUFJVjBjmLOwPVqjoYHLTtixQAnBHwuvfxDMPnAbpHBRNYTpKSzxLTWOusljvXidQjqbqjgcvpFMLbPPOkHdTTJbkswfdEeeFTbllerqvbFMpO"
stringtC= stringtoConvert.lower()
diccio= {}
resultado= ""
dicOrdenado= []
cMax= 0

for a in stringtC:
if not diccio.has_key(a):
diccio[a] = 1
elif diccio.has_key(a):
cont = (diccio[a]) + 1
diccio[a] = cont
if diccio[a] > cMax:
cMax = diccio[a]
ldic= diccio.items()
cDin= cMax

while len(dicOrdenado) != len(diccio):
cont= 0
for letra in ldic:
if letra[1] == cDin:
dicOrdenado.append(letra)
cont= cont + 1
cDin = cDin - 1
cDin= cMax

while len(resultado) != len(dicOrdenado):
mismoEquipo= []
for letra in dicOrdenado:
if letra[1] == cDin:
mismoEquipo.append(letra[0])
mismoEquipo= sorted(mismoEquipo)
for leter in mismoEquipo:
resultado= resultado +leter
cDin = cDin - 1
print resultado


sl2 :)
Título: Re:[RETO] Ordenar caracteres (Dificultad=media)
Publicado por: LKI en Septiembre 25, 2015, 06:07:27 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
buenas,

Código (python) [Seleccionar]

#stringtoConvert= raw_input("\n[+] Reto underc0de\nEnter string, please: ")
stringtoConvert= "qanwPVEAwnmSViNjTOLZPRRSaTAECnbArUjPmELcsWhdVMXYfdYLUGLpjLdOMdzvAEgfhXWNvRJZqMhlwocRPHKcwbUFJVjBjmLOwPVqjoYHLTtixQAnBHwuvfxDMPnAbpHBRNYTpKSzxLTWOusljvXidQjqbqjgcvpFMLbPPOkHdTTJbkswfdEeeFTbllerqvbFMpO"
stringtC= stringtoConvert.lower()
diccio= {}
resultado= ""
dicOrdenado= []
cMax= 0

for a in stringtC:
if not diccio.has_key(a):
diccio[a] = 1
elif diccio.has_key(a):
cont = (diccio[a]) + 1
diccio[a] = cont
if diccio[a] > cMax:
cMax = diccio[a]
ldic= diccio.items()
cDin= cMax

while len(dicOrdenado) != len(diccio):
cont= 0
for letra in ldic:
if letra[1] == cDin:
dicOrdenado.append(letra)
cont= cont + 1
cDin = cDin - 1
cDin= cMax

while len(resultado) != len(dicOrdenado):
mismoEquipo= []
for letra in dicOrdenado:
if letra[1] == cDin:
mismoEquipo.append(letra[0])
mismoEquipo= sorted(mismoEquipo)
for leter in mismoEquipo:
resultado= resultado +leter
cDin = cDin - 1
print resultado


sl2 :)


Es correcto !! Felicitaciones !!  ;D