Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > HTML, Javascript y otros
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Función desde ActionScrip2 a Delphi

Hola, amigos.
Tengo un par de funciones en ActionScript2 y me gustaría incluirlas en código Delphi.
LLevo varios días intentando traducirlas, pero no sé nada de ActionScript y (a parte de lo que me está costando) ni siquiera tengo la seguridad de hacerlo correctamente.

Os pediría que, si alguien entiende los dos lenguajes y tiene media hora libre para hacerlo, me facilitara la tarea traduciéndolas, yo sólo soy aficionado y no no tengo ni idea de ActionScript (ni sabía que existía).

Este es el código en ActionScrip2:

Código:
function generar(n)
{
   z="Un texto Unicode que no copio por lo raro que es";
    f = Math.floor;
    r = Math.random;
    B = 4096;
    d1 = [];
    d2 = [];
    m = [];
    s0 = "";
    kr = [];
    kf = [];
    ks = [];
    kt = [];
    rd = r()<.5;
    al = z.length;
    rg = f(al*r());
    for (var j = 0; j<10; j += 9)
   {
        for (var h = 0; h<3; h++)
      {
            if (!h)
         {
                m2(j);
            }
            m1(m, j+3*h, 3*h+3+j);
        }
    }
    for (var j = 0; j<3; j++)
   {
        m[j] = m[9+j*3].concat(m[10+j*3].concat(m[11+j*3]));
    }
    m1(m, 0, 3);
    m[3] = m[0].concat(m[1].concat(m[2]));
    for (var j = 0; j<9; j++)
   {
        d1[j] = j+1;
        for (var h = 0; h<3; h++)
      {
            v = j*3+h;
            w = 9*(v%9)+f(v/9);
            m[0][v] = m[3][w];
            m[1][v] = m[3][w+3];
            m[2][v] = m[3][w+6];
        }
    }
    m1(m, 0, 3);
    m1(d1, 0, 9);
    sl = m[0].concat(m[1].concat(m[2]));
    for (var v = 0; v<al; v++)
   {
        t = (rg+v)%al;
        k0 = z.charCodeAt(t);
        nv = (15 & k0)-n;
        if (k0<=B && nv>=0 && nv<6)
      {
            cn = 0;
            d = k0 >> 8;
            s = (240 & k0) >> 4;
            for (var h = 1+t; h<=s+t; h++)
         {
                k1 = z.charCodeAt(h)-B;
                kf[0] = 15 & k1;
                kf[1] = (240 & k1) >> 4;
                kf[2] = (3840 & k1) >> 8;
                kf[3] = k1 >> 12;
                for (var j = 0; j<4; j += 2)
            {
                    cn += kf[j];
                    if (kf[j+1])
               {
                        ks.push(cn, kf[j+1]);
                        cn++;
                    }
                }
            }
            q = f(r()*2)+nv*2+f(r()*(nv+1));
            for (var h = s+1+t; h<=s+d+t; h++)
         {
                kt[h-s-1-t] = z.charCodeAt(h)-B;
            }
            for (var h = 0; h<kt.length-1; h += 3)
         {
                m1(kt, 2, h+3);
            }
            for (var h = 0; h<q; h++)
         {
                k3 = f(kt[h]/10);
                ks.push(k3, kt[h]-k3*10);
            }
            lg = ks.length;
            break;
        }
    }
    for (var h = 0; h<lg-1; h += 2)
   {
        kr[sl[ks[h]]] = d1[ks[h+1]-1];
    }
    for (var j = 0; j<81; j++)
   {
        s0 += kr[j] ? kr[j] : ".";
    }
    return s0;
    function m1(b, a, c)
   {
        for (var i = c-a; i>1; i--)
      {
            e = a+f(i*r());
            o = b[i-1+a];
            b[i-1+a] = b[e];
            b[e] = o;
        }
        return (b);
    }
    function m2(a)
   {
        for (var j = 0; j<9; j++)
      {
            m[j+a] = [];
            for (var h = 0; h<9; h++)
         {
                m[j+a][h] = a == 0 ? rd ? j*9+h : h*9+j : m[h][j];
            }
        }
    }
}




function resolver(m)
{
   if (m == ".................................................................................")
      m = "13..........13..........13.............................13..........13..........13";
    tablas();
    s = []; q = []; ct = 0; act = []; aq = [];
    for (var j = 0; j<81; j++)
   {
        s[j] = 511;
    }
    e = m.split("");
    for (var h = 0; h<e.length; h++)
   {
        if (e[h]>="1" && e[h]<="9")
      {
            colocar(s, h, e[h]);
        }
    }
    q[0] = resolver2(s).slice();
    cons(q[0]);
    while (ct<81 && ct>-1)
   {
        if (ct2<0)
      {
            return q[ct].slice(81, 162).join("");
        }
        colocar(q[ct], ct2, act[ct].pop());
        if (!resolver2(q[ct]))
      {
            q[ct] = aq[ct].slice();
            while (!act[ct][0] && ct>-1)
         {
                ct--;
                ct2 = q[ct][162];
                q[ct] = aq[ct].slice();
            }
        }
      else
      {
            ct++;
            q[ct] = q[ct-1].slice();
            cons(q[ct]);
        }
    }
    return "sin solución";
    function resolver2(s)
   {
        do
      {
            sp = [];
            for (var j = 0; j<81; j++)
         {
                if (!s[j+81])
            {
                    if (t4[s[j]] == 0)
               {
                        return false;
                    }
                    if (t4[s[j]] == 1)
               {
                        sp.push(j, t3[s[j]]);
                    }
                }
            }
            for (var j = 0; j<27; j++)
         {
                s1 = [];
                s2 = 0;
                for (var h = 0; h<9; h++)
            {
                    if (!s[t1[j][h]+81])
               {
                        s1[s2] = t1[j][h];
                        s2++;
                    }
                }
                s5 = s1.length;
                if (!s5)
            {
                    continue;
                }
                r1 = 0;
                r2 = s[s1[0]];
                for (var h = 1; h<s5; h++)
            {
                    r1 = (s[s1[h]] & r2) | r1;
                    r2 = (s[s1[h]] ^ r2) & ~r1;
                }
                if (s5 != t4[r1]+t4[r2])
            {
                    return false;
                }
                if (r2)
            {
                    for (var h = 0; h<9; h++)
               {
                        if (s[s1[h]] & r2)
                  {
                            s3 = s1[h];
                            s4 = t3[s[s1[h]] & r2];
                            if (s4.length>1)
                     {
                                return false;
                            }
                            if (s3)
                     {
                                sp.push(s3, s4);
                            }
                        }
                    }
                }
            }
            for (var v = 0; v<sp.length; v += 2)
         {
                for (var j = 0; j<21; j++)
            {
                    sa = t[sp[v]][j];
                    if (sa != sp[v] && s[sa+81] == sp[v+1]) {
                        return false;
                    }
                }
                colocar(s, sp[v], sp[v+1]);
            }
        } while (sp[0]);
        return s;
    }
    function cons(s)
   {
        min = 9;
        ct2 = -1;
        for (var j = 0; j<81; j++)
      {
            if (!s[j+81] && t4[s[j]]<min)
         {
                min = t4[s[j]];
                ct2 = j;
            }
            if (min == 2)
         {
                break;
            }
        }
        s[162] = ct2;
        aq[ct] = s.slice();
        act[ct] = t3[s[ct2]].split("");
    }
    function colocar(s, a, b)
   {
        s[81+a] = b;
        for (var h = 0; h<21; h++)
      {
            s[t[a][h]] &= ~(1 << (b-1));
        }
    }
    function tablas()
   {
        t = [];
        t1 = [];
        t2 = [];
        t3 = [];
        t4 = [];
        for (var j = 0; j<512; j++)
      {
            rt = "";
            for (var h = 0; h<9; h++)
         {
                if (j & (1 << h))
            {
                    rt += h+1;
                }
            }
            t3[j] = rt;
            t4[j] = t3[j].length;
        }
        for (var j = 0; j<81; j++)
      {
            t[j] = [];
            t2[j] = [Math.floor(j/9), 9+j%9, 3*Math.floor(j/27)+Math.floor(j%9/3)+18];
            for (var v = 0; v<3; v++)
         {
                if (!t1[t2[j][v]])
            {
                    t1[t2[j][v]] = [];
                }
                t1[t2[j][v]].push(j);
            }
        }
        for (var j = 0; j<81; j++)
      {
            t[j] = t1[t2[j][0]].concat(t1[t2[j][1]]).concat(t1[t2[j][2]]);
            n = 0;
            t[j].sort(16);
            while (n<t[j].length-1)
         {
                t[j][n+1] == t[j][n] ? t[j].splice(n, 1) : n++;
            }
        }
    }
}
Son 2 funciones para generar y resolver Sudokus tomadas de este link

Este es el código que tengo traducido en 3 días. Ni siquiera sé si está correcto.

Código Delphi [-]
function generar(n);
var
    z : string; //" -aquí va la cadena unicode, debereis bajar el FLA pues solo copiando NO funcionará- ";
    //f :  Math.floor;
    //r = Math.random;
    B : integer = 4096;
    d1 : Array of integer;
    d2 : Array of integer;
    m  :  Array of integer;
    s0 : String = '';
    kr : Array of String;
    kf : Array of Byte;
    ks : Array of Byte;
    kt : Array of Byte;
    k3 : integer;//Array of Byte;
    rd : real48;
    al : integer;
    rg : real48;
    t  : integer;
    h  : integer;
    j  : integer;

 function m2(a: integer);
 var j,h: integer;
   begin
        for j := 0 to 8
        do begin
             m[j+a] = 0;
             for h := 0 to 8
             do begin
                  if a = 0 then m[j+a][h] := j*9+h
                           else if a = rd then m[j+a][h] := h*9+j
                                          else m[j+a][h] := m[h][j];
                end;
           end;
    end;

 function m1(var b: Array of integer;  a, c : Integer);
 var i,e,o : integer;
   begin
        for i := c-a downto 1
        do begin
            e := a+random(round(i*random()));
            o := b[i-1+a];
            b[i-1+a] = b[e];
            b[e] = o;
           end;
   end;

begin
    z := 'la cadena unicode aqui';
    rd := random(0.5);
    al := length(z);;
    rg := random(round(al*random()));

    j:=0;
    while j < 10 // No puedo/no sé usar el for con saltos de 9 en nueve
    do begin
        for h := 0 to 2
        do begin
          //  if not h then m2(j);  no entiendo la negaciónb de h y por eso lo quito

            m1(m, j+3*h, 3*h+3+j);
            end;
       j := j+9;
       end;
// Seguiré traduciendo...
end; // Generar

Gracias, al menos, por leerme.
Lo dicho: si alguien puede ayudarme se lo agradezco.
Mientras, seguiré peleándome con la traducción.

Saludos a todos.
Responder Con Cita
  #2  
Antiguo 25-04-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Hola.
Sigo peleando, pero no consigo resultados.
Por favor. Ya sé que pido algo muy fuerte. Pero si alguien es bilingüe en As2 y Delphi le agradecería el esfuerzo. Si no fuera importante para mi, no os lo pediría.
No consigo el resultado deseado con Delphi.
No sé si se pueden llamar las funciones desde Delphi y obtener su resultado.
Las tengo en ficheros .FLA, pero no sé si se pueden llamar desde Delphi en Android ni cómo se podría hacer.

Saludos a todos.
Responder Con Cita
  #3  
Antiguo 25-04-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
La verdad, dudo que haya aquí mucha gente que sepa ActionScript. Yo sé que es ECMAScript con esteroides (JavaScript también es un dialecto de ECMAScript), pero desconozco hasta qué punto es igual o no.

Claro que en tu caso, quizá sea más fácil escribir el código Pascal desde cero en vez de traducir.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 25-04-2016 a las 20:23:21.
Responder Con Cita
  #4  
Antiguo 25-04-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Gracias Ñuño.
El problema es que no entiendo las funciones. Ni sé cómo usar la minibase de datos que va imbuída en cuatro o cinco líneas en Unicode.

Voy intentando traducir lo que voy entendiendo. Según tengo entendido AS1, AS2 y AS3 son como "hermanos" más pequeños de Flash y Flash es parecido a Javascript también. Por éso puse la consulta en este foro.

El gran problema de las funciones es que creo que hay alguna parte que trabaja a nivel de bit y entender la forma en que lo hace me está costando mucho.

Ya tengo una función generadora de sudokus aleatorios en Delphi(Pascal), pero me parece muy interesante la función que intento traducir porque es más segura y no genera sudokus con más de 1 solución como me he encontrado algunos con la ffunción en Delphi.

Además, como la función es aleatoria, en algunos casos tarda demasiado y el dispositivo Android aborta el programa.

Un saludo.
Responder Con Cita
  #5  
Antiguo 06-09-2017
Avatar de German
German German is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 133
Poder: 21
German Va por buen camino
Se que el tema es antiguo, pero no me he resistido a responder. Yo lo que hubiera hecho, para no complicarme la vida, es hacer la interfaz en Flash y utilizar las funciones que ya tienes, y mostrarlo en Delph (te puedes comunicar con el archivo flash desde Delphi y al revés)i. Se que en la actualidad Flash está tocado de muerte (según parece morirá definitivamente en 2020), pero se pueden hacer interfaces interesantes con él:



Por si alguien quiere descargarse el programa:

Desde DROPBOX
Desde MEGA
Desde MEDIAFIRE

Salu2.
__________________
Tengo las manos llenas de dedos... Tengo los dedos llenos de teclas...
Tengo las teclas desordenadas... Tengo el desorden muy controlado...
Tengo el control en mis manos.
Responder Con Cita
  #6  
Antiguo 07-11-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 540
Poder: 17
jhonalone Va por buen camino
Gracias, Germán.

Quizás todavía pudiera utilizar estas funciones, si supiera cómo conectar Delphi y Flash.
Pero no tengo ni idea de cómo se utiliza Flash.
No sé, si como dices, las funciones quedarían incluídas en el código del programa de Delphi.
Si esto no fuera así, no interesaría tener que acompañar el programa con los ficheros Flash.

Gracias por tu respuesta. Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Acceder a Objetos desde una funcion darkmir C++ Builder 3 09-12-2013 01:12:41
Traducción de función desde delphi Novás PHP 1 14-07-2010 19:46:40
llamar una función desde un formulario cjamacaru PHP 1 03-12-2009 13:52:53
Array devuelto desde una función r1d2m3 OOP 3 26-11-2009 02:28:20
Llamar a una función de una DLL desde PHP MON___ Varios 4 06-10-2007 00:06:48


La franja horaria es GMT +2. Ahora son las 09:31:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi