সি # হ'ল মূল সমস্যা


10

এই প্রোগ্রামিং ধাঁধাটি আরেকটি প্রশ্ন দ্বারা অনুপ্রাণিত হয়েছে যা গতকাল এখানে জিজ্ঞাসা করা হয়েছিল তবে যা লেখক মুছে ফেলেছিলেন ...

চ্যালেঞ্জ:

ভিজ্যুয়াল সি # (বা আপনার পছন্দসই সি # আইডিই) ব্যবহার করে একটি এক্সিকিউটেবল বাইনারি (উইন্ডোজ। এক্সই বা লিনাক্স বাইনারি) তৈরি করুন যা নিম্নলিখিত পাঠ্যটিকে স্ট্যান্ডার্ড আউটপুটে ছাপায়:

Main() is the main method of C# programs!

... কোনও উত্স ফাইলটিতে টানা 4 অক্ষর MAIN উপস্থিত না করেই!

মন্তব্য:

  • যদি আপনার উত্স কোডটিতে পাঠ্য থাকে remainder(উদাহরণস্বরূপ) এটিতে পরপর 4 টি অক্ষর মেইন থাকে, তবে এতে যদি 4 টি বর্ণ থাকে তবে mxainপরবর্তীতে আর কোনও mxainঅনুমতি দেওয়া হবে না।
  • অন্যান্য প্রোগ্রাম চালানোর জন্য আপনাকে সি # আইডিই বা সি # আইডিইর সেটিংস পরিবর্তন করার অনুমতি নেই (তবে এটি সাধারণত সি # সংকলক হিসাবে চালিত হবে)।

    অন্যথায় আপনি কেবল বলতে পারেন: "আমি সি # আইডিই ব্যবহার করে একটি পাস্কাল প্রোগ্রাম লিখি এবং আমার সি # প্রকল্পের 'প্রাক-বিল্ড' পদক্ষেপগুলিতে পাস্কল সংকলককে অনুরোধ করি"।

    এটি খুব সহজ হবে।

  • একটি আইডিই ব্যবহারকারী যারা "প্লাগইনগুলি" (বা অনুরূপ) ব্যবহার করে প্রসারিত করতে পারেন বা বিল্ট-ইন বাইনারি ফাইল সম্পাদক (হেক্স-সম্পাদক) রয়েছে তাদের অন্যান্য সি # আইডিই ব্যবহারকারীর উপর খুব বড় সুবিধা হবে।

    সুতরাং এই বৈশিষ্ট্যগুলিও ব্যবহার করা উচিত নয়।

  • অন্যান্য নন-এএসসিআইআই-এডিটর (যেমন ডায়ালগ উইন্ডো সম্পাদক) ব্যবহারের স্পষ্টরূপে অনুমোদিত!
  • ব্যবহারকারী ব্যাকস্ল্যাশটি ঠিক একইভাবে ফাংশন নাম ব্যবহার করে প্রস্তাবিত মূল প্রশ্ন জিজ্ঞাসা করছে: static void M\u0061in()কারণ এই উত্তরটি ইতিমধ্যে অন্য ব্যবহারকারীরা পড়েছেন এটি আর গ্রহণযোগ্য হবে না!
  • একজন ব্যবহারকারী জিজ্ঞাসা করেছেন যে এটি সোর্স কোড এডিটরটিতে একটি .EXE ফাইল টাইপ করার অনুমতি দেয় এবং ".cs" এর পরিবর্তে ফাইলটিকে ".exe" হিসাবে সংরক্ষণ করার অনুমতি দেওয়া হবে কিনা। উত্তর: আমি সন্দেহ করি না যে এটি সম্ভব কারণ বৈধ উইন্ডোজ এবং লিনাক্স বাইনারি উভয়ই নুল বাইট থাকে। তবে আপনি যদি কোনও বৈধ বাইনারি খুঁজে পান যা এইভাবে তৈরি করা যায় তবে আপনার একটি বৈধ সমাধান রয়েছে।

এই সাইটের নাম "প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ" - এটি একটি "প্রোগ্রামিং ধাঁধা", "কোড গল্ফ" নয়: চ্যালেঞ্জটি হ'ল অন্য সকল ব্যবহারকারীর সামনে একটি কাজের সমাধান খুঁজে পাওয়া, অন্য সকলের চেয়ে কম সমাধান খুঁজে না পাওয়া সমাধান।

সুতরাং একটি কার্যক্ষম সমাধান বর্ণনা প্রথম পোস্ট জয় !

শুভকামনা!

উপায় দ্বারা: আমার কাছে ভিজ্যুয়াল সি # এক্সপ্রেস 2010 এর অধীনে একটি সমাধান কাজ করছে।


2
কোনও এক্সিকিউটেবলের সরাসরি টাইপ করতে আমার পাঠ্য (বা বাইনারি) সম্পাদক হিসাবে আমার সি # আইডিই ব্যবহার করা থেকে আমাকে কী থামায়?
feersum

2
কোন উত্তর চ্যালেঞ্জ জিতেছে? প্রথম বৈধ উত্তর? আপনার বিজয়ী শর্তটি উল্লেখ করা উচিত
জেমস

আইডিইতে যদি কিছু হেক্সাডেসিমাল সম্পাদক বা অনুরূপ থাকে তবে এটির অনুমতি দেওয়া হবে না। আপনি যদি কোনও বৈধ বাইনারি ফাইল টাইপ করতে ASCII পাঠ্য সম্পাদকটি ব্যবহার করতে পরিচালনা করেন তবে এটি অনুমোদিত হবে। নোট করুন যে একটি বৈধ বাইনারি ফাইলের মধ্যে 0x00 থেকে 0x1F রেঞ্জের বাইট রয়েছে!
মার্টিন রোজনউ

2
আমি মনে করি এটি সামগ্রিকভাবে একটি আকর্ষণীয় চ্যালেঞ্জ। "মেইন ছাড়াই সি # প্রোগ্রাম লিখুন"। তবে বেশিরভাগ নিয়ম হ'ল কোন সরঞ্জাম / আইডিই নির্দিষ্ট ব্যবহারগুলি নিষিদ্ধ করা এবং নিষিদ্ধ করার বিষয়ে। আমি আরও প্রোগ্রামিং ধাঁধা দেখতে চাই, (কোড-গল্ফের বিপরীতে) তবে এটির একটি অপ্রকাশিত। আমি পরের বার স্যান্ডবক্স ব্যবহার করার পরামর্শ দেব ।
জেমস

4
... পরের বার স্যান্ডবক্সটি বিবেচনা করুন ।
বিড়াল 21

উত্তর:


5

সি # ইন্টারেক্টিভ উইন্ডো

সি # ইন্টারেক্টিভ উইন্ডোটি খুলুন (দেখুন> অন্যান্য উইন্ডোজ> সি # ইন্টারেক্টিভ ভিজুয়াল স্টুডিও 2015)। আমি মনে করি সমস্ত আইডিই এর কাছে নেই।

এই পদ্ধতির কোনও সি # উদাহরণ তৈরির জন্য ইন্টারেক্টিভ উইন্ডোতে সি # কার্যকর করে যা কোনও লেখক কখনও লেখা ছাড়াই পছন্দসই স্ট্রিং মুদ্রণ করে main। বোনাস হিসাবে, এক্সের আইএলও থাকে না main

ইন্টারেক্টিভ উইন্ডোতে নিম্নলিখিত কোডটি চালান

using System.Reflection;
using System.Reflection.Emit;
var appMeow = (dynamic)System.Type.GetType("System.AppDom" + "ain").GetProperty("CurrentDom" + "ain", BindingFlags.GetProperty | BindingFlags.Static | BindingFlags.Public).GetValue(null);
var asmName = new AssemblyName("MEOW");
var asmBuilder = appMeow.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);
var module = asmBuilder.DefineDynamicModule("MEOW", "MEOW.exe");
var typeBuilder = module.DefineType("Meow", TypeAttributes.Public);
var entryPoint = typeBuilder.DefineMethod("EntryPoint", MethodAttributes.Static | MethodAttributes.Public);
var il = entryPoint.GetILGenerator();
il.Emit(OpCodes.Ldstr, "Meow() is the meow method of C# programs!");
il.Emit(OpCodes.Ldstr, "eow");
il.Emit(OpCodes.Ldstr, "ain");
il.EmitCall(OpCodes.Call, typeof(string).GetMethod("Replace", new[] { typeof(string), typeof(string) }), null);
il.EmitCall(OpCodes.Call, typeof(Console).GetMethod("Write", new[] { typeof(string) }), null);
il.Emit(OpCodes.Ret);
var type = typeBuilder.CreateType();
asmBuilder.SetEntryPoint(type.GetMethods()[0]);
asmBuilder.Save("MEOW.exe");

Environmnent.CurrentDirectoryকোথায় এক্স তৈরি করা হয়েছে তা দেখতে ব্যবহার করুন । পছন্দসই আউটপুট পর্যবেক্ষণ করতে এটি চালান।

এখানে চিত্র বর্ণনা লিখুন

আইএল ফলাফল: এখানে চিত্র বর্ণনা লিখুন


আমি আসলে এটি আরও ভাল পছন্দ করি, তারপরে ডাব্লুপিএফ একটি, কারণ আপনার সমাবেশে আসলে আপনার কোনও মেইন () নেই।
hstde

আপনার সমাধান আকর্ষণীয়। এটি দ্বিতীয়টি তাই আপনি জিতবেন যদি ব্যবহারকারীরা আমাকে বোঝাতে পারেন যে প্রথম পোস্টটি কোনও বৈধ সমাধান নয় (কোন কারণেই))
মার্টিন রোজনউ

আপনি যদি আমাকে জিজ্ঞাসা করেন তবে কোন পোস্টটি জিতেছে তা আসলেই কিছু যায় আসে না, কারণ তারা উভয়ই একই ব্যবহারকারীর দ্বারা।
hstde

@hstde - দুঃখিত, আমি এটি দেখিনি। ধন্যবাদ।
মার্টিন রোজেনউ

@ মিল্ক আপনি দুটি বৈধ সমাধান পোস্ট করেছেন (ভাল, কিছু ব্যবহারকারীর প্রথমটির বিষয়ে সন্দেহ আছে) যাতে আপনি জিতে যান। অভিনন্দন।
মার্টিন রোসনাউ

3

ডাব্লুপিএফ অ্যাপ্লিকেশন

  1. একটি নতুন ডাব্লুপিএফ অ্যাপ্লিকেশন তৈরি করুন। এখানে চিত্র বর্ণনা লিখুন

  2. সকল উদাহরণ প্রতিস্থাপন Mainসঙ্গেMeow এখানে চিত্র বর্ণনা লিখুন

  3. পুনরায় নামকরণ MainWindow.xaml করুন MeowWindow.xaml। এই স্বয়ংক্রিয়ভাবে নামান্তর হবে MainWindow.xaml.csথেকে MeowWindow.xaml.cs

এখানে চিত্র বর্ণনা লিখুন

  1. প্রকল্পের বৈশিষ্ট্যগুলিতে, আউটপুট ধরণটি পরিবর্তন করুন Console Applicationযাতে কনসোল তৈরি হয়। এখানে চিত্র বর্ণনা লিখুন

  2. আপনার MeowWindowকনস্ট্রাক্টারে কাঙ্ক্ষিত আউটপুট স্ট্রিংয়ের জন্য কনসোল রাইট যুক্ত করুনএখানে চিত্র বর্ণনা লিখুন

  3. mainউত্স ডিরেক্টরিতে আর কোথাও নেই তা নিশ্চিত করতে Ctrl + Shift + F।এখানে চিত্র বর্ণনা লিখুন

  4. F5 / সংকলন এবং চালান। এখানে চিত্র বর্ণনা লিখুন

কিভাবে এটা কাজ করে

ডাব্লুপিএফ অ্যাপ্লিকেশনগুলির জন্য, ভিজ্যুয়াল স্টুডিও উত্পন্ন করে obj\Debug\App.g.csযার মধ্যে Mainপদ্ধতি রয়েছে । উত্পন্ন Mainআপনার ডাব্লুপিএফ অ্যাপ্লিকেশনটির উদাহরণ তৈরি করে এটি শুরু করে।


আকর্ষণীয় সমাধান। যে কেউ মনে করে যে এটি বৈধ সমাধান নয়? যদি কেউ মনে করেন যে এই পোস্টটি বৈধ নয় তবে দয়া করে একটি মন্তব্য পোস্ট করুন। অন্যথায় আমি এই সমাধানটিকে বিজয়ী হিসাবে ঘোষণা করব কারণ এটি অবশ্যই প্রথম পোস্ট করেছিল।
মার্টিন রোজনৌ

@ মার্টিনরোসেনাউ আমি অনুভব করি যেহেতু আপনি ডাব্লুপিএফ অ্যাপটি সংশোধন করতে পারলেন এবং একটি মূল পদ্ধতি থাকবে যা এটি অবৈধ, আরও

আমি কেবল দেখেছি যে উভয় উত্তর একই ব্যবহারকারী দ্বারা পোস্ট করা হয়েছিল। এক্ষেত্রে এই ব্যবহারকারী যেভাবেই জিততে পারবেন win
মার্টিন রোজেনউ

0

ঠিক যেমন একটি রেফারেন্স

আমার ধারণাটি "দুধ" এর দ্বিতীয় ধারণার অনুরূপ:

আইডিই কোড চালায় এবং ডিস্কে একটি এক্সিকিউটেবল লিখতে দেওয়ার জন্য একটি উপায় সন্ধান করুন।

আমি উইন্ডোজ এবং লিনাক্স বাইনারিগুলি স্পষ্টভাবে উল্লেখ করেছি কারণ আমি বাইনারি .EXE ফাইলটি ব্যবহার করার জন্য ভেবেছিলাম System.IO.File.WriteAllBytes()যাতে এটি প্রয়োজনীয়ভাবে একটি নেট নেট ফাইল না হয়।

আমার সমস্যাটি হ'ল ভিএস এক্সপ্রেস ২০১০-তে একটি ইন্টারেক্টিভ কনসোল নেই বলে মনে হচ্ছে এর জন্য আমাকে একটি প্রতিস্থাপন খুঁজে পেতে হয়েছিল - আমি নিম্নলিখিতটি পেয়েছি:

একটি ডায়ালগ উইন্ডো এবং একটি কাস্টম নিয়ন্ত্রণ দিয়ে একটি ডিএলএল প্রকল্প তৈরি করুন; প্রকল্পটি সংকলন করুন এবং ডায়ালগ উইন্ডোতে কাস্টম নিয়ন্ত্রণ যুক্ত করুন। ডায়ালগ উইন্ডো সম্পাদকটি তখন কাস্টম নিয়ন্ত্রণের কোডটি কল করবে - এবং এই কোডে আপনি .EXE ফাইলটি ডিস্কে লিখতে পারেন ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.