Эта программная головоломка вдохновлена другим вопросом, который был задан здесь вчера, но который был удален автором ...
Соревнование:
Создайте исполняемый двоичный файл (двоичный файл Windows .EXE или Linux) с помощью Visual C # (или вашей любимой C # IDE), который выводит следующий текст в стандартный вывод:
Main() is the main method of C# programs!
... без использования 4 последовательных букв MAIN, появляющихся в любом исходном файле!
Ноты:
- Если ваш исходный код содержит текст
remainder
(например), он содержит 4 последовательных буквы MAIN, однако, если он содержитmxain
4 буквы, они больше не будут последовательными, поэтомуmxain
это будет разрешено. Вам не разрешается запускать какие-либо программы, кроме C # IDE, а также не изменять настройки C # IDE для запуска других программ (кроме тех, которые он обычно запускает, таких как компилятор C #).
В противном случае вы можете просто сказать: «Я пишу программу на Pascal, используя C # IDE, и вызываю компилятор Pascal на этапах« pre-build »моего проекта на C #».
Это было бы слишком просто.
Пользователи IDE, которые могут расширяться с помощью «плагинов» (или аналогичных) или которые имеют встроенные редакторы двоичных файлов (hex-редакторы), будут иметь слишком большое преимущество перед пользователями других IDE C #.
Поэтому эти подвиги также не должны использоваться.
- Использование других не-ASCII-редакторов (таких как редактор диалоговых окон) явно разрешено!
- Пользователь, задающий первоначальный вопрос, предложил использовать обратную косую черту в именах функций, например, так:
static void M\u0061in()
поскольку этот ответ уже был прочитан другими пользователями, он больше не будет принят! - Пользователь спросил, будет ли разрешено просто вводить файл .EXE в редактор исходного кода и сохранять файл как «.exe» вместо «.cs». Ответ: Я не сомневаюсь, что это возможно, потому что и действительные двоичные файлы Windows и Linux содержат NUL-байты. Однако, если вы найдете правильный двоичный файл, который может быть создан таким образом, у вас есть правильное решение.
Название этого сайта - «Программирование головоломок и Code Golf» - это «Головоломка программирования», а не «Code Golf». Задача состоит в том, чтобы найти работающее решение перед всеми остальными пользователями, а не найти решение короче, чем все остальные. решения.
Поэтому первый пост, описывающий рабочее решение, побеждает !
Удачи!
Кстати: у меня есть решение, работающее под Visual C # Express 2010.
источник
Ответы:
C # Интерактивное окно
Откройте интерактивное окно C # («Вид»> «Другие окна»> «Интерактивный C #» в Visual Studio 2015). Я полагаю, что не все IDE будут иметь это.
Этот подход выполняет C # в Интерактивном Окне, чтобы создать C # exe, который печатает желаемую строку без того, чтобы автор когда-либо писал
main
. В качестве бонуса, ИЛ exe также не содержитmain
.Запустите следующий код в интерактивном окне
Используйте,
Environmnent.CurrentDirectory
чтобы увидеть, где был создан exe. Запустите его, чтобы увидеть желаемый результат.В результате ИЛ:
источник
Приложение WPF
Создайте новое приложение WPF.
Заменить все экземпляры
Main
сMeow
Переименовать
MainWindow.xaml
вMeowWindow.xaml
. Это автоматически переименуетMainWindow.xaml.cs
вMeowWindow.xaml.cs
.В свойствах проекта измените Тип вывода на,
Console Application
чтобы создать консоль.Добавьте консольную запись для нужной выходной строки в вашем
MeowWindow
конструктореCtrl + Shift + F, чтобы подтвердить, что нет
main
нигде в исходном каталоге.F5 / скомпилировать и запустить.
Как это работает
Для приложений WPF Visual Studio генерирует,
obj\Debug\App.g.cs
который содержитMain
метод. СгенерированныйMain
создает экземпляр вашего приложения WPF и запускает его.источник
Просто в качестве ссылки
Моя идея была похожа на вторую идею "молока":
Найдите способ, позволяющий среде IDE выполнять код и записывать исполняемый файл на диск.
Я явно упомянул двоичные файлы Windows и Linux, потому что думал о том, чтобы записать двоичный файл .EXE с использованием,
System.IO.File.WriteAllBytes()
чтобы он не обязательно был файлом .NET EXE.Моя проблема заключалась в том, что VS Express 2010, похоже, не имеет интерактивной консоли, поэтому мне пришлось искать замену - я обнаружил следующее:
Создать проект DLL с диалоговым окном и пользовательским элементом управления; скомпилируйте проект и добавьте пользовательский элемент управления в диалоговое окно. Редактор диалогового окна затем вызовет код пользовательского элемента управления - и в этом коде вы можете записать файл .EXE на диск ...
источник