8 অনন্ত হওয়া উচিত [বন্ধ]


19

আসুন একটি সাধারণ লুপটি দেখুন, যা সাধারণত 8 টি পুনরাবৃত্তি করে:

for (int x=0; x<8; ++x);

আপনি এটি অসীম করতে হবে!


এটি এমন সমস্ত ভাষার পক্ষে যা এই জাতীয় ফর্মকে সমর্থন করে for। সুতরাং সর্বাধিক স্কোর সহ সমাধান (আপভোটস বিয়োগ ডাউনভোটেস) জিতল।

যদি আপনার ভাষাতে forলুপের অন্য রূপ থাকে তবে আপনি নিশ্চিত, আপনি এটি দিয়ে কিছু শীতল করতে পারেন, উত্তর পোস্ট করতে নির্দ্বিধায় এবং এটিকে নন-কেপটিং হিসাবে চিহ্নিত করুন। আমি উপলভ্য নির্মাণ এবং ভাষাগুলির বিস্তৃত করার অধিকার সংরক্ষণ করি, তবে এটি কখনই সঙ্কুচিত হবে না, সুতরাং পূর্বে সঠিক সমাধানগুলি ফেলে দেওয়ার ভয় পাবেন না।


সমাধান কী?

সমাধান দুটি প্রোগ্রাম নিয়ে গঠিত

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

int main() 
{
  for (int x=0; x<8; ++x);
  return 0;
}

দ্বিতীয় প্রোগ্রামটি বাড়ানো হয়েছে। এই প্রোগ্রামটিতে ক্লিন প্রোগ্রাম থেকে সমস্ত কোড এবং কিছু অতিরিক্ত কোড থাকা উচিত। সীমিত সংখ্যক এক্সটেনশন পয়েন্ট রয়েছে, বিশদগুলির জন্য সম্পূর্ণ বিধি বিভাগটি দেখুন। উপরের পরিষ্কারের জন্য একটি বাড়ানো প্রোগ্রাম হতে পারে

inline bool operator < (const int &a, const int &b)
{
  return true;
}

int main() 
{
  for (int x=0; x<8; ++x);
  return 0;
}

একটি ধারণা দেখানোর জন্য এটি কেবলমাত্র উদাহরণ (সি ++ এ অবিচ্ছেদ্য) আসল সঠিক অগমেন্টেড প্রোগ্রামটি সংকলনযোগ্য, কাজ করা এবং অসীম লুপ থাকতে হবে।

সম্পূর্ণ বিধি

উভয় প্রোগ্রাম:

  • এই জাতীয় forলুপগুলির সমর্থন সহ যে কোনও ভাষা ঠিক আছে।
  • লুপের বডিটি খালি রাখতে হবে। আরও স্পষ্টভাবে, আপনি কিছু আউটপুট বা অন্যান্য কোড লুপের মধ্যে রাখতে পারেন, তবে ফাঁকা লুপের ক্ষেত্রে লুপের আচরণ একই হওয়া উচিত।

পরিষ্কার প্রোগ্রাম:

  • লুপটি পূর্ণসংখ্যার বা সংখ্যার কাউন্টার ব্যবহার করে এবং 8 টি পুনরাবৃত্তি সম্পাদন করে:

    for (int          x=0; x<8; ++x);   // C, C++, C#
    for (var          x=0; x<8; ++x);   // C#, Javascript
    for (auto         x=0; x<8; ++x);   // C, C++
    for (auto signed  x=0; x<8; ++x);   // C, C++
    for (register int x=0; x<8; ++x);   // C, C++
    
  • ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলি অনুমোদিত নয়।

  • লুপ ভেরিয়েবলের পরিবর্তে সম্পত্তি (বৈশ্বিক চলক ব্যতীত) ব্যবহার করা নিষিদ্ধ।
  • ভেরিয়েবলের ঘোষণাটি লুপের অভ্যন্তরে বা বাইরেও হতে পারে। নিম্নলিখিত কোডটি ঠিক আছে:

    int x;
    for(x=0; x<8; ++x);
    
  • উপসর্গ বা পোস্টফিক্স ইনক্রিমেন্ট ব্যবহার করা যেতে পারে।

  • 8নাম স্থির বা পরিবর্তনশীল না সঞ্চয় করে লুপ সীমাটি একটি ধ্রুবক আক্ষরিক হিসাবে লিখতে হবে। এটি ভেরিয়েবল বা ধ্রুবক 8 টির সমান ঘোষণার উপর ভিত্তি করে সমাধানগুলি প্রতিরোধ করার জন্য তৈরি করা হয়েছে এবং তারপরে পুনরায় স্বাক্ষর করা, ওভাররাইডিং বা এটিকে অন্য মান দ্বারা ছায়ায়িত করে:

    const double n = 8;
    
    int main()
    {
      const double n = 9007199254740992;
      for (double x=0; x<n; ++x);
      return 0;
    }
    

সংযুক্ত প্রোগ্রাম:

  • ক্লিনটি থেকে সমস্ত কোড থাকা আবশ্যক।
  • সীমিত সংখ্যক এক্সটেনশন পয়েন্টগুলিতে পরিষ্কার প্রোগ্রাম প্রসারিত করা উচিত।
  • অসীম লুপ হিসাবে একই for লুপটি কার্যকর করতে হবে।
    লুপটিকে অন্য অসীম নির্মাণে স্থাপন করা ঠিক নয়।
  • কোডটির রানটাইম বা সংকলন-সময় প্যাচিংয়ের অনুমতি রয়েছে যতক্ষণ না এটির পাঠ্য উপস্থাপনা অপরিবর্তিত থাকে।
  • স্ট্রিংয়ে নির্মাণ স্থাপন করা এবং এতে পাস করার evalঅনুমতি নেই।

এক্সটেনশন পয়েন্ট:

  • অন্য ফাইল বা অন্যান্য সমাবেশগুলি সহ ক্লিন কোড সহ খণ্ডের বাইরে অন্য কোথাও।
  • forবিবৃতি (একক টুকরো হিসাবে - forনির্মাণ এবং তার শরীর) অবশ্যই অপরিবর্তিত রাখতে হবে।
  • চলক ঘোষণা অবশ্যই একই রাখতে হবে।
  • সাধারণ বিবৃতিগুলির মধ্যে যে কোনও স্থান এক্সটেনশন পয়েন্ট হিসাবে ব্যবহার করা যেতে পারে।
  • যদি এবং কেবলমাত্র ভেরিয়েবল লুপের বাইরে ঘোষণা করা হয় এবং মানটির তাত্ক্ষণিক অ্যাসাইনমেন্ট ব্যতীত, এই জাতীয় অ্যাসাইনমেন্ট যুক্ত করা যায়।
/* extension point here */
int main()
/* extension point here */
{
  /* extension point here */
  int x /* extension point for assignment here */;
  /* extension point here */
  for (x=0; x<8; ++x);
  /* extension point here */
  return 0;
  /* extension point here */
}
/* extension point here */
int main() 
{
  /* BEGIN: No changes allowed */ int x = 0; /* END */
  /* extension point here */
  /* BEGIN: No changes allowed */ for (x=0; x<8; ++x); /* END */
  return 0;
}

পিএস: যদি সম্ভব হয় তবে অনলাইনে আইডিইতে একটি লিঙ্ক সরবরাহ করুন।


2
@ অলিভার, যেমনটি আমি জানি, "সর্বাধিক স্কোর (উর্ধ্বতন বিয়োগফলগুলি)" জনপ্রিয়তা-প্রতিযোগিতার জন্য হুবহু ডিফল্ট , কমপক্ষে এটি ট্যাগের বর্ণনায় লেখা আছে: "একটি জনপ্রিয়তা প্রতিযোগিতা এমন একটি প্রতিযোগিতা যেখানে সর্বোচ্চ ভোটের সংখ্যার সাথে উত্তর দেওয়া হয় competition (upvotes minus downvotes) জয়লাভ করে। " তবে আমি এটিকে স্পষ্ট করে প্রশ্নে যুক্ত করতে পারি।
কিওয়ারটি

1
@ মাল্টেসেন, এই নির্মাণগুলির সাথে ভাষাগুলিতে অনেক আকর্ষণীয় সমাধান রয়েছে। সি এবং সি ++ (একেবারে ভিন্ন সমাধান সহ), সি #, জাভা, জাভাস্ক্রিপ্ট, পিএইচপি, পার্ল, গ্রোভি রয়েছে। আমি নিশ্চিত যে আরও অনেক কিছু রয়েছে। যাইহোক, আমি প্রশ্ন বিস্তারের জন্য উন্মুক্ত এবং এটি নিয়মে সুনির্দিষ্ট। আপনি যদি অন্য ভাষায় পুনরাবৃত্তি করতে পারেন - পোস্ট করুন। যদি এটি ইতিবাচক পুনর্বিবেচনা করে থাকে, নিয়মগুলি বাড়ানো যেতে পারে।
কিওয়ারটি

4
হিসেবে এটি করলে জনপ্রিয়তা-প্রতিযোগিতা কারণ সেখানে কি মানদণ্ড ভোটারদের যখন ভোট (বিজয় শর্ত বিষয়ী উপার্জন) নির্বাচন করা উচিত কোন বিবরণ একটু অসুবিধাজনক। আমি একটি কোড-গল্ফ সমাধানে এই ভিত্তিতে কাজ করছিলাম যে এখানে অনেক লোক গল্ফ সমাধানকে আকর্ষণীয় মনে করে এবং তাই এটি জনপ্রিয় হতে পারে; মনে হয় এটি চ্যালেঞ্জের পক্ষে কার্যকর একটি বিজয় শর্ত হতে পারে।

2
১. " পূর্ণসংখ্যা বা সংখ্যার কাউন্টার " কিছুটা অস্পষ্ট। যেমন এটি অন্তর্ভুক্ত করে java.lang.Integer? ২. এটি একটি সঠিক বিজয়ী মানদণ্ডের সাথে আরও ভাল হবে।
পিটার টেলর

1
হ্যাঁ, এটা আছে। ২. ক্রিয়েটিয়ার ঠিক কী জিতল? PS: আমরা মেটাতে চালিয়ে যেতে পারি ।
কিওয়ারটি

উত্তর:


33

Python3

পরিষ্কার প্রোগ্রাম:

লুপের সময় এটি কেবল একটি মান গণনা।

n = 8
while n != 0:
  n -= 1
print("done")

সংযুক্ত প্রোগ্রাম:

import ctypes

ctypes.cast(id(8), ctypes.POINTER(ctypes.c_int))[6] = 9

n = 8
while n != 0:
  n -= 1
print("done")

এটা তোলে পুনরায় সংজ্ঞায়িত করতে int- এ ক্যাশে ব্যবহার 8যেমন 9কার্যকরভাবে তোলে যা n -= 1কোন সমিতি, যেহেতু 9-1 = 8যা শুধু সেট করে nফিরে 9আবার, অসীম লুপ সৃষ্টি হয়।

আপনি এখানে অনলাইনে ক্রিয়াকলাপের ক্যাশে দেখতে পারেন (যদিও এটি অনলাইনে অসীম লুপ ছাড়াই) without


দয়া করে আপনি অনলিন্ড আইডিইতে একটি লিঙ্ক সরবরাহ করতে পারেন? ideone.com/aI3ZrI - মনে হচ্ছে সেখানে কাজ করছে না।
কিওয়ারটি

@ কিওয়ার্টি, আমি এটি repl.it-এ চালানোর চেষ্টা করেছি, তবে এটি কেবল হিমশীতল, এটি প্রত্যাশিত যেহেতু এটি অসীম লুপ হবে। আমি জানি সেখানে ক্যাশের স্টাফ কাজ করে, কারণ সেখানেই আমি কীভাবে সেট 8করতে হবে তা নিয়ে পরীক্ষা-নিরীক্ষা করেছি9
মাল্টেসেন

সত্যিই সেখানে কাজ করে। আশ্চর্যের বিষয় যে থাইয়ের আইডোন (5 সেকেন্ড) এর মতো সময়সীমা নেই। তারা দেখায়Python 3.5.2 (default, Dec 2015, 13:05:11) [GCC 4.8.2] on linux
কিওয়ারটি

লুপ ছাড়াই @ কিওয়ারটি লিঙ্ক: repl.it/E4fx/0
মালটিসেন

এটি আকর্ষণীয় ...
Qwertiy

22

পাইথন ঘ

পরিষ্কার প্রোগ্রাম:

পাইথনে 8 বার কিছু করার স্ট্যান্ডার্ড উপায় হ'ল:

for i in range(8): 
    # Do something
    pass

সংযুক্ত প্রোগ্রাম:

তবে, আমরা যদি অসীমভাবে 1 প্রদানের জন্য পরিসীমা জেনারেটরের ফাংশনটিকে ওভাররাইড করি তবে এটি একটি অসীম লুপ হয়ে যায় ...

def range(x):
    while 1: yield 1

for i in range(8):
    # Infinite loop
    pass

আমরা এটিকে আরও এগিয়ে নিতে এবং এমন একটি জেনারেটর ফাংশন তৈরি করতে পারি যা অসীমভাবে 1 উপার্জনের পরিবর্তে চিরকালের জন্য গণনা করে:

def range(x):
    i = 0
    while 1: yield i; i+=1

for i in range(8):
    # Counting from 0 to infinity
    pass

Repl.it উপর পরীক্ষা


2
যে লুকান বিপুল মডিউল মাঝখানে ...
বেঞ্জামিন

21

পার্ল

পরিষ্কার

for($i=0; $i<8; $i++) { }

উদ্দীপিত

*i=*|;
for($i=0; $i<8; $i++) { }

ভাবনা


16
ওহ, সত্যিই চালাক। পার্লকে যে চেনেন না তাদের জন্য: এটি $iকেবলমাত্র বুলিয়ানগুলি ধারণ করতে সক্ষম এমন একটি বিশেষ ভেরিয়েবলের জন্য একটি উপাধি হয়ে উঠছে, সুতরাং এটি একবার 1 এ পৌঁছে গেলে এটি বর্ধিত হওয়ার জন্য প্রতিরোধক হয়ে ওঠে।

10

ES5 + (জাভাস্ক্রিপ্ট)

সম্পাদনা : সুস্পষ্ট পরিবর্তনশীল ঘোষণা সরিয়ে ফেলা হয়েছে, অন্যথায় এটি উত্তোলন করা হয়েছিল এবং একটি অ-কনফিগারযোগ্য উইন্ডো.এক্স সম্পত্তি তৈরি করা হয়েছিল ( আরপিএল কনসোলে রেখা দ্বারা রেখা না থাকলে) unless

ব্যাখ্যা:

সত্য যে কোনও বিশ্বব্যাপী স্কোপযুক্ত ভেরিয়েবল উইন্ডো অবজেক্টের একটি সম্পত্তি এবং 1 এর ধ্রুবক মান থাকার জন্য "উইন্ডোজ.এক্স" সম্পত্তিটিকে নতুন করে সংজ্ঞায়িত করে তোলে।

পরিষ্কার

for(x=0; x<8; x+=1) console.log(x);

উদ্দীপিত

Object.defineProperty(window,'x',{value:1});
for(x=0; x<8; x+=1) console.log(x);

দ্রষ্টব্য : নোড.জেজে এই কাজটি করার জন্য, কেবল "উইন্ডো" "গ্লোবাল" দিয়ে প্রতিস্থাপন করুন (নোড.জেএস 6..৮.০ তে পরীক্ষিত)


1
যাইহোক, এটি ES5, তাই না?
কিওয়ারটি

এছাড়াও এটি ক্রোমে কাজ করে varনা। তবে আপনি varউভয় প্রোগ্রাম থেকে অপসারণ করতে পারেন - ঠিক আছে।
কিওয়ারটি

@ কিওয়ার্টি এটি আমার জন্য ক্রোমে "ওয়ার" দিয়ে কাজ করে (লিনাক্স / সংস্করণ 52.0.2743.82 (-৪-বিট))
জেপেলিন

> যাইহোক, এটি ES5, তাই না? সত্য, এখনই শিরোনাম সংশোধন করবে
zeppelin

1
সমস্যাটি varউত্তোলনকারীদের তাই definePropertyএটি ব্যবহারের মুহুর্তে ইতিমধ্যে প্রস্থান করা। তবে আপনি যদি এই 2 টি লাইনটি বিভিন্ন স্ক্রিপ্টে রাখেন (তবে এটি অনুমোদিত) তবে এটি কাজ করবে, কারণ সম্পত্তিটি প্রথমে তৈরি হবে এবং varতারপরে উপেক্ষা করা হবে। প্রুফ: i.stack.imgur.com/lSwbE.png
Qwertiy

10

সি

পরিষ্কার প্রোগ্রাম

int main() 
{
  for (int x=0; x<8; ++x);
  return 0;
}

সংযুক্ত প্রোগ্রাম

#define for(ever) while(1)

int main() 
{
  for (int x=0; x<8; ++x);
  return 0;
}

Must execute same for loop as an infinite loop itself. Placing of the loop into another infinite construction is not ok.
কার্ল ন্যাপফ

3
@ কার্লনাপ্ফ "ফোর" লুপটি অন্য অসীম নির্মাণের মধ্যে নেই।
coredump

3
@ কার্লনাপফ আমি ভেবেছিলাম এই উত্তরটি সুস্পষ্টভাবে বিধি দ্বারা অনুমোদিত হয়েছিল:
ওমর

এটি "লুপের জন্য একই কার্যকর করতে হবে" শব্দটি কিন্তু হ্যাঁ এটি পাঠ্য উপস্থাপনার সাথে বিরোধ।
কার্ল ন্যাপফ

7

জাভা

পরিষ্কার প্রোগ্রাম:

public class Main {
    public static void main(String[] args) throws Exception {
        for (Integer i = 0; i < 8; i++);
    }
}

সংযুক্ত প্রোগ্রাম:

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws Exception {
        Class cache = Integer.class.getDeclaredClasses()[0];
        Field c = cache.getDeclaredField("cache");
        c.setAccessible(true);
        Integer[] intcache = (Integer[]) c.get(cache);
        intcache[129] = intcache[128];

        for (Integer i = 0; i < 8; i++);
    }
}

পূর্ণসংখ্যার ক্যাশে পূর্ণসংখ্যা সেট করে যা 1 থেকে 0 থাকা উচিত, কার্যকরভাবে i++কিছুই করা না করে (এটি iক্যাশেড ইন্টিজারে সেট করে যা 1 থাকা উচিত, তবে যেটি পূর্ণসংখ্যায় আসলে 0 থাকে, কোনও পরিবর্তন হয় না)।


আমাকে এটি মারুন, এই সমাধানটি আমার নিজের মতো।
হাইপিনো

6
এটি লুপের জন্য সত্যই একটি আইডোমেটিক জাভা নয়, যা সম্ভবত intতুলনামূলকভাবে হেভিওয়েটের চেয়ে আনবক্সড ব্যবহার করবে Integer


6

পাইথন 3 (3.5.0)

পরিষ্কার প্রোগ্রাম:

for i in range(8):
    print(i)

উদ্দীপিত

import sys

from ctypes import *

code = sys._getframe().f_code.co_code

cast(sys._getframe().f_code.co_code, POINTER(c_char*len(code))).contents[len(code)-4] = 113
cast(sys._getframe().f_code.co_code, POINTER(c_char*len(code))).contents[len(code)-3] = 160

for i in range(8):
    print(i)

পাইথনে লিখিত অন্যদের মতো এই সমাধানটি প্রকৃতপক্ষে ফ্লাইয়ের উত্স কোডকে পরিবর্তন করে। লুপের জন্য সমস্ত স্টাফ যাই হোক না কেন কোড চাইলে পরিবর্তিত হতে পারে।

কোডটি দ্বিতীয় থেকে শেষ 113অপকোডকে আরও বেশি সহজেই পাঠানো যায় - JUMP_ABSOLUTE। এটি অপারেন্ডকে পরিবর্তিত করে 160- নির্দেশটি যেখানে লুপটি শুরু হয়, কার্যত প্রোগ্রামের শেষে একটি GOTO বিবৃতি তৈরি করে।

বর্ধিত প্রোগ্রামটি 0..7স্ট্যাক-উপচে পড়া বা অনুরূপ ছাড়াই সংখ্যাগুলি বহুবার মুদ্রিত করে ।


6

পিএইচপি

আমি মনে করি এটি এক্সটেনশন পয়েন্টের নিয়ম অনুসরণ করছে; আমি পয়েন্ট 4 এ সম্পূর্ণ পরিষ্কার নই, এটি @ প্রিমোর পার্ল উত্তরের সাথে খুব সমান তাই আমি মনে করি এটি গণনা করা হয়েছে।

পরিষ্কার

for(;$i<8;$i++);

উদ্দীপিত

$i='a';
for(;$i<8;$i++);

পিএইচপি আপনাকে কিছু স্ট্রিং বৃদ্ধি করতে দেয়, যেমন:

'a' -> 'b'
'b' -> 'c'
'z' -> 'aa'
'aa' -> 'ab'
'aab' -> 'aac'
etc

এই সমস্ত স্ট্রিং 0 টিতে মূল্যায়ন করে, তাই এটি ব্যবহারিকভাবে চিরতরে লুপ হয়ে যাবে (কোনওভাবে স্মৃতিশক্তি শেষ না হওয়া ব্যতীত)।


এটি প্রতিযোগিতার মনোভাব এবং খুব আকর্ষণীয়। আসলে প্রাথমিক এসাইনমেন্ট বাদ দেওয়ার বিষয়ে কিছু বলা হয়নি, সুতরাং এটি কিছু প্রান্তের বিষয়। আসলে এটি প্রত্যাশিত ছিল যে 0 এবং পুনরাবৃত্তি নির্ধারণের মধ্যে কোনও এক্সটেনশন পয়েন্ট নেই। তবে আমি এখন এটিকে অস্বীকার করব না কারণ আমি এর ভিত্তিতে কিছু আন্তঃসুখী এজ পদ্ধতি দেখছি এবং এটি অতিরিক্ত ব্যবহার করা সহজ নয়।
কিওয়ারটি

2
@ কিওয়ার্টি "সুতরাং এটি কিছু প্রান্তের বিষয়" " সংক্ষেপে পিএইচপি :)
টক্সিক-যোগহর্ত

6

পার্ল

পরিষ্কার কোড

for ($x = 0; $x < 8; $x++) {}

সংযুক্ত কোড

sub TIESCALAR {bless []}
sub FETCH {}
sub STORE {}
tie $x, "";

for ($x = 0; $x < 8; $x++) {}

বেশিরভাগ পার্ল ভেরিয়েবল কেবল ভেরিয়েবল হয়। তবে, ভাষাতেও একটি tieবৈশিষ্ট্য রয়েছে, যা আপনাকে কার্যকরভাবে ভেরিয়েবল গেটার এবং সেটটার দিতে দেয়। এই প্রোগ্রামটিতে আমি মূল প্যাকেজটি (যার নাম নাল স্ট্রিং) একটি অবজেক্ট-ওরিয়েন্টেড ভাষা থেকে একটি শ্রেণির সমতুল্য করে তুলি, যদিও এটি প্রোগ্রাম থাকাকালীন। এটি আমাকে forপ্রোগ্রামটিতে নিজেই লুপের পাল্টা বাঁধতে দেয়। বাস্তবায়ন সফল হতে TIESCALARদেয় tie; এর রিটার্ন মান TIESCALARবলতে যে কোনও অভ্যন্তরীণ অবস্থার রেফারেন্স বোঝানো হয় যা আমাদের চলকের সাথে জড়িত রাখতে হবে তবে আমাদের কোনও প্রয়োজন নেই বলে আমরা একটি খালি অ্যারে রেফারেন্স স্থানধারক হিসাবে ফিরিয়ে দিই। তারপরে আমরা গিটার এবং সেটারের সহজতম বাস্তবায়ন দেব; তাদের উভয়ই কিছু করে না, তাই নির্ধারণের চেষ্টা করে$xএর কোনও প্রভাব নেই এবং এটি পড়ার চেষ্টা সর্বদা ফিরে আসে undef, যা সংখ্যাগতভাবে 8 এর চেয়ে কম less


5

WinDbg

পরিষ্কার

.for (r$t0 = 0; @$t0 < 8; r$t0 = @$t0 + 1) { }

উদ্দীপিত

aS < |;                                            * Create alias of < as |
.block {                                           * Explicit block so aliases are expanded
    .for (r$t0 = 0; @$t0 < 8; r$t0 = @$t0 + 1) { } * Condition is now @$t0 | 8, always true
}

এই পদ্ধতির জন্য একটি উপকরণ তৈরি করা <হয় |, সুতরাং যখন <কোডটির মুখোমুখি হয় তখন উপনামটি প্রসারিত হয় |এবং বিটওয়াইস-বা কম-এর পরিবর্তে করা হয়। উইনডিবিজি-তে সমস্ত অ-শূন্য মান সত্যবাদী তাই anything | 8সর্বদা সত্য।

নোট: দ্য .blockআসলে প্রয়োজন নেই যদি aSএবং .forযেমন এখানে দেখানো আসলে দুটি ভিন্ন লাইন হিসাবে প্রবেশ করানো হয়, এটি শুধুমাত্র প্রয়োজনীয় যখন aSএবং .forএকই লাইনে আছে।


5

ম্যাথামেটিকাল

পরিষ্কার

For[x = 0, x < 8, ++x,]

উদ্দীপিত

x /: (x = 0) := x = -Infinity;
For[x = 0, x < 8, ++x,]

5

কমন লিস্প

পরিষ্কার কোড

(dotimes(i 8))

উদ্দীপিত

(shadowing-import(defmacro :dotimes(&rest args)'(loop)))
(dotimes(i 8))

keyword:dotimesওরফে নামের একটি ম্যাক্রো :dotimes( ১১.১.২.৩ দেখুন কী -ওয়ার্ড প্যাকেজ ) সংজ্ঞায়িত করা হয়েছে যা অসীম লুপ হিসাবে প্রসারিত হয়। defmacroম্যাক্রো আয় ম্যাক্রো নাম সংজ্ঞায়িত হচ্ছে, যা খাওয়ানো যেতে পারে shadowing-import। সুতরাং, এই নতুন dotimesপ্রতীকগুলি স্ট্যান্ডার্ড একের ছায়া দেয় (যা পোর্টেবল প্রোগ্রামগুলিতে নতুন ম্যাক্রোর সাথে সংজ্ঞাযুক্ত বা বর্ণিতভাবে আবদ্ধ করা উচিত নয়)।

সংযুক্ত (2)

(set-macro-character #\8 (lambda (&rest args) '(loop)))
(dotimes(i 8))

যখন আমরা 8 টি অক্ষর পড়ি, আমরা এটি দ্বারা প্রতিস্থাপন করি (loop)। এর মানে হল যে উপরেরটি পড়তে হয় (dotimes (i (loop)))এবং তাই কোডটি কখনই উপরের-গণ্ডার গণনা শেষ করে না। এটি 8 এর সমস্ত ঘটনাকে প্রভাবিত করে, লুপের মধ্যে একটিও নয়। অন্য কথায়, 8 সত্যই অনন্তকে বোঝায়। আপনি যদি কৌতূহলী হন, যখন পাঠ্যযোগ্যটি উপরের মতো সংশোধন করা হয়, তবে 8 টি অক্ষর "সমাপ্তি" হয়ে যায় এবং বর্তমানে পড়া অন্যান্য সংখ্যা / চিহ্ন থেকে নিজেকে আলাদা করে রাখে:

(list 6789)

... হিসাবে পড়ে:

(list 67 (loop) 9)

আপনি আইডিয়নে পরীক্ষা চালাতে পারেন: https://ideone.com/sR3AiU


4

চুনি

পরিষ্কার

এই ধরণের লুপটি রুবিতে খুব বেশি ব্যবহৃত হয় না, তবে একটি সাধারণ টিউটোরিয়াল আপনাকে বলবে যে এটি এটি যাওয়ার উপায়:

for x in 1..8
  # Some code here
end

উদ্দীপিত

ফর লুপটি কেবল (1..8).eachপ্রদত্ত কোডের ব্লক দিয়ে কল করে, তাই আমরা সেই পদ্ধতিটি পরিবর্তন করি:

class Range
  def each
    i = first
    loop { yield i; i+= 1 }
  end
end

for x in 1..8
  # Some code here
end

4

Haskell,

পরিষ্কার সংস্করণ:

import Control.Monad (forM_)

main = forM_ [0..8] $ \i -> print i

সংযুক্ত সংস্করণ:

import Control.Monad (forM_)

data T = C

instance Num T where
    fromInteger _ = C

instance Enum T where
    enumFromTo _ _ = repeat C

instance Show T where
    show _ = "0"

default (T)

main = forM_ [0..8] $ \i -> print i

এটা বেশ মৌলিক আছে, সত্যিই: আমরা শুধু আমাদের নিজের টাইপ সংজ্ঞায়িত Tএমন এক জিনিস যার enumFromTo, উদাহরণস্বরূপ অসীম ক্রম তারপর টাইপ তাই খেলাপি যে উন-টাইপ-সটীক মান ব্যবহার 0এবং 8ধরন হিসেবে নেয়া হয় T


1
হাস্কেলের ওভারলোড হওয়া সংখ্যাসূচক অক্ষরের জন্য ডিফল্ট ধরণের পরিবর্তন করার জন্য দুর্দান্ত ধারণা।
নিমি

3

///

for/// এ কোন সুস্পষ্ট লুপ নেই , তবে সিমুলেশন করা যায় (এটি সর্বোপরি টুরিং সম্পূর্ণ)।

ক্লিন:

/1/0/
/2/1/
/3/2/
/4/3/
/5/4/
/6/5/
/7/6/
/8/7/
8

বৃদ্ধি:

/0/0/
/1/0/
/2/1/
/3/2/
/4/3/
/5/4/
/6/5/
/7/6/
/8/7/
8

কি হচ্ছে?

যদিও সাবেক প্রোগ্রাম 8 0 থেকে নেমে বড়, মোট ছাত্র, আধুনিক একজনের /0/0/নিয়ম প্রতিস্থাপন করবে 0দ্বারা 0অনন্তকাল পর্যন্ত।


এবং আমি ভেবেছিলাম আপনি /0/1//1/2/.../7/8//8/8/8পরিবর্তে গণনা করার মতো কিছু করবেন ।
এরিক আউটগল্ফার

3

জাভাস্ক্রিপ্ট ES6

ঠিক আছে, এখানে এমন একটি সংস্করণ রয়েছে যা লুপ কনস্ট্রাক্টের ... এর জন্য ES6 ব্যবহার করে কাজ করে। এমনকি আমি আপনাকে একটি পরিষ্কার অ্যারে দেব যাতে আমাদের নিশ্চিত যে কোনও মজার ব্যবসা নেই:

পরিষ্কার

for(a of [0,1,2,3,4,5,6,7]);

অবশ্যই, এটি অ্যারে প্রোটোটাইপের সাথে গণ্ডগোল করা থেকে কাউকে থামায় না ...

উদ্দীপিত

Array.prototype[Symbol.iterator]=function(){return {next: function(){return {done: false}}}}
for(a of [0,1,2,3,4,5,6,7]);

এটি ডিফল্ট পুনরুক্তিকারীকে ওভার-লিখন করে কাজ করে যাতে এটি কখনই শেষ হয় না, তাই সবকিছুকে অসীম লুপে লক করে। কোডটিতে লুপের ভিতরে স্টাফ চালানোর কোনও সুযোগও নেই।


"ফাঁকা লুপের ক্ষেত্রে লুপের আচরণ একই হওয়া উচিত"
কুয়েরটি

ডার্ন, মিস করেছেন - আমাকে কিছু বের করতে হবে।
মার্কাস ডিসার

যতদূর আমি বলতে পারি, জাভাস্ক্রিপ্টে লুপের জন্য সি-স্টাইলের সাথে চ্যালেঞ্জটি কী সম্ভব নয় আপনি যদি কোনও নিয়ম না ভাঙেন তবে - এর অভ্যন্তরে কিছু রেখে (আমার সমাধানের মতো) অথবা লুপটি প্রাক-ম্যাসেজ করে আপনার পরিষ্কার কোডে ঘোষণা (যেমন সিড্রিক রাইচেনবাচের মতো)।
মার্কাস ডিসার

আসলে কিছু উপায় আছে। গ্লোবাল ভেরিয়েবল সহ ওয়ে ইতিমধ্যে পোস্ট করা হয়েছে, বুট আরও কিছু রয়েছে, varলুপের অনুমতি দেয় ।
কিওয়ারটি

যেমনটি আমি বলেছি, যতদূর আমি বলতে পারি। আমি সেই মন্তব্য করার পরে বিশ্বব্যাপী পরিবর্তনশীল উপায়টি দেখেছি এবং নিজেকে লাথি মেরেছি।
মার্কাস ডিসার

2

সি ++

2 এক্সটেনশন পয়েন্টগুলি ব্যবহার করে:

struct True {
  True(int x){}
  bool operator<(const int&){
    return true;
  }
  void operator++(){}
};


int main() 
{
#define int True
  for (int x=0; x<8; ++x);
  return 0;
}

পরিষ্কার প্রোগ্রাম বর্ণনার মত একই।


দুর্দান্ত, তবে "অনুকূলিত" হতে পারে :) অন্য উত্তর দেওয়ার জন্য সি ++ তে কিছু আকর্ষণীয় বিল্টইন রয়েছে।
কিওয়ারটি

2

Brainfuck

আমি পুনরাবৃত্তিকে গণনা করা সহজ করার জন্য, প্রতিটি পুনরাবৃত্তি একটি '0' মুদ্রণ করি। তবে লুপ কীভাবে কাজ করে তা পরিবর্তন না করে কোনও কোড সেখানে sertedোকানো যেতে পারে।

পরিষ্কার

>> ++++++ [-<++++++++>] <<                   b = '0' (value to be printed each iteration)

>> ++++++++ [-<< ++++++++ ++++++++ >>] <<    for (a = a plus 128;
[                                              a;
++++++++ ++++++++                              a = a plus 16 (mod 256)) {
>.<                                              loop body (print b)
]                                            }

এটি অনলাইনে চেষ্টা করুন

বর্ধিত সংস্করণ 8 বিট কোষ সহ সাধারণ ব্রেনফাক বাস্তবায়নের উপর নির্ভর করে। এই প্রয়োগগুলির ক্ষেত্রে, "ইনক্রিমেন্ট" আসলে "ইনক্রিমেন্ট" (256 মোড) হয়। সুতরাং একটি লুপটি পরিষ্কার সংস্করণে হুবহু 8 বার পুনরাবৃত্তি হবে এবং অগমিত সংস্করণে অবিরাম,

  • a + b * 8 (Mod 256) == 0 (পরিষ্কার সংস্করণের জন্য)
  • সি + এ + বি * এন (256 মোড)> সকল এন এর জন্য 0 (বাড়ানো সংস্করণের জন্য)
  • a> 0

এই ক্ষেত্রে, আমরা একটি = 128, বি = 16, এবং সি = 1. যাক স্পষ্টতই 128 + 16 * 8 = 256 (এবং 256 (মোড 256) = 0) এবং 128> 0, এবং যেহেতু বি সম, সি + a + b * n যে কোনও বিজোড় a + c এর জন্য বিজোড় এবং এরূপ ক্ষেত্রে এটি কখনও 256 এর একাধিক হতে পারে না। সরলতার জন্য আমরা সি = 1 নির্বাচন করি। সুতরাং +প্রোগ্রামটির শুরুতে আমাদের একমাত্র পরিবর্তন প্রয়োজন ।

উদ্দীপিত

+                                            increment a (only change)
>> ++++++ [-<++++++++>] <<                   b = '0' (value to be printed each iteration)

>> ++++++++ [-<< ++++++++ ++++++++ >>] <<    for (a = a plus 128;
[                                              a;
++++++++ ++++++++                              a = a plus 16 (mod 256)) {
>.<                                              loop body (print b)
]                                            }

এটি অনলাইনে চেষ্টা করুন

এই এন্ট্রিটি প্রতিযোগিতা করছে কিনা তা নির্ধারণ করার জন্য আমি ওপিকে ছেড়ে দিই। ব্রেইনফাকের লুপের জন্য একটি স্পষ্টতা নেই, তবে আমি যে লুপ ফর্মটি ব্যবহার করেছি এটি আপনি যতটা পেতে পারেন সম্ভবত তত কাছাকাছি। আপনি পেতে পারেন হিসাবে ++++++++আক্ষরিক কাছাকাছি হয় 8; আমি এর মধ্যে বেশ কয়েকটিকে অন্তর্ভুক্ত করেছি।

ক্লিন সংস্করণটি অবশ্যই এই ভাষায় রচিত একটি সাধারণ প্রোগ্রাম গঠন করে, এমনকি স্বল্পতম পরিচিত ব্রেইনফাক হ্যালো ওয়ার্ল্ড কাজের সাথে একটি মডুলার পুনরাবৃত্তির সম্পর্কের উপর নির্ভর করে।


2

Haskell,

পরিষ্কার

import Control.Monad (forM_)

main = forM_ [0..8] $ \i -> print i

উদ্দীপিত

import Control.Monad (forM_)

import Prelude hiding (($))
import Control.Monad (when)

f $ x = f (\i -> x i >> when (i == 8) (f $ x))

main = forM_ [0..8] $ \i -> print i

স্বাভাবিক ফাংশন অ্যাপ্লিকেশন অপারেটরটিকে $এমন একের সাথে প্রতিস্থাপন করে যা প্রতিবার লুপটি পুনরায় শেষ করে। পরিষ্কার সংস্করণ চালানো 0 থেকে 8 প্রিন্ট করে এবং তারপর থামবে; বর্ধিত সংস্করণ 0 থেকে 8 এবং তারপরে আবার 0 থেকে 8 প্রিন্ট করে এবং আরও অনেক কিছু।

আমি কিছুটা প্রতারণা করি, forM_ [0..8] $ \i -> print iএটি হাস্কেলের সেই লুপটি লেখার জন্য "পরিষ্কার" উপায় নয়; অনেক হাস্কেল্লার লুপের বডিটি পেতে এটাকে হ্রাস করবে forM_ [0..8] printএবং তারপরে $ওভাররাইডের কোনও দরকার নেই । আমার প্রতিরক্ষার জন্য আমি ক্যাকটাসের উত্তর থেকে ক্লিন কোডটি অনুলিপি করেছিলাম , যার এই সম্পত্তিটির দরকার নেই, তাই কমপক্ষে একজন হাস্কেল প্রোগ্রামার আসলে সেই কোডটি লিখেছিলেন অযৌক্তিকভাবে যুক্ত করার প্রেরণা ছাড়াই $!


1

সি ++

int main() 
{
  int y;
#define int
#define x (y=7)
  for (int x=0; x<8; ++x);
  return 0;
}

x7 এ মূল্যায়ন করতে দেয় C সি তে কাজ করে না কারণ এটিতে নিয়োগ এবং বর্ধনের জন্য একটি মূল্য প্রয়োজন।


1

নিম

আইডিয়োমেটিক সংস্করণ, ব্যবহার করে countup:

পরিষ্কার

for i in countup(1, 8):
  # counting from 1 to 8, inclusive
  discard

উদ্দীপিত

iterator countup(a: int, b: int): int =
  while true:
    yield 8

for i in countup(1, 8):
  # counting 8s forever
  discard

পাইথন উত্তরেরrange সাথে সরল এবং একেবারে অনুরূপ যা পুনরায় সংজ্ঞা দেয় । আমরা countup8 টি অসীমভাবে দেওয়ার জন্য, একটি অন্তর্নিহিত (অন্তর্ভুক্ত) থেকে অন্যটিতে পুনরাবৃত্তি করার মূর্তিযুক্ত নিম way

পরিসীমা অপারেটরটি ব্যবহার করে আরও আকর্ষণীয় সংস্করণ ..:

পরিষ্কার

for i in 1..8:
  # counting from 1 to 8, inclusive
  discard

উদ্দীপিত

iterator `..`(a: int, b: int): int =
  while true:
    yield 8

for i in 1..8:
  # counting 8s forever
  discard

পূর্ববর্তী সমাধানের সাথে খুব সমান, আমরা রেঞ্জ অপারেটরটিকে নতুনভাবে সংজ্ঞায়িত করি .., যা সাধারণত [1, 2, 3, 4, 5, 6, 7, 8]আগে থেকে পুনরাবৃত্তিকে একটি অ্যারে দেয় ।


1

GolfScript

পরিষ্কার

0{.8<}{)}while;

উদ্দীপিত

{.)}:8;
0{.8<}{)}while;

এটি ভ্যারিয়েবল 8-এ n + 1 প্রদান করে ফাংশনটি বরাদ্দ করে


1

TCL

সাধারন:

for {set i 0} {$i<8} {incr i} {}

বৃদ্ধি:

proc incr x {}
for {set i 0} {$i<8} {incr i} {}

ধারণাটি হ'ল incrকমান্ডটি নতুনভাবে সংজ্ঞায়িত করা যায় যা ভেরিয়েবলটি বাড়ানোর জন্য ব্যবহৃত হয় i, প্রকৃতপক্ষে বৃদ্ধি নয়!

এখানে পরীক্ষা করা যায়: http://rextester.com/live/QSKZPQ49822


1

x86_64 বিধানসভা

পরিষ্কার প্রোগ্রাম:

mov rcx, 8
loop_start:
sub rcx, 1
cmp rcx,0
jne loop_start
mov rax, 0x01
mov rdi, 0
syscall

কোনও অ্যাসেম্বলি প্রোগ্রামার যে ধরণের লুপ ব্যবহার করবে তারপরে একটি প্রস্থান সিস্কেল যাতে কোনও jmp loop_startনির্দেশ যুক্ত করার পরে সক্ষম না করে ।

সংযুক্ত প্রোগ্রাম:

global start
section .text
start:
mov rcx, -1
jmp loop_start
mov rcx, 8
loop_start:
sub rcx, 1
cmp rcx,0
jne loop_start
mov rax, 0x01
mov rdi, 0
syscall

এছাড়াও, দুঃখিত যদি এটি খারাপ হয় যে ক্লিন প্রোগ্রামটির কোনও এন্টিপয়েন্ট বা এ নেই section .text


পূর্ণসংখ্যা ওভারফ্লো পরে এটি থামবে না?
কিওয়ারটি

1
ওহ, আহ ... সম্ভবত। তবে কি অনেক দিন লাগবে? আমি ভুলে গিয়েছিলাম যে এটি ঘটতে পারে, বেশিরভাগই একটি উচ্চ-স্তরের ভাষার প্রোগ্রামার
হওয়ায়

0

জাভাস্ক্রিপ্ট

ক্লিন:

for (var i = 0; !(i > Math.PI * 2.5); i++);

বৃদ্ধি:

window.Math = {PI: NaN};
for (var i = 0; !(i > Math.PI * 2.5); i++);

সাধারণ লুপ বলে মনে হচ্ছে না ...
কিওয়ারটি

হ্যাঁ, আমি প্রবন্ধটি সাধারণ শব্দটি প্রসারিত করেছি ...: /
সিড্রিক রেইচেনবাচ

0

সি ++

পরিষ্কার প্রোগ্রাম

0 থেকে 7 নম্বর পর্যন্ত পুনরাবৃত্তি একটি দুর্দান্ত, সাধারণ লুপ।

#include <iostream>

int main() {

  for (short i = 0; i < 8; i++) {
    // Print `i` with a newline.
    std::cout << i << std::endl;
  }    

}

অগমেন্টেড প্রোগ্রাম

সি ++ এর প্রিপ্রোসেসরটি বেশ বিপজ্জনক বৈশিষ্ট্য ...

#include <iostream>
#define short bool

int main() {

  for (short i = 0; i < 8; i++) {
    // Print `i` with a newline.
    std::cout << i << std::endl;
  }    

}

শুধুমাত্র লাইন আমরা যোগ দিতে হয়েছিল #define short bool। এটি iএকটি সংক্ষিপ্ত পূর্ণসংখ্যার পরিবর্তে একটি বুলিয়ান তৈরি করে, এবং সুতরাং ইনক্রিমেন্ট অপারেটর ( i++) i1 এ পৌঁছানোর পরে কিছুই করে না The

0
1
1
1
1
1
...

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