Teka-teki pemrograman ini terinspirasi oleh pertanyaan lain yang telah ditanyakan di sini kemarin tetapi yang telah dihapus oleh penulis ...
Tantangan:
Buat biner yang dapat dieksekusi (Windows .EXE atau Linux binary) menggunakan Visual C # (atau IDE C # favorit Anda) yang mencetak teks berikut ke output standar:
Main() is the main method of C# programs!
... tanpa menggunakan 4 huruf berturut-turut MAIN muncul di file sumber apa pun!
Catatan:
- Jika kode sumber Anda berisi teks
remainder
(misalnya) berisi 4 huruf berturut-turut MAIN, namun jika mengandungmxain
4 huruf tidak akan berturut-turut lagi makamxain
akan diizinkan. Anda tidak diperbolehkan menjalankan program apa pun kecuali C # IDE atau mengubah pengaturan C # IDE untuk menjalankan program lain (tetapi yang biasanya dijalankan seperti kompiler C #).
Kalau tidak, Anda bisa mengatakan: "Saya menulis program Pascal menggunakan C # IDE dan memanggil kompilator Pascal dalam langkah-langkah 'pra-bangun' proyek C # saya".
Ini terlalu sederhana.
Pengguna IDE yang dapat memperluas menggunakan "plug-in" (atau serupa) atau yang memiliki editor file biner (hex-editor) akan memiliki keuntungan terlalu besar dibandingkan pengguna C # IDE lainnya.
Oleh karena itu fitur ini juga tidak boleh digunakan.
- Menggunakan Editor non-ASCII lainnya (seperti editor jendela dialog) diizinkan secara eksplisit!
- Pengguna yang mengajukan pertanyaan asli yang diajukan menggunakan backslash dalam nama fungsi seperti ini:
static void M\u0061in()
Karena jawaban ini telah dibaca oleh pengguna lain, maka tidak akan diterima lagi! - Seorang pengguna bertanya apakah itu akan diizinkan untuk cukup ketik file .EXE ke dalam editor kode sumber dan untuk menyimpan file sebagai ".exe" bukan ".cs". Jawaban: Saya ragu ini mungkin karena binari Windows dan Linux yang valid mengandung byte NUL. Namun jika Anda menemukan biner yang valid yang dapat dibuat dengan cara ini, Anda memiliki solusi yang valid.
Nama situs ini adalah "Programming Puzzles & Code Golf" - ini adalah "Programming Puzzle", bukan "Code Golf": Tantangannya adalah untuk menemukan solusi yang berfungsi sebelum semua pengguna lain, bukan untuk menemukan solusi yang lebih pendek daripada yang lainnya solusi.
Karenanya posting pertama yang menggambarkan solusi yang berfungsi akan menang !
Semoga berhasil!
Omong-omong: Saya punya solusi yang bekerja di bawah Visual C # Express 2010.
sumber
Jawaban:
C # Jendela Interaktif
Buka C # Interactive Window (Lihat> Windows Lainnya> C # Interactive di Visual Studio 2015). Saya kira tidak semua IDE memiliki ini.
Pendekatan ini mengeksekusi C # di Window Interaktif untuk membuat exe C # yang mencetak string yang diinginkan tanpa penulis pernah menulis
main
. Sebagai bonus, IL exe juga tidak mengandungmain
.Jalankan kode berikut di Jendela Interaktif
Gunakan
Environmnent.CurrentDirectory
untuk melihat di mana exe dibuat. Jalankan untuk mengamati output yang diinginkan.IL yang dihasilkan:
sumber
Aplikasi WPF
Buat aplikasi WPF baru.
Ganti semua instance
Main
denganMeow
Ganti nama
MainWindow.xaml
menjadiMeowWindow.xaml
. Ini akan secara otomatis mengubah namaMainWindow.xaml.cs
menjadiMeowWindow.xaml.cs
.Di properti proyek, ubah tipe Output hingga
Console Application
konsol dibuat.Tambahkan konsol tulis untuk string keluaran yang diinginkan di
MeowWindow
konstruktor AndaCtrl + Shift + F untuk mengonfirmasi tidak ada
main
tempat di direktori sumber.F5 / kompilasi dan jalankan.
Bagaimana itu bekerja
Untuk aplikasi WPF, Visual Studio menghasilkan
obj\Debug\App.g.cs
yang berisiMain
metode ini. Yang dihasilkanMain
membuat instance aplikasi WPF Anda dan memulainya.sumber
Sama seperti referensi
Ide saya mirip dengan ide kedua "susu":
Temukan cara untuk membiarkan IDE mengeksekusi kode dan menulis executable ke disk.
Saya secara eksplisit menyebutkan binari Windows dan Linux karena saya berpikir untuk menulis file .EXE biner
System.IO.File.WriteAllBytes()
sehingga tidak perlu menjadi file .NET EXE.Masalah saya adalah bahwa VS Express 2010 tampaknya tidak memiliki konsol interaktif sehingga saya harus mencari penggantinya - saya menemukan yang berikut:
Buat proyek DLL dengan jendela dialog dan kontrol khusus; mengkompilasi proyek dan menambahkan kontrol khusus ke jendela dialog. Editor jendela dialog kemudian akan memanggil kode kontrol khusus - dan dalam kode ini Anda dapat menulis file .EXE ke disk ...
sumber