দীর্ঘতর ল্যাঙ্গুয়েজ প্রোগ্রাম করুন


16

Lenguage একটি brainfuck উপভাষা উৎস সীমাবদ্ধতা চ্যালেঞ্জ ভঙ্গ জন্য কুখ্যাত হয়। কারণ লেংগুয়েজ কেবলমাত্র উত্সের দৈর্ঘ্য সম্পর্কে বিষয়বস্তু রাখে না বিষয়গুলি।

প্রথমত, প্রোগ্রামটির দৈর্ঘ্য গণনা করা হয়। তারপরে, বলেছিল দৈর্ঘ্যটি বাইনারি এবং বাম-প্যাডে জিরো দ্বারা 3 এর একাধিকতে রূপান্তরিত হবে ফলে ফলস্বরূপ বাইনারি স্ট্রিং 3 বিটের প্রতিটি অংশে বিভক্ত হয় যার প্রতিটি একটি ব্রেইনফাক কমান্ডে অনুবাদ করা হয়:

000 -> +
001 -> -
010 -> >
011 -> <
100 -> .
101 -> ,
110 -> [
111 -> ]

শেষ পর্যন্ত প্রোগ্রামটি ব্রেনফাক 1 হিসাবে চালিত হয় ।

এখান থেকে চ্যালেঞ্জটি বেশ সহজ, একটি ল্যাঙ্গুয়েজ প্রোগ্রাম লিখুন যা কোনও ইনপুট নেয় না এবং একটি বাইট পুনরাবৃত্ত পূর্ণসংখ্যার এন বারের সমন্বয়ে একটি আউটপুট উত্পাদন করে , যেখানে এন আপনার প্রোগ্রামটির দৈর্ঘ্যের চেয়ে কঠোরতর is

উত্তরগুলি কম বাইটের সাথে ভাল হওয়ার সাথে বাইটে স্কোর করা হবে।

ব্রেনফাক থেকে ল্যাঙ্গুয়েজ গণনা করার জন্য এখানে একটি হ্যাকি প্রোগ্রাম রয়েছে's


1: এই চ্যালেঞ্জের জন্য আমরা মোড়ানোর ঘর এবং একটি মোড়কবিহীন টেপ ব্যবহার করব।


3
+[.]আমি কি জিতবো? : পি
কুইন্টেক

3
আউটপুট দৈর্ঘ্যে স্কোর করা আরও আকর্ষণীয় হতে পারে?
জো কিং

@ জোকিং এটি একটি ভাল ধারণা। দুর্ভাগ্যক্রমে এটি এর জন্য কিছুটা দেরি হয়ে গেছে বলে মনে হয়।
পোস্ট রক গারফ হান্টার

2
এছাড়াও, এই ট্যাগ কুইন কেন?
অজ্ঞতার

1
@ এমএস 210 এটি বেশিরভাগ সময় কৌতুক করবে, তবে কয়েকটি পার্থক্য রয়েছে, উদাহরণস্বরূপ বিভিন্ন ব্রেইনফাকের চরিত্রগুলির জন্য বিভিন্ন পরিমাণের ব্যয় হয় ( +সবচেয়ে সস্তা এবং ]সবচেয়ে ব্যয়বহুল) এবং অবশ্যই প্রোগ্রামটিতে তারা কোথায় তা গুরুত্বপূর্ণ। যদিও একটি ভাল অনুমান এটি ঠিক সমতুল্য নয়। 23এন
পোস্ট রক গার্ফ হান্টার

উত্তর:


15

8437495638205698686671 বাইট

এটি ব্রেনফাক প্রোগ্রামে অনুবাদ করে:

-[>>[>]+[->[>]+.[<]+<]<-]

যা ঠিক 231584178474632390847141970017375815706539969331281128078915168015826259279614 এসওএইচ বাইট প্রিন্ট করে ।

এটি ফাংশন দ্বারা গণনা করা হয়

f(n)=2*f(n-1)+n
f(0)=0

255 এর ইনপুট সহ।

ব্যাখ্যা:

-[         Loop 255 times
  >>[>]    Move to the end of a series of positive cells (initially empty)
  +        Add one cell to the end
  [-       Loop over each cell 
    >[>]+  Add one cell to the end
    .      Print a SOH byte
    [<]+   Restore current cell
  <]       Move to next cell
<-]        Decrement counter

4

9093903938998324939360576240306155985031832511491088836321985855167849863863065731015823 বাইট

>>>>>>-[[->>>+<<<]------>>>-]<<<[<<<]+[+[>>>]<<<->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-[<<<].>>>-]

যা হুবহু প্রিন্ট করে

298333629248008269731638612618517353495058861384016275770860733328251135402804732197446995616017112134460464130233444058136509123809012106419446593183683387659250431692751255099808162970657410517657862174602556590616568690423540284801267472920128909691902547970614008613488242333460665145840144517097342073878746293059960326132795671583153307437896728515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

250255 ) NUL বাইট।

ক্রেডিট এই ব্রেইনফাক উত্তরে @ hvd তে যায় , তাই নিশ্চিত হয়ে নিন যে তাকে !

ব্যাখ্যা:

আমি আমার নিজের একটি ব্যাখ্যা লিখতে যাচ্ছিলাম, কিন্তু বুঝতে পেরে @hvd এর ব্যাখ্যা ইতিমধ্যে পয়েন্টে রয়েছে, সুতরাং আমি এখানে এর পরিবর্তে উদ্ধৃত করব:

>>>>>> কাজের জায়গাটি কিছুটা রেখে দিতে হবে।

-255 উত্পাদন করে ( যেহেতু 0 - 1 = 255 হয় যখন আমাদের মোড়ক ঘর থাকে )

[[->>>+<<<]------>>>-] এটিকে এমন 250 টি মানের 255 অনুলিপিগুলিতে পরিণত করে, এমন টেপ দেয় যা দেখে মনে হয়:

0 0 0 0 0 0 250 0 0 250 0 0 ... 250 0 0 [0]

<<<[<<<]+ ডেটা পয়েন্টারটিকে পিছনে সরিয়ে দেয় এবং প্রাথমিক ডেটা শেষ করে:

0 0 0 [1] 0 0 250 0 0 250 0 0 ...

তারপরে লুপটি আসে: [+...-] শুরুতে 1 টি 2 থেকে 2 সেট করে যা লুপের শেষে 1 এ ফিরে আসে। লুপটি ইতিমধ্যে 2 থেকে 1 সেট করলে লুপটি সমাপ্ত হয়।

এখন, সংখ্যা 250 2 250 250 250 ... 250 একটি বেস প্রতিনিধিত্ব করে 250 বেস, প্রতিটি প্রতিনিধিত্ব করে যে সংখ্যাটি এটি প্রতিনিধিত্ব করে তার চেয়ে বড় এক সঙ্গে।

  • [>>>]<<<সমস্ত পথে ডান দিকে সরান। যেহেতু প্রতিটি অঙ্ক একটি শূন্য-সংখ্যা দ্বারা প্রতিনিধিত্ব করা হয়, এটি তুচ্ছ।

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-কাউন্টারটি হ্রাস করে ১. শেষ অঙ্ক দিয়ে শুরু করে: সংখ্যাটি হ্রাস পায়। যদি এটি ইতিবাচক থেকে যায়, আমরা সম্পন্ন করেছি। যদি এটি শূন্যে পরিণত হয়, এটি 250 এ সেট করুন এবং আগে অঙ্কটি দিয়ে চালিয়ে যান।

  • [<<<].>>>বাম-সর্বাধিক অঙ্কের আগে পয়েন্টারটি পিছনে সরিয়ে নিয়ে যায়, এবং এটি একটি NUL বাইট মুদ্রণের জন্য একটি দুর্দান্ত মুহূর্ত। তারপরে সঠিকভাবে বাম-সর্বাধিক অঙ্কে পুনরায় অবস্থান করুন, দেখুন আমাদের কাজ শেষ হয়েছে কিনা।

শুদ্ধি যাচাই করতে প্রাথমিক পরিবর্তন করেন, -করতে +করতে মুদ্রণ 250 1 , NUL বাইট ++জন্য 250 2 , ইত্যাদি


4

19326644346528796447 বাইট

ব্রেইনফাক কোড:

>+[+[[+>->-<<]->>+].<]

ছাপে

57896044618658097711785492504343953926634992332820282019728792003956564819967

নাল বাইট

এটি এর মতো কাজ করে:

mem[i]=255;
do
    while(--mem[i]){
        mem[i+1]=mem[i+2]=mem[i];
        mem[i]=1;
        i+=2;
    }
while(mem[--i]);

বেশ সরল পুনরাবৃত্তি।

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