Ver Mensaje Individual
  #32 (permalink)  
Antiguo 26/12/2004, 12:53
furoya
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 11 meses
Puntos: 317
El tema de las vocales se me complica un poco; pero no tiene que ver con el código sino con la lógica de los diccionarios, que toman a las vocales acentuadas como vocales simplemente, hasta que aparecen 2 palabras iguales y entonces sí valen los acentos.

Con respecto a las vocales dobles ... el método funciona bien, pero casi las cambiaría por su versión "separada" ( æ por AE) y no admitiría discusiones para otros idiomas.

El algoritmo que usa sort en el ejemplo para ordenar números que posteaste más arriba funciona muy parecido a quickSort; estuve poniendo alertas para seguir el mecanismo. La página que recomiendas me demuestra que esa costumbre no es de mi exclusiva propiedad. La forma en que muestra el desarrollo se termina pareciendo a la de mi código anterior.

Todavía no me animo a corregir 'códigos'; pero seguí investigando sobre ordenamiento alfabético mientras le daba una vuelta de tuerca más al método de cadena reordenada.

Un aparte : es, al menos, interesante que preguntes si hay algo para corregir. No sé si es un tema personal o cultural -aquí se reúne gente de distintas ciudades, formación, edad- pero más de uno considera ofensivo el corregir un mensaje ajeno. A mi me costó entenderlo, porque la idea de un foro es proponer algo publicamente para luego mejorarlo, ampliarlo, re-utilizarlo; y las correcciones, en más de una ocasión, son inevitables. Ésto debe ser más fácil de entender para quien tiene educación científica -se me ocurre-.
También pienso que caricatos ya tiene experiencia en esto de crear códigos en conjunto y es una suerte que se haya interesado en el tema, pero ...
Caricatos : vi que pusiste mi nombre en la página de los Arrays y me dio un poco de vergüenza. Al pricipio creí que era provisorio, ahora sospecho que se va a quedar ahí. Gracias, lo único que vas a conseguir es hacerme famoso.
Volvamos al asunto del alfabeto. Busqué en internet y no hallé listas de caractees ordenados para cada idioma, pero supe que la misma letra puede estar ubicada en distintos sitios dependiendo de qué lengua la utilice.
El segundo paso fue pedir a amigos y conocidos que me dieran los abecedarios que conocían, y me hice solamente del francés, alemán, danés.
Cuando me descubrí caminando hacia la compañía de teléfonos para pedir una guía de cada país del mundo, sospeché que estaba encarando mal el problema.

Si bien un ordenamiento final de letras va a ser, de alguna forma, arbitrario; el ordenamiento de signos y símbolos ( que no suelen estar en diccionarios ni en las páginas amarillas ) puede ser caótico. Elegí un orden, solamente para seguir trabajando, con la certeza de que no será definitivo.

La última versión del método de ordenar por cadenas está en pausa. No me parece que sea páctica y por eso no la posteo. Pero sí la puedo explicar.

Quise ahorrarme uno de los dos strings ( recordemos que del primero obtenía una posición de caracter y el segundo me daba un caracter de reemplazo que serviría para que sort lo ordenase según ASCII ), y decidí aprovechar que cada caracter tiene su número, para convertir todas las palabras a números y luego, sí, pasarlos por sort o quickSort . Pero el ahorro, comparado con la cantidad de código que debo agregar, es mínimo.

Un ejemplo : si quisieramos ordenar AMA, BOJ, CASA, UNA (A=1...Z=26) nos quedaría

Código:
AMA   1131   ó   AMA   011301
UNA  20141       BOJ   021510
BOJ  21510       CASA  03011901
CASA 31191       UNA   201401
La segunda muestra es sin dudas la que funciona. Pero se nota que hay que rellenar con ceros hasta la cantidad de dígitos del 'caracter' más largo. En los ejemplos, todos los caracteres son de '2 dígitos', pero si tenemos en cuenta que en UNICODE hay decenas de miles de caracteres; o llevamos cada letra al máximo posible ( A = 00001 ), con lo que "SALAMANDRA" se convierte en una cadena de 50 caracteres; o buscamos en cada Array el caracter de número más alto y le damos el mismo length a todos los demás caracteres.

Ésto último parece más eficiente, pero requiere más cálculo y más líneas de código aún. Por eso lo abandoné.

Dejo el orden con el que estoy trabajando. Si algún lingúista puede sugerir algún cambio, a mí no me ofende y será bienvenido.

Código:

alterAscii = "  ¡!¿?\"'‘’“”‹›«»#$¢£¤¥€‰%ƒ&\{}"
alterAscii +="[]()<>*+-±×÷=†‡‚„…:;,./|\\¦@°`´˜"
alterAscii +="ˆ¨¸^¬*¯_–—~¼½¾¹²³ªº©®™§µ¶·•01234"
alterAscii +="56789AÀÁÂÃÄÅÆBCÇDÐEÈÉÊËFGHIÌÍÎÏJ"
alterAscii +="KLMNÑOÒÓÔÕÖØŒPQRSŠTUÙÚÛÜVWXYÝŸZÞ"
alterAscii +="ߎŽ"
 
saludos

furoya