Ta łamigłówka programowa jest inspirowana innym pytaniem, które zostało tu zadane wczoraj, ale które zostało usunięte przez autora ...
Wyzwanie:
Utwórz wykonywalny plik binarny (plik binarny Windows .EXE lub Linux) za pomocą Visual C # (lub ulubionego C # IDE), który wypisuje następujący tekst na standardowe wyjście:
Main() is the main method of C# programs!
... bez użycia 4 kolejnych liter MAIN pojawiających się w dowolnym pliku źródłowym!
Uwagi:
- Jeśli twój kod źródłowy zawiera tekst
remainder
(na przykład), zawiera 4 kolejne litery GŁÓWNE, jednak jeśli zawieramxain
4 litery, nie będzie kolejnych, więcmxain
byłoby to dozwolone. Nie wolno uruchamiać żadnych programów poza C # IDE ani zmieniać ustawień C # IDE w celu uruchamiania innych programów (ale tych, które normalnie działałoby, takich jak kompilator C #).
W przeciwnym razie możesz po prostu powiedzieć: „Piszę program Pascal za pomocą C # IDE i wywołuję kompilator Pascal w krokach„ wstępnej kompilacji ”mojego projektu C #”.
To byłoby zbyt proste.
Użytkownicy IDE, które można rozszerzać za pomocą „wtyczek” (lub podobnych) lub którzy mają wbudowane edytory plików binarnych (edytory szesnastkowe), mieliby zbyt dużą przewagę nad użytkownikami innych IDE C #.
Dlatego te pióra nie powinny być również używane.
- Używanie innych edytorów innych niż ASCII (takich jak edytor okien dialogowych) jest wyraźnie dozwolone!
- Użytkownik zadający oryginalne pytanie zaproponował użycie odwrotnego ukośnika w nazwach funkcji w następujący sposób:
static void M\u0061in()
Ponieważ odpowiedź ta została już odczytana przez innych użytkowników, nie będzie już akceptowana! - Użytkownik zapytał, czy można po prostu wpisać plik .EXE do edytora kodu źródłowego i zapisać plik jako „.exe” zamiast „.cs”. Odpowiedź: Nie wątpię, że jest to możliwe, ponieważ zarówno prawidłowe pliki binarne systemu Windows, jak i Linux zawierają bajty NUL. Jeśli jednak znajdziesz poprawny plik binarny, który można utworzyć w ten sposób, masz prawidłowe rozwiązanie.
Nazwa tej strony to „Programowanie łamigłówek i Code Golf” - jest to „Programming Puzzle”, a nie „Code Golf”: Wyzwaniem jest znalezienie działającego rozwiązania przed wszystkimi innymi użytkownikami, a nie znalezienie rozwiązania krótszego niż wszystkie inne rozwiązania.
Dlatego wygrywa pierwszy post opisujący działające rozwiązanie !
Powodzenia!
Nawiasem mówiąc: Mam rozwiązanie działające pod Visual C # Express 2010.
źródło
Odpowiedzi:
Interaktywne okno C #
Otwórz okno interaktywne C # (Widok> Inne okna> C # Interactive w Visual Studio 2015). Podejrzewam, że nie wszystkie IDE będą to miały.
To podejście wykonuje C # w oknie interaktywnym w celu utworzenia exe C #, który drukuje pożądany ciąg bez pisania autora
main
. Jako bonus, IL exe również nie zawieramain
.Uruchom następujący kod w oknie interaktywnym
Użyj,
Environmnent.CurrentDirectory
aby zobaczyć, gdzie utworzono plik exe. Uruchom go, aby obserwować pożądaną moc wyjściową.Wynikowa IL:
źródło
Aplikacja WPF
Utwórz nową aplikację WPF.
Zastąpić wszystkie wystąpienia
Main
zMeow
Zmień nazwę
MainWindow.xaml
naMeowWindow.xaml
. To automatycznie zmieni nazwęMainWindow.xaml.cs
naMeowWindow.xaml.cs
.We właściwościach projektu zmień Typ danych wyjściowych na,
Console Application
aby konsola została utworzona.Dodaj zapis w konsoli dla żądanego ciągu wyjściowego w swoim
MeowWindow
konstruktorzeCtrl + Shift + F, aby potwierdzić, że nie ma
main
nigdzie w katalogu źródłowym.F5 / skompiluj i uruchom.
Jak to działa
W przypadku aplikacji WPF program Visual Studio generuje metodę,
obj\Debug\App.g.cs
która zawiera tęMain
metodę. WygenerowanyMain
tworzy instancję aplikacji WPF i uruchamia ją.źródło
Tylko jako odniesienie
Mój pomysł był podobny do drugiego pomysłu „mleka”:
Znajdź sposób, aby IDE wykonało kod i zapisało plik wykonywalny na dysku.
Ja wyraźnie wspomniałem o plikach binarnych Windows i Linux, ponieważ myślałem o zapisaniu pliku binarnego .EXE,
System.IO.File.WriteAllBytes()
aby nie był to plik .NET EXE.Mój problem polegał na tym, że VS Express 2010 wydaje się nie mieć interaktywnej konsoli, więc musiałem znaleźć zamiennik - znalazłem następujące:
Utwórz projekt DLL z oknem dialogowym i kontrolką niestandardową; skompiluj projekt i dodaj niestandardową kontrolkę do okna dialogowego. Edytor okien dialogowych wywoła następnie kod niestandardowego elementu sterującego - w tym kodzie możesz zapisać plik .EXE na dysku ...
źródło