oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

y programas personales para otros como tu, puede que te corrijan ;)

oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor Ximorro » 13 Dic 2012, 12:44

˙˙˙ǝʇuǝɯןɐɯɹou oʇxǝʇ ןǝ ɹɐıdoɔ ʎ ɹɐuoıɔɔǝןǝs ǝpǝnd ǝs 'uǝƃɐɯı ɐun sǝ ou sıǝʌ oɯoɔ ʎ

. . .así que podéis usarlo en comentarios en youtube, facebook, etc. ¡pero no abuséis!

La idea no es mía, simplemente me encontré un comentario así en youtube y pensé en hacer un programita en AutoIt que generara algo así.
El truco está en invertir los caracteres de derecha a izquierda y además cambiarlos por una versión "boca abajo".

El texto no está boca abajo realmente, sino que como digo cada carácter ha sido sustituido por otro. Por ejemplo la "p" se puede sustituir por la "d", y viceversa, así "dono" al revés es "ouop" pero fijaros que son letras "normales": o, u, o , pe.

Cuando estaba en ello me encontré una web que lo hacía, así que he tomado la tabla de conversión de ahí:
http://www.sevenwires.com/play/UpsideDownLetters.html

Bonus: el mapeo de caracteres se hace usando un diccionario (tabla hash)

De esta manera es muy rápido, el array del programa está para generar el diccionario, pero la búsqueda del carácter correspondiente a cada uno se hace con ese diccionario en vez de buscar por todo el array.
Bueno, dado el número de caracteres no es que el array hubiera sido muy lento, pero quería mostrar un uso del diccionario, que no se ve afectado por el número de elementos.

Para buscar caracteres "inversos" es necesario usar caracteres unicode, como el editor está en ANSI (modo por defecto de AutoIt) para asignar los caracteres no imprimibles uso sus códigos.

Limitaciones:
Sólo minúsculas (no todas las mayúsculas tienen inversa) y nada de acentos y cosas así. Cuando un carácter no está en la tabla simplemente no se cambia. Por supuesto podéis ampliar la tabla si vais encontrando más equivalencias. Tengo unas cuantas mayúsculas si queréis os lo paso, pero no está completo.
Lo mismo con los números.
No todos los caracteres tienen negrita (depende de la fuente), por eso por ejemplo el título del post queda un poco raro.

Cada fuente tiene un subconjunto de Unicode, así que no salen todos los caracteres invertidos en todas las fuentes. En particular en mi XP la fuente por defecto no tiene mucha cobertura, pero si copias el texto a otro sitio que usa otra fuente los caracteres aparecen.
También se puede cambiar la fuente en el programa, claro, está comentada la línea que lo hace con 3 fuentes que he encontrado significativas:
Microsoft Sans Serif (Windows por defecto, al menos en XP): 2303 caracteres
Lucida Sans Unicode: 1765 caracteres (algo menos pero más "bonitos")
DejaVu Sans: 5633 caracteres (muy buena cobertura)

No sé si Lucida o DejaVu son estándar o los he instalado yo, en cualquier caso podéis cambiar a la fuente que queráis. Eso sí, cuando peguéis en otro sitio comprobadlo porque depende de la fuente que se use en ese sitio.

Ale, sin más rollo aquí va el programa, es super simple la verdad, casi me ha costado más explicarlo que hacerlo ;-)

uǝʇnɹɟsıp oן sǝpǝʇsn ǝnb 'oɹɹoɯıx ɹod opɐɯɐɹƃoɹd

Código: Seleccionar todo
#include <GUIConstants.au3>

; Idea tomada de
; http://www.sevenwires.com/play/UpsideDownLetters.html

Opt("MustDeclareVars", 1)
Global $GuiConv, $Input_orig, $botTrans, $Input_salida, $botCopiar, $botSalir, $dictConv
$GuiConv = GUICreate("Boca Abajo", 400, 175)
GuiCtrlCreateLabel("Texto original:", 5, 5)
$Input_orig = GUICtrlCreateInput("", 10, 20, 377, 20)
$botTrans = GUICtrlCreateButton("Transformar", 150, 50, 100, 25)
GuiCtrlCreateLabel("Texto volteado:", 5, 75)
$Input_salida = GUICtrlCreateInput("", 10, 90, 377, 20)
;GUICtrlSetFont(-1, 8.5, 400, 0, "DejaVu Sans") ;Lucida Sans Unicode / DejaVu Sans / Microsoft Sans Serif (por defecto)
$botCopiar = GUICtrlCreateButton("Copiar", 150, 120, 100, 25)
$botSalir = GUICtrlCreateButton("SALIR", 335, 135, 50, 25)
GUISetState(@SW_SHOW)

$dictConv = _CreaDictConversion()

Global $nMsg, $txtorig, $char, $charCod, $txt_res
While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $botCopiar
         ClipPut(GUICtrlRead($Input_salida))
      Case $GUI_EVENT_CLOSE, $botSalir
         $dictConv.RemoveAll()
         $dictConv = 0
         Exit
      Case $botTrans, $Input_orig
         $txtorig = StringLower(GUICtrlRead($Input_orig))
         $txt_res = ""
         For $i = StringLen($txtorig) To 1 Step - 1
            $char = StringMid($txtorig, $i, 1)
            $charCod = AscW($char)
            If $dictConv.Exists($charCod) Then $char = $dictConv.item($charCod)
            $txt_res &= $char
         Next
         GUICtrlSetData($Input_salida, $txt_res)
   EndSwitch
WEnd

Func _CreaDictConversion()
    ;La conversión es reversible así que sólo hay que poner cada par de correspondencia una vez
    ;El editor es ANSI por lo que los caracteres unicode no representables se insertan mediante su punto de código
   Local $MaxChars = 62
   Local $aConv[$MaxChars] = [ _
      'a', ChrW(0x0250), 'b', 'q', _
      'c', ChrW(0x0254), 'd', 'p', _
      'e', ChrW(0x01DD), 'f', ChrW(0x025F), _
      'g', ChrW(0x0183), 'h', ChrW(0x0447), _ ;h 0x0265/0x0447
      'i', ChrW(0x0131), 'j', ChrW(0x027E), _ ;i 0x1D09/0x0131
      'k', ChrW(0x029E), 'l', ChrW(0x05DF), _
      'm', ChrW(0x026F), 'n', 'u', _
      'r', ChrW(0x0279), 't', ChrW(0x0287), _
      'v', ChrW(0x028C), 'w', ChrW(0x028D), _
      'y', ChrW(0x028E), '.', ChrW(0x02D9), _
      '[', ']', '(', ')', '{', '}', '¿', '?', _
      '¡', '!', "'", ',', '<', '>', _
      '_', ChrW(0x203E), '"', ChrW(0x201E), _
      ';', ChrW(0x061B), "&", ChrW(0x214B) ]

   Local $dict = ObjCreate("Scripting.Dictionary")
   If Not IsObj($dict) Then
      MsgBox(48, "Error", "¡El Diccionario no se ha podido crear!")
      Exit
   EndIf

   For $i = 0 To $MaxChars-1 Step 2
      $dict.Add(AscW($aConv[$i]), $aConv[$i+1])
      $dict.Add(AscW($aConv[$i+1]), $aConv[$i]) ; Conversión inversa
   Next
   Return $dict
EndFunc
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Ximorro
Profesional del Autoit
 
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor BasicOs » 13 Dic 2012, 13:09

JAJA. Parecia un spam en RUSO a primera vista ....
Salu22:)
Avatar de Usuario
BasicOs
Site Admin
 
Mensajes: 2048
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)

Re: oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor Chefito » 13 Dic 2012, 18:58

Jajajajaja.....yo pensaba lo que BasicOs: ya se le ha metido un spam a Ximorro!!!! :smt005 :smt005 .

Muy bueno el efecto, e interesante lo del objeto Dictionary. Sabía que existía, pero nunca lo he utilizado.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Chefito
Profesional del Autoit
 
Mensajes: 2032
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor Ximorro » 14 Dic 2012, 10:05

Ja, ja, tranquilos que no hay virus ni spam, el único problema con este programa son los dolores de cuello que puede dar girar la cabeza para leerlo mejor ;-)

¡ɯɐds ןǝ oɾɐqɐ!

En este caso lo del diccionario lo he puesto para dar un ejemplo de uso. Aquí no hace falta por cuestiones de eficiencia al ser una tabla tan pequeña pero con miles de datos iría igual de rápido y un array iría cada vez más lento.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Ximorro
Profesional del Autoit
 
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor Codex » 11 Ene 2013, 06:14

Muui Buena y sensilla si señor ! :smt023
Codex
 
Mensajes: 4
Registrado: 30 Oct 2012, 22:20

Re: oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor XPyro » 20 Nov 2014, 07:42

Muy bueno jajaja me paso lo que a BasicOs :smt005
Imagen
Avatar de Usuario
XPyro
Profesional del Autoit
 
Mensajes: 536
Registrado: 04 Mar 2007, 10:12
Ubicación: México

Re: oɾɐqɐ ɐɔoq oʇxǝʇ ʎ ʇıoʇnɐ

Notapor arkcrew » 20 Nov 2014, 22:20

Joder casi borro el tema, menos mal que os he visto comentar!! JAJAJAJAJA Muy bueno!!
Avatar de Usuario
arkcrew
Profesional del Autoit
 
Mensajes: 505
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España


Volver a esScripts - Programas - Abre tus creaciones maravillosas

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 2 invitados

cron