7

今天我在维基百科上浏览了一些随机的极客文章,以获得我每天的无用知识。我偶然发现了 quines,它们是打印自己的源代码的程序。我发现这是一种让我的大脑受伤的好方法,所以我开始在 VBA 中研究一个 quine。我有两个很好的理由:

  1. 我找不到用 VBA 编写的 quine
  2. VBA 鼓励你编写笨拙的代码,这会让你的大脑受伤

这是我的杰作:

Sub q()
c = "Sub q();c = #;Debug.Print Replace(Replace(c, Chr(59), vbNewLine), Chr(35), Chr(34) & c & Chr(34));End Sub"
Debug.Print Replace(Replace(c, Chr(59), vbNewLine), Chr(35), Chr(34) & c & Chr(34))
End Sub

我的挑战:你能让它更短(最好更尴尬)吗?

4

3 回答 3

7

怎么样

Sub q() '//in mdl1
Debug.Print Workbooks(1).VBProject.VBComponents(5).CodeModule.Lines(1, 3)
End Sub
于 2011-04-21T13:22:08.287 回答
3

我不知道是否有人不再阅读此线程,但这里有一个更短的,基于 das_weezul 的 quine。它独立于“Option Explicit”(与 das_weezul 不同),并且独立于您正在使用的 Office 应用程序(即 Excel、Access、Word 等) - 与 Alex K 不同。在即时窗口中使用它 (Ctrl+G):

c="c=#:?replace(c,chr(35),chr(34) &c &chr(34))":?replace(c,chr(35),chr(34) &c &chr(34))
于 2015-07-03T13:53:34.843 回答
2

@Dorian I的响应的一些进一步修改使 VBA quine 的字节数下降到 77 个字节

c=Chr(34):q="c=Chr(34):q=:?Replace(q,Chr(7),c+q+c)":?Replace(q,Chr(7),c+q+c)

允许这种情况发生的关键技巧是在字符 35上使用字符 7 #, 以及使用字符串添加而不是字符串连接。

于 2018-07-05T13:04:30.297 回答