m3ph1st0s এর প্রোগ্রামিং ধাঁধা 3 (সি): "ইজি বাগ" [বন্ধ]


11

এটি আমার সি / সি ++ ধাঁধা সিরিজের তৃতীয়; আপনি যদি প্রথম 2 টি মিস করেন তবে তারা এখানে আছেন: (1) এম 3 এফ 1 স্টস এর প্রোগ্রামিং ধাঁধা 1 (সি ++) (2) এম 3 এফ 1 স্টেস এর প্রোগ্রামিং ধাঁধা 2 (সি ++): "হার্ড ডাক!"

আমার অবশ্যই বলতে হবে যে আমার ধাঁধা 100% আসল। যদি তা না হয় তবে আমি সর্বদা পাঠ্যে উল্লেখ করব। আমার তৃতীয় ধাঁধাটির 2 টি অংশ রয়েছে:

ধাঁধা 3.1

এই অংশটি (৩.১) আমার কোনও মূল ধাঁধা নয়, এটি কিছুটা ইন্টারনেট পৃষ্ঠা থেকে সংগ্রহ করা হয়েছে যা আমি কিছুক্ষণ আগে পড়েছি। আমি এটি এখানে আপনার একটি প্রাথমিক পয়েন্ট এবং একটি ওয়ার্ম-আপ হিসাবে ব্যবহার করি। এটি সমাধান করুন এবং তারপরে দ্বিতীয় অংশে যান।

কেউ "20" চিহ্নটি 20 বার মুদ্রণের চেষ্টা করেছিল এবং নিম্নলিখিত প্রোগ্রামটি নিয়ে আসে:

#include <stdio.h>
int main() {
   int i;
   int n = 20;
   for( i = 0; i < n; i-- )
      printf("+");
   return 0;
}

এটির প্রত্যাশিত ফলাফল না হওয়ার বিষয়টি সুস্পষ্ট - প্রোগ্রামটি কখনই শেষ হয় না। ঠিক কর! সহজ? এখন কেবলমাত্র একটি অক্ষর পরিবর্তন করে প্রোগ্রামটি ঠিক করুন - অবশ্যই স্থানের অ-অক্ষর! এই চ্যালেঞ্জের জন্য 3 টি সমাধান রয়েছে। এর মধ্যে 3 টি সন্ধান করুন। কেবল এটি পরিষ্কার করার জন্য: প্রোগ্রামটি অবশ্যই 20 + চিহ্নগুলি আউটপুট করে এবং অবশ্যই দ্রুত শেষ হতে হবে। "দ্রুত" অর্থ কী তা নিয়ে আমার সমালোচনা করার আগে, আমি বলব এর সর্বাধিক কয়েক সেকেন্ডের অর্থ (যা উপায় দ্বারা খুব বেশি তবে কেবল এটি স্ফটিক পরিষ্কার করার জন্য)।

ধাঁধা 3.2

সম্পাদনা করা আমার আগে ইঙ্গিত করা হয়েছিল যে 3.2.2 ধাঁধা জন্য সমাধান সংকলক নির্ভর করতে পারে। এই বিষয়ে যে কোনও সম্ভাব্য আলোচনা বাদ দিতে, আমি ধারণাটি পরিবর্তন করব এবং বিতর্ক সৃষ্টি না করার জন্য অতিরিক্ত যত্ন নেব যখন আমি পরবর্তী ধাঁধাতে এটি উন্নত করব। তবে, এই ধাঁধাটি চালিয়ে যেতে, আমি ৩.২.২ এর জন্য একটি ছোট পরিবর্তন করব (সমাধানটি সহজ তবে ক্লিনার হবে)।

আমি যখন ধাঁধাটি প্রথম দেখলাম তখন দেখতে পেলাম দুর্দান্ত। আমি এটি সমাধান করার ব্যবস্থা করেছিলাম তবে তত্ক্ষণাত্ নয় যেহেতু এর জন্য কিছুটা মনোযোগ দেওয়া দরকার। আপনি যদি এখানে থাকেন তবে এর অর্থ আপনিও এটি সমাধান করেছেন। আপনি যদি এমন সম্ভাব্য সমস্ত অক্ষরকে সমস্ত সম্ভাব্য মানগুলির সাথে প্রতিস্থাপন এবং প্রতিটি সমাধান পরীক্ষা করার জন্য একটি প্রোগ্রাম লিখে লিখে থাকেন তবে আপনি হারিয়ে গেছেন। পরিশ্রমী লোক যদিও। 20 "চিহ্ন" লিখেছেন এমন প্রোগ্রামটি সংশোধন করে এখন:

৩.২.১: কোডে একটি একক চিঠি এবং আরও কিছু সন্নিবেশ করান যাতে ফলাফলটি বৈধ হয় এবং সমস্ত 3 সংশোধিত প্রোগ্রামে একই জিনিসকে আউটপুট করে। বলা বাহুল্য, চিঠিটি অবশ্যই মূল ঘেরের আগে হওয়া উচিত (আমি বলছি কারণ আমি এমন লোকদের শুনতে চাই না যারা প্রোগ্রামের পরে কেবল একটি চিঠি রেখেছিল এবং কোনওভাবে তাদের সংকলকটি খুব বন্ধুত্বপূর্ণ ছিল)।

সম্পাদিত (নমুনা দেখুন) - এই চূড়ান্ত প্রশ্নের জন্য বিবেচনা করুন যে আমি কাউন্টারটি 0 এর পরিবর্তে -1 থেকে শুরু করব।

3.2.1.5: আউটপুট কমপক্ষে 19 "+" লক্ষণগুলি (তবে এখনও একটি সীমাবদ্ধ আউটপুট) এই শর্তটি সহ পূর্ববর্তী সমস্ত সমস্যার পুনরাবৃত্তি করুন। স্থান পরিবর্তন করার অনুমতি দেওয়া হয়। প্রথম দিকের চেয়ে এখন আপনি আরও সমাধান খুঁজে পেতে পারেন। এর মধ্যে কয়েকটি অবশ্যই ৩.২.২ প্রশ্নের উপযুক্ত হবে।

৩.২.২: ভেরিয়েবল এন সূচনা করার জন্য আরও একটি মান চয়ন করুন যাতে ফলস্বরূপ আউটপুট কমপক্ষে একটি 3.2.1.5-এ সংশোধিত প্রোগ্রামের জন্য একই থাকবে (তাদের সকলের জন্য অগত্যা নয়)।

শেষ সম্পাদনা 1 : প্রোগ্রামটি পরিবর্তন করা যাতে এটি 21 "+" চিহ্নগুলিকে আউট করে দেয় এটি এখনও একটি ভাল সমাধান, কারণ মূল পাঠ্যটি "হুবহু" 20 চিহ্নগুলি না বলে। তবে অসীম আউটপুট নিষিদ্ধ। স্পষ্টতই এর অর্থ এই নয় যে আসুন আমরা সকলেই "+" শত শত চিহ্নগুলি আউটপুট তৈরি শুরু করি যেহেতু এটি নিষিদ্ধ নয়। তবে একটি সুন্দর 21 আউটপুট অপসারণ এই প্রতিযোগিতার মনোভাব নয়।

সর্বশেষ সম্পাদনা 2 : সর্বশেষ এডিট 1 বিবেচনা করে এবং স্থান পরিবর্তনকে গ্রহণ করে মনে হচ্ছে এখন আমাদের কাছে 5 টি সম্ভাব্য সমাধান রয়েছে যার মধ্যে চারটি ইতিমধ্যে প্রতিক্রিয়াগুলিতে চিহ্নিত করা হয়েছে। তবে সর্বশেষ চ্যালেঞ্জটি স্পর্শ করা হয়নি এবং আমি আরও একবার এটি স্পষ্ট করে বলতে হবে: এনকে অবশ্যই আরও একটি মূল্য নির্ধারণ করতে হবে, যে সমাধানগুলি 20 থেকে n নির্দিষ্ট করে এমন কৌশলগুলি তা করবে না (যেমন এন = 20 এল)। এছাড়াও আমি তৃতীয় সমাধান দেখতে পছন্দ করি যা স্থানগুলি পরিবর্তন করে না।

শেষ সংস্করণ 3 : আমি শেষ প্রশ্নগুলি সম্পাদনা করেছি, দয়া করে পড়ুন!

ধাঁধা উভয় অংশ সমাধান করা চ্যালেঞ্জ। এটি করতে প্রথমটি জিতে যায়।

আমি আশা করি এটি পরিষ্কার হয়ে গেছে, যদি না হয় কোনও প্রশ্ন পোস্ট করুন এবং আমি যত তাড়াতাড়ি সম্ভব সম্পাদনা করব। চিয়ার্স। জোর দেওয়া পাঠ্য


আমি ধরে নিই যে একটি চরিত্র পরিবর্তন করার সাথে কোনও ফাঁকা স্থান অ-অক্ষরগুলিতে পরিবর্তন করাও অন্তর্ভুক্ত? যদি তা হয় তবে আমার মনে হয় আমি 1 অংশের জন্য 3 টি সমাধান খুঁজে পেয়েছি
মেল্লামোকব

ওহ..সরি..আমার মনে ছিল তা স্পষ্টভাবে অস্বীকার করতে কিন্তু আমি ভুলে গিয়েছিলাম। আমি এখন সম্পাদনা করব। জিজ্ঞাসা করার জন্য Thx।
বোগদান আলেকজান্দ্রু

ওহ দারুণ. কারণ আমি আমার বর্তমান 3 টি সমাধানের 3.3.2 অংশের জন্য কোনও উত্তর খুঁজে পাই না ... আমার ধারণা
এটির

হ্যাঁ :) এতে শুভকামনা
বোগদান আলেকজান্দ্রু

1
@ অর্দনিউ: আমি বিশ্বাস করি না যে ওপি একবার প্রশ্নের মূল উদ্দেশ্য বদলেছে। আমি সম্মত সেখানে ভাল উপায়ে একটি গুচ্ছ plumping চেয়ে প্রশ্ন ঠিক করতে সম্পাদনা শেষে এর ... কিন্তু এটা কোর এখনও একই প্রশ্ন, কিছু জিনিস দিয়ে ব্যাখ্যা আছে।
মেল্লামোকব

উত্তর:


8

3.1

for( i = 0;-i < n; i-- )
for( i = 0; i < n; n-- )
for( i = 0; i + n; i-- )

এর মধ্যে যে কোনও পরিবর্তন প্রোগ্রাম আউটপুট 20 '+' চিহ্ন তৈরি করবে। এই এক কাছাকাছি:

for( i = 0;~i < n; i-- )

এটি 21 '+' চিহ্নগুলি আউটপুট করে।

3.2.1

আমি একটি চিঠি tingোকানো এই সমস্যাটি সমাধান করার জন্য কমপক্ষে 112 টি উপায় খুঁজে পেয়েছি। তাদের সমস্তগুলিই সমস্ত সংকলকগুলিতে কাজ করতে পারে না।

int n = 20L;
int n = 20f;
int n = 20d;
uint n = 20;

for( i = 0L; ... )
for( i = 0f; ... )
for( i = 0d; ... )

iprintf("+");
printf("+x");
printf("x+");

শেষ দুটি জন্য, xআপনাকে সম্ভাব্য 104 টি সমাধান দেওয়ার জন্য কোনও চিঠি রাখুন । শেষ দুটি লাইন দুটি ব্যবহার করে আউটপুট পরিবর্তন হবে তবে তিনটি সংশোধিত প্রোগ্রামের জন্য আউটপুটটি এখনও একই থাকবে।

3.2.2

আমি যে সমস্ত বিষয় নিয়ে এসেছি তা হ'ল কিছু বিষয় যা অ্যাসাইনমেন্টের পরে 20 নম্বরে ফিরে আসে int

int n = 20L;
int n = 20.001;
int n = 20.999;
int n = 20 + 0x100000000L;

হ্যাঁ, আপনার কাছে আমার ঠিক একই উত্তর রয়েছে (আমি এগুলি আগে পোস্ট করি নি কারণ আমার কাছে সমস্ত উত্তর নেই)। আমি মনে করি ৩.২.২-এর উত্তরটি ৩.১-এর তৃতীয় সমাধানের মধ্যে রয়েছে যা আমরা কেউই খুঁজে পাইনি (এবং স্থান পরিবর্তন না করার নিয়ম মানি)।
মেল্লামোকব

3.2.1, আমি সম্পর্কে নিশ্চিত নই fএবং dজন্য প্রত্যয় intপ্রকার (ভাল, dজন্য কোন যে বিষয়টি জন্য টাইপ করুন), কিন্তু অন্য কয়েকজন শেষ করেছিলেন থাকেন আছেন: int n = 20l, int n = 20U, এবং int n = 20u। এছাড়াও আমি বিশ্বাস করি না যে uintসি বা সি ++ তে একটি স্ট্যান্ডার্ড টাইপ শনাক্তকারী। আপনি যাইহোক এইগুলির জন্য কি সংকলক ব্যবহার করছেন?
আর্দনিউ

আপনি এখানে বেশ ভাল কাজ করেছেন, তবে সম্পূর্ণ হয়নি! প্রথমত, solution i সমাধানটি এখনও ভাল! প্রয়োজনটি "20" চিহ্নগুলিকে আউটপুট দেওয়ার ছিল তাই 21 এখনও একটি ভাল সমাধান (একমাত্র খারাপ সমাধান অসীম আউটপুট)। এর অর্থ আপনি এখন 4 টি সমাধান খুঁজে পেয়েছেন! এবং মজার বিষয়টি হ'ল, আমার কাছে এখনও একটি আছে :) ৩.২.২ সম্পর্কে, এটি খারাপ কারণ যেহেতু আমাকে বিশেষত এন এর ভ্যালু পরিবর্তন করা দরকার, এটি তৈরির জন্য কিছু কৌশল না করা :) :)
বোগদান আলেকজান্দ্রু

1
এবং, -i এবং ~ i উভয় সমাধানই স্থান পরিবর্তন করে তাই আমি তাদের "আংশিক" সমাধান বিবেচনা করব। তৃতীয় সম্পূর্ণ সমাধানটি অবশ্যই কুইজের পাঠ্যে বর্ণিত হিসাবে একটি ফাঁকা স্থান অক্ষর পরিবর্তন করতে হবে
বোগদান আলেকজান্দ্রু

1
আপনি সমস্যা বুঝতে পারেন নি। আমি বলেছিলাম যে পরিবর্তনটি কোরস্পন্ডিং মডিফাইড প্রোগ্রামের মতো একই আউটপুট তৈরি করবে। এটি হ'ল, আমার কাছে সি 1, সি 2, সি 3 সংশোধিত প্রোগ্রাম রয়েছে। অক্ষর সন্নিবেশের পরে আমার কাছে P1, P2, P3 রয়েছে। প্রয়োজনীয়তাটি: পি 1 এর সি 1 এর সমান আউটপুট থাকে, পি 2 এর সি 2 এর সমান আউটপুট থাকে, পি 3 এর সি 3 এর সমান আউটপুট থাকে। এটি পি 1, পি 2, পি 3 এর একই আউটপুট নেই
বোগদান আলেকজান্দ্রু

2

3.1

তবুও একটি ধাঁধা। তবে সাধারণ সমাধানগুলি বিরক্তিকর, বিশেষ কিছু সম্পর্কে কী?

সমাধান এক:

#include <stdio.h>
int main() {
   int i;
   int n = 20;
   for( i = 0; i < n; i++ )
      printf("+");
   return 0;
}

আমি শুধুমাত্র এক চরিত্র, যে পরিবর্তন করার সিদ্ধান্ত নিয়েছে -। ছাড়া অন্য কোনও চরিত্র -পরিবর্তন করা হয়নি।

সমাধান দুটি:

#include <stdio.h>
int main() {
   int i=printf("++++++++++++++++++++");exit(0);
   int n = 20;
   for( i = 0; i < n; i-- )
      printf("+");
   return 0;
}

এটি ঠিক পরিবর্তন একটি অক্ষর - পরে সেমিকোলন int iমধ্যে =printf("++++++++++++++++++++");exit(0);

সমাধান তিনটি:

#include <stdix.h>
int main() {
   int i;
   int n = 20;
   for( i = 0; i < n; i-- )
      printf("+");
   return 0;
}

এটি stdix.hসিস্টেমের শিরোনামটি লোড করে । সিস্টেমে পাথ অন্তর্ভুক্ত করুন, নিম্নলিখিত ফাইলটি সন্নিবেশ করুন যার নাম stdix.h। এটিতে নিম্নলিখিত বিষয়বস্তু থাকতে হবে।

static inline void printf(const char *string) {
    int i;
    for(i = 0; i < 20; i--)
        putchar('+');
    exit(0);
}

3.2

এখন একটি চিঠি sertোকাতে। ভাল, এটি সহজ, int main()সঙ্গে প্রতিস্থাপন int main(a)। এটি মান অনুযায়ী বৈধ নয়, তবে কে যত্ন করে?


0

ধাঁধা 3.1 উত্তর

  1. পরিবর্তন i--করার জন্য n--(ডেমো: http://ideone.com/l0Y10 )
  2. পরিবর্তন i < nকরার জন্য i + n(ডেমো: http://ideone.com/CAqWO )
  3. পরিবর্তন [SPACE]i < nকরুন -i < n। (ডেমো: http://ideone.com/s5Z2r )

ধাঁধা 3.2.1

পরিবর্তন int n = 20করার জন্য int n = 20L(একটি অ্যাড Lশেষ)।

ধাঁধা 3.2.2

এখনও একটি উত্তর খুঁজে পাওয়া যায় নি ...


3.1 এবং 3.2.1 এর জন্য ভাল, মানক সমাধান।
বোগদান আলেকজান্দ্রু

0

3.1

  1. পরিবর্তন i--করুনn--
  2. i<n প্রতি -i<n
  3. (দুর্ভাগ্যক্রমে অবৈধ উত্তর, কারণ আমি অন্যান্য উত্তর দেখার আগে সংকলকটি পরীক্ষা করছিলাম না)

3.2.1

int n = 20 

প্রতি

uint n = 20

(সংকলক নির্ভরশীল ...)

3.2.2

int n =-20L;

for(i = -1; i%n; i--)

পাশাপাশি 19 + চিহ্নগুলি মুদ্রণ করে int n = 20L;। যাইহোক, আমি ২.২.১-এর অন্য উত্তর না দেখলে আমি এটি নিয়ে আসতে পারতাম না


0
#include <stdio.h>
int main() {
   int i;
   int n = 20;
   for( i = 0; i < n; i++  )
      printf("+");
        printf("\n");
   return 0;
}

1
আপনার উত্তরটিতে প্রোগ্রামের ভাষা এবং চরিত্রের সংখ্যা যুক্ত করার বিষয়টি নিশ্চিত করুন।
টিমটেক

1
@ টিমটেক কেন চরিত্র গণনা? এটি কোড-গল্ফ নয়
গর্বিত হাসেলেলার

1
@ টিমটেক ভাষাও অন্তর্ভুক্ত করবেন কেন? এটি একটি ভাষা নির্দিষ্ট চ্যালেঞ্জ।
গর্বিত হাসেলেলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.