首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[休闲代码]自各儿输出自己,路过有分

2011-12-15 
[休闲代码]自己输出自己,路过有分刚才在水区看到一个有点意思的题目:程序运行后输出的结果就是程序本身一

[休闲代码]自己输出自己,路过有分
刚才在水区看到一个有点意思的题目:
程序运行后输出的结果就是程序本身一模一样的源代码
第一个调试通过的30分,之后通过的10分,最简短的加10分,有创意的加10分
余下散掉

(限C#代码,最好是控制台程序)

[解决办法]
UP
[解决办法]
ding!
[解决办法]
C#还没接触!帮顶!
[解决办法]
路过
[解决办法]
结果就是程序本身一模一样的源代码
完全不可能. 逻辑上说不过去
[解决办法]
不会 只能想到把.cs文件从头到尾输出一便:)
[解决办法]
//输出自己
//VC6下通过

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream ifs(__FILE__);
cout < < ifs.rdbuf();
ifs.close();
}
[解决办法]
关注~
有意思~
[解决办法]
拿分走人
[解决办法]
赚点分啊....
[解决办法]
up
[解决办法]
不会 只能想到把.cs文件从头到尾输出一便

同意这个
我只想的到这个,如果没有源码??
呵呵,貌似是不可能的阿
[解决办法]
mark
[解决办法]
up
[解决办法]
Reflector...Reflector...Reflector...

不过俺这么懒...是不愿动脑筋写这个代码的...
[解决办法]
哈哈,有分接就行了,其它不管
[解决办法]
程序运行后输出的结果就是程序本身一模一样的源代码

----------------------------------------------------
你这样写,我想很多人会像我那样输出的,呵呵,

有意思,继续关注!
[解决办法]
[休闲代码]自己输出自己,路过接分
[解决办法]
mark
[解决办法]
哈哈,有分接就行了,其它不管

[解决办法]
static void Main(string[] args)
{
string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
path = path.Replace( "\\bin\\Debug ", " ") + "Program.cs ";
if (System.IO.File.Exists(path) == true)
{
System.IO.StreamReader stream = new System.IO.StreamReader(path);
string mystring;
mystring = stream.ReadToEnd();
Console.Write(mystring);
}
System.Console.ReadKey();
}
[解决办法]
楼上的牛,有创意...
[解决办法]
static void Main(string[] args)


{
string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
path = path.Replace( "\\bin\\Debug ", " ") + "Program.cs ";
if (System.IO.File.Exists(path) == true)
{
System.IO.StreamReader stream = new System.IO.StreamReader(path);
string mystring;
mystring = stream.ReadToEnd();
Console.Write(mystring);
stream.Close();
}
System.Console.ReadKey();
}
[解决办法]
有意思!!
[解决办法]
可能吗??
要是做出来,够能耐的~~~
[解决办法]
什么来的?
[解决办法]
我顶。。。。。。。。。
[解决办法]
牛人太多了!
[解决办法]
关注..
[解决办法]
学习
[解决办法]
关注,顶了在说
[解决办法]
纯粹路过...
[解决办法]
给点思路
[解决办法]
up
[解决办法]
UP
[解决办法]
看过.
[解决办法]
晕,这样
[解决办法]
那么一长段 什么意思啊
[解决办法]
不懂C#,jf~
[解决办法]
想法不错啊…………



[解决办法]
mark
[解决办法]
虽然,我想不出但我相信会有高人可以做到的。
[解决办法]
路过
[解决办法]
mark
[解决办法]
路过
[解决办法]
关注。顺分
[解决办法]
.Net虽然不像JAVA直接源代码执行,但是其代码是可以逆转换的,解析之初是IL代码,然后能映射为C#代码,现在就有很知名的程序专门逆向.Net工程。
但是做到和源代码一模一样是不可能的,只能做到功能上完全一样,甚至成员名称也一样,所以为防止逆向工程侵害版权,才有混淆器的出现,混淆器将所有成员以无意义的名称重命名,以给逆转者造成阅读障碍。
[解决办法]
不大可能吧。
[解决办法]
即使 Reflector 之后也不是原原本本的
[解决办法]
贴答案. . 感觉就是先有鸡还是先有蛋的问题了!
------解决方案--------------------


反正逻辑上不行 除了自己输出自己
[解决办法]
用序列化
[解决办法]
using System;

class PrintSource
{
static void Main()
{
string s = "using System;{0}{0}class PrintSource{0}{2}{0} static void Main(){0} {2}{0} string s = {1}{4}{1};{0} Console.WriteLine(s, (char)10, (char)34, (char)123, (char)125, s);{0} {3}{0}{3} ";
Console.WriteLine(s, (char)10, (char)34, (char)123, (char)125, s);
}
}
[解决办法]
来学习
[解决办法]
jf
[解决办法]
路过 顶
[解决办法]
果然有猛的~~
[解决办法]
鹿过
[解决办法]
在控制台把自已的代码弄成字符串显示出来,取巧...
[解决办法]
思路是把源代码复制 然后重命名 成 txt格式的 然后读取
应该是这样了的
[解决办法]
象反汇编一样,你能把可执行文件反汇编成高级语言? 如果行的话 这应该没问题吧...
[解决办法]
不过如果是 C# 搞懂 公共语言运行 库就OK 了!~
[解决办法]
就是照着c语言版本写的 :)
[解决办法]
专业路过~
[解决办法]
没什么有创意的想法
[解决办法]
很多人误解这道题了,我想这道题不是什么技术高深的问题,
不是叫你反汇编,反MIL,读取源文件==,
纯粹就是一道技巧题
一但你Console.WriteLine( "你的代码 ")
那么在 "你的代码 "里又要包含 "Console.WriteLine( "你的代码 ") ",而这里的

"你的代码 "就会造成两面对着的镜一样,会无限反射, 即自己照不出自己
需要利用一定的字符操作的技巧才能完成这道题.
例如 fish_autumn(Autumn) 的代码.
[解决办法]
有那么难啊?...IO操作ReadLine不就可以了?
[解决办法]
看了 fish_autumn(Autumn) 的代码
成功的原因有两点
1.在输出的语句使用了 {0} {1} {2]...
2.在输出双引号时使用了 ASCII 码

第一点使得他能自己输出自己
只要Console.WriteLine(s, ... s);
第二点免去了转义字符带来的麻烦

你是可以想象在s= "s = {0}...Console.WriteLine(s, \ "\ "\ " s); ";
Console.WriteLine(s, "\ " " s);

在s里的 \ "\ "\ " 与代码的 "\ " " 产生不一致性
[解决办法]
应该是
s= "s = {0}...Console.WriteLine(s, \ "\\\ "\ " s); ";
Console.WriteLine(s, "\ " " s);

在s里的 \ "\\\ "\ " 与代码的 "\ " " 产生不一致性


[解决办法]
再更正

成功的原因有两点
1.在输出的语句使用了 {0} {1} {2]...
2.在输出符号时使用了 ASCII 码
[解决办法]
路过

[解决办法]
呵呵,学习一下

[解决办法]
最好能克隆一个.
[解决办法]
hehe
[解决办法]
没看明白LZ给出的代码,
" string[] codeLines = new string[] { ",
" ",
" }; ",
这个地方有输出时是要将 " "替换掉的,但替换成什么样的字符串呢?替换了会不会和原代码一样呢?这里也存在迭代的问题吧??

[解决办法]
如果用console输出字符串代码。 而不是反编译代码的话 ,根本无法实现的。

就和俩镜子对照一样。 无限反射。就和数字可以无限大一样。

[解决办法]
LS 运行一下
fish_autumn(Autumn) 的代码, 他实现了
[解决办法]
纯熟路过~

[解决办法]
程序写的妙,是我没想到的。基本思路理解,琢磨了半天
string s = "using System;{0}{0}class PrintSource{0}{2}{0} static void Main(){0} {2}{0} string s = {1}{4}{1};{0} Console.WriteLine(s, (char)10, (char)34, (char)123, (char)125, s);{0} {3}{0}{3} ";
Console.WriteLine(s, (char)10, (char)34, (char)123, (char)125, s);

只明白了一半,也许是语法不过关,谁来耐心解释一下,每个句读。
不甚感激啊。
这题目很有意思。
[解决办法]
根据LZ的给出的代码提示,下面的代码测试通过
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] codeLines = new string[] {
"using System; ",
"using System.Text; ",
"namespace ConsoleApplication1 ",
"{ ",
" class Program ",
" { ",
" static void Main(string[] args) ",
" { ",
" string[] codeLines = new string[] { ",
" ",
" }; ",
" foreach (string codeLine in codeLines) ",
" { ",
" if (codeLine ==string.Empty) ",
" { ",
" foreach (string constLine in codeLines) ",
" { ",
@ " if(constLine.IndexOf( '+ ') > =0) ",
@ " Console.WriteLine( new string( ' ',10) + '\x40 '.ToString() + '\x22 '+ constLine + '\x22 '+ '\x2C '); ",
" else ",
@ " Console.WriteLine( new string( ' ',10) + '\x22 '+ constLine + '\x22 ' + '\x2C '); ",
" } ",
" } ",
" Console.WriteLine(codeLine); ",
" } ",
" } ",
" } ",
"} ",



};
foreach (string codeLine in codeLines)
{
if (codeLine == string.Empty )
{
foreach (string constLine in codeLines)
{
if(constLine.IndexOf( '+ ') > =0)
Console.WriteLine( new string( ' ',10) + '\x40 '.ToString() + '\x22 '+ constLine + '\x22 '+ '\x2C ');
else
Console.WriteLine( new string( ' ',10) + '\x22 '+ constLine + '\x22 ' + '\x2C ');
}
}
Console.WriteLine(codeLine);
}
}
}

}


[解决办法]
俺也路过,接分。 :)
[解决办法]
你自己拿着照相机照相,你能把相机也一起照进来吗?

[解决办法]
string s = "using System;{0}{0}class PrintSource{0}{2}{0} static void Main(){0} {2}{0} string s = {1}{4}{1};{0} Console.WriteLine(s, (char)10, (char)34, (char)123, (char)125, s);{0} {3}{0}{3} ";

Console.WriteLine(s, (char)10, (char)34, (char)123, (char)125, s);

Console.WriteLine() 时:
(char)10: 即 \n ,替换s中的{0}
(char)34: 即 " ,替换s中的{1}
(char)123:即 { ,替换s中的{2}
(char)125:即 } ,替换s中的{3}
s 本身替换s中的{4}

[解决办法]
果然牛叉
[解决办法]
路过
[解决办法]
我不得不说,实在太妙了。~
[解决办法]
学习~
[解决办法]
...............................
用反射得到当前运行的assembliy
用Sharpdevelop的addin插件思路找到当前运行的CS文件
参考楼上某兄的方法将cs文件路径替换

static void Main(string[] args)
{
string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
path = path.Replace( "\\bin\\Debug ", " ") + "Program.cs ";
if (System.IO.File.Exists(path) == true)
{
System.IO.StreamReader stream = new System.IO.StreamReader(path);
string mystring;
mystring = stream.ReadToEnd();
Console.Write(mystring);
}
System.Console.ReadKey();
}
[解决办法]
An old game!

http://www.nyx.net/~gthompso/quine.htm
http://www.cnblogs.com/Ninputer/archive/2006/04/04/366554.html
[解决办法]
那些字符串,是什么啊.
[解决办法]
果然很无聊............
[解决办法]
厉害~~~~~~~
[解决办法]
学习
[解决办法]
休闲代码]自己输出自己,路过接分,牛人真是多,只管接分学习中....
------解决方案--------------------


我是第100个 应该有1分吧 呵呵。..

热点排行