ব্রেইনফ * ক্রিশ দিকনির্দেশ


14

আপনার টাস্ক - আপনি এটি গ্রহণ করার সিদ্ধান্ত নেওয়া উচিত - এমন একটি প্রোগ্রাম তৈরি করা যা টোকেনের দিকনির্দেশ দেয় - কোনওটি বাম বা ডানকে একটি স্ট্রিং (বাম থেকে ডান এবং স্বেচ্ছা দৈর্ঘ্যের) পার্স এবং মূল্যায়ন করে। এখানে সম্ভাব্য চারটি টোকেন এবং এর অর্থ:

>  go right one single step
<  go left one single step
-> go right the total amount of single steps that you've gone right, plus one,
   before you previously encountered this token and reset this counter to zero
<- go left the total amount of single steps that you've gone left, plus one,
   before you previously encountered this token and reset this counter to zero

যদিও এখানে একটি ক্যাচ রয়েছে - আপনার প্রোগ্রামটি পার্স করতে সক্ষম হওয়া টোকেনগুলি এই ফর্মটিতে উপস্থাপিত হবে:

<<->-><<->->>->>->

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

  1. ->
  2. <-
  3. >
  4. <

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

আপনার প্রোগ্রামটি 0 এ শুরু হওয়া উচিত এবং এর ফলাফলটি একটি স্বাক্ষরিত পূর্ণসংখ্যা হওয়া উচিত যা চূড়ান্ত শেষ অবস্থানের প্রতিনিধিত্ব করে।

আপনি ইনপুটটি সর্বদা বৈধ হওয়ার আশা করতে পারেন ( <--->>--<উদাহরণস্বরূপ, এর মতো কিছুই নয় )।

উদাহরণ ইনপুট:

><->><-<-><-<>>->

এই উদাহরণে পদক্ষেপগুলি:

 step | token | amount | end position
------+-------+--------+--------------
   1. |   >   |     +1 |           1  
   2. |   <   |     -1 |           0  
   3. |  ->   |     +2 |           2  
   4. |   >   |     +1 |           3  
   5. |   <-  |     -2 |           1  
   6. |   <   |     -1 |           0  
   7. |  ->   |     +2 |           2  
   8. |   <-  |     -2 |           0  
   9. |   <   |     -1 |          -1  
  10. |   >   |     +1 |           0  
  11. |   >   |     +1 |           1  
  12. |  ->   |     +3 |           4  

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

সংক্ষিপ্ততম কোড, এক সপ্তাহের পরে, জয়ী হয়।


4
যদি আমি অগ্রাধিকারের নিয়মগুলি সঠিকভাবে বুঝতে পারি তবে আপনি কেবল একবারই আবেদন <-করতে পারেন যদি তা অবিলম্বে একটি <বা একটি অনুসরণ করা হয় ->। এই অনুক্রমটি <-তখনকার অনুক্রমের প্রতিনিধিত্ব করার কোনও উপায় নেই >- যা হবে go left the total amount of single steps that you've gone left, plus one, then go right one single step। এটি কি সঠিক এবং ডিজাইন দ্বারা?
অ্যাডাম ডেভিস

@ অ্যাডামডাভিস আপনি ঠিক বলেছেন দুর্ভাগ্যক্রমে, এটি আমার সম্পর্কে কিছুটা অবহেলা ছিল।
ডিসেন্ট ড্যাবলার

উত্তর:


6

গল্ফস্ক্রিপ্ট, 46 টি অক্ষর

'->'/')'*.'<-'-.')'/);+,\'>)'-.'<-'/);\'-'-+,-

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

  • প্রথমত, আমি প্রতিটি ঘটনা প্রতিস্থাপন ->দ্বারা )। যেহেতু ইনপুটটি বৈধ হওয়ার গ্যারান্টিযুক্ত তাই এটি নিশ্চিত করে যে কোনও অবশিষ্ট ঘটনা -অবশ্যই এর অংশ হতে পারে <-

  • এর পরে, আমি স্ট্রিংয়ের দুটি কপি তৈরি করি। প্রথম অনুলিপি থেকে, আমি অক্ষরগুলি সরিয়েছি <এবং -, কেবল >এবং )। আমি তারপরে ফলাফলটি সদৃশ করব, দ্বিতীয় অনুলিপি থেকে সমস্ত )গুলি এবং >সর্বশেষের প্রত্যেককে সরিয়ে দিন ), তাদের সাথে সম্মতি জানাতে এবং অক্ষরগুলি গণনা করুন। সুতরাং, বাস্তবে, আমি গণনা করছি:

    • প্রতিটি জন্য +1 ) ,
    • >শেষের পরে প্রতিটি জন্য +1) এবং
    • >শেষের আগে প্রতিটি জন্য +2 )
  • পরবর্তী, আমি এই সময় গণনা ব্যতীত অন্যান্য কপি জন্য একই কাজ, <এবং <-পরিবর্তে >এবং ), এবং মুছে ফেলার -চূড়ান্ত অক্ষর সংখ্যা সামনে গুলি। সুতরাং, আমি গণনা:

    • প্রতিটি জন্য +1 <- ,
    • <শেষের পরে প্রতিটি জন্য +1<- এবং
    • <শেষের আগে প্রতিটি জন্য +2 <-
  • অবশেষে, আমি প্রথম গণনা থেকে দ্বিতীয় গণনাটি বিয়োগ করি এবং ফলাফল আউটপুট করি।


6

পাইথন 2.7 - 154 147 134 128 বাইট

l=r=p=0
exec"exec raw_input('%s->','p+=r+1;r=0%s<-','p-=l+1;l=0%s>','r+=1;p+=1%s<','l+=1;p-=1;')"%((";').replace('",)*4)
print p

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

এই এক স্থূল।

এটি এই প্রশ্নের অন্যান্য উত্তরগুলির মতো একইভাবে কাজ করে, ইনপুটে অক্ষরগুলিকে সেই ভাষায় বৈধ বিবৃতি দিয়ে প্রতিস্থাপন করে এবং সম্পাদন করে। এর মধ্যে একটি প্রধান পার্থক্য রয়েছে:replace একটি দীর্ঘ শব্দ। যে স্ক্রু।

আড্ডায় প্রোগ্রামারড্যান লেখার বিন্যাসের ;').replace('প্রাক- str.format()পদ্ধতিটি ব্যবহার করার জন্য 4 বার স্ট্রিং সহ একটি টুপল ব্যবহার করার ধারণাটি নিয়ে এসেছিল । চারটি উদাহরণ %sদ্বিতীয় লাইনের স্ট্রিংয়ে রয়েছে, প্রত্যেকে শেষে টিপলের সাথে সম্পর্কিত উপাদান থেকে এর মান নিচ্ছে। যেহেতু তারা সব একই, তাই প্রতিটি %sপ্রতিস্থাপন করা হয় ;').replace('। আপনি যখন অপারেশনগুলি করেন, আপনি এই স্ট্রিংটি পান:

exec raw_input(';').replace('->','p+=r+1;r=0;').replace('<-','p-=l+1;l=0;').replace('>','r+=1;p+=1;').replace('<','l+=1;p-=1;')

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

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

আপনি লক্ষ্য করবেন যে আমি raw_input(';')',' ব্যবহার করে করছি; একটি প্রম্পট হিসাবে, এর চেয়ে raw_input()কোন প্রম্পট আছে। এটি অক্ষরহীন উপায়ে অক্ষরগুলিকে সংরক্ষণ করে: যদি আমি তা করি তবে আমার raw_input()টিপলটি ভরাট করতে হবে ).replace('এবং প্রতিটি উদাহরণ প্রথমটির ব্যতীত%s '; \' 'এর আগে থাকতে হবে । একটি প্রম্পট থাকা আরও বাড়াবাড়ি তৈরি করে যাতে আমি সামগ্রিকভাবে আরও বেশি অক্ষর সংরক্ষণ করতে পারি।


2
" অক্ষরটি সন্ধান করতে ব্যর্থ হলে list.index()ফিরে আসে -1" .. আরএম নং। এটি উত্থাপন একটি IndexError। আপনি এটি সঙ্গে বিভ্রান্ত হতে পারে str.find। বস্তুত আপনি প্রতিস্থাপন করতে পারে [list('><rl').index(c)]সঙ্গে ['><rl'.find(c)]
বাকুরিউ

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

5

পার্ল, 134 131 ... 99 95 বাইট

sub f{$p+=$d;$&=~/-/?($p+=$s,$s=0):($s+=$d)}$_=<>;$d=1;s/-?>/f/eg;$s=0;$d=-1;s/<-?/f/eg;print$p

স্টিডিনে একক লাইন হিসাবে ইনপুট নেয়, যেমন:

ski@anito:~$ perl -le 'sub f{$p+=$d;$&=~/-/?($p+=$s,$s=0):($s+=$d)}$_=<>;$d=1;s/-?>/f/eg;$s=0;$d=-1;s/<-?/f/eg;print$p'
><->><-<-><-<>>->
4

বা:

ski@anito:~$ echo "><->><-<-><-<>>->" | perl -le 'sub f{$p+=$d;$&=~/-/?($p+=$s,$s=0):($s+=$d)}$_=<>;$d=1;s/-?>/f/eg;$s=0;$d=-1;s/<-?/f/eg;print$p'
4

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

sub f {
  $dir=shift;
  if($1 =~ /-/) {
    $pos+=$side+$dir;
    $side=0;
  } else {
    $pos+=$dir;
    $side+=$dir;
  }
}

$_=<>;

s/(-?>)/f(1)/eg;
$side=0;
s/(<-?)/f(-1)/eg;

print $pos

এই কোডটির পূর্ববর্তী পুনরাবৃত্তিতে, বিকল্পগুলি সমস্তই একটি পাসে সম্পন্ন হয়েছিল। এতে $ p / $ পোজ এবং অবস্থানের মধ্যে সরাসরি ম্যাপিং রাখার সুবিধা ছিল যা কোনও নির্দিষ্ট সময়ে ফিরে আসবে, তবে কোডের আরও বাইট নিয়েছে।

আপনি যদি () 5.10.0 ব্যবহার করতে চান তবে আপনি গণনা থেকে দূরে 2 টি অক্ষর শেভ / মুদ্রণ / বলতে / করতে পারেন, তবে এটি আসলে আমার স্টাইল নয়।


4

পার্ল, 88 77 বাইট

$_=<>;print s/->/F/g+2*s/>(?=.*F)//g+s/>//g-(s/<-/B/g+2*s/<(?=.*B)//g+s/<//g)

এসটিডিআইএন এর মাধ্যমে ইনপুট আশা করা যায়, উদাহরণস্বরূপ:

echo '><->><-<-><-<>>->'|perl -e '$_=<>;print s/->/F/g+2*s/>(?=.*F)//g+s/>//g-(s/<-/B/g+2*s/<(?=.*B)//g+s/<//g)'
4

হালনাগাদ

স্ট্রিংটিকে একটি সংক্ষেপে রূপান্তর করার দরকার নেই, কারণ s// ইতিমধ্যে গণনা করা হচ্ছে। :-)

প্রথম সংস্করণ

$_=<>;s/->/+1/g;s/>(?=.*1)/+2/g;s/>/+1/g;s/<-/-1/g;s/<(?=.*-)/-2/g;s/</-1/g;print eval

এসটিডিআইএন এর মাধ্যমে ইনপুট আশা করা যায়, উদাহরণস্বরূপ:

echo '><->><-<-><-<>>->'|perl -e '$_=<>;s/->/+1/g;s/>(?=.*1)/+2/g;s/>/+1/g;s/<-/-1/g;s/<(?=.*-)/-2/g;s/</-1/g;print eval'
4

ব্যাখ্যা:

ধারণাটি হ'ল দিকের স্ট্রিংকে একটি সংক্ষেপে রূপান্তর করা যাতে ফলাফলটি একটি সরল দ্বারা আউটপুট হয় print eval

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

ইতিবাচক ধাপ গণনার পরিবর্তে নেতিবাচক সহ একই দিকটি পিছনের দিকে ধরে।

উদাহরণ: ><->><-<-><-<>>->

s/->/+1/: সামনের দিক দিয়ে শুরু করুন, কারণ ->সর্বোচ্চ প্রাধান্য রয়েছে।
উদাহরণ:><+1><-<+1<-<>>+1

s/>(?=.*1)/+2/g: চেহারা-সামনের প্যাটার্নটি আশ্বাস দেয় যে কেবলমাত্র কোনও >আগে ->রূপান্তরিত হয়।
উদাহরণ:+2<+1+2<-<+1<-<+2+2+1

s/>/+1/g: এখন বাকি >গুলো coveredাকা পড়ে গেছে।
উদাহরণ:+2<+1+2<-<+1<-<+2+2+1

s/<-/-1/g: পিছনের দিকটি অ্যানালগ করুন।
উদাহরণ:+2<+1+2-1<+1-1<+2+2+1

s/<(?=.*-)/-2/g: চেহারা-সামনের প্যাটার্নে -1পূর্বের পূর্ণরূপের <-প্রয়োজন হয় না, কারণ কোনও -দিকনির্দেশনা চিহ্ন বাকি নেই।
উদাহরণ:+2-2+1+2-1-2+1-1<+2+2+1

s/</-1/g: <শেষের পরে <-অবশিষ্টগুলি রূপান্তরিত হয়।
উদাহরণ:+2-2+1+2-1-2+1-1-1+2+2+1

print eval: ফলাফল গণনা এবং ফলাফল আউটপুট।
উদাহরণ:4


ভাল একটা. আমি গতরাতে এই ধারণাটি নিয়ে লাথি মারছিলাম তবে আজ অবধি এটি প্রয়োগের চেষ্টা করার সুযোগ পাইনি। ভাল জিনিস আমি পোস্টটি পরীক্ষা করে দেখেছি এবং ইতিমধ্যে আপনার কাছে =) রয়েছে
স্কিবিরিয়ানস্কি

@ এসকিবারিয়ানস্কি: অনুলিপি এবং পেস্টের ত্রুটিটি ঠিক করার জন্য ধন্যবাদ।
হাইকো ওবারডিক

আরও কিছুটা গল্ফ করা যেতে পারে: 65 বাইট বা ব্যবহার না করে -p: 74 বাইট আমি প্রতি ক্ষেত্রে একটি বাইট সংরক্ষণ s/>//gকরার y/>//জন্য আপনার পরিবর্তন করেছি যা অভিব্যক্তিতে পেরেনগুলি সরিয়ে দেওয়ার অনুমতি দেয়।
এক্সকালি

2

রুবি, 141 বাইট

l=1;r=1;o=0
gets.gsub('->',?R).gsub('<-',?L).chars{|c|case c
when'<';o-=1;l+=1
when'>';o+=1;r+=1
when'L';o-=l;l=1
when'R';o+=r;r=1
end}
$><<o

Ungolfed:

parsed = gets.gsub('->', 'R')
             .gsub('<-', 'L')
countL = 1
countR = 1
result = 0
parsed.each_char do |c|
    case c
    when '<'
        result -= 1
        countL += 1
    when '>'
        result += 1
        countR += 1
    when 'L'
        result -= countL
        countL = 1
    when 'R'
        result += countR
        countR = 1
    end
end
puts result

দ্রুত জয় একটি দম্পতি: l=1;r=1হতে পারে l=r=1এবং $><<oহতে পারে p o। আমি আপনাকে কিছু কম ভারী, হয়তো লাইন বরাবর কিছু সঙ্গে যে ক্ষেত্রে বিবৃতি প্রতিস্থাপন অনেক শেভ পারেeval %w(o-=1;l+=1 o+=1;r+=1 o-=l;l=1 o+=r;r=1)['<>LR'.index c]
পল Prestidge

বাস্তবে ইওল পদ্ধতির সাহায্যে আপনি আরও কিছু সঞ্চয় করতে কিছু উপসর্গ / প্রত্যয় বের করতে পারেন। এটি 98 টি অক্ষর:, l=r=1;o=0;gets.gsub('->',??).scan(/<-|./){eval"o+=#{%w[-1;l+ -l;l 1;r+ r;r][$&[-1].ord%4]}=1"};p oআপনি 94 ব্যবহার করে নীচে যেতে পারেনruby -p
:,

1

ডি - 243

গল্ফড :

import std.regex,std.stdio;void main(string[]a){int s,c,v;auto t=a[1].matchAll("->|<-(?!>)|>|<".regex);foreach(m;t){auto r=m.hit;if(r=="->"){s+=c+1;c=0;}else if(r=="<-"){s-=v+1;v=0;}else if(r==">"){++s;++c;}else if(r=="<"){--s;++v;}}s.write;}}

আন golfed :

import std.regex, std.stdio;

void main( string[] a )
{
    int s, c, v;
    auto t = a[1].matchAll( "->|<-(?!>)|>|<".regex );

    foreach( m; t )
    {
        auto r = m.hit;

        if( r == "->" )
        {
            s += c + 1;
            c = 0;
        }
        else if( r == "<-" )
        {
            s -= v + 1;
            v = 0;
        }
        else if( r == ">" )
        {
            ++s;
            ++c;
        }
        else if( r == "<" )
        {
            --s;
            ++v;
        }
    }

    s.write;
}

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

ঠিক আছে, আমি এখন ফলাফল আউটপুট আমার সম্পাদনা করেছি।
টনি এলিস

1

সি, 148 141 140

140:

r,l,o;main(char *x,char **v){for(x=v[1];*x;x++)(*x^45)?(*x^60)?(r++,o++):(*(x+1)==45)?(x++,o-=l+2,l=0):(o--,l++):(o+=r+1,r=0,x++);return o;}

141:

r,l,o;main(char *x,char **v){for(x=v[1];*x;x++)(*x^45)?(*x^60)?(r++,o++):(*(x+1)==45)?(x++,o=o-l-2,l=0):(o--,l++):(o+=r+1,r=0,x++);return o;}

148:

r,l,o;main(char *x,char **v){for(x=v[1];*x;x++){if(*x^45){if(*x^60)r++,o++;else{o--,l++;if(*(x+1)==45)x++,o-=l,l=0;}}else o+=r+1,r=0,x++;}return o;}

সাদা স্থান সহ:

r,l,o;
main(char *x,char **v) 
{
    for(x=v[1];*x;x++)
    (*x^45) ?
        (*x^60) ?
            (r++,o++)
            :
            (*(x+1)==45) ?
                (x++,o-=l+2,l=0)
            :(o--,l++)
        :(o+=r+1,r=0,x++);
    return o;
}

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

আপনার দরকার হবে -std=c99এটি জিসিসি দিয়ে সংকলন করতে পতাকা লাগবে।

সম্পাদনা: হ্যাঁ, দেরি হয়েছে - কিছু সুস্পষ্ট জিনিস মিস হয়েছে।


আপনি আর্গুমেন্ট তালিকায় দুই শূণ্যস্থান অপসারণ করতে পারেন main: main(char*x,char**v)। তারপরে আপনার 140 এর পরিবর্তে 138 রয়েছে
হাইকো ওবারডিক

একটি বাগ রয়েছে: >><-1 এর পরিবর্তে 0 দেয় বা ><->2 এর পরিবর্তে 0 দেয়
হাইকো ওবারডিক

যদি মধ্যে আপনার সরানোর শূণ্যস্থান আপনি 4 বাইট সংরক্ষণ করতে পারবেন charএবং *, এবং প্রতিস্থাপন (*(x+1)==45)?(x++,o-=l+2,l=0):(o--,l++)সঙ্গে (*++x==45)?(o-=l+2,l=0):(x--,o--,l++)
ম্যাথিউ রডিক

1

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

z=0;l=r=1;c=["--z;++l;",/</g,"++z;++r;",/>/g,"z-=l;l=1;",/<-/g,"z+=r;r=1;",/->/g];for(a=8;a--;s=s.replace(c[a--],c[a]));eval(s);alert(z)

Unminified:

s="><->><-<-><-<>>->";
z=0;
l=r=1;
c=[
    "--z;++l;", /</g,
    "++z;++r;", />/g,
    "z-=l;l=1;", /<-/g,
    "z+=r;r=1;", /->/g
];
for(a=8;a--;s=s.replace(c[a--],c[a]));
eval(s);
alert(z) // Output (4)

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

এর sমতো স্ট্রিং ইনপুট দেওয়া হয়েছে :

s="><->><-<-><-<>>->";

এটি প্রতিটি কমান্ডকে নির্দেশের একটি সেট দিয়ে প্রতিস্থাপন করতে একটি রেজেক্স ব্যবহার করে যা পরিবর্তন z(শেষ অবস্থান), l(সঞ্চিত বাম আন্দোলন) এবং rসঞ্চিত ডান গতিবিধি। প্রতিটি রেজেক্স অগ্রাধিকার ক্রমে সঞ্চালিত হয়।

উপরের ইনপুটটির sজন্য এতে রূপান্তরিত হয়:

"++z;++r;--z;++l;z+=r;r=1;++z;++r;z-=l;l=1;--z;++l;z+=r;r=1;z-=l;l=1;--z;++l;++z;++r;++z;++r;z+=r;r=1;"

বেশ, এটা না।

শেষ অবধি আমরা eval(s)নির্দেশাবলী সম্পাদন করব এবং সতর্কতা zযা শেষ অবস্থান রয়েছে।


1

জাভাস্ক্রিপ্ট (116, 122 , 130 )

116:

for(l=r=p=i=0;c='<>-0'.indexOf(a.replace(/->/g,0)[i++])+1;p--)c-4?c-3?c-2?l++:(r++,p+=2):(p-=l-2,l=0):(p+=r+2,r=0);p

122:

for(l=r=p=i=0,a=a.replace(/->/g,0);c='<>-0'.indexOf(a[i])+1;i++,p--)c-4?c-3?c-2?l++:(r++,p+=2):(p-=l-2,l=0):(p+=r+2,r=0);p

130:

for(l=r=p=i=0;c='<>-'.indexOf(a[i])+1;i++,p--)c-3?c-1?(r++,p+=2):a[i+1]=='-'?a[i+2]=='>'?l++:(p-=l,l=0,i++):l++:(p+=r+2,r=0,i++);p

0

জাভাস্ক্রিপ্ট [217 বাইট]

prompt(x=l=r=0,z='replace',f='$1 $2 ')[z](/(>.*?)(->)/g,f)[z](/(<.*?)(<-)/g,f)[z](/(<|>)(<|>)/g,f)[z](/<-?|-?>/g,function(c){c=='>'&&(x++,r++),c=='<'&&(x--,l++),c=='->'&&(x+=++r,r*=0),c=='<-'&&(x-=++l,l*=0)}),alert(x)

সম্ভবত এটি আরও কিছুটা ছোট করা হতে পারে ...


0

পিএইচপি, 284 282

কোন রেজেক্স।

$i=fgets(STDIN);$c=$a=0;$s=str_split($i);while($c<count($s)){switch($s[$c]){case"<":if($s[$c+1]=="-"){if($s[$c+2]==">"){$c+=3;$a+=$rr;$rr=0;$ll++;}else{$c+=2;$a+=-($ll+1);$ll=0;}}else{$c++;$a--;$ll++;}break;case">":$c++;$a++;$rr++;break;case"-":$c+=2;$a+=$rr+1;$rr=0;break;}}echo$a;

Ungolfed:

$i=fgets(STDIN);
$c=$a=0;
$s=str_split($i);
while($c<count($s)){
    switch($s[$c]){
    case "<":
        if($s[$c+1]=="-"){
            if($s[$c+2]==">"){
                $c+=3;$a+=$rr;$rr=0;$ll++;
            }
            else{
                $c+=2;$a+=-($ll+1);$ll=0;
            }
        }
        else{
            $c++;$a--;$ll++;
        }
    break;
    case ">":
        $c++;$a++;$rr++;
        break;
    case "-":
        $c+=2;$a+=$rr+1;$rr=0;
        break;
    }
}
echo $a;

আপনি এর সাথে 2 টি অক্ষর জিততে পারেন str_split($i)( 1দ্বিতীয় তর্কটির জন্য এটি ডিফল্ট)) এবং $iসম্ভবত হওয়া উচিত $c, সঠিক?
ডিসেন্ট ডাবলার

প্রথম লাইনটি ভুল ছিল (এটি ছিল $i): পি এটি স্থির করে!
Vereos

0

আরেকটি পার্ল সমাধান, ১১৩ টি অক্ষর

ইতিমধ্যে দুটি উত্তর রয়েছে যা এটি পরাজিত করেছে, এটি কেবল গিগলসের জন্য। এটি টোকেনের মান সম্পর্কে ইলমারির পর্যবেক্ষণের ভিত্তিতে একটি পদ্ধতির ব্যবহার করে:

$_=<>;chomp;s/->/#/g;s/<-/%/g;s/>(?=.*#)/?/g;s/<(?=.*%)/;/g;s/#/>/g;s/%/</g;$t+=ord for split//;print$t-61*length

কিছুটা বিস্ফোরিত হয়েছে:

$_=<>;
chomp;
s/->/#/g;
s/<-/%/g;
s/>(?=.*#)/?/g;
s/<(?=.*%)/;/g;
s/#/>/g;
s/%/</g;
$t+=ord for split//;
print$t-61*length
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.