.
Realizar un Codigo fuente que se imprima a si mismo exactamente SIN EXCEPCIÓN ALGUNA, de manera EXACTA (cadenas declaraciones procesos, etc.).
* De 1 a l 10 en conocimientos donde 1 sabe manejar y se sabe las condiciones del lenguaje, como minimo 4.
* El codigo imprimido puede ser porun msgbox impresora, por un Debugger, un archivo de texto ne fin solo que devuelva su propio codigo fuente ( Recomiendo hacerlo en el Sub main() ).
* NO VALE LEER ARCHIVOS EXTERNOS de ninguna indole.
Publicar su codigo el dia 26/02/2011 ( en este día publicare mi código ) , esto es solo para dar tiempo para que piensen como hacerlo, y que no vean otros un codigo fuente y se inspiren en el, USEN SU MATERIA GRIS!¡.
--------------------
* No vale extraer el codigo fuente de otro lado externo a el programa, recurso, etc debera ser un codigo simple.
* Si tu codigo hace mension a una dll externa igual cuenta como codigo del mismo programa, asi que cuidado con los mañosos.
* Como vez dice A SI MISMO, debera ser lo mismo si esta o no esta compilado, es decir que si funciona en el IDE pero no en un exe no vale.
* En otras palabras si haces un Addin vas a tener que mostrar el codigo fuente del Addin no hay otra. si lo compilas te devera mostrar el codigo fuente original, si lo ejecutas debera realizar lo mismo; es decir
Si tu codigo fuente es:
Código:
sub main()
codigo
end sub
El programa al ejecutarlo debera mostrarte su mismo codigo es decir TODO Sub main() con TODO lo que haya dentro y fuera de el mismo, si metes modulo, clases, comentarios funciones procesos, de igual manera.
La cosa es pensar, en como rayos hacerlo pero de que se puede se puede NO hay que manejar APIS estructuras ni nada similar, es solo y unicamente LÓGICA.
---------------
Debido a los amigos que dieron demasiados detalles ahora el limite de tiempo ya no tiene caso.
La parte comentada es mi codigo resultante.
Sub main(): Const s As String = "Sub main(): Const s As String = @: msgbox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub": MsgBox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub
'Sub main(): Const s As String = "Sub main(): Const s As String = @: msgbox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub": MsgBox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub
Temibles Lunas!¡.
HOLA!!!
Osea Black, estas pidiendo un autodescompilador? mucho trabajo para el 20 :S, aparte es fin de semana XD
GRACIAS POR LEER!!!
.
Es mas facil de lo que te imaginas!¡.
Dulces Lunas!¡.
A ver, no entendi, dices un ejecutable q al ejecutarse muestre todo su codigo? algo asi..?
Option explicit
dim a as integer
public sub hola()
codigo
codigo
end sub
public sub form1_load()
call MostrarSource()
end sub
Sub MostrarSource()
' Mostrar el texto con el souce de todo el codigo completo
end sub
Creo que no se puede colocar el codigo fuente dentro del codigo fuente :-X... verdad?, si se hace eso se puede crear una paradoja que puede destruir el universo... ejem!... :silbar:
Queda autoleerse el programa, pero no se podria extraer el codigo fuente puro. No conozco desensambladores que lo hagan. Una pista por favor compadre :huh:
HOLA!!!
Ahh, ahora que me lo decis la clase de Mr Frog lee las funciones que estan enumeradas en su lllamada...
Talvez no es tan dificil, pero igual en fin de semana no, a lo sumo el lunes.
GRACIAS POR LEER!!!
No se si es que yo soy muy cortito o es que BlackZero se expresa de una forma muy compleja :xD Lo que pides es 'simplemente' una función que muestre todo el código que hay en el proyecto desde el que se la llama?
Es decir, que de forma genérica esta función ha de ser capaz de mostrar el código del proyecto donde esta, no?
Si es así... La función debería de funcionar con el proyecto compilado?
Lo mas importante es si deberia incluir los comentarios? :xD
Quine :-*
Cita de: Novlucker en 19 Febrero 2011, 23:21 PM
Quine :-*
Exactly, nunca había visto uno en VB :xD
no esta muy explicado que digamos, o sea que nadie sabe realmente que se tiene que hacer.
porque por "Imprimir" uno puede referirse a mostrar y otro puede entender imprimir en la impresora, lo cual es valido ya que si queres, podes sacar una captura de la pantalla del codigo e imprimirla.
aparte no dice si el proyecto debe estar compilado en .exe para realizar la accion o estar en el IDE, ya que con un Addin de visual basic es posible hacerlo en pocas lineas de codigo a lo que queres.
cuando decis "NO VALE LEER ARCHIVOS EXTERNOS." me imagino que decis a no leer el .frm del proyecto, pero que pasa si el proyecto tiene 40 modulos ?
si tiene que estar en .exe o no es muy importante aclararlo, ya que se me ocurren varias cosas que funcionan para sacar el codigo del IDE.
ahora yo te doy hasta el 22/02/2011 para que expliques bien como es el tema... :laugh:
saludos.
Cita de: seba123neo en 19 Febrero 2011, 23:39 PM
no esta muy explicado que digamos, o sea que nadie sabe realmente que se tiene que hacer.
porque por "Imprimir" uno puede referirse a mostrar y otro puede entender imprimir en la impresora, lo cual es valido ya que si queres, podes sacar una captura de la pantalla del codigo e imprimirla.
aparte no dice si el proyecto debe estar compilado en .exe para realizar la accion o estar en el IDE, ya que con un Addin de visual basic es posible hacerlo en pocas lineas de codigo a lo que queres.
cuando decis "NO VALE LEER ARCHIVOS EXTERNOS." me imagino que decis a no leer el .frm del proyecto, pero que pasa si el proyecto tiene 40 modulos ?
si tiene que estar en .exe o no es muy importante aclararlo, ya que se me ocurren varias cosas que funcionan para sacar el codigo del IDE.
ahora yo te doy hasta el 22/02/2011 para que expliques bien como es el tema... :laugh:
saludos.
mmm en el 1er post pongo:
Cita de: BlackZeroX▓▓▒▒░░ en 19 Febrero 2011, 09:17 AM
.
Realizar un Codigo fuente que se imprima a si mismo exactamente SIN EXCEPCIÓN ALGUNA, de manera EXACTA (cadenas declaraciones procesos, etc.).
* No vale extraer el codigo fuente de otro lado externo a el programa, recurso, etc debera ser un codigo simple.
* Si tu codigo hace mension a una dll externa igual cuenta como codigo del mismo programa, asi que cuidado con los mañosos.
* Como vez dice
A SI MISMO, debera ser lo mismo si esta o no esta compilado, es decir que si funciona en el IDE pero no en un exe no vale.
* En otras palabras si haces un Addin vas a tener que mostrar el codigo fuente del Addin no hay otra. si lo compilas te devera mostrar el codigo fuente original, si lo ejecutas debera realizar lo mismo; es decir
Si tu codigo fuente es:
sub main()
codigo
end sub
El programa al ejecutarlo debera mostrarte su mismo codigo es decir TODO Sub main() con TODO lo que haya dentro y fuera de el mismo, si metes modulo, clases, comentarios funciones procesos, de igual manera.
La cosa es pensar, en como rayos hacerlo pero de que se puede se puede NO hay que manejar APIS estructuras ni nada similar, es solo y unicamente LOGICA.
P.D.: Lo siento era para el dia
26/02/11, di mal la fecha.
Temibles Lunas!¡.
HOLA!!!
XD me guardo la resolucion esta para el 26 :P va a ser la mas rapida seguro... :silbar:
GRACIAS POR LEER!!!
Esto no es posible tal como suena, mas bien parece un truco que simula lo que suena, para darce una idea cuando se compila se borran los comentarios.
supongo que deve ser algun tipo de adding que guardara el source dentro del ejecutable o algo asi.
.
Pues piensenle por que si se puede, quien se de por vensido le mando el codigo por mp, mientras tanto a quemar la materia gris!¡.
Dulces Lunas!¡.
HOLA!!!
Vamos Black ya lo resolvi xD
:P
GRACIAS POR LEER
Aun no resolviste mi pregunta.... Ha de mostrar el código fuente del proyecto sea cual sea este o solo ha de mostrar el código fuente de si mismo? Es decir, que si incluyeses el modulo en otro proyecto solo mostraría el del mismo modulo...
^^ pues creo que se puede hacer con los addins de VB, o sea leer el codigo desde los Addins que te deja hacer VB.
@skyweb07: Debe funcionar compilado!
Cita de: skyweb07 en 20 Febrero 2011, 17:42 PM
^^ pues creo que se puede hacer con los addins de VB, o sea leer el codigo desde los Addins que te deja hacer VB.
eso ya lo dije en otro post.
creo que ya lo tengo, supongo que lo que estoy haciendo es lo que pide el reto, asi que voy a tener que quedarme con las dudas hasta el 26
Saludos.
.
Disculpen por lo de la fecha, es que si no se pone una fecha para esto con el 1ro que publique el otro puede inspirarse y ese no es el objetivo.
Por otro lado debe imprimirse en su totalidad TODO el codigo, si pusieron funciones en modulos estas funciones deben ser impresas de igual manera, y con impresas me refiero al metodo que deseen aun que con un pequeño msgbox bastaria ( en dado caso tambien debe mostrar el codigo del msgbox tal cual. ).
Es un reto mas que nada de destreza mental.
Dulces Lunas!¡.
Puede ser q lo único q tienes q hacer es copiar todo el código que hiciste y pegarlo en la propiedad de un textbox en text y listo?
ejemplo:
Private Sub Form_Load()
A=2
End sub
Copiamos lo anterior y lo pegamos en la propiedad text de un textbox q colocamos en el formulario. Así cuando lo ejecute mostrara su código fuente aunque uno lo compile.
HOLA!!!
Cita de: LixKeÜ en 21 Febrero 2011, 11:08 AM
Puede ser q lo único q tienes q hacer es copiar todo el código que hiciste y pegarlo en la propiedad de un textbox en text y listo?
ejemplo:
Private Sub Form_Load()
A=2
End sub
Copiamos lo anterior y lo pegamos en la propiedad text de un textbox q colocamos en el formulario. Así cuando lo ejecute mostrara su código fuente aunque uno lo compile.
Creo que asi no, tendrias que "imprimirlo" osea pone en el codigo "text1.visible = true" y desde la ide dejalo en false asi lo imprime (creo que seria mejor un label)
:silbar: Mensaje Nro 300 ;-)
GRACIAS POR LEER!!!
Algunos estáis entendiendo mal, o eso creo. Yo entiendo que no se trata de hacer una funcion genérica que muestre el code de cualquier proyecto, sino un programa, una función, que muestre su propio código fuente.
Saludos
lo que no queda claro, por lo menos para mi, es que supongamos tengo el modulo con el Sub Main() y tengo 1 formulario con codigo, y tengo 2 modulos mas con codigo, ¿ como eligo el codigo que quiero mostrar ?, ¿ muestra el codigo de todo el proyecto junto ?
PD:me imagino no tiene nada que ver con el Microsoft Script control no ?
HOLA!!!
Ya lo tengo!!! Codigo Hecho :D [sin scriptcontrol se puede]
Al final era como decia Black Muy facil
P.D: Hecho en 15 Lineas, se puede reducir 2 lineas asi que son 13 :D y eso es contando el start y end sub asique tenemos 11 lineas total :D
P.D2: Igual sigo a favor de mi primer codigo de 0 lineas XD
GRACIAS POR LEER!!!
Cita de: [Zero] en 21 Febrero 2011, 13:54 PM
sino un programa, una función, que muestre su propio código fuente.
Esactamente no valen textbox forms ni nada por que entonces tendran que mostrar el codigo fuente de los mismo ( Codigo diseño, eventos, etc... y eso es imposible ).
Dulces Lunas!¡.
Cita de: 79137913 en 21 Febrero 2011, 15:20 PM
P.D: Hecho en 15 Lineas, se puede reducir 3 lineas asi que son 12 :D
12 lineas?? yo utilize 150
Cita de: BlackZeroX▓▓▒▒░░ en 21 Febrero 2011, 18:35 PM
Esactamente no valen textbox forms ni nada por que entonces tendran que mostrar el codigo fuente de los mismo ( Codigo diseño, eventos, etc... y eso es imposible ).
voy a hacer odios sordo a eso porque es parte del metodo que utilize, seguramente voy por mal camino. :-\
No programo en VisualBasic pero el reto en sí está interesante.
Como Novlucker lo dijo, esto es un Quine. Para entender más fácil os dejo un código en Python:
a='a=%s;print a%%`a`';print a%`a`
Así que supongo que lo podréis hacer en pocas líneas de código.,
HOLA!!!
.:WindHack:. !!! Ojo, los codigos solo se podian entregar despues del 26, eso es una gran ayuda y le quita la gracia, igual ya lo resolvi yo pero para que quites el codigo.
(aunque no sepan python igual lo van a entender).
GRACIAS POR LEER!!!
Cita de: 79137913 en 21 Febrero 2011, 19:46 PM
HOLA!!!
.:WindHack:. !!! Ojo, los codigos solo se podian entregar despues del 26, eso es una gran ayuda y le quita la gracia, igual ya lo resolvi yo pero para que quites el codigo.
(aunque no sepan python igual lo van a entender).
GRACIAS POR LEER!!!
El código es de Wikipedia, cualquiera que haya leído el mensaje de
Novlucker buscará y encontrará ese y muchos códigos más. Además es Python, en VBasic sería MUY diferente. ;)
Cita de: LeandroA en 21 Febrero 2011, 19:14 PM
voy a hacer odios sordo a eso porque es parte del metodo que utilize, seguramente voy por mal camino. :-\
Leandro, ni te molestes en mostrar el codigo de la interfaz del formulario, no se hace asi, es solo un
Sub Main(), es mas en 2 lineas en algunos lenguajes se hace, busca ejemplos de Quine en C++ o C# ahi vas a ver la logica de como se hacen, cuando lo veas vos lo haces en 2 lineas :P
pero olvidate de mostrar codigo de eventos, formulario, o de todo el proyecto como se penso al principio, es solo una funcion que devuelve su mismo codigo nada mas.
ya hice uno, 4 lineas de codigo, cortita pero efectiva, la logica que usa es de los quines que hay...
saludos.
@WindHack
Como la cagas.
Dulces Lunas!¡.
jjaja ;D
Cita de: BlackZeroX▓▓▒▒░░ en 22 Febrero 2011, 04:59 AM
@WindHack
Como la cagas.
Dulces Lunas!¡.
No lo creo, porque simplemente reiteré lo ya dicho por otros usuarios:
Cita de: Novlucker en 19 Febrero 2011, 23:21 PM
Quine :-*
Cita de: seba123neo en 21 Febrero 2011, 23:33 PM
busca ejemplos de Quine en C++ o C# ahi vas a ver la logica de como se hacen, cuando lo veas vos lo haces en 2 lineas :P
Daba igual haber puesto el código o no ponerlo. A fin de cuentas todos saben usar
Google, y la búsqueda no tardaría ni un minuto. Pero en todo caso, esto es VisualBasic, y NUNCA he visto un Quine en ese lenguaje.
Ademas creo q si alguien quiere hacer el reto no se fijara en google ya q la gracia es pensarlo sin buscar nada, con lo q ya saben
Cita de: .:WindHack:. en 22 Febrero 2011, 18:04 PM
No lo creo, porque simplemente reiteré lo ya dicho por otros usuarios:
@WindHack metiche...
Debido a esto, publico mi codigo ya no tiene caso ahora el limite de tiempo,
La parte comentada es mi codigo resultante.
Sub main(): Const s As String = "Sub main(): Const s As String = @: msgbox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub": MsgBox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub
'Sub main(): Const s As String = "Sub main(): Const s As String = @: msgbox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub": MsgBox Replace$(s, Chr(64), Chr(34) & s & Chr(34)): End Sub
Dulces Lunas!¡.
@BlackZeroX:
- Dime como quieras.
Uhmmm, por lo que veo, sólo valen los comentarios de algunos pocos, los otros si son delito y lo peor, pero bueno, qué se va a hacer. En fin, gracias y suerte.,
Dios mío, que gilipollez... Como podéis meteros con WindHack? Con una simple búsqueda en Google se puede obtener ese código y cientos más :¬¬, me parece patético.
PD: Siento el offtopic, pero no he podido evitarlo.
?¿?¿ eso era? yo pense en otra cosa totalmente diferente.
este es el mio
http://rapidshare.com/files/449359444/ShowCode.zip
por eso si lo ven se daran cuenta porque me referia al los eventos y todas las cosas, lo que hace es leer todos los modulos, formularios, clase, etc en el ide luego los almacena en el PropertyBag de un usercontrol, luego cuando se ejecuta tanto sea compilado como desde el IDE muestra lo almacenado en el PropertyBag (que es parte del mismo proyecto)
Saludos.
.
Patetico es VER a alguien que se mete en una "conversacion" que le parece patetica al no tener nada mejor que hacer y al final salir espinada.
por otro lado y volviendo
@LeandroACita de: BlackZeroX▓▓▒▒░░ en 19 Febrero 2011, 09:17 AM
* NO VALE LEER ARCHIVOS EXTERNOS de ninguna indole.
Dulces Lunas!¡.
Sub main(): a = "Sub main(): a = ": b = ": MsgBox a & Chr$(34) & a & Chr$(34) & Chr$(58) & Chr$(32) & Chr$(98) & Chr$(32) & Chr$(61) & Chr$(32) & Chr$(34) & b & Chr$(34) & b: End Sub": MsgBox a & Chr$(34) & a & Chr$(34) & Chr$(58) & Chr$(32) & Chr$(98) & Chr$(32) & Chr$(61) & Chr$(32) & Chr$(34) & b & Chr$(34) & b: End Sub
Bueno ese era el mio... mas largo :-\
HOLA!!!
Mi codigo es un poco diferente a los suyos :P
(Y a mi gusto queda mas lindo :P con los VbTab y demas XD)
[Conste que no consulte fuentes externas]
[00 LINEAS]Codigo 1:
[15 LINEAS]Codigo 2: (Con declaraciones)
Private Sub Form_Load()
Dim PRIN As String
Dim X As Long
Form1.AutoRedraw = True
Const CODIGO As String = "Private Sub Form_Load()$Dim PRIN As String$Dim X As Long$ Form1.AutoRedraw = True$ Const CODIGO As String = +%+$ For X = 1 To Len(CODIGO)$ '36*vbNewLine$ '37*CODIGO$ '43*Chr(34)$ '39*+If Mid(CODIGO, X, 1) = Chr(+$ '42*+) Then PRIN = PRIN & +$ If Asc(Mid(CODIGO, X, 1)) > 43 Or Mid(CODIGO, X, 1) = +(+ Or Mid(CODIGO, X, 1) = +)+ Or Mid(CODIGO, X, 1) = + + Or Mid(CODIGO, X, 1) = " & " Then PRIN = PRIN & Mid(CODIGO, X, 1)$ Next$ Print PRIN$End Sub"
For X = 1 To Len(CODIGO)
If Mid(CODIGO, X, 1) = Chr(36) Then PRIN = PRIN & vbNewLine
If Mid(CODIGO, X, 1) = Chr(37) Then PRIN = PRIN & CODIGO
If Mid(CODIGO, X, 1) = Chr(43) Then PRIN = PRIN & Chr(34)
If Mid(CODIGO, X, 1) = Chr(39) Then PRIN = PRIN & "If Mid(CODIGO, X, 1) = Chr("
If Mid(CODIGO, X, 1) = Chr(42) Then PRIN = PRIN & ") Then PRIN = PRIN & "
If Asc(Mid(CODIGO, X, 1)) > 43 Or Mid(CODIGO, X, 1) = "(" Or Mid(CODIGO, X, 1) = ")" Or Mid(CODIGO, X, 1) = " " Or Mid(CODIGO, X, 1) = "&" Then PRIN = PRIN & Mid(CODIGO, X, 1)
Next
Print PRIN
End Sub
[13 LINEAS]Codigo 3: (Sin declaraciones)
Private Sub Form_Load()
Form1.AutoRedraw = True
CODIGO = "Private Sub Form_Load()$ Form1.AutoRedraw = True$ CODIGO = +%+$ For X = 1 To Len(CODIGO)$ '36*vbNewLine$ '37*CODIGO$ '43*Chr(34)$ '39*+If Mid(CODIGO, X, 1) = Chr(+$ '42*+) Then PRIN = PRIN & +$ If Asc(Mid(CODIGO, X, 1)) > 43 Or Mid(CODIGO, X, 1) = +(+ Or Mid(CODIGO, X, 1) = +)+ Or Mid(CODIGO, X, 1) = + + Or Mid(CODIGO, X, 1) = +&+ Then PRIN = PRIN & Mid(CODIGO, X, 1)$ Next$ Print PRIN$End Sub"
For X = 1 To Len(CODIGO)
If Mid(CODIGO, X, 1) = Chr(36) Then PRIN = PRIN & vbNewLine
If Mid(CODIGO, X, 1) = Chr(37) Then PRIN = PRIN & CODIGO
If Mid(CODIGO, X, 1) = Chr(43) Then PRIN = PRIN & Chr(34)
If Mid(CODIGO, X, 1) = Chr(39) Then PRIN = PRIN & "If Mid(CODIGO, X, 1) = Chr("
If Mid(CODIGO, X, 1) = Chr(42) Then PRIN = PRIN & ") Then PRIN = PRIN & "
If Asc(Mid(CODIGO, X, 1)) > 43 Or Mid(CODIGO, X, 1) = "(" Or Mid(CODIGO, X, 1) = ")" Or Mid(CODIGO, X, 1) = " " Or Mid(CODIGO, X, 1) = "&" Then PRIN = PRIN & Mid(CODIGO, X, 1)
Next
Print PRIN
End Sub
GRACIAS POR LEER!!!