বিটওয়াইস সাইক্লিক ট্যাগ সিমুলেট করুন


11

চ্যালেঞ্জ

কোনও ডিফল্ট আই / ও ফর্ম্যাটে দুটি স্ট্রিং দেওয়া, নিম্নলিখিতটি করুন:

দ্রষ্টব্য: চ্যালেঞ্জটি প্রথম স্ট্রিংটিকে "ডেটা" হিসাবে এবং দ্বিতীয়টি "প্রোগ্রাম" হিসাবে উল্লেখ করবে।

  1. প্রোগ্রামটিকে অসীম স্ট্রিংয়ে পরিবর্তন করুন যা কেবল প্রোগ্রামটি অসীমভাবে পুনরাবৃত্তি হয় (যেমন 10-> 1010101010...)। চ্যালেঞ্জ এটিকে "অসীম প্রোগ্রাম" হিসাবে উল্লেখ করবে
  2. ডেটা খালি না থাকাকালীন, অসীম প্রোগ্রামটি লুপ করার সময় নিম্নলিখিতটিগুলি করুন:

    ক। যদি বর্তমান কমান্ডটি "0" হয় তবে ডেটাতে বাম-সর্বাধিক বিট মুছুন। যদি ডেটা খালি থাকে তবে "0" কিছুই করবে না।

    খ। যদি বর্তমান কমান্ডটি "1" হয় তবে প্রোগ্রামের পরবর্তী অক্ষরগুলি ডেটাতে যুক্ত করুন যদি ডেটাতে বাম-বিট এক হয়।

    গ। যদি ডেটা এখন খালি না থাকে তবে ডেটা আউটপুট করুন।

পরীক্ষার কেস

ডেটা ইনপুটটির বাম দিক এবং প্রোগ্রামটি ডান দিক।

100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...

মন্তব্য

  • ডেটা এবং প্রোগ্রামটি কেবল 0 এবং 1 এর মধ্যে থাকবে
  • থামে না এমন ডেটা / প্রোগ্রামগুলির জন্য, আপনার প্রোগ্রামটি থামার দরকার নেই।
  • ইনপুটটিতে ডেটা এবং প্রোগ্রাম খালি থাকবে না।
  • আপনার একাধিক ট্রেলিং এবং শীর্ষস্থানীয় নতুন লাইন থাকতে পারে
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ
  • আপনি যে কোনও সুবিধাজনক আই / ও ফর্ম্যাট ব্যবহার করতে পারেন

মতো সর্বদা , সংক্ষিপ্ততম কোডের জয় !


@ স্যাঞ্চাইজিস এটির জন্য বর্ডারলাইন সদৃশ বলে মনে হচ্ছে তবে আপনাকে একটি নির্দিষ্ট প্রজন্মের ফলাফল পেতে হবে এবং এটি কোনও চক্র ট্যাগ সিস্টেমের জন্য।
মিল্কিওয়ে 90

প্রথম পরীক্ষার ক্ষেত্রে, সেন্টিমিডে 100যায় , যার সংজ্ঞা "ডেটাতে বাম-সর্বাধিক বিট মুছুন" is এর leftmost বিট না হতে ? 1001001
জোনাহ

@ জোনাঃ ওহ, মিস করেছেন
মিলকিওয়াই 90

ক্ষেত্রে (খ), আপনি যদি সংযোজনটি করেন, তবে নির্দেশ নির্দেশিকাটি সঠিকভাবে এক বা দুটি অক্ষর সরিয়ে ফেলবে?
স্পার

@ স্পার এটি ডানদিকে চলেছে। চ্যালেঞ্জ লেবেলযুক্ত বিভাগটি দেখুন।
মিলকিওয়াই 90

উত্তর:



2

কৌতূহলের বাইরে 48 এবং 49 এর তাত্পর্য কী?
জোনাহ

1
@ জোনাঃ 48 হল ASCII মান 0, এবং 49 হ'ল ASCII মান1
অজ্ঞতার

আপনার পরিবর্তে এখানে 0 এবং 1 ব্যবহার করা উচিত নয়: P
ASCII- কেবল

@ এএসসিআইআই-আমি কেবল একটি স্ট্রিং ব্যবহার করছি, অ্যারে নয়।
অজ্ঞতার প্রতিমূর্তি 1

@ এম্বোডিমেন্টফ অজানা কেন একটি Listএবং Skipবা এর মতো কিছু ব্যবহার করবেন না
ASCII- কেবল

1

জে , 65 বাইট

(([:(][echo)(}.@[)`([,{.@[#1{],])@.({.@]));1|.])&>/^:(0<0#@{>)^:5

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

আমি আরও পরে এটি গল্ফ পারে। মনে রাখবেন 5শেষটি _আসল প্রোগ্রামে অনন্ত হবে , তবে অ-থামানো উদাহরণগুলি চালানো আরও সহজ করার জন্য আমি এটি রেখে এসেছি।



1

05 এ বি 1 ই , 24 21 বাইট

[¹Nèi¬i¹N>è«}ë¦}DõQ#=

প্রোগ্রামটিকে প্রথম ইনপুট এবং ডেটা দ্বিতীয় ইনপুট ইনপুট হিসাবে গ্রহণ করে।

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

ব্যাখ্যা:

[             # Start an infinite loop:
 ¹Nè          #  Get the N'th digit of the first (program) input
              #  (NOTES: N is the index of the infinite loop;
              #          indexing in 05AB1E automatically wraps around)
    i         #  If this digit is 1:
     ¬        #   Push the head of the current data (without popping it)
              #   (will take the second (data) input implicitly if it's the first iteration)
      i     } #   If this head is 1:
       ¹N   #    Get the (N+1)'th digit of the first (program) input
           «  #    And append it to the current data
    ë }       #  Else (the digit is a 0 instead):
     ¦        #   Remove the first digit from the current data
              #   (will take the second input (data) implicitly if it's the first iteration)
 DõQ          #  If the current data is an empty string:
    #         #   Stop the infinite loop
 =            #  Print the current data with trailing newline (without popping it)

1

রুবি , 62 59 বাইট

->c,d{p(d)while(a,*c=c;b,*d=d;c<<a;[]!=d=[b]*a+d+c[0,a*b])}

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

কিভাবে

  • কোড cএবং ডেটা থেকে প্রথম বিট পান d, তাদের কল করুন aএবং baশেষে ফিরে রাখুন c
  • যদি bশুরুতে ফিরে রাখুন । এটি সংক্ষিপ্ত করা যেতে পারেda==1[b]*a
  • প্রথম বাইট রাখুন cশেষে dযদি a==1 and b==1। এটি সংক্ষিপ্ত করা যেতে পারে c[0,a*b]
  • আমাদের যদি আরও ডেটা থাকে তবে মুদ্রণ করুন এবং পুনরাবৃত্তি করুন।

0

পাইথন 2 , 96 82 বাইট

def g(d,p):
 while d:
	c=p[0];p=p[1:]+[c];d=[d[1:],d+[p[0]]*d[0]][c]
	if d:yield d

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

অজ্ঞতার উত্তরের মডেল থেকে কিছুটা চুরি করা ...

একটি জেনারেটর যা ইনপুট / আউটপুট জন্য 1 এবং 0 এর তালিকা ব্যবহার করে।


0

জেলি , 40 বাইট

;€Ø2œịxØ1œị$Ʋ$Ḋ€2,1œị$?1¦ṙ€1$2¦µ⁺1ịGṄƲ¿Ḣ

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

আমি অনুমান করেছি যে নতুন লাইনের অবস্থানটি ঠিক আছে। আমি দুটি জিরো এবং ইনপুট হিসাবে তালিকাগুলির তালিকার একটি তালিকা এবং স্টাডআউটে আউটপুটও দিয়েছি।


0

পাইথন 1 , 75 বাইট

a,b=input()
while a:b=b[1:]+b[:1];a=[a[1:],a+b[:1]*a[0]][b[0]];print a or''

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


নিস! একটি নিগল: ডেটা '100', প্রোগ্রাম '0' এর জন্য, এটি খালি স্ট্রিংটি একবার মুদ্রণ করবে: তবে নিয়ম সি বলে "যদি ডেটা এখন খালি না থাকে তবে ডেটা আউটপুট দিন" "
চ্যাস ব্রাউন

@ চ্যাসব্রাউন ছোট টাইপো, আমি নতুন ওপেন থেকে স্পষ্টতার অপেক্ষায় রয়েছি যদি নতুন ট্রেইলগুলি ঠিক থাকে তবে
অজ্ঞতার

@ChasBrown ওপি বলেছেন একাধিক চিহ্ন নতুন লাইন অনুমোদিত, দেখতে এখানে
অজ্ঞতা প্রতিমূর্তি

তবে 1 এবং 0 এর অ্যারেগুলিতে স্যুইচ করার পরে, এখন আপনি []উদাহরণস্বরূপ, ডেটা [1,0,0], প্রোগ্রামে একটি নতুন লাইনের পরিবর্তে একটি খালি অ্যারে মুদ্রণ করছেন [0]
চ্যাস ব্রাউন

1
অজগর 1? অজগর 2 কাজ করে না?
ASCII- কেবল


0

সি ++ (জিসিসি) , 294 289 272 বাইট

-22 বাইটস @ সিলিংক্যাটকে ধন্যবাদ

#import<cstdio>
#import<queue>
void a(char*e,char*p){std::queue<char>d;for(;*e;)d.push(*e++);for(char*c=p;d.size();c=*++c?c:p){*c-49?d.pop():d.front()-48?d.push(c[1]?c[1]:*p):a("","");if(d.size()){for(int i=0;i++<d.size();d.pop())d.push(putchar(d.front()));putchar(32);}}}

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

মোটামুটি সোজা আলগোরিদিম। একটি কাতারে ডেটা অনুলিপি করে এবং প্রোগ্রামের মাধ্যমে বারবার লুপ করে। "0"-তে, এটি সারিতে প্রথম উপাদানটি সরিয়ে দেয় (প্রথম "বিট")। একটিতে, এটি প্রোগ্রামের পরবর্তী "বিট" ডেটাতে যুক্ত করে যদি ডেটার প্রথম "বিট" থাকে। তারপরে এটি ডেটাটি লুপ করে, "বিট" দ্বারা "বিট" মুদ্রণ করে এবং শেষ পর্যন্ত একটি মুদ্রণ করে ক্রমাগত ডেটা এন্ট্রি পৃথক করার স্থান।


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