Недостающие цитаты: Visual Basic (для приложений) - PullRequest
7 голосов
/ 21 апреля 2011

Сегодня я просмотрел несколько случайных статей о вундеркиндах в Википедии, чтобы получить свою ежедневную дозу бесполезных знаний. Я наткнулся на quines, которые являются программами, которые печатают свой собственный исходный код. Я обнаружил, что это отличный способ сделать так, чтобы мой мозг болел, поэтому я начал работать над Quine в VBA. У меня было две веские причины:

  1. Я не смог найти квинну, написанную на VBA
  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

Моя задача: можете ли вы сделать его еще короче (и, желательно, более неловким)?

Ответы [ 3 ]

7 голосов
/ 21 апреля 2011

Как насчет

Sub q() '//in mdl1
Debug.Print Workbooks(1).VBProject.VBComponents(5).CodeModule.Lines(1, 3)
End Sub
3 голосов
/ 03 июля 2015

Я не знаю, читал ли кто-нибудь эту ветку больше, но вот еще более короткая, основанная на квине das_weezul. Он не зависит от «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))
2 голосов
/ 05 июля 2018

Некоторые дальнейшие модификации ответа @ Dorian I приводят к тому, что количество байтов для VBA уменьшается до 77 байт

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

Ключевые приемы, позволяющие это сделатьиспользование символа 7,  над символом 35, # и использование добавления строк вместо объединения строк.

...