এই সংখ্যাটি কি প্রধান?


195

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

রোসেটা কোডে প্রাথমিকতা পরীক্ষার প্রতিবাদী পদ্ধতির ভাষার ভাষায় তালিকাগুলি বৈশিষ্ট্যযুক্ত, একটি মিলার-রবিন পরীক্ষা বিশেষভাবে ব্যবহার করে এবং অন্যটি পরীক্ষার বিভাগ ব্যবহার করে । তবে, "বেশিরভাগ প্রতিচ্ছবিযুক্ত" প্রায়শই "সংক্ষিপ্ততম" এর সাথে মিলে যায় না। প্রোগ্রামিং ধাঁধা এবং কোড গল্ফকে কোড গল্ফের গো-টু সাইট করার চেষ্টায়, এই চ্যালেঞ্জটি "হ্যালো, ওয়ার্ল্ড!" এর মতো প্রতিটি ভাষায় স্বল্পতম পদ্ধতির একটি ক্যাটালগ সংকলন করতে চাইছে ! এবং গল্ফ আপনি দুর্দান্ত জন্য একটি কুইন!

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

কার্য

একটি সম্পূর্ণ প্রোগ্রাম লিখুন যা ইনপুট হিসাবে একটি কঠোর ইতিবাচক পূর্ণসংখ্যা n প্রদান করে , n প্রধান হয় কিনা তা নির্ধারণ করে এবং তদনুসারে সত্যবাদী বা মিথ্যা মান প্রিন্ট করে ।

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

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

ইনপুট

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

  • যদি (এবং শুধুমাত্র যদি) আপনার ভাষা কোনও ধরণের ব্যবহারকারী ইনপুট গ্রহণ করতে অক্ষম হয় তবে আপনি আপনার প্রোগ্রামের ইনপুটটিকে হার্ডকোড করতে পারেন।

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

    স্কোরিং উদ্দেশ্যে, প্রোগ্রামটি জমা দিন যা ইনপুট 1 এর সাথে মিলে যায়

আউটপুট

আউটপুট STDOUT বা নিকটতম বিকল্পে লিখতে হবে।

যদি সম্ভব হয় তবে আউটপুটে সম্পূর্ণ সত্যবাদী বা মিথ্যা মান (বা এর স্ট্রিং প্রতিনিধিত্ব) থাকা উচিত, allyচ্ছিকভাবে একটি একক নিউলাইন অনুসরণ করা উচিত।

এই নিয়মের একমাত্র ব্যতিক্রম হ'ল আপনার ভাষার অনুবাদকের ধ্রুবক আউটপুট যা দমন করা যায় না, যেমন গ্রিটিংস, এএনএসআই রঙ কোড বা ইন্ডেন্টেশন।

অতিরিক্ত বিধি

  • এটি প্রাইম টেস্টিংয়ের জন্য সবচেয়ে সংক্ষিপ্ত পদ্ধতির সাথে ভাষাটি সন্ধান করার পক্ষে নয়, এটি প্রতিটি ভাষায় স্বল্পতম পদ্ধতির সন্ধান সম্পর্কে। অতএব, কোন উত্তর গৃহীত হিসাবে চিহ্নিত করা হবে না।

  • বেশিরভাগ ভাষায় জমা দেওয়া যথাযথ প্রিফিক্সিং এনকোডিংয়ে বাইটে স্কোর করা হবে , সাধারণত (তবে অগত্যা নয়) ইউটিএফ -8।

    ভাষা Piet , উদাহরণস্বরূপ, codels মধ্যে স্কোর করা হবে, যা এই ভাষার জন্য প্রাকৃতিক পছন্দ।

    ফোল্ডারগুলির মতো কিছু ভাষাও স্কোর করতে কিছুটা জটিল। যদি সন্দেহ হয় তবে দয়া করে মেটাকে জিজ্ঞাসা করুন ।

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

    নোট করুন যে সেখানে একজন দোভাষী থাকতে হবে যাতে জমাটি পরীক্ষা করা যায়। পূর্ববর্তী অপ্রয়োজনীয় ভাষার জন্য নিজেকে এই অনুবাদক লিখতে (এবং এমনকি উত্সাহিত) অনুমতি দেওয়া হয়েছে।

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

  • পরীক্ষামূলক primality জন্য বিল্ট-ইন ফাংশন হয় মঞ্জুরিপ্রাপ্ত। এই চ্যালেঞ্জটি প্রতিটি ভাষার সংক্ষিপ্ততম সমাধানের তালিকা তৈরি করে বোঝানো হয়েছে, সুতরাং যদি আপনার ভাষায় কোনও অন্তর্নির্মিত ব্যবহার কম করা হয় তবে এর জন্য যান।

  • আগে এগুলি বাতিল করা না হলে, http://meta.codegolf.stackexchange.com/q/1061 সহ সমস্ত স্ট্যান্ডার্ড বিধি প্রযোজ্য ।

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

তালিকা

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে ক্যাটালগ তৈরি করে a) ভাষার প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের যোগফল বা আপনি আলাদাভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


আমি কি ইনপুটগুলি নেতিবাচক সংখ্যা হিসাবে নিতে পারি, যেখানে অ্যাবস (ইনপুট) আমি যে নম্বরটি পরীক্ষা করে যাচ্ছি?
স্টান স্ট্রাম

না, ইনপুটটি একটি কঠোর ইতিবাচক পূর্ণসংখ্যা।
ডেনিস

1
@ লিন্ডনহাইট এটি আদিমতার পরীক্ষার একটি ক্যাটালগ হিসাবে ( "হ্যালো, ওয়ার্ল্ড!" ) হিসাবে লক্ষ্য করা হয়েছিল , তাই একীভূত জমা ফর্ম্যাটটি পছন্দনীয় বলে মনে হয়েছিল। এই চ্যালেঞ্জ সম্পর্কে দু'একটি সিদ্ধান্তের মধ্যে আমি আফসোস করছি, অন্যটি হ'ল নিরঙ্কুশিক প্রাথমিক পরীক্ষার অনুমতি দেয়।
ডেনিস

1
@ শেগি মেটার জন্য একটি প্রশ্নের মতো মনে হচ্ছে।
ডেনিস

1
হ্যাঁ, এটাই আমি ভাবছিলাম। আমি আপনাকে সম্মান করতে দেব, এটি আপনার চ্যালেঞ্জ হিসাবে as
শেগি

উত্তর:


225

ওহে বিশ্ব! , 13

hello, world!

83
আপনি, মত, কি শুধু এই ভাষা তৈরি করেন, শুধু এই জমা দেওয়ার জন্য? ;)
ইটিএইচ প্রোডাকশনস

41
@ETH প্রোডাকশনগুলি দেখে মনে হচ্ছে সর্বশেষ প্রতিশ্রুতি 10 দিন আগে হয়েছিল।
জিওবিটস

39
আমি আশা করছিলাম যে কোথাও এর সাথে লিঙ্ক করার আগে ভাষাটি আরও উন্নত আকারে আসবে, তবে এই চ্যালেঞ্জটি পোস্ট করা হয়েছিল এবং আমি প্রতিরোধ করতে পারিনি।
হিস্টোক্র্যাট

31
আমি প্রায় বলব যে 1 এর ইনপুটটিতে ঝুলানো সঠিক কার্যকারিতা।
iamnotmaynard

21
এ সম্পর্কে সর্বোত্তম অংশটি হ'ল প্রোগ্রামটি কেবল একটি অন্তর্নির্মিত নয়, প্রতিটি চরিত্র সঠিক ফলাফল পেতে নিজস্ব ভূমিকা পালন করে।
ETH প্রোডাকশনস

157

হেক্সাগনি , 29 বাইট

.?'.).@@/'/.!.>+=(<.!)}($>(<%

এই কোডটির পঠনযোগ্য সংস্করণটি হ'ল:

   . ? ' .
  ) . @ @ /
 ' / . ! . >
+ = ( < . ! )
 } ( $ > ( <
  % . . . .
   . . . .

ব্যাখ্যা: এটি পরীক্ষা করে যদি 2 থেকে n-1 পর্যন্ত N কে ভাগ করে থাকে তবে এটি পরীক্ষা করে?

আরম্ভ:

একটি স্মৃতি কক্ষে এন লিখুন এবং অন্যটিতে এন -1 লিখুন:

   . ? ' .
  . . . . .
 . . . . . .
+ = ( . . . .
 . . . . . .
  . . . . .
   . . . .

বিশেষ কেস এন = 1:

একটি 0 মুদ্রণ এবং সমাপ্তি

   . . . .
  . . . @ .
 . . . ! . .
. . . < . . .
 . . . . . .
  . . . . .
   . . . .

লুপ

N% a গণনা করুন এবং হ্রাস করুন a। A = 1 বা n% a = 0 হলে শেষ করুন min

   . . . .
  ) . . . /
 ' / . . . >
. . . . . . .
 } ( $ > ( <
  % . . . .
   . . . .

কেস a = 1:

একটি 0 এ 1 এ বৃদ্ধি করুন, এটি মুদ্রণ করুন এবং সমাপ্ত করুন। (নির্দেশ পয়েন্টারটি পূর্ব দিকের দিকে চালিত হয় এবং পূর্ব কোণ থেকে দক্ষিণ পশ্চিম কোণে লুপ হয় And এবং sure নিশ্চিত করে যে এটি পরবর্তী কমান্ডটিকে উপেক্ষা করে)

   . . . .
  . . . @ .
 . . . ! . .
. . . < . . )
 . . $ . . <
  . . . . .
   . . . .

কেস a% n = 0:

0 টি মুদ্রণ করুন এবং সমাপ্ত করুন (নির্দেশ পয়েন্টারটি এসডাব্লু চলছে এবং উপরের দিকে লুপ করুন @

   . . . .
  . . @ . .
 . . . . . >
. . . . . ! .
 . . . . . .
  . . . . .
   . . . .

61
পবিত্র বোকা, এটি একটি চিত্তাকর্ষক প্রথম পোস্ট। :) আমি এখনই অনুগ্রহটি পেশ করব (আপনার উত্তরের দিকে আরও মনোযোগ আকর্ষণ করার জন্য আমি এটি 7 দিনের মধ্যে প্রদান করব)। পিপিসিজিতে আপনাকে স্বাগতম!
মার্টিন এন্ডার

35
দুর্দান্ত উত্তর! " এই
কোডটির

68

হেক্সাগনি , 218 92 58 55 বাইট

বিজ্ঞপ্তি: এই উত্তরটি ইটপ্লে দ্বারা একটি পাশের দৈর্ঘ্যের 4 সমাধানের সাথে শক্তভাবে পরাজিত হয়েছে ।

)}?}.=(..]=}='.}.}~./%*..&.=&{.<......=|>(<..}!=...&@\[

প্রথমবারের মতো অ-তুচ্ছ (অর্থাত্ অ-রৈখিক) হেক্সাগনি প্রোগ্রাম! এটি Sp3000 এর ল্যাবরেথ উত্তর হিসাবে একই স্কোয়ার-ফ্যাক্টরিয়াল পদ্ধতির উপর ভিত্তি করে । 10 মাপের ষড়ভুজ দিয়ে শুরু করার পরে, আমি এটিকে 5 টি আকারে কমপ্রেস করতে পেরেছি তবে যাইহোক, আমি কিছু সদৃশ কোড পুনরায় ব্যবহার করতে সক্ষম হয়েছি এবং কোডটিতে এখনও বেশ কিছু গুচ্ছ নেই, সুতরাং আকার 4 কেবলমাত্র সম্ভব.

ব্যাখ্যা

কোডটি অনুধাবন করার জন্য, আমাদের প্রথমে এটি প্রকাশ করা দরকার। হেক্সাগনি কোনও কেন্দ্রের ষড়ভুজ নম্বরে কোনও অপস ( .) সহ কোনও উত্স কোড প্যাড করে 61। এরপরে এটি কোডটিকে সংশ্লিষ্ট আকারের নিয়মিত ষড়্চুখে পুনরায় সাজায়:

     ) } ? } .
    = ( . . ] =
   } = ' . } . }
  ~ . / % * . . &
 . = & { . < . . .
  . . . = | > ( <
   . . } ! = . .
    . & @ \ [ .
     . . . . .

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

             . . . . . . . . . . . . .
            . . . . . . . . . . . . . .
           . . . . . . . . . . . . . . .
          . . . . . . . . . . @ . . . . .
         . . . . . . . . . . ! . . . . . .
        . . . . . . . . . . % . . . . . . .
       . . . . . . . . . . ' . . . . . . . .
      . . . . . . . . . . & . . . . . . . . .
     . . . . . . . . . . { . . . . . . . . . .
    . . . . . . . . . . * . . . . . . . . . . .
   . . . . . . . . . . = . . . . . . . . . . . .
  . . . . . . . . . . } . . . . . . . . . . . . .
 ) } ? } = & { < . . & . . . . . . . . . . . . . .
  . . . . . . . > ( < . . . . . . . . . . . . . .
   . . . . . . = . . } . . . . . . . . . . . . .
    . . . . . } . . . = . . . . . . . . . . . .
     . . . . | . . . . | . . . . . . . . . . .
      . . . . * . . . ) . . . . . . . . . . .
       . . . . = . . & . . . . . . . . . . .
        . . . . > } < . . . . . . . . . . .
         . . . . . . . . . . . . . . . . .
          . . . . . . . . . . . . . . . .
           . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . .
             . . . . . . . . . . . . .

পার্শ্ব নোট: উপরের কোডটি প্রথম লাইনটি কার্যকর করে শুরু হয়, যা কোনও অপশনে পূর্ণ। তারপরে, যখন আইপি উত্তর পূর্ব প্রান্তে আঘাত করে, তখন এটি বাম-সর্বাধিক কোণায় ( ))) মুড়ে যায়, যেখানে আসল কোডটি শুরু হয়।

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

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

আমরা এজ প্রান্তের ফ্যাক্টরিয়ালটি গণনা করব , আমাদের ইনপুটটি সি প্রান্তে গণনা করব এবং প্রান্ত ডি তে ইনপুটটির অন্য একটি অনুলিপি (মডুলোর জন্য) সংরক্ষণ করব । বি গণনার জন্য অস্থায়ী প্রান্ত হিসাবে ব্যবহৃত হয়।

মেমোরি পয়েন্টার (এমপি) প্রান্ত A থেকে শুরু হয় এবং উত্তর দিকে নির্দেশ করে (এমপিটিকে ঘুরিয়ে দেওয়ার জন্য এটি গুরুত্বপূর্ণ)। এখন কোডটির প্রথম বিটটি এখানে:

)}?}=&{

)বর্ণনাকারীর ভিত্তি হিসাবে বৃদ্ধিগুলি A তে পরিণত 1হয় to }সাংসদকে ডানদিকে ঘুরতে, অর্থাৎ সি প্রান্তে স্থানান্তরিত করা (উত্তর-পূর্ব দিকে নির্দেশ করা)। এখানে আমরা একটি পূর্ণসংখ্যা হিসাবে ইনপুটটি পড়ি ?। তারপর আমরা অন্য প্রান্ত থেকে ডান-পালা নিতে ডি সঙ্গে }=এমপির বিপরীত ঘটায়, এটি সি এর সাথে ভাগ করা শীর্ষে চিহ্নিত করে । &কপি থেকে মান সি মধ্যে (ইনপুট) ডি - মান বাম দিক থেকে অনুলিপি করা হয়েছে কারণ বর্তমান মান অ ইতিবাচক (শূন্য) হয়। অবশেষে, আমরা এমপিটিকে সি দিয়ে বাম দিকে ঘুরতে প্রস্তুত করি {

পরবর্তী, <প্রযুক্তিগতভাবে একটি শাখা, কিন্তু আমরা জানি যে বর্তমান মানটি ইতিবাচক, সুতরাং আইপি সর্বদা ডানদিকে ঘুরবে >। পাশ থেকে আঘাত করা একটি শাখা একটি আয়না হিসাবে কাজ করে, যেমন আইপি অনুভূমিকভাবে আবার দিকে চলে যায়, দিকে (, যা সি এর মান হ্রাস করে ।

পরবর্তী শাখা, <হয় আসলে এখন একটি শাখা। এইভাবে আমরা n-1নীচে থেকে লুপ করব 1সি-তে বর্তমান মানটি ইতিবাচক হলেও, আইপি ডান-টার্ন নেয় (লুপটি কার্যকর করতে)। একবার আমরা শূন্য হিট করলে এটি পরিবর্তে বামে পরিণত হবে।

লুপ "বডি" তাকান। দ্য |সহজ আয়না হয়, >এবং <এছাড়াও আবার আয়না হিসেবে ব্যবহৃত হয়। এর অর্থ আসল লুপের দেহটি নীচে নেমে যায়

}=)&}=*}=

}প্রান্ত থেকে এমপি চলে আসে বি , =তার দিক প্রান্তবিন্দু মুখোমুখি reverses এবিসি)এই প্রথম পুনরাবৃত্তির, যেখানে এর মান শুধুমাত্র প্রাসঙ্গিক: VALUE বৃদ্ধি বি এখনও শূন্য হয়: আমরা তা নিশ্চিত করতে ইতিবাচক যেমন এর চাই যে আগামী নির্দেশ &কপি ডান প্রতিবেশী, অর্থাত একজন , গৌণিক বর্তমান মূল্য অর্থাত গণনা, বি

}তারপর এমপি চলে আসে একটি , =আবার সাধারণ প্রান্তবিন্দু মুখোমুখি reverses। *উভয় প্রতিবেশী, অর্থাত প্রান্ত দ্বিগুণ করে বি এবং সি এবং দোকানে ফলাফলের একটি । অবশেষে, আমাদের সিতে}= ফিরে আসার জন্য আরও একটি রয়েছে , এখনও রয়েছে শীর্ষবিন্দু ABC এর মুখোমুখি ।

আমি আশা করি আপনি দেখতে পারেন কিভাবে এই গৌণিক নির্ণয় n-1মধ্যে একটি

সুতরাং এখন আমরা এটি করেছি, সি মধ্যে লুপ কাউন্টার শূন্য। আমরা ফ্যাক্টরিয়ালটি বর্গক্ষেত্র করতে চাই এবং তারপরে ইনপুট দিয়ে মডিউলগুলি নিতে পারি। এই কোডটি এটাই করে:

&}=*{&'%!@

যেহেতু সি শূন্য হয় &কপি বাম প্রতিবেশী, মধ্যে গৌণিক অর্থাত একজন}=*চলে আসে এবং গৌণিক (অর্থাত বর্গক্ষেত্র) দুটি অনুলিপি গুণফল সঞ্চয় করে বিসিতে{ ফিরে যায় , তবে এমপির বিপরীত হয় না। আমরা জানি যে বর্তমান মানটি এখন ইতিবাচক, সুতরাং ডি থেকে সি তে ইনপুট অনুলিপি করে । এমপি পিছনে ডান দিকে, অর্থাৎ । মনে রাখবেন, ফ্যাক্টরিয়াল এর বর্গক্ষেত্র বি এবং ইনপুট সি তে রয়েছে । সুতরাং গণনা , ঠিক আমরা যা খুঁজছি।&'%(n-1)!^2 % n!একটি পূর্ণসংখ্যা হিসাবে ফলাফল মুদ্রণ করে (0 বা 1) এবং @প্রোগ্রামটি সমাপ্ত করে।


ঠিক আছে, কিন্তু এটি ছিল অসম্পূর্ণ সংস্করণ। গল্ফ সংস্করণ সম্পর্কে কি? হেক্সাগনি সম্পর্কে আপনার আরও দুটি জিনিস জানতে হবে:

  1. প্রান্তগুলি চারপাশে মোড়ানো। আইপি হেক্সাগনের একটি প্রান্তে আঘাত করলে এটি বিপরীত প্রান্তে লাফিয়ে। আইপি যখন কোনও কোণে সরাসরি আঘাত করে তখন এটি দ্ব্যর্থক হয়, সুতরাং কোনও কোণকে আঘাত করা একটি শাখা হিসাবেও কাজ করে: বর্তমান মানটি যদি ইতিবাচক হয় তবে আইপিটি তার ডানদিকে গ্রিড প্রান্তে লাফ দেয়, অন্যথায় তার বাম দিকে।
  2. আসলে 6 টি আইপি আছে। তাদের প্রত্যেকটি ঘড়ির কাঁটার দিকে প্রান্তে অগ্রসর হয়ে একটি পৃথক কোণে শুরু হয়। তাদের মধ্যে একটি মাত্র সময়ে সক্রিয় রয়েছে, যার অর্থ আপনি যদি অন্য 5 আইপি না চান তবে আপনি কেবল তা উপেক্ষা করতে পারবেন। আপনি পরবর্তী আইপিতে (ঘড়ির কাঁটার ক্রমে) সাথে ]এবং আগেরটির সাথে স্যুইচ করতে পারেন [। (আপনি এটির সাথে একটি নির্দিষ্ট চয়ন করতে পারেন #তবে এটি অন্য সময়ের জন্য))

এটিতে কয়েকটি নতুন কমান্ডও রয়েছে: \এবং /এটি আয়নাগুলির মতো |এবং ~বর্তমান মানটি দ্বারা গুণ করে -1

তাহলে কীভাবে বর্ণহীন সংস্করণটি গল্ফযুক্তটির কাছে অনুবাদ করে? লিনিয়ার সেট আপ কোড )}?}=&{এবং বেসিক লুপ কাঠামো এখানে পাওয়া যাবে:

        ) } ? } .  ->
       . . . . . .
      . . . . . . .
     . . . . . . . .
->  . = & { . < . . .
     . . . . . > ( <
      . . . . . . .
       . . . . . .
        . . . . .

এখন লুপের বডিটি কয়েক বার প্রান্তগুলি অতিক্রম করে, তবে সবচেয়ে গুরুত্বপূর্ণ, আসল গণনাটি পূর্ববর্তী আইপি (যা বাম কোণে শুরু হয়, উত্তর পূর্ব দিকে অগ্রসর হয়) হাতে দেওয়া হয়েছে:

        ) . . . .
       = . . . ] .
      } = . . } . .
     ~ . / . * . . .
    . . . . . . . . .
     . . . = . > ( <
      . . } . = . .
       . & . \ [ .
        . . . . .

দক্ষিণ পূর্ব দিকে শাখাটি ঝাঁকুনির পরে, আইপি =উপরের বাম কোণে (যা একসাথে একটি অপ-অপসারণ করা হয়েছে) দু'দিকে প্রান্তের চারপাশে মোড়ানো , তারপরেই বাউন্স করে /~বর্তমান মান যা পরবর্তী পুনরাবৃত্তিও জন্য গুরুত্বপূর্ণ চিহ্ন inverts। আইপি আবার একই প্রান্তের চারপাশে আবৃত হয় এবং শেষ পর্যন্ত হিট হয় [যেখানে নিয়ন্ত্রণ অন্য আইপির হাতে দেওয়া হয়।

এটি এখন কার্যকর করে ~}=)&}=*}যা প্রত্যাখ্যানকে পূর্বাবস্থায় ফিরে আসে এবং তারপরে কেবল বর্ণহীন লুপ বডি চালায় (বিয়োগ =)। শেষ পর্যন্ত এটি হিট করে ]যে হাতগুলি মূল আইপিতে ফিরে আসে। (দ্রষ্টব্য, পরের বার, আমরা এটি এই আইপিটি কার্যকর করব, এটি যেদিকে ছেড়েছিল সেখান থেকে এটি শুরু হবে, তাই এটি প্রথমে কোণে আঘাত করবে the উত্তর পশ্চিম প্রান্তে আইপি পিছনে ঝাঁপিয়ে পড়ার জন্য আমাদের বর্তমান মানটি নেতিবাচক হতে হবে We পরিবর্তে দক্ষিণ পূর্ব এক।)

আসল আইপি আবার নিয়ন্ত্রণ শুরু করার পরে \, এটিটি বন্ধ হয়ে যায় , অবশিষ্টগুলি কার্যকর করে =এবং তারপরে >পরবর্তী লুপ পুনরাবৃত্তিতে ফিড করতে হিট করে।

এখন সত্যিই পাগল অংশ: লুপটি শেষ হলে কী হবে?

        ) . . . .
       . ( . . ] =
      . . ' . } . }
     . . . % * . . &
    . . . . . . . . .
     . . . = | . . <
      . . } ! . . .
       . & @ . . .
        . . . . .

আইপি উত্তর পূর্বে রূপান্তর করে <এবং উত্তর পূর্বের তির্যককে ঘিরে রাখে। সুতরাং এটি লুপ বডি ( &}=*}]) এর মতো একই নির্বাহের পথে শেষ হয় । যা আসলে বেশ দুর্দান্ত, কারণ এটি হ'ল কোডটি আমরা এই মুহুর্তে কার্যকর করতে চাই, কমপক্ষে যদি আমরা অন্য যুক্ত করি =}(কারণ }=}এটি সমতুল্য {)। তবে এটি কীভাবে আবার আগের লুপটি প্রবেশ করে না? কারণ ]পরবর্তী আইপি-তে পরিবর্তন হয় যা এখন (এখন অব্যবহৃত) আইপি যা দক্ষিণ পশ্চিম দিকে অগ্রসর হয়ে উপরের ডান কোণে শুরু হয়। সেখান থেকে, আইপি প্রান্ত বরাবর অবিরত থাকে, উপরের বাম কোণে মোড়ানো, তির্যকটি নীচে সরায় , লিনিয়ার কোডের চূড়ান্ত বিটটি সম্পাদন করার সময় |সমাপ্ত হবে এবং সমাপ্ত হবে @:

=}&)('%!@

(অবশ্যই )(এটি কোনও অনি-অপশন - আমাকে যুক্ত (করতে )হয়েছিল কারণ ইতিমধ্যে সেখানে ছিল))

ভাই ... কি গোলমাল ...


নিস! এটা কত নতুন? এছাড়াও, আপনি যখনই স্থিতিশীল প্রকাশ পেতে পারেন তখন আপনি একটি এসোলেংস পৃষ্ঠা তৈরি করতে ইচ্ছুক হতে পারেন
mbomb007

18
@ mbomb007 আমি ভাষাটি দুই দিন আগে প্রয়োগ করেছি (এবং এর আগে দুই বা তিন দিন আগে এটি ডিজাইন করেছি)। এবং হ্যাঁ, আমি অবশ্যই একটি esolangs পৃষ্ঠা যুক্ত করব, তবে আমি মনে করি যে অনুমানটি এখনও 100% স্থিতিশীল নয় (উদাহরণস্বরূপ এখনও 3 স্বাক্ষরিত কম্যান্ড রয়েছে)। একবার যদি আমি অনুভব করি যে এটি আরও স্থিতিশীল হয়ে যায়, তবে আমি এটি এএসএলং এবং আমাদের মেটা পোস্ট উভয়ই জুড়ে দেব।
মার্টিন এন্ডার

বর্ধিত হেক্সের নীচে এটি বাম-সর্বাধিক কোণে (the 1) psেকে দেয় । আপনি 1সেখানে কি কথা বলছেন?
mbomb007

@ mbomb007 স্থির হয়েছে। )একটি ব্যবহার করা হয় 1
মার্টিন এন্ডার

5
এটি কীভাবে কাজ করে সে সম্পর্কে আপনার ব্যাখ্যায় মাত্রার মাত্রার জন্য +1 যদি আরও ভাষাগুলি এমন উদাহরণ নিয়ে আসে যাতে বিশদ আরও বেশি লোক সেগুলি ব্যবহার করতে পারে: ডি
জার্ডারিং

66

পাইথ, 4 বাইট

}QPQ

প্রিন্ট Trueবা False


12
আমি জানি যে এটি পুরানো তবে এখন আপনি এটিও এটি করতে পারেন: পি_কিউ এবং 1 বাইট সংরক্ষণ করুন।
drobilc

14
এটি এখন দিয়ে সম্ভবP_
নীল

3
@ জলবিলক আপনি কিউটি কাটাতে পারেন, ইওএফ হিসাবে যখন ফাংশনটি যুক্তির প্রত্যাশা করে তখন এটি ইনপুটটি ব্যবহার করে
স্ট্যান স্ট্রাম

55

রেটিনা , 16 বাইট

^(?!(..+)\1+$)..

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

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

একটি রেটিনা প্রোগ্রাম একটি একক লাইনের সমন্বয়ে সেই লাইনটিকে একটি রেজেক্স হিসাবে গণ্য করে এবং ইনপুটটিতে পাওয়া মিলগুলির সংখ্যা মুদ্রণ করে, যা 0সম্মিলিত সংখ্যা এবং 1প্রাইমগুলির জন্য হবে।

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

একমাত্র বিষয়টি হ'ল এই রূপকার লোকটিও গ্রহণ করে 1, তাই আমরা কমপক্ষে দু'টি অক্ষরের সাথে মিলে এটি নিয়ম করে থাকি ..


এটি আসলে একটি অনিয়মিত প্রকাশ, যেহেতু প্রাইমগুলি নিয়মিত ভাষা গঠন করে না।
পাইরুলেজ

@ পাইরুলেজ নিয়মিত প্রকাশের তাত্ত্বিক ধারণার চেয়ে বেশিরভাগ রিয়েল-ওয়ার্ল্ড রিজেক্স স্বাদগুলি অনেক বেশি শক্তিশালী। যদিও আমি শব্দটির উন্নতি করেছি।
মার্টিন ইন্ডার

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

52

সিজেম, 4 বাইট

qimp

সিজামের প্রাথমিকতা পরীক্ষার জন্য একটি বিল্ট-ইন অপারেটর রয়েছে।


18
বিকল্পভাবে:limp
Sp3000

43
pimpআমার সিজাম
flawr

12
pimpবস্তুনিষ্ঠভাবে আরও
দুর্বল

1
এছাড়াও আপনি কি করতে পারেনl~mp
গরু হাতুড়ে

12
@ কোয়েস, ইনপুটটির qএকটি লাইন পড়ে, iএটি একটি পূর্ণসংখ্যা হিসাবে পার্স করে এবং mpঅন্তর্নির্মিত। সিজেমের দ্বি-চর অন্তর্নির্মিত দুটি গ্রুপ রয়েছে: "বর্ধিত "গুলি শুরু হয় eএবং" গাণিতিক "শুরু হয়m
পিটার টেলর

47

এইচটিএমএল + সিএসএস, 254 + এন সর্বোচ্চ * 28 বাইট

আমরা নিয়মিত অভিব্যক্তি ব্যবহার করে প্রাথমিকতা পরীক্ষা করতে পারি। মজিলা রয়েছে @document, যা সংজ্ঞায়িত:

@document [ <url> | url-prefix(<string>) | domain(<string>) | regexp(<string>) ]# {
  <group-rule-body>
}

বর্তমান URL এর উপর ভিত্তি করে CSS এর মাধ্যমে উপাদানগুলিকে ফিল্টার করতে। এটি একটি একক পাস, সুতরাং আমাদের দুটি পদক্ষেপ করতে হবে:

  1. ব্যবহারকারীর কাছ থেকে ইনপুট পান। এই ইনপুটটি অবশ্যই কোনওভাবেই বর্তমান ইউআরএলে প্রতিফলিত হওয়া উচিত।
  2. ব্যবহারকারীকে যতটা সম্ভব কম কোডে উত্তর দিন।

1. ইনপুট পাওয়া

আমি ইনপুট পেতে এবং ইউআরএলটিতে স্থানান্তর করতে সবচেয়ে সংক্ষিপ্ততম উপায়টি GETচেকবাক্স সহ একটি ফর্ম। রেজেক্সের জন্য, উপস্থিতি গণনা করার জন্য আমাদের কিছু অনন্য স্ট্রিং দরকার।

সুতরাং আমরা এটি দিয়ে শুরু (61 বাইট):

<div id=q><p id=r>1<p id=s>0</div><form method=GET action=#q>

<p>সন্নিবেশিত সংখ্যাটি মূল (1) না (0) নয় কিনা তা নির্দেশ করার জন্য আমরা দুটি অনন্য এস পেয়েছি । আমরা ফর্মটিও সংজ্ঞায়িত করি এবং এটি ক্রিয়াও।

একই নামের সাথে n সর্বাধিক চেকবক্সগুলি অনুসরণ করা হবে (এন সর্বোচ্চ * 28 বাইট):

<input type=checkbox name=i>

জমা উপাদান অনুসরণ করে (34 বাইট):

<input name=d value=d type=submit>

2. প্রদর্শন উত্তর

<p>প্রদর্শনের জন্য (1 বা 0) নির্বাচন করতে আমাদের সিএসএস (159 বাইট) প্রয়োজন :

#q,#s,#q:target{display:none}#q:target{display:block}@-moz-document regexp(".*\\?((i=on&)?|(((i=on&)(i=on&)+?)\\4+))d=d#q$"){#s{display:block}#r{display:none}}

It codepen.io এ চেষ্টা করুন (কেবলমাত্র ফায়ারফক্স)


12
+1: এটি এইচটিএমএল এর সর্বকালের আমার প্রিয় অপব্যবহার এবং এই জাতীয় জিনিস যা আমাকে কোডগল্ফকে ভালবাসে।
বিড়াল

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

@ ডেনিস হতে পারে সম্ভবত এমনকি। তবে এটি আপনার উল্লেখ করা সমস্যার সমাধান করবে না। আমি এটিকে এখানে একটি প্রতিদ্বন্দ্বিতামূলক এন্ট্রি হিসাবে রেখেছি, কারণ এটি এটির জন্য সবচেয়ে বেশি অন-টপিক চ্যালেঞ্জ।
mınxomaτ

কেন না? আপনার যদি কোনও ইনপুট ক্ষেত্রে অ্যানারিতে একটি নম্বর থাকে তবে আপনার কোডটি আর সর্বাধিক সংখ্যার উপর নির্ভর করবে না।
ডেনিস

4
এইচএম, আমি এটি সম্পর্কে আরও কিছুটা ভেবেছি, এবং কেবলমাত্র এক্স চেকবক্স এবং কেবলমাত্র y- বিট সংখ্যা রয়েছে এমন একটি দোভাষীর মধ্যে কোনও পার্থক্য নেই। আমার পূর্ববর্তী মন্তব্য উপেক্ষা করুন।
ডেনিস


40

হেক্সাগনি , 28 বাইট

যেহেতু ইটোপ্লে আমাকে এই প্রশ্নে একেবারে উত্সাহিত করেছিল , তাই আমি অনুভব করেছি যে আমাকে তার একমাত্র অন্য উত্তরটি ছাড়িয়ে যেতে হয়েছিল ।

?\.">"!*+{&'=<\%(><.*.'(@>'/

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

আমি উইলসনের উপপাদ্যটি ব্যবহার করি, যেমন মার্টিন তার উত্তরে করেছিলেন : দেওয়া n, আমি আউটপুট(n-1!)² mod n

এখানে এটি প্রোগ্রাম প্রকাশিত:

   ? \ . "
  > " ! * +
 { & ' = < \
% ( > < . * .
 ' ( @ > ' /
  . . . . .
   . . . .

এবং এখানে পাঠযোগ্য সংস্করণ:

খুব পঠনযোগ্য

ব্যাখ্যা:

প্রোগ্রামটির তিনটি প্রধান পদক্ষেপ রয়েছে: ইনিশিয়েশন , ফ্যাক্টরিয়াল এবং আউটপুট

হেক্সাগনির স্মৃতি মডেল একটি অসীম হেক্সাগোনাল গ্রিড। আমি এই চিত্রটিতে প্রদর্শিত হিসাবে 5 টি মেমরি অবস্থান ব্যবহার করছি:

স্মৃতি

আমি এই চিত্রটিতে তাদের লেবেল দ্বারা এই অবস্থানগুলি (এবং সেগুলিতে সঞ্চিত পূর্ণসংখ্যার) উল্লেখ করব।

Initialisation:

Initialisation

নির্দেশ পয়েন্টার ( আইপি ) পূর্ব দিকে যেতে উপরের বাম কোণে শুরু হয়। মেমরি পয়েন্টার ( এমপি ) IN থেকে শুরু হয় ।

প্রথমে ?ইনপুট থেকে নম্বরটি পড়ে এটি IN এ সঞ্চয় করে । আইপি নীল পাথ, দ্বারা প্রতিফলিত থাকে \। ক্রম "&(চলে আসে এমপি পিছনে (থেকে বাঁদিকে একটি ), কপি থেকে মান ইন করার একটি এবং এটি decrements।

আইপি তারপর ষড়ভূজ একপাশে থেকে প্রস্থান করে অন্য দিকে (সবুজ পথ সম্মুখের দিকে) পুনরায় প্রবেশ করে। এটা তোলে executes '+যা চলে আসে এমপি থেকে বি এবং কপি কি ছিল একটিআইপি পশ্চিমে <পুনঃনির্দেশ করে ।

গৌণিক:

আমি একটি নির্দিষ্ট উপায়ে ফ্যাক্টরিয়ালটি গণনা করি, যাতে এটি স্কোয়ার করা সহজ। আমি নীচে বি এবং সিn-1! উভয় সঞ্চয় করি ।

গৌণিক

নির্দেশ পয়েন্টারটি নীল পথে শুরু হয় পূর্ব দিকে যাচ্ছে।

='দিক reverses এমপি এবং পিছন এটা চলে আসে সি । এটি সমান {=তবে এটি =যেখানে ছিল সেখানে পরে সাহায্যকারী।

&{কপি থেকে মান একটি থেকে সি , তারপর চলে আসে এমপি পিছনে একজনআইপি তারপর অসম্মতির, লাল পথ পৌঁছনো আঘাত আগে সবুজ পথ অনুসরণ করে, \ও কমলা পথ সম্মুখের দিকে যাচ্ছে।

সঙ্গে (>, আমরা হ্রাস একজন এবং পুনর্নির্দেশ আইপি ইস্ট। এখানে এটা একটি শাখা হিট: <। ধনাত্মক এ জন্য , আমরা কমলা পথ ধরে এগিয়ে চলি। অন্যথায় আইপি নির্দেশিত উত্তর-পূর্ব দিকে।

'*চলে আসে এমপি থেকে বি এবং সঞ্চয় করে একটি * সি মধ্যে বি । এখানেই (n-1)*(n-2)প্রাথমিক ইনপুট ছিল nআইপি তারপর প্রাথমিক লুপ ফিরে প্রবেশ করে এবং decrementing এবং যতক্ষণ গুন চলতে একটি পৌছানোর 0। (গণনা n-1!)

বিশেষ দ্রষ্টব্য : নিম্নলিখিত লুপ উপর, &থেকে মান সঞ্চয় করে বিসি , যেমন সি এখন এটি সংরক্ষণ করা একটি ইতিবাচক মান আছে। এটি ফ্যাকটোরিয়াল গণনা করার জন্য অত্যন্ত গুরুত্বপূর্ণ।

আউটপুট:

আউটপুট

যখন পৌঁছায় 0। শাখাটি তার পরিবর্তে নীল পথে আইপি পরিচালনা করে ।

=*reverses এমপি ও সঞ্চয় মান বি * সি মধ্যে একটি । তারপরে আইপি ষড়ভুজটি থেকে বেরিয়ে সবুজ পথে আবার প্রবেশ করে; নির্বাহ "%। এই চলে আসে এমপি থেকে আউট এবং গণনা একটি গেলিক ভাষার মধ্যে , বা (n-1!)² mod n

নিম্নলিখিতগুলি {"একটি অপ-বিকল্প হিসাবে কাজ করে, কারণ তারা একে অপরকে বাতিল করে দেয়। !চূড়ান্ত আউটপুট ছাপে এবং *+'(পরিসমাপ্তি আগে মৃত্যুদন্ড কার্যকর করা হয়: @

মৃত্যুদন্ড কার্যকর হওয়ার পরে (একটি ইনপুট সহ 5) স্মৃতিটি দেখতে দেখতে:

Memory2

কন্ট্রোল প্রবাহের সুন্দর চিত্রগুলি টিমভির হেক্সাগনি কালার ব্যবহার করে তৈরি করা হয়েছিল ।

আপনাকে ধন্যবাদ মার্টিন Ender , চিত্র সব উৎপাদিত আমি আমার পিসি তে এটি করতে পারে না জন্য।


আপনি এই মেমরি ডায়াগ্রামগুলির জন্য কী ব্যবহার করছেন? আমি এসোটেরিক আইডিই দেখেছি কিন্তু এটি চালাতে পেলাম না ...
নিডজেজেকব

@ নিডজেজেকোব আপনি মার্টিনকে আড্ডায় জিজ্ঞাসা করা থেকে ভাল, যেহেতু সে সে যাইহোক আমার জন্য তৈরি করেছিল।
এইচ.পি.উইজ

@ নিডজেজেকোব হ্যাঁ, মেমরি চিত্রটি এএসআইএডি থেকে রফতানি করা যেতে পারে। chat.stackexchange.com/rooms/27364/… আপনি যদি এই সম্পর্কে আরও কিছু কথা বলতে চান।
মার্টিন এন্ডার

33

মর্নিংটন ক্রিসেন্ট , 2448 বাইট

আমরা লন্ডনে ফিরে এসেছি !

Take Northern Line to Bank
Take Circle Line to Bank
Take District Line to Parsons Green
Take District Line to Bank
Take Circle Line to Hammersmith
Take District Line to Upney
Take District Line to Hammersmith
Take Circle Line to Victoria
Take Victoria Line to Seven Sisters
Take Victoria Line to Victoria
Take Circle Line to Victoria
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Hammersmith
Take Circle Line to Cannon Street
Take Circle Line to Bank
Take Circle Line to Hammersmith
Take Circle Line to Aldgate
Take Circle Line to Aldgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Aldgate
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take Circle Line to Hammersmith
Take Circle Line to Notting Hill Gate
Take District Line to Upminster
Take District Line to Bank
Take Circle Line to Victoria
Take Circle Line to Temple
Take Circle Line to Aldgate
Take Circle Line to Aldgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Pinner
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Pinner
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Pinner
Take Metropolitan Line to Aldgate
Take Circle Line to Hammersmith
Take District Line to Upminster
Take District Line to Victoria
Take Circle Line to Aldgate
Take Circle Line to Victoria
Take Circle Line to Victoria
Take District Line to Upminster
Take District Line to Embankment
Take Circle Line to Embankment
Take Northern Line to Angel
Take Northern Line to Moorgate
Take Metropolitan Line to Chalfont & Latimer
Take Metropolitan Line to Aldgate
Take Circle Line to Aldgate
Take Circle Line to Cannon Street
Take District Line to Upney
Take District Line to Cannon Street
Take District Line to Acton Town
Take District Line to Acton Town
Take Piccadilly Line to Russell Square
Take Piccadilly Line to Hammersmith
Take Piccadilly Line to Russell Square
Take Piccadilly Line to Ruislip
Take Piccadilly Line to Ruislip
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Aldgate
Take Circle Line to Aldgate
Take Circle Line to Cannon Street
Take Circle Line to Aldgate
Take Circle Line to Aldgate
Take Metropolitan Line to Preston Road
Take Metropolitan Line to Moorgate
Take Circle Line to Moorgate
Take Northern Line to Mornington Crescent

Timwi এখন সম্পূর্ণ নিয়ন্ত্রনের প্রবাহ স্টেশন বাস্তবায়ন প্রতি সদয় ছিলেন Templeএবং Angelগুপ্ত আইডিই সেইসাথে ভাষা স্পেসিফিকেশন ইনপুট এবং পূর্ণসংখ্যা পার্সিং যোগ করুন।

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

"Mornington Crescent"
"Cannon Street"
]qN/{'[/0=,}$:Q;{Q{1$#!}=\;_oNo'[/1>{']/0="[]"\*}%}%:R;NoQ{R\f{f{\#)}:+}:*},N*

এখানে প্রথম দুটি লাইন হল স্টেশনগুলি যা আপনি চেক করতে চান। এছাড়াও, এই পেস্টবিনের সামগ্রীগুলি ইনপুট উইন্ডোতে আটকে দিন

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

প্রকৃত এমসি কোড হিসাবে, এটি অন্যান্য অনেক উত্তর হিসাবে স্কোয়ার্ড-ফ্যাক্টরিয়াল পদ্ধতির উপর ভিত্তি করে এমসির গুণক, বিভাগ এবং মডুলো রয়েছে। এছাড়াও, আমি অনুভব করেছি যে একটি একক লুপ সুবিধাজনক হবে।

একটি ইস্যুটি হ'ল লুপগুলি ডু-ওয়েল লুপগুলি হয় এবং হ্রাস এবং বৃদ্ধি বৃদ্ধি ব্যয়বহুল, তাই আমি সহজেই গণনা করতে পারি না (n-1)!(এর জন্য n > 0)। পরিবর্তে, আমি গণনা করছি n!এবং তারপরে nশেষে ভাগ করুন । আমি নিশ্চিত যে এর আরও ভাল সমাধান আছে।

যখন আমি এটি লিখতে শুরু করেছি, তখন আমি অনুভব করেছি যে -1হ্যামারস্মিথে সংরক্ষণ করা ভাল ধারণা হবে যাতে আমি আরও সস্তাভাবে হ্রাস করতে পারি, তবে শেষ পর্যন্ত এটি সংরক্ষণের চেয়ে বেশি খরচ হতে পারে। যদি আমি এটি পুনরায় করার ধৈর্য খুঁজে পাই, তবে আমি -1পরিবর্তে উপমিনস্টারে প্রায় রাখার চেষ্টা করব যাতে আমি হ্যামারস্মিথকে আরও দরকারী কিছু হিসাবে ব্যবহার করতে পারি।


10
লন্ডন টুরিং সম্পূর্ণ?
রোহান ঝুনঝুনওয়ালা

1
@ রোহানঝুনঝুনওয়ালা সম্ভবত
মার্টিন এন্ডার

কি দারুন! আমি ভালভাবে চিন্তাভাবনা করা প্রশ্নগুলি দেখতে পছন্দ করি। আমি বিশেষত এমন প্রশ্নগুলি দেখতে পছন্দ করি যেখানে আপনাকে কোনও প্রোগ্রাম লিখতে একটি প্রোগ্রাম লিখতে হয়।
রোহান ঝুনঝুনওয়ালা

27

ব্র্যাচল্যাগ (ভি 2), 1 বাইট

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

ব্র্যাচল্যাগ (ভি 1), 2 বাইট

#p

এটি বিল্ট-ইন প্রিকেট ব্যবহার করে #p - Prime, যা এটির ইনপুটটিকে একটি প্রধান সংখ্যা হিসাবে সীমাবদ্ধ করে।

ব্র্যাচল্যাগ প্রলোগের কোড গল্ফ সংস্করণ তৈরি করার জন্য আমার প্রয়াস, এটি একটি ঘোষিত কোড গল্ফ ভাষা যা ব্যাকট্র্যাকিং এবং একীকরণ ব্যবহার করে।

অন্তর্নির্মিত বিকল্প বিকল্প: 14 বাইট

ybbrb'(e:?r%0)

উপরের কোডটির একটি বিচ্ছেদ এখানে দেওয়া হল:

y            The list [0, …, Input]
bbrb         The list [2, …, Input - 1]
'(           True if what's in the parentheses cannot be proven; else false
     e           Take an element from the list [2, …, Input - 1]
     :?r%0       The remainder of the division of the Input but that element is 0
)

1
আপনি ব্র্যাকল্যাগ 2 সংস্করণটি পোস্টে সম্পাদনা করতে চাইতে পারেন, এখন সিনট্যাক্সটি বাইট সংক্ষিপ্ত।

1
@ ais523 সত্য, সম্পন্ন হয়েছে।

ব্র্যাচল্যাগ 2 উত্তর চ্যালেঞ্জ পোস্ট পোস্ট কি?
স্কট মিলনার

1
@ স্কটমিলনার হ্যাঁ, তবে এই চ্যালেঞ্জটিতে এটি স্পষ্টভাবে অনুমোদিত হয়েছে: "আমাদের সাধারণ নিয়মের মতো নয়, কোনও ভাষা (বা ভাষার সংস্করণ) এই চ্যালেঞ্জের চেয়ে নতুন হলেও ব্যবহার করতে নির্দ্বিধায়"
ফ্যাটালাইজ করুন

26

হাস্কেল, 49 বাইট

উইলসনের উপপাদ্যে এক্সনোরের করোলারি ব্যবহার :

main=do n<-readLn;print$mod(product[1..n-1]^2)n>0

এটা কি খাটো হবে না main=interact$\n-> ...?
জন ডিভোরাক

2
পাল্টা, না! বিবেচনা করুন যে আপনার interact...readকোথাও কোথাও এটি দরকার , যা এটিকে ন্যায়বিচারের চেয়ে অনেক দীর্ঘায়িত করে readLn। প্রায়শই doস্বরলিপিটি আপনার প্রত্যাশার চেয়ে আরও সংক্ষিপ্ত হতে পারে, বিশেষত যখন বিকল্পটি ল্যাম্বদা হয়।
লিন

24

ল্যাবরেথ , 29 বাইট

1
?
:
}  +{%!@
(:'(
 } {
 :**

STDIN এবং আউটপুট থেকে একটি পূর্ণসংখ্যা পড়ে ((n-1)!)^2 mod nউইলসনের উপপাদ্য এই চ্যালেঞ্জের জন্য বেশ কার্যকর।

প্রোগ্রামটি শীর্ষ-বাম কোণে শুরু হয়, 1যার সাহায্যে স্ট্যাকের শীর্ষটি 10 ​​দ্বারা গুণিত করে যোগ করা হয় 1. শুধু একটি 1 ঠেলাঠেলি।

?তারপরে nSTDIN থেকে পড়ে এবং :এটির সদৃশ করে। }মডিউলগুলির nজন্য শেষে ব্যবহৃত হতে পারে সহায়ক স্ট্যাকে স্থানান্তরিত। (তারপরে হ্রাস n, এবং আমরা বর্গাকার ফ্যাক্টরিয়াল গণনা শুরু করতে প্রস্তুত।

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

কারণ n = 1, যেহেতু স্ট্যাকের শীর্ষটি nহ্রাস 0পেয়েছে , বা আমরা সরাসরি এগিয়ে চলেছি। তারপরে আমরা একটি হ'ল অপ-টির 'পরে আর একটি হ্রাস (যা আমাদেরকে ফেলে দেয় -1। এটি নেতিবাচক, তাই আমরা সহায়ক স্ট্যাক থেকে মূল এবং মডুলো ( ) এ ফিরে যেতে , বাম দিকে, এক্সিকিউটিভ +প্লাস ( -1 + 0 = -1) বামে পরিণত করি । তারপরে আমরা আউটপুট এবং সাথে সমাপ্তি ।{n%-1 % 1 = 0!@

জন্য n > 1, দ্বিতীয় :দিকে আমরা ডান ঘুরিয়ে। এরপরে আমরা }আমাদের অনুলিপি করা লুপের কাউন্টারটিকে সহায়ক স্ট্যাকের দিকে স্থানান্তরিত করব, পাল্টাটি পিছনে স্থানান্তরিত করার আগে এবং হ্রাসের আগে নকল :এবং দু'বার গুন করুন । যদি আমরা এখনও ইতিবাচক হয় তবে আমরা ডানদিকে ঘোরার চেষ্টা করি তবে পারছি না, সুতরাং ল্যাবরেইথ আমাদের লুপটি চালিয়ে পরিবর্তে বাম দিকে পরিণত করে। অন্যথায়, স্ট্যাকের শীর্ষটি হল আমাদের লুপের কাউন্টার যা 0 এ হ্রাস পেয়েছে, যা আমরা আমাদের গণনাতে যুক্ত করি । অবশেষে, আমরা তারপর মডুলো , আউটপুট এবং সমাপ্তির সাথে ফিরে স্থানান্তর ।**{(+((n-1)!)^2n{%!@

আমি বলেছিলাম যে 'এটি কোনও অপশন নয়, তবে এটি ডিবাগিংয়ের জন্যও ব্যবহার করা যেতে পারে। -dস্ট্যাকের অবস্থা প্রতিবারের সাথে কেটে যাওয়ার পরে পতাকাটি 'দিয়ে দৌড়াও!


2
ঘটনামূলক স্কোয়ার করা সত্যিই দুর্দান্ত কৌশল
লিন

@ মরিস ধন্যবাদ! যদিও এটি যথাযথ যেখানে আমাকে জমা দেওয়ার দরকার আছে - আমি প্রথম এখানে
Sp3000

5
হ্যাঁ, প্রথম ভুলব্রত উত্তর আমার লেখা নয়! :)
মার্টিন ইন্ডার

24

বাশ + জিএনইউ ইউটিলিটিস, 16

  • @ ডেনিসকে 4 টি বাইট সংরক্ষণ করা হয়েছে

  • 2 বাইট @ লাইকেনস্টেইনকে ধন্যবাদ বাঁচিয়েছে

factor|awk NF==2

ইনপুটটি এসটিডিআইএন থেকে নেওয়া একটি লাইন। আউটপুট সত্যের পক্ষে মিথ্যা এবং খালি খালি স্ট্রিং। উদাহরণ:

$ ./pr.sh <<< 1
$ ./pr.sh <<< 2
2: 2
$ ./pr.sh <<< 3
3: 3
$ ./pr.sh <<< 4
$

2
শীতল, অন্য কোর্টিল সম্পর্কে শিখেছি। ক্ষেত্রের সংখ্যা গণনা করে আপনি দুটি অক্ষর factor|awk NF==2
ছাঁটাই করতে পারেন

@ লাকেনস্টেইন - ধন্যবাদ - কোনও কারণে আমি এর আগে আপনার মন্তব্যটি মিস করেছি :)
ডিজিটাল ট্রমা

আমি কিছুটা অনুরূপ পোস্ট করতে যাচ্ছিলাম, কেবল দীর্ঘ এবং এডাব্লুকে ছাড়াই। সুন্দরভাবে সম্পন্ন.
ডেভিড কনরাড

21

জাভা, 126 121 বাইট

আমার ধারণা, স্কোরবোর্ডের জন্য আমাদের একটি জাভা উত্তর প্রয়োজন ... সুতরাং এখানে একটি সাধারণ ট্রায়াল বিভাগ লুপ রয়েছে:

class P{public static void main(String[]a){int i=2,n=Short.valueOf(a[0]);for(;i<n;)n=n%i++<1?0:n;System.out.print(n>1);}}

জাভা হিসাবে যথারীতি, "সম্পূর্ণ প্রোগ্রাম" প্রয়োজনীয়তা এটির চেয়ে অনেক বড় করে তোলে এটি যদি কোনও ফাংশন হত তবে বেশিরভাগ mainস্বাক্ষরের কারণে ।

প্রসারিত আকারে:

class P{
    public static void main(String[]a){
        int i=2,n=Short.valueOf(a[0]);
        for(;i<n;)
            n=n%i++<1?0:n;
        System.out.print(n>1);
    }
}

সম্পাদনা করুন: মন্তব্যগুলিতে পিটার দ্বারা স্থির এবং পুনরুদ্ধার। ধন্যবাদ!


বগি: এটি প্রতিবেদন করে যে 1এটি প্রধান। অন্যথায় অপসারণ করে pএবং বলে দিয়ে 4-চার্চের সঞ্চয় হবেfor(;i<n;)n=n%i++<1?0:n;System.out.print(n>0);
পিটার টেলর

2
OTOH class P{public static void main(String[]a){int i=2,n=Short.valueOf(a[0]);for(;i<n;)n=n%i++<1?0:n;System.out.print(n>1);}}কাজ করে
পিটার টেলর

6
লাইন 3 থেকে 'দীর্ঘ i = 2, n = Long.valueOf (a [0]) তে পরিবর্তন করা; length এর ফলে দৈর্ঘ্যের কোনও পরিবর্তন হয় না তবে বৈধ ইনপুটগুলির বিস্তৃত পরিসীমা হয়।
জেমস কে

4
পরিবর্তে .valueOfআপনি newযেমন ব্যবহার করতে পারেন , new Short(a[0])বা new Long(a[0])যা কিছুটা খাটো।
ইসিএস

3
আপনি একটি ইন্টারফেস ব্যবহার করে এবং publicমডিফায়ারটি ফেলে দিয়ে 4 বাইট সংরক্ষণ করতে পারেন ।
রামেন শেফ

18

ব্রেন-ফ্লাক , 112 108 বাইট

({}[()]){((({})())<>){{}<>(({}<(({}[()])()<>)>)<>)<>{({}[()]<({}[()]<({}())>)>{(<()>)}{})}{}{}}}<>{{}}([]{})

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

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

প্রথমদিকে, প্রথম স্ট্যাকটিতে একটি ধনাত্মক পূর্ণসংখ্যা এন থাকবে , দ্বিতীয় স্ট্যাকটি খালি থাকবে।

আমরা নীচের হিসাবে এন হ্রাস দ্বারা শুরু ।

(
  {}      Pop n.
  [()]    Yield -1.
)       Push n - 1.

এন = 1

যদি এন = 1 শূন্য হয়, তবে লুপ হবে

{
  ((({})())<>)
  {
    {}<>(({}<(({}[()])()<>)>)<>)<>{({}[()]<({}[()]<({}())>)>{(<()>)}{})}{}{}
  }
}

পুরোপুরি বাদ দেওয়া হয়। অবশেষে, বাকি কোডটি কার্যকর করা হবে।

<>    Switch to the second stack (empty).
{}    Pop one of the infinite zeroes at the bottom.
{<>}  Switch stacks while the top on the active stack is non-zero. Does nothing.
(
  []    Get the length of the active stack (0).
  {}    Pop another zero.
)     Push 0 + 0 = 0.

n> 1

যদি n - 1 অ-শূন্য হয়, আমরা লুপটি প্রবেশ করান যা n = 1 এড়িয়ে যায়। এটি কোনও "আসল" লুপ নয়; কোডটি কেবল একবার কার্যকর করা হয়। এটি নিম্নলিখিত অর্জন করে।

{                   While the top of the active stack is non-zero:
  (
    (
      ({})                Pop and push n - 1.
      ()                  Yield 1.
    )                   Push n - 1 + 1 = n.
    <>                  Switch to the second stack. Yields 0.
  )                   Push n + 0 = n.
                      We now have n and k = n - 1 on the first stack, and n on
                      the second one. The setup stage is complete and we start
                      employing trial division to determine n's primality.
  {                   While the top of the second stack is non-zero:
    {}                  Pop n (first run) or the last modulus (subsequent runs),
                        leaving the second stack empty.
    <>                  Switch to the first stack.
    (
      (
        {}                  Pop n from the first stack.
        <
          (
            (
              {}              Pop k (initially n - 1) from the first stack.
              [()]            Yield -1.
            )               Push k - 1 to the first stack.
            ()              Yield 1.
            <>              Switch to the second stack.
          )               Push k - 1 + 1 = k on the second stack.
        >               Yield 0.
      )               Push n + 0 = n on the second stack.
      <>              Switch to the first stack.
    )               Push n on the first stack.
    <>              Switch to the second stack, which contains n and k.
                    The first stack contains n and k - 1, so it is ready for
                    the next iteration.
    {({}[()]<({}[()]<({}())>)>{(<()>)}{})}{}{}  Compute and push n % k.
  }               Stop if n % k = 0.
}               Ditto.

আমার বিভাজ্য পরীক্ষার উত্তর থেকে 42 % বাইট মডিউলাস অ্যালগরিদম ব্যবহার করে n% কে গণনা করা হয় ।

অবশেষে, আমরা n এর প্রাথমিকতা নির্ধারণের জন্য ফলাফলগুলি ব্যাখ্যা করি ।

<>    Switch to the first stack, which contains n and k - 1, where k is the
      largest integer that is smaller than n and divides n evenly.
      If (and only if) n > 1 is prime, k = 1 and (thus) k - 1 = 0.
{     While the top of the first stack is non-zero:
  {}    Pop it.
}     This pops n if n is prime, n and k - 1 if n is composite.
(
  []    Yield the height h of the stack. h = 1 iff n is prime).
  {}    Pop 0.
)     Push h + 0 = h.

2
আপনার স্ট্যাকের শেষ 0 টি পপ করার দরকার নেই, যেহেতু উপরে সত্যবাদী 1 যথেষ্ট; আপনি গত সরিয়ে দুই বাইট যে ভাবে সংরক্ষণ করতে পারবেন {}
স্টিভেন এইচ।

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

আমি ব্রেন- 1 0ফ্ল্যাকের নির্মাতার সাথে যাচাই করেছি যা সত্য। chat.stackexchange.com/transcript/message/32746241#32746241
স্টিভেন এইচ


17

আর, 37 29 বাইট

n=scan();cat(sum(!n%%1:n)==2)

ট্রায়াল বিভাগ ব্যবহার করে। scan()STDIN থেকে একটি পূর্ণসংখ্যা পড়ে এবং STDOUT এ cat()লেখেন।

আমরা nসংখ্যার 1 থেকে nমডুলোর সমন্বয়ে দৈর্ঘ্যের একটি ভেক্টর তৈরি করি n। ( !) কে উপেক্ষা করে আমরা প্রতিটি 0 হয় কিনা তা পরীক্ষা করে দেখি , যা 0 এর চেয়ে বড় হলে 0 এবং মিথ্যা হলে লজিক্যাল মানটি দেয় যা লজিকাল ভেক্টরের যোগফল হ'ল সত্য উপাদানগুলির সংখ্যা এবং মূল সংখ্যাগুলির জন্য আমরা প্রত্যাশা করি একমাত্র ননজারো মডুলিটি 1 হবে এবং nএইভাবে আমরা যোগফলটি 2 হওয়ার আশা করি।

ফ্লাডেলের জন্য 8 টি বাইট সংরক্ষণ করা হয়েছে!


সঙ্গে f=function(x)sum(!x%%1:x)==2যদি আপনি এটি 28 বাইটে করতে পারেন।
মুতাদোর

2
@ AndréMuta এই চ্যালেঞ্জের জন্য, সমস্ত সাবমিশনগুলি কেবলমাত্র ফাংশনগুলির চেয়ে পূর্ণ প্রোগ্রাম হতে হবে। যদিও পরামর্শ জন্য ধন্যবাদ।
অ্যালেক্স এ

17

টিআই-বেসিক, 12 বাইট

2=sum(not(fPart(Ans/randIntNoRep(1,Ans

অনেকটাই অকপট. randIntNoRep(1 থেকে শুরু করে সমস্ত সংখ্যার একটি এলোমেলোভাবে অনুমতি দেয় Ans

এটি নিয়মগুলি কিছুটা বাঁকায়; কারণ টিআই-বেসিকের তালিকাগুলি আমার ব্যাখ্যা করা 999 উপাদানের মধ্যে সীমাবদ্ধ

ধরে নিই যে ইনপুটটি আপনার ডেটা টাইপের মধ্যে সংরক্ষণ করা যায়

অর্থাত্ সমস্ত ডেটাটাইপগুলি ইনপুটটি সামঞ্জস্য করতে পারে। ওপি এই ব্যাখ্যার সাথে একমত।

একটি 17 বাইট সমাধান যা আসলে 10 ^ 12 বা আরও বেশি পর্যন্ত কাজ করে:

2=Σ(not(fPart(Ans/A)),A,1,Ans

@ টুথব্রাশ টিআই-বেসিক একটি টোকেনাইজড ভাষা, সুতরাং এখানে প্রতিটি টোকেন একটি বাইট, randIntNoRep(দুটি বাদে ।
lirtosiast

+1 আহ, আমি টিএল-বেসিক এর আগে কখনও দেখিনি। আমাকে জানানোর জন্য ধন্যবাদ
টুথব্রাশ

1
যদিও, এটা হয় একটু অন্যায্য তা না হয়, না ...? আমার একটি গল্ফিংয়ের ভাষা লিখতে হবে যার জন্য কেবল 1-4 বাইট (প্রশ্ন আইডি) এবং তারপরে প্যারামিটারগুলি দরকার। এটি যে ভাষাটি বোঝে সে ভাষায় এটি শীর্ষ উত্তরটি বেছে নেবে, এটি সম্পাদন করবে (কোনও পরামিতি পেরিয়ে যাবে) এবং ফলাফলটি ফিরিয়ে দেবে ... আমি বিস্মিত হই যে এটি নিয়মগুলি ভঙ্গ করছে কিনা? :-)
টুথব্রাশ

@ টুথ ব্রাশ টিআই-বেসিকের প্রতিরক্ষায়: দোভাষীর কাছে, এটি পাইথ এবং সিজেমের এক-চরিত্রের কমান্ডের চেয়ে অন্যায্য নয়, এবং টিআই-বেসিক আরও পাঠযোগ্য।
lirtosiast

1
সত্য। আমি এই ধরণের ভাষাগুলি অপছন্দ করি, যেহেতু প্রায় প্রতিটি অন্যান্য ভাষায় সমাধান দীর্ঘ হয় ... যদিও আমি সম্প্রতি ভিবি 6 দিয়ে সিজেমকে পরাজিত করেছি ! : -]
টুথব্রাশ

15

প্যারি / জিপি, 21 বাইট

print(isprime(input))

হাস্যকরভাবে বড় ইনপুটগুলির জন্য কাজ করে, কারণ এই জাতীয় জিনিসটি PARI / GP এর জন্য তৈরি।


6
isprimeএকটি এপিআর-সিএল প্রিমিলিটি প্রুফ করে, তাই ইনপুটগুলি খুব বড় হয়ে যাওয়ার ফলে বেশ খানিকটা ধীর হয়ে যায়। ispseudoprime(input)একটি এএস বিপিএসডাব্লু সম্ভাব্য প্রাইম টেস্ট করে, যা 100 টিরও বেশি সংখ্যার জন্য আরও দ্রুত হবে। 35 বছর পরে এখনও কোন পরিচিত কাউন্টারেক্সেলস নেই। ২০০২ সালের পূর্বের পরীর সংস্করণ ২.১ এবং এর আগের সংস্করণে একটি ভিন্ন পদ্ধতি ব্যবহার করা হয়েছে যা সহজেই ভুল ফলাফল দিতে পারে, তবে কারওাই এটি ব্যবহার করা উচিত নয়।
ডানাজে

15

টিআই-বেসিক, 24 বাইট

নোট করুন যে টিআই-বেসিক প্রোগ্রামগুলি একটি টোকেন সিস্টেম ব্যবহার করে, তাই অক্ষর গণনা করা প্রোগ্রামটির আসল বাইট মান দেয় না।

থমাস কোয়ার জবাব উপস্থাপন করুন , এটি শ্রেষ্ঠ।

:Prompt N
:2
:While N≠1 and fPart(N/Ans
:Ans+1
:End
:N=Ans

নমুনা:

N=?1009
                         1
N=?17
                         1
N=?1008
                         0
N=?16
                         0

এখন 0প্রাইম না 1হলে , বা যদি তা ফেরত দেয় ।


3
স্কয়ার রুটটি কি কেবলমাত্র একটি অপ্টিমাইজেশন নয় যা আপনার প্রোগ্রামটি সঠিক হওয়ার জন্য আসলে প্রয়োজন নেই?
মার্টিন এন্ডার

কেন আপনার দুটি ভাগ করে নেওয়া দরকার?
জিওবিটস

আমি সবসময় টিআই-বেসিক উত্তর পছন্দ করি।
গ্রান্ট মিলার

15

স্ট্যাক বিড়াল , 62 + 4 = 66 বাইট

*(>:^]*(*>{<-!<:^>[:((-<)<(<!-)>>-_)_<<]>:]<]]}*<)]*(:)*=<*)>]

-lnকমান্ড-লাইন পতাকাগুলি (তাই +4 বাইট) দিয়ে চালানো দরকার । 0সম্মিলিত সংখ্যা এবং 1প্রাইমগুলির জন্য মুদ্রণ ।

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

আমি মনে করি এটি প্রথম অ-তুচ্ছ স্ট্যাক বিড়াল প্রোগ্রাম।

ব্যাখ্যা

একটি দ্রুত স্ট্যাক বিড়াল পরিচয়:

  • স্ট্যাক বিড়ালগুলি স্ট্যাকের অসীম টেপটিতে চালিত হয়, একটি টেপ মাথা একটি বর্তমান স্ট্যাকের দিকে নির্দেশ করে। প্রতিটি স্ট্যাক শুরুতে অসীম পরিমাণ জিরো দিয়ে পূর্ণ হয়। আমি সাধারণত আমার কথার মধ্যে এই শূন্যগুলিকে অগ্রাহ্য করব, সুতরাং যখন আমি "স্ট্যাকের নীচে" বলি তখন আমি সর্বনিম্ন নন-শূন্য মানটি বোঝাই এবং যদি আমি "স্ট্যাকটি খালি হয়" বলতে চাই তবে তার মানে কেবলমাত্র শূন্য রয়েছে।
  • প্রোগ্রামটি শুরুর আগে একটি -1প্রাথমিক স্ট্যাকের দিকে ধাক্কা দেওয়া হয় এবং তারপরে পুরো ইনপুটটিকে ধাক্কা দেওয়া হয়। এই ক্ষেত্রে, -nপতাকার কারণে , ইনপুটটি দশমিক পূর্ণসংখ্যা হিসাবে পড়ে।
  • প্রোগ্রাম শেষে, বর্তমান স্ট্যাক আউটপুট জন্য ব্যবহৃত হয়। নীচে যদি একটি -1থাকে তবে তা উপেক্ষা করা হবে। আবার -nপতাকাটির কারণে , স্ট্যাকের মানগুলি কেবল লাইনফিড-বিচ্ছিন্ন দশমিক পূর্ণসংখ্যার হিসাবে মুদ্রিত হয়।
  • স্ট্যাক বিড়ালগুলি একটি বিপরীত প্রোগ্রামের ভাষা: কোডের প্রতিটি টুকরোটি পূর্বাবস্থায় ফেলা যায় (স্ট্যাক বিড়াল কোনও স্পষ্ট ইতিহাসের সন্ধান না করে)। আরো নির্দিষ্টভাবে, কোডের কোন টুকরা বিপরীত, তবে আপনি এটিকে কেবল মিরর, যেমন <<(\-_)হয়ে (_-/)>>। এই নকশার লক্ষ্যটি ভাষাতে কোন ধরণের অপারেটর এবং নিয়ন্ত্রণ প্রবাহের কাঠামো বিদ্যমান এবং বিশ্বব্যাপী স্মৃতি অবস্থার উপর আপনি কী ধরণের ক্রিয়াগুলি গণনা করতে পারেন তার উপর যথেষ্ট কঠোর বিধিনিষেধ সৃষ্টি করে।
  • এটি সর্বোপরি, প্রতিটি স্ট্যাক বিড়াল প্রোগ্রাম স্ব-প্রতিসাম্য হতে হবে। আপনি লক্ষ্য করতে পারেন যে এটি উপরের উত্স কোডের ক্ষেত্রে নয়। এই কি -lপতাকার: এটি পরোক্ষভাবে, বাম কোড প্রতিফলিত কেন্দ্রের প্রথম অক্ষর ব্যবহার করে। সুতরাং আসল প্রোগ্রামটি হ'ল:

    [<(*>=*(:)*[(>*{[[>[:<[>>_(_-<<(-!>)>(>-)):]<^:>!->}<*)*[^:<)*(>:^]*(*>{<-!<:^>[:((-<)<(<!-)>>-_)_<<]>:]<]]}*<)]*(:)*=<*)>]
    

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

সুতরাং এই উত্তরে, উল্লিখিত প্যাটার্নের টেম্পলেটটি এটি (এটি কীভাবে কার্যকর হয় তার কিছু পরিবর্তনশীলতা রয়েছে):

[<(...)*(...)>]

প্রোগ্রামটি শুরু হওয়ার পরে, স্ট্যাক টেপটি দেখতে এরকম দেখাচ্ছে (ইনপুটটির জন্য 4, বলুন):

     4    
... -1 ...
     0
     ^

[প্যাচসমূহ বাঁদিকে স্ট্যাকের উপরে (এবং বরাবর টেপ মাথা) - আমরা কল এই "ঠেলাঠেলি"। এবং <টেপ মাথা একা সরানো। প্রথম দুটি কমান্ডের পরে, আমরা এই পরিস্থিতি পেয়েছি:

...   4 -1 ...
    0 0  0
    ^

এখন এটি (...)একটি লুপ যা শর্তসাপেক্ষ হিসাবে বেশ সহজেই ব্যবহার করা যেতে পারে: বর্তমান স্ট্যাকের শীর্ষটি ইতিবাচক হলে লুপটি প্রবেশ করা হয় এবং ছেড়ে দেওয়া হয়। যেহেতু, এটি বর্তমানে শূন্য, আমরা প্রোগ্রামের প্রথমার্ধটি এড়িয়ে চলেছি। এখন সেন্টার কমান্ডটি *। এই কেবল হয় XOR 1, অর্থাত্ এটা স্ট্যাকের উপরে অন্তত গুরুত্বপূর্ণ বিট টগল, এবং এই ক্ষেত্রে সক্রিয় 0একটি মধ্যে 1:

... 1 4 -1 ...
    0 0  0
    ^

এখন আমরা এর আয়না চিত্র সম্মুখীন (...)। এই সময় স্ট্যাক উপরের ইতিবাচক এবং আমরা কি কোডটি লিখুন। প্রথম বন্ধনীগুলির মধ্যে কী চলছে তা খতিয়ে দেখার আগে, আমাকে বোঝাতে দিন যে আমরা কীভাবে শেষ করে ফেলব: আমরা এই বিষয়টি নিশ্চিত করতে চাই যে এই ব্লকের শেষে, আমাদের আবার টেস্টের মাথাটি ইতিবাচক মানের রয়েছে (যাতে লুপ একটি একক পুনরাবৃত্তির পর শেষ হয় এবং একটি রৈখিক শর্তসাপেক্ষ যেমন কেবল ব্যবহার করা হয়), যে ডানদিকে স্ট্যাক আউটপুট ঝুলিতে এবং স্ট্যাকের ঠিক যে একটি ঝুলিতে -1। যদি এটি হয় তবে আমরা লুপটি ছেড়ে দেই না, >আউটপুট মানটির দিকে চলে যাই এবং ]এটিতে ধাক্কা দেয় -1যাতে আউটপুট জন্য আমাদের একটি পরিষ্কার স্ট্যাক থাকে।

এটাই ঐটা. এখন প্রথম বন্ধনের অভ্যন্তরে আমরা যতক্ষণ না আমরা পূর্ববর্তী অনুচ্ছেদে বর্ণিত জিনিসগুলি সেট আপ করেছি (যা সহজেই কিছু ঠেলাঠেলি এবং টেপ হেড মুভিং দিয়ে সম্পন্ন করা যেতে পারে) সেট করে নিই তা নিশ্চিত করি যতক্ষণ না আমরা প্রারম্ভিকতা যাচাই করতে চাই যতক্ষণ করতে পারি can আমি প্রথমে উইলসনের উপপাদ্যটি দিয়ে সমস্যাটি সমাধান করার চেষ্টা করেছি তবে 100 বাইটেরও বেশি ভালভাবে শেষ করেছি, কারণ স্ট্যাক বিড়ালগুলিতে স্কোয়ার্ড ফ্যাক্টরিয়াল গণনাটি আসলে বেশ ব্যয়বহুল (কমপক্ষে আমি কোনও ছোট পথ খুঁজে পাইনি)। সুতরাং আমি পরিবর্তে ট্রায়াল বিভাগের সাথে গিয়েছিলাম এবং এটি প্রকৃতপক্ষে আরও সহজ সরল। আসুন প্রথম লিনিয়ার বিটটি দেখুন:

>:^]

ইতিমধ্যে আপনি এই দুটি কমান্ড দেখেছেন। উপরন্তু, :বর্তমান স্ট্যাকের উপরে দুইটি মানের বিনিময়সমূহ এবং ^শীর্ষ মান মধ্যে দ্বিতীয় মান XORs। এটি :^একটি শূন্য স্ট্যাকের কোনও মান নকল করতে একটি সাধারণ প্যাটার্ন তৈরি করে (আমরা মানটির উপরে একটি শূন্য টানি এবং তারপরে শূন্যকে রূপান্তর করি 0 XOR x = x)। সুতরাং এটির পরে, বিভাগটি আমাদের টেপটিকে এমন দেখাচ্ছে:

         4    
... 1 4 -1 ...
    0 0  0
         ^

আমি প্রয়োগ করা ট্রায়াল বিভাগের অ্যালগরিদম ইনপুটটির জন্য কাজ করে না 1, তাই আমাদের সেই ক্ষেত্রে কোডটি এড়ানো উচিত। আমরা সহজেই এবং অন্য যে কোনও কিছু দিয়ে ইতিবাচক মানগুলিতে মানচিত্র 1করতে 0পারি *, তাই আমরা কীভাবে করব তা এখানে রয়েছে:

*(*...)

যে আমরা পালা 1মধ্যে 0, কোড একটা বড় অংশ লাফালাফি যদি আমরা প্রকৃতপক্ষে পেতে 0, কিন্তু ভিতরে আমরা অবিলম্বে পূর্বাবস্থা *যাতে আমরা আমাদের ইনপুট মান ফিরুন। আমাদের কেবল আবার এটি নিশ্চিত করা দরকার যে আমরা প্রথম বন্ধনীগুলির শেষে একটি ইতিবাচক মান নিয়ে এসেছি যাতে তারা লুপিং শুরু না করে। শর্তসাপেক্ষে, আমরা একটি স্ট্যাকটি ডানদিক দিয়ে সরান >এবং তারপরে মূল ট্রায়াল বিভাগ লুপটি শুরু করি:

{<-!<:^>[:((-<)<(<!-)>>-_)_<<]>:]<]]}

ধনুর্বন্ধনী (প্রথম বন্ধনীগুলির বিপরীতে) একটি ভিন্ন ধরণের লুপ সংজ্ঞায়িত করে: এটি একটি ডু-ওয়েল লুপ, যার অর্থ এটি সর্বদা কমপক্ষে একটি পুনরাবৃত্তির জন্য চলে। অন্য পার্থক্যটি সমাপ্তির শর্ত: লুপে প্রবেশের সময় স্ট্যাক বিড়াল বর্তমান স্ট্যাকের শীর্ষ মান মনে করে ( 0আমাদের ক্ষেত্রে)। লুপটি তখন চলবে যতক্ষণ না কোনও পুনরাবৃত্তির শেষে একই মানটি আবার দেখা না যায়। এটি আমাদের জন্য সুবিধাজনক: প্রতিটি পুনরাবৃত্তিতে আমরা কেবলমাত্র পরবর্তী সম্ভাব্য বিভাজকের বাকী অংশটি গণনা করি এবং এটিকে স্ট্যাকের উপরে সরিয়ে আমরা লুপটি চালু করি starting যখন আমরা কোনও বিভাজনকারী পাই, তখন বাকীটি থাকে 0এবং লুপটি বন্ধ হয়ে যায়। আমরা বিভাজনকারীদের শুরু করে চেষ্টা করব n-1এবং তারপরে সেগুলি হ্রাস করব 1। এর অর্থ ক) আমরা জানি আমরা পৌঁছালে এটি শেষ হবে1সর্বশেষে এবং খ) আমরা তারপরে আমরা চেষ্টা করেছিলাম এমন শেষ বিভাজকটি পরীক্ষা করে (যদি এটি হয় তবে এটি সেক্ষেত্রে সংখ্যাটি প্রধান কিনা তা নির্ধারণ করতে পারি1, এটি প্রধান, অন্যথায় এটি নয়) isn't

আসুন এটি পেতে। শুরুতে একটি সংক্ষিপ্ত রৈখিক বিভাগ রয়েছে:

<-!<:^>[:

আপনি জানেন যে এই সময়ের মধ্যে বেশিরভাগ কী করে do নতুন কমান্ডগুলি হ'ল -এবং !। স্ট্যাক বিড়ালগুলির ইনক্রিমেন্ট বা হ্রাস অপারেটর নেই। তবে এটির -(অবহেলা, অর্থাত্ গুণ দ্বারা -1) এবং !(বিটওয়াইজ নট, অর্থাত্ গুণফল -1এবং হ্রাস) রয়েছে। এগুলিকে হয় একটি ইনক্রিমেন্ট !-, বা হ্রাসের সাথে একত্রিত করা যেতে পারে -!। সুতরাং আমরা এর nউপরে থাকা অনুলিপিটি হ্রাস করব -1, তার পরে nস্ট্যাকের বাম দিকে অন্য একটি অনুলিপি তৈরি করুন, তারপরে নতুন ট্রায়াল ডিভাইডারটি আনুন এবং এটি নীচে রাখুন n। সুতরাং প্রথম পুনরাবৃত্তিতে, আমরা এটি পেয়েছি:

      4       
      3       
... 1 4 -1 ...
    0 0  0
      ^

আরও পুনরাবৃত্তিতে, 3পরের পরীক্ষার বিভাজক এবং এর সাথে প্রতিস্থাপন করা হবে (যেখানে দুটি কপি nসর্বদা এই সময়ে একই মান হবে)।

((-<)<(<!-)>>-_)

এটি হল মডুলো গণনা। যেহেতু লুপগুলি ইতিবাচক মানগুলিতে সমাপ্ত হয়, তাই ধারণাটি হ'ল আমরা ইতিবাচক মান না পাওয়া পর্যন্ত এটিতে -nট্রায়াল বিভাজকটি পুনরায় শুরু করা এবং বারবার যুক্ত করা d। একবার আমরা এটি করার পরে, আমরা ফলাফলটি বিয়োগ করি dএবং এটি আমাদের বাকীটি দেয়। এখানে জটিল কিছুটি হ'ল আমরা কেবল -nস্ট্যাকের উপরে একটি উপরে রাখা এবং একটি লুপ শুরু করতে পারি না যা যুক্ত করে d: যদি স্ট্যাকের শীর্ষটি নেতিবাচক হয় তবে লুপটি প্রবেশ করা হবে না। এগুলি একটি বিপরীত প্রোগ্রামিং ভাষার সীমাবদ্ধতা।

সুতরাং এই সমস্যাটি রোধ করার জন্য, আমরা nস্ট্যাকের শীর্ষে শুরু করি , তবে এটি কেবল প্রথম পুনরাবৃত্তিতেই উপেক্ষা করি । আবার, এটি দেখতে আরও সহজ মনে হচ্ছে ...

(-<)

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

        -4       
         3       
...   1  4 -1 ...
    0 0  0  0
    ^

এবং দ্বিতীয় পুনরাবৃত্তিতে (মনে রাখবেন আমরা এখন dএকবারে যুক্ত করেছি -n):

      -1       
       3       
... 1  4 -1 ...
    0  0  0
    ^

পরবর্তী শর্তাধীন আবার এই পাথগুলিকে একত্রিত করে:

(<!-)

প্রথম পুনরাবৃত্তিতে টেপ মাথাটি শূন্যের দিকে নির্দেশ করে, তাই এটি পুরোপুরি এড়িয়ে যায়। আরও পুনরাবৃত্তির উপর, টেপ মাথাটি একবারে পয়েন্ট করে, সুতরাং আমরা এটি সম্পাদন করব, বাম দিকে সরে যাই এবং সেখানে ঘর বৃদ্ধি করি। যেহেতু আমরা জানি যে ঘরটি শূন্য থেকে শুরু হয়, এখন এটি সর্বদা ইতিবাচক হবে তাই আমরা লুপটি ছেড়ে যেতে পারি। এটি নিশ্চিত করে যে আমরা সবসময় মূল স্ট্যাকের দুটি স্ট্যাক বামে শেষ করি এবং এখনই ফিরে যেতে পারি >>। তারপরে মডিউল লুপ শেষে আমরা করি -_। আপনি ইতিমধ্যে জানেন -_এক্সওআর কে কী বিয়োগ তা ^হল: যদি স্ট্যাকের শীর্ষটি হয় aএবং নীচের মানটি bএটি প্রতিস্থাপন aকরে b-a। যেহেতু আমরা প্রথমে aযদিও -_অবহেলা aকরেছি b+a, এর সাথে প্রতিস্থাপন করে , এর সাথে যুক্ত করছিd আমাদের চলমান মোট মধ্যে।

লুপটি শেষ হওয়ার পরে (আমরা একটি ইতিবাচক পৌঁছেছি) মানটি টেপটিকে দেখে মনে হচ্ছে:

        2       
        3       
... 1 1 4 -1 ...
    0 0 0  0
        ^

বাম-সর্বাধিক মান কোনও ধনাত্মক সংখ্যা হতে পারে। আসলে, এটি পুনরাবৃত্তির সংখ্যা বিয়োগ এক। এখন আর একটি ছোট লিনিয়ার বিট আছে:

_<<]>:]<]]

আমি আগে যেমন বলেছিলাম dআসল অবশিষ্ট ( 3-2 = 1 = 4 % 3) প্রাপ্ত করার জন্য আমাদের ফলাফলটি বিয়োগ করা দরকার , সুতরাং আমরা _আরও একবার করলাম do এরপরে, আমাদের বাম দিকে বৃদ্ধি করা স্ট্যাকটি পরিষ্কার করতে হবে: আমরা যখন পরবর্তী বিভাজকটি চেষ্টা করি তখন প্রথম পুনরাবৃত্তির কাজ করার জন্য এটি আবার শূন্য হওয়া দরকার। সুতরাং আমরা সেখানে স্থানান্তরিত করি এবং সেই ধনাত্মক মানটিকে অন্য সহায়ক সহায়ক স্ট্যাকের সাথে চাপি <<]এবং তারপরে অন্যটির সাথে আমাদের অপারেশনাল স্ট্যাকের দিকে ফিরে যাই >। আমরা মুঠি ধরে টেনে তুলবো dসঙ্গে :নিজের গ্রামে ফিরে ধাক্কা সম্মুখের -1সঙ্গে ]এবং তারপর আমরা আমাদের শর্তসাপেক্ষ স্ট্যাকের সম্মুখের বাকি সরানো <]]। এটি ট্রায়াল বিভাগের লুপের সমাপ্তি: এটি শূন্যের অব্যাহত না পাওয়া পর্যন্ত অব্যাহত থাকে, যার ক্ষেত্রে বামদিকে স্ট্যাক থাকেnসবচেয়ে বড় বিভাজক (ব্যতীত n)।

লুপটি শেষ হওয়ার পরে, *<আমরা 1আবার ইনপুট দিয়ে পাথে যোগদানের ঠিক আগে । *কেবল একটি মধ্যে শূন্য সক্রিয় 1, যা আমরা কিছুক্ষনের মধ্যে প্রয়োজন হবে, এবং তারপর আমরা সঙ্গে ভাজক সরাতে <(যাতে আমরা ইনপুট জন্য হিসাবে একই স্ট্যাক করছি 1)।

এই সময়ে এটি তিনটি বিভিন্ন ধরণের ইনপুট তুলনা করতে সহায়তা করে। প্রথমত, বিশেষ ক্ষেত্রে n = 1যেখানে আমরা সেই ট্রায়াল বিভাগের কোনও কাজই করি নি:

         0    
... 1 1 -1 ...
    0 0  0
         ^

তারপরে, আমাদের পূর্ববর্তী উদাহরণ n = 4, একটি সংমিশ্রণ সংখ্যা:

    2           
    1    2 1    
... 1 4 -1 1 ...
    0 0  0 0
         ^

এবং অবশেষে, n = 3একটি প্রধান সংখ্যা:

    3           
    1    1 1    
... 1 3 -1 1 ...
    0 0  0 0
         ^

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

]*(:)*=<*

]এই মানটি ডানদিকে ঠেলে দেয়। এরপরে *শর্তাধীন পরিস্থিতিটি সহজতর করতে ব্যবহৃত হয়: কমপক্ষে উল্লেখযোগ্য বিটটি টগল করে আমরা 1(প্রাইম) 0, 0(সংমিশ্রিত) ধনাত্মক মানে রূপান্তরিত করি 1এবং অন্যান্য সমস্ত ধনাত্মক মানগুলি এখনও ইতিবাচক থাকবে। এখন আমাদের কেবল 0ধনাত্মক এবং ধনাত্মক পার্থক্য করা প্রয়োজন । আমরা যেখানে অন্য একটি ব্যবহার (:)। যদি স্ট্যাকের শীর্ষটি হয় 0(এবং ইনপুটটি একটি প্রধান ছিল), এটি কেবল এড়ানো যায়। তবে যদি স্ট্যাকের শীর্ষটি ইতিবাচক হয় (এবং ইনপুটটি একটি যৌগিক সংখ্যা ছিল) এটি এটির সাথে অদলবদল করে 1, যাতে এখন আমাদের 0সংমিশ্রিত এবং1প্রাইমগুলির জন্য - কেবল দুটি স্বতন্ত্র মান। অবশ্যই, আমরা যা আউটপুট করতে চাই তার বিপরীতে, তবে এটি অন্যটির সাথে সহজেই স্থির হয়ে গেছে *

এখন যে সব বাম আসুন আমাদের পার্শ্ববর্তী কাঠামোর দ্বারা প্রত্যাশিত স্ট্যাকগুলি ধরনে পুনঃস্থাপন হল: একটি পজিটিভ মূল্যের ওপর টেপ মাথা ডানদিকে স্ট্যাকের উপর স্থাপিত, এবং একটি একক -1স্ট্যাক ডান দিকে যে । এই কি =<*জন্য হয়। =দুটি সংলগ্ন স্ট্যাকের শীর্ষগুলি অদলবদল করে, -1ফলস্বরূপ ডানদিকে সরানো , যেমন 4: ইনপুটটির জন্য আবার:

    2     0       
    1     3       
... 1 4   1 -1 ...
    0 0 0 0  0
          ^

তারপরে আমরা কেবল বাম দিকে সরে যাই <এবং সেই শূন্যটিকে একটিতে পরিণত করি *। এবং এটি।

আপনি যদি প্রোগ্রামটি কীভাবে আরও গভীরভাবে খনন করতে চান তবে আপনি ডিবাগ বিকল্পগুলি ব্যবহার করতে পারেন। হয় -dপতাকা যুক্ত করুন এবং "যেখানে আপনি বর্তমান মেমরির অবস্থাটি দেখতে চান সেখানে sert োকান, যেমন এর মতো , বা পুরো প্রোগ্রামটির সম্পূর্ণ ট্রেস পেতে-D পতাকাটি ব্যবহার করুন । বিকল্পভাবে, আপনি টিমবির এসোটেরিসিড ব্যবহার করতে পারেন যার মধ্যে স্টেপ বিট ইন্টারপ্রেটার একটি ধাপে ধাপে ডিবাগারের সাথে রয়েছে।


3
>:^]অফিসিয়াল স্ট্যাক বিড়ালদের লোগো হওয়া উচিত
অ্যালেক্স এ।

14

হাস্কেল, 54 বাইট

import Data.Numbers.Primes
main=readLn>>=print.isPrime

বেশি কিছু বোঝাতে হবে না।


1
: একই স্কোর অর্জন করা যেতে পারে (যদিও খুব inefficiently) বহিরাগত লাইব্রেরি ছাড়া, উইলসন উপপাদ্য ব্যবহারmain=do n<-readLn;print$n>1&&mod(product[1..n-1]+1)n<1
লিন

9
আমরা আরও ছোট করতে পারি: main=do n<-readLn;print$mod(product[1..n-1]^2)n>049 বাইট।
লিন

4
@ মরিস: ভালো লাগছে। এটি আলাদা উত্তর হিসাবে পোস্ট করুন।
নিমি

14

রুবি, 15 + 8 = 23 বাইট

p$_.to_i.prime?

নমুনা রান:

bash-4.3$ ruby -rprime -ne 'p$_.to_i.prime?' <<< 2015
false

হেইহে, আমি জানতাম যে রুবিতে কোথাও একটি বিল্টিন থাকবে তবে আমি এটি সন্ধান করতে বিরক্ত হব না, তাই আমি সি +১ এ উত্তর দিয়েছি।
স্তর নদী সেন্ট

@ স্টিভেভারিল, আমি এটি জানতাম কারণ প্রজেক্ট ইউলারের জন্য এটি একটি বড় সহায়ক।
manatwork

14

জাভাস্ক্রিপ্ট, 39 36 বাইট

ETH প্রোডাকশনগুলিতে 3 বাইট সংরক্ষণ করা:

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

অন্যথায় মিথ্যা, কোনও প্রধানের জন্য সত্য প্রদর্শিত হবে।

জন্য লুপ প্রতি NUMBER পরীক্ষা আমি থেকে এন -1 পর্যন্ত আমি একটি ভাজক আছে। যদি পাওয়া প্রথম বিভাজকটি 1 হয় তবে এটি একটি প্রাথমিক সংখ্যা।


পূর্ববর্তী সমাধান (39 বাইট):

for(i=n=prompt();n%--i&&i;);alert(1==i)

কীভাবে একটি অপ্রয়োজনীয় পরীক্ষা বাকি ছিল:

for(i=2,n=prompt();n%i>0&&i*i<n;i++);alert(n%i>0) //49: Simple implementation: loop from 2 to sqrt(n) to test the modulo.
for(i=2,n=prompt();n%i>0&&i<n;i++);alert(n==i)    //46: Replace i*i<n by i<n (loop from 2 to n) and replace n%i>0 by n==i
for(i=2,n=prompt();n%i&&i<n;i++);alert(n==i)      //44: Replace n%i>0 by n%i
for(i=2,n=prompt();n%i&&i++<n;);alert(n==i)       //43: Shorten loop increment
for(i=n=prompt();n%--i&&i>0;);alert(1==i)         //41: Loop from n to 1. Better variable initialization.
for(i=n=prompt();n%--i&&i;);alert(1==i)           //39: \o/ Replace i>0 by i

আমি কেবল 39 বাইট সমাধান পোস্ট করেছি কারণ সেরা জাভাস্ক্রিপ্ট উত্তর ইতিমধ্যে 40 বাইট ছিল।


2
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম!
ডেনিস

2
দুর্দান্ত উত্তর! &&iআসলে এই প্রোগ্রামে কিছু না, তাই আপনি এটিকে সরাতে পারেন।
ETH প্রোডাকশনস

n>1চূড়ান্ত শর্ত যোগ করা উচিত যদিও, আপনি 1প্রধান হতে চান না ।
টাইটাস

1
@ টিটাস যদি ইনপুটটি হয় 1তবে লুপটি n%--iএকবার করবে : 1%0ফিরে আসে NaNএবং লুপটি থামায়। যখন alertবলা হয় iইতিমধ্যে সমান 0তাই 1==iআয় false
হেডি 20

2
i <2 (এবং কিছু পাঠ্য)
স্কিনটোড

13

শামুক, 122

ইনপুট আনারিতে দেওয়া উচিত। অঙ্কগুলি নিউলাইনগুলি বাদে কোনও অক্ষরের মিশ্রণ হতে পারে।

^
..~|!(.2+~).!~!{{t.l=.r=.}+!{t.!.!~!{{r!~u~`+(d!~!.r~)+d~,.r.=.(l!~u~)+(d!~l~)+d~,.l.},l=(.!.)(r!~u~)+(d!~!.r~)+d~,.r.!.

এই 2 ডি প্যাটার্ন মেলানো ভাষার ক্ষেত্রে, প্রোগ্রামের অবস্থাটি কেবলমাত্র বর্তমান গ্রিডের অবস্থান, মেলে এমন কক্ষগুলির সেট এবং প্যাটার্ন কোডে অবস্থান নিয়ে গঠিত। মিলে যাওয়া স্কোয়ারে ভ্রমণ করাও অবৈধ। এটি জটিল, তবে তথ্য সঞ্চয় এবং পুনরুদ্ধার করা সম্ভব। একটি মিলেছে সেল সম্মুখের ভ্রমণ বিরুদ্ধে সীমাবদ্ধতা backtracking teleporting (দ্বারা পরাস্ত করা যাবে t) এবং গবেষকেরা ( =, !) যা গ্রিড পর অপরিবর্তিত ছেড়ে।

25 এর কারখানাকরণ

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

টীকাবিহীন কোড:

^                         Match only at the first character
..~ |                     Special case to return true for n=2
!(.2 + ~)                 Fail for even numbers
. !~                      Match 1st character and fail for n=1
!{                        If the bracketed pattern matches, it's composite.
  (t. l=. r=. =(.,~) )+   Teleport to 1 or more chars and match them (blue in graphic)
                          Only teleport to ones that have an unmatched char on each side.
                          The =(.,~) is removed in the golfed code. It forces the
                          teleports to proceed from left to right, reducing the
                          time from factorial to exponential.
  !{                      If bracketed pattern matches, factorization has failed.
    t . !. !~             Teleport to a square to the left of a blue square (yellow in diagram)
    !{                    Bracketed pattern verifies equal number of spaces to
                          the left or right of a blue square.
      {              
        (r!~ u~)+         Up...
        (d!~!. r~)+       Right...
        d~,               Down...
        . r . =.          Move 1 to the right, and check that we are not on the edge;
                          otherwise d~, can fall off next iteration and create and infinite loop
        (l!~ u~)+         Up...
        (d!~ l~)+         Left...
        d ~,              Down...
        . l .             Left 1
      } ,                 Repeat 0 or more times
      l  =(. !.)          Check for exactly 1 unused char to the left
      (r!~ u~)+           Up...
      (d!~!. r~)+         Right...
      d ~,                Down...
      . r . !.
    }
  }
}

13

সি, 67 বাইট

i,n;main(p){for(scanf("%d",&i),n=i;--i;p=p*i*i%n);putchar(48+p%n);}

ছাপে !1(ক falsey মান দ্বারা, পিটার টেইলরের সংজ্ঞা ) 0 যদি (n-1)!^2 == 0 (mod n), এবং 1অন্যথায়।

সম্পাদনা : puts("!1"+p%n)আড্ডায় কিছু আলোচনার পরেও কিছুটা প্রতারণাপূর্ণ বলে মনে হয়, তাই আমি এটি প্রতিস্থাপন করেছি। ফল এক বাইট দীর্ঘ।

সম্পাদনা : বড় ইনপুট জন্য স্থির।

সংক্ষিপ্ত সমাধান

by বাইট : পাওয়েল.বোকসারস্কির মন্তব্যে যেমন সুপারিশ করা হয়েছে, আমি কমান্ড লাইন আর্গুমেন্টের সংখ্যাটি পড়ে আনারিতে ইনপুট নিতে পারি:

p=1,n;main(i){for(n=--i;--i;p=p*i*i%n);putchar(48+p%n);}

প্রোগ্রাম মত অনুরোধ

$ ./a.out 1 1 1 1 1
1                        <-- as 5 is prime

51 বাইট : আপনি যদি রিটার্ন কোডের মাধ্যমে "আউটপুট" মঞ্জুরি দেন:

p=1,n;main(i){for(n=--i;--i;p=p*i*i%n);return p%n;}

আপনার সমাধানটি অ্যানারি উপস্থাপন (কমান্ডলাইন আর্গুমেন্টের সংখ্যা) ব্যবহার করে আরও সংক্ষিপ্ত করা যেতে পারে, যেমন পোস্ট করা আমার দ্রষ্টব্য। আপনি স্ক্যানফ কলটিতে কিছু বাইট ছাঁটাই করতে পারেন।
pawel.boczarski

puts("!1"+p%n)আপনি কি কখনও মূল্যবোধ a+bজন্য করতে পারেন char*?
এরিক আউটগল্ফার

যদি স্ট্রিং "!1"ঠিকানায় শুরু হয় a, তবে a+1আপনি স্ট্রিংটি খুঁজে পাবেন "1"
লিন

@Lynn ওহ, আমি ভেবেছিলাম এটা সংযুক্তকরণের ছিল (হাঁ, ভাল ছেড়ে যে করতে strcat(const char*,const char*)।)
এরিক Outgolfer

আপনি কি পরিবর্তন p=p*i*i%nকরতে পারেনp*=i*i%n
অ্যালবার্ট রেনশো

12

পাইথন 3, 59 বাইট

এখন input()কমান্ড লাইন আর্গুমেন্টের পরিবর্তে ব্যবহার করে। @ বেটা ডেকে কে ধন্যবাদ

n=int(input())
print([i for i in range(1,n)if n%i==0]==[1])

ইনপুটটি ব্যবহার করে input()নেওয়া আরও খাটো হবে
বিটা ডেক

ধন্যবাদ, আমি ইতিমধ্যে ইনপুট () ব্যবহার করে লিখেছি, তবে আমি আমার উত্তরটি রিফ্রেশ করতে ভুলে গিয়েছি। আবার ধন্যবাদ!
uno20001

4
52 বাইট: n=m=int(input()),print(all(n%m for m in range(2,n)))
জন লিয়ন

1
আপনি কি সিরিয়াস? খোঁড়া চতুর্দিকে গতি বাড়ানোর জন্য 25 টি অতিরিক্ত অক্ষর ব্যয় করবেন? এখানে আমরা বাইটগুলি ঘৃণা করি । আমরা আমাদের প্রতি ঘন্টা, মিনিট এবং দ্বিতীয় জীবন উনিশতম বাইট থেকে মুক্তি পেয়ে কাটিয়েছি। (জাস্ট মজা কিন্তু আমরা সময় অপ্টিমাইজেশন যে প্রোগ্রাম দৈর্ঘ্য বৃদ্ধি করবেন না।।)
CalculatorFeline

2
n%i<1পরিবর্তে ব্যবহার করুন।
এরিক দ্য আউটগল্ফার

12

এপিএল, 40 13 বাইট

2=+/0=x|⍨⍳x←⎕

আমার আর উত্তর হিসাবে একই অ্যালগরিদম দিয়ে ট্রায়াল বিভাগ । আমরা xএসটিডিএন ( ) থেকে ইনপুট নির্ধারণ করি এবং xপ্রতিটি পূর্ণসংখ্যা দ্বারা 1 থেকে বিভাজিত হয়ে বাকী অংশটি পাই x। প্রতিটি অবশিষ্ট অংশ 0 এর বিপরীতে তুলনা করা হয়, যা আমাদেরকে একটি ভেক্টর দেয় এবং শূন্যগুলি নির্দেশ করে যা কোন পূর্ণসংখ্যা ভাগ করে দেয় x। এটি +/বিভাজক সংখ্যা পেতে ব্যবহার করে সংক্ষিপ্ত করা হয়। যদি এই সংখ্যাটি হুবহু 2 হয়, তবে এর অর্থ হ'ল একমাত্র বিভাজক 1 এবং xএবং সুতরাং xএটি প্রধান।



12

সি ++ টেমপ্লেট রূপক। 166 131 119 বাইট।

ধ্রুবকটি মৌলিক হলে কোড সংকলন করে এবং সংমিশ্রণ বা 1 হলে সংকলন করে না।

template<int a,int b=a>struct t{enum{x=t<a,~-b>::x+!(a%b)};};
template<int b>struct t<b,0>{enum{x};};
int _[t<1>::x==2];

(চূড়ান্ত এক ব্যতীত সমস্ত নতুনলাইনগুলি "আসল" সংস্করণে মুছে ফেলা হয়)।

আমি মনে করি "সংকলন করতে ব্যর্থতা" একটি রূপক ভাষার জন্য মিথ্যা রিটার্ন মান। মনে রাখবেন যে এটি সম্পূর্ণ সি ++ প্রোগ্রাম হিসাবে লিঙ্ক করে না (সুতরাং আপনি যদি এটিকে একটি প্রধান খাবার খাওয়ান তবে আপনি লিঙ্কিং ত্রুটিগুলি পেয়ে যাবেন)।

পরীক্ষার মান হ'ল শেষ "লাইনে" পূর্ণসংখ্যা।

লাইভ উদাহরণ

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