ব্যাখ্যা + পি কোড


15

আরও দুটি চরিত্রের ভাষার উপর সাম্প্রতিক ক্রেজ দ্বারা অনুপ্রাণিত, ;#

ইন্ট্রো

সম্প্রদায়ের sensকমত্য অনুসারে , এই সাইটে গ্রহণযোগ্য উত্তরে অবশ্যই প্রোগ্রামিং ভাষা ব্যবহার করা উচিত যা সর্বনিম্ন:

  1. কোনও প্রাকৃতিক সংখ্যা প্রধান কিনা তা নির্ধারণ করতে পারে
  2. একসাথে দুটি প্রাকৃতিক সংখ্যা যুক্ত করতে পারেন
  3. সংখ্যার তালিকা / টুপল পাশাপাশি একটি একক সংখ্যা উপস্থাপন করতে পারে

এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা # 3 উপেক্ষা করব। সুতরাং, এই সাইটে ব্যবহার করা যেতে পারে সহজ ভাষা (# 3 উপেক্ষা করে) ঠিক দুটি কমান্ড থাকতে পারে isPrimeএবং add। ব্যাখ্যা এবং বাইট গণনা কর্মের জন্য, এর দায়িত্ব অর্পণ করা যাক isPrimeকরতে pএবং addকরতে +। সুতরাং, আমরা আমাদের ভাষা আছে +p,। আপনার চ্যালেঞ্জটি কিছু +pকোডের ব্যাখ্যা করা interpret

আচরণ

  • +addনির্দেশ দুটি সংখ্যার লাগে, তাদের যোগ করে, এবং ফলাফল আউটপুট
  • pisPrimeনির্দেশ একটি একক সংখ্যা লাগে, এবং আউটপুট 1যদি এটা মৌলিক, এবং 0যদি না হয় তাহলে

বিধি

  • আপনার অবশ্যই একটি প্রোগ্রাম / ফাংশন লিখতে হবে যা অক্ষরের একটি স্ট্রিং দিয়ে সেই স্ট্রিংটিকে +pকোড হিসাবে ব্যাখ্যা করে । আপনি সুগঠিত ইনপুট (কেবল +এবং pঅক্ষর) ধরে নিতে পারেন ।
  • ইনপুট নমনীয়। আপনি প্রোগ্রামটিতে স্ট্রিং, চরিত্রের অ্যারে, কোডপয়েন্টগুলির পূর্ণসংখ্য অ্যারে ইত্যাদি গ্রহণ করতে পারেন। প্রোগ্রামটির ব্যাখ্যা করার জন্য ইনপুটটিও নমনীয়। আপনি একটি পূর্ণসংখ্যার অ্যারে গ্রহণ করতে পারেন, এবং প্রোগ্রামটি কার্যকর করার সাথে সাথে এন্ট্রিগুলি ব্যবহার করতে পারেন বা প্রতিটি নির্দেশ ( +এবং p) স্বতন্ত্রভাবে ইনপুটটির জন্য অনুরোধ করতে পারে। আপনি ধরে নিতে পারেন যে প্রতিটি নির্দেশের জন্য যথেষ্ট ইনপুট থাকবে। ইনপুটটি 0 থেকে 200 এর মধ্যে সংখ্যার সমন্বয়ে গ্যারান্টিযুক্ত (তবে আপনার অ্যালগোরিদমগুলি কোনও ধনাত্মক পূর্ণসংখ্যার ইনপুট জন্য তাত্ত্বিকভাবে কাজ করা উচিত)।
  • আউটপুট এছাড়াও নমনীয়। আপনি ফলাফলগুলি মুদ্রণ করতে পারেন, সেগুলি তালিকা হিসাবে ফিরিয়ে দিতে পারেন, একটি স্ট্রিং ফিরিয়ে দিতে পারেন যাতে সমস্ত ফলাফল রয়েছে etc. ট্যাব, স্থান বা ,অক্ষর আপনার পিছনে বিভাজক বা কিছু পেছনের সাদা জায়গা থাকতে পারে। এছাড়াও, pএর আউটপুট কোনও সত্যবাদী বা মিথ্যা মান হতে পারে, আপনি যে ভাষাতে কাজ করছেন তার পরিবর্তে 1বা এর চেয়ে বেশি নির্ধারিত 0
  • দোভাষী দেরী করতে বা না শেষ করতে পারে (যদি এটি একটি সম্পূর্ণ প্রোগ্রাম হয়) তবে সমস্ত নির্দেশাবলীর ব্যাখ্যার পরে এটি মুদ্রণ বন্ধ করতে হবে। (এটি চিরকাল বিভাজক বা কোনও শূন্য চরিত্র ইত্যাদি মুদ্রণ চালিয়ে যেতে পারে না)।
  • এই মানক লুফোলগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়
  • এটি , কমপক্ষে বাইটস সহ জবাব

পরীক্ষার কেস

Program: +
Input: [56, 50]
Output: 106 
----------------------------------
Program: p
Input: [12]
Output: 0 
----------------------------------
Program: p
Input: [13]
Output: 1 
----------------------------------
Program: ++
Input: [172, 120, 33, 58]
Output: 292 91 
----------------------------------
Program: p
Input: [29]
Output: 1 
----------------------------------
Program: pp
Input: [176, 12]
Output: 0 0 
----------------------------------
Program: ++++p
Input: [32, 16, 69, 197, 73, 171, 21, 178, 72]
Output: 48 266 244 199 0 
----------------------------------
Program: pp+++p+pp+
Input: [151, 27, 119, 189, 198, 107, 174, 15, 166, 106, 134, 108, 169, 55, 42]
Output: 1 0 308 305 189 0 240 0 0 97 
----------------------------------
Program: p+p+++++++pp+p
Input: [143, 67, 30, 149, 178, 52, 112, 122, 55, 122, 142, 199, 20, 175, 138, 80, 116, 180, 50, 116, 15, 92, 74]
Output: 0 97 1 230 234 177 341 195 218 296 0 0 107 0 
----------------------------------
Program: ++p++p+pp+++++p+p+pp++
Input: [120, 177, 23, 116, 163, 52, 65, 98, 177, 16, 96, 131, 160, 48, 153, 0, 139, 33, 62, 49, 129, 86, 99, 135, 187, 80, 137, 130, 113, 136, 0, 1, 186, 100, 38, 153]
Output: 297 139 1 117 275 0 227 0 0 153 172 111 215 234 0 217 0 249 0 0 286 191 
----------------------------------
Program: ++p+++++p+p+++++++
Input: [181, 169, 6, 84, 68, 171, 129, 107, 106, 114, 197, 58, 11, 88, 156, 169, 43, 77, 49, 43, 102, 78, 93, 51, 91, 37, 64, 93, 82, 126, 181, 81, 44]
Output: 350 90 0 300 213 311 69 244 0 120 0 145 171 142 101 175 307 125 
----------------------------------
Program: ++p+
Input: [131, 127, 115, 40, 113, 196, 83]
Output: 258 155 1 279 
----------------------------------
Program: +ppp++p+ppp+p++++++++p+p+++pp+ppp++
Input: [6, 9, 187, 168, 96, 167, 178, 139, 86, 148, 99, 103, 166, 18, 119, 15, 132, 77, 16, 88, 139, 34, 58, 90, 43, 69, 68, 152, 59, 106, 134, 49, 155, 100, 52, 55, 27, 188, 41, 77, 23, 49, 171, 23, 193, 84, 111, 165, 80, 18, 63, 23, 116, 112, 119]
Output: 15 0 0 0 345 225 0 202 0 0 0 147 0 104 173 148 112 220 165 183 255 0 82 0 118 72 194 1 0 276 0 0 0 139 231 
----------------------------------
Program: ++++++++p++++++++++++
Input: [156, 5, 34, 25, 117, 98, 139, 131, 88, 82, 191, 13, 1, 170, 51, 116, 144, 85, 92, 170, 25, 94, 149, 131, 19, 161, 115, 160, 8, 6, 195, 101, 11, 185, 87, 50, 33, 140, 188, 135, 164]
Output: 161 59 215 270 170 204 171 167 0 177 195 243 150 276 168 201 112 272 83 328 299 
----------------------------------

অনেক, অনেক, খুব দীর্ঘ পরীক্ষার কেস

জাভা কোড পরীক্ষার কেস তৈরি করতে ব্যবহৃত হয়

উদাহরণ

নীচে একটি অব্যক্ত জাভা ফাংশন যা ব্যাখ্যা করবে +p:

public static void interpret(String program, int[] input) {
    int index = 0;
    for (char inst : program.toCharArray()) {
        switch (inst) {
            case '+':
                System.out.print((input[index++] + input[index++]) + " ");
                break;
            case 'p':
                int n = input[index++];
                System.out.print((isPrime(n) ? 1 : 0) + " ");
                break;
        }
    }
}

public static boolean isPrime(long n) { //Taken from /programming//a/2385999/4484294
    if (n < 2) return false;
    if (n == 2 || n == 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    long sqrtN = (long) Math.sqrt(n) + 1;
    for (long i = 6L; i <= sqrtN; i += 6) {
        if (n % (i - 1) == 0 || n % (i + 1) == 0) return false;
    }
    return true;
}

দ্রষ্টব্য: অনুসন্ধান কোয়েরি ব্যবহার করে prime AND add AND interpret is:question, এই প্রশ্নের কোনও সদৃশ বলে মনে হচ্ছে না। যদি একটি থাকে তবে দুঃখিত।


আপনার pফলাফলগুলিতে বিভাজক ছাড়াই ফলাফলগুলি সংক্ষেপিত হয়, এটি কি উদ্দেশ্যযুক্ত?
গ্যাবার ফেকেটে

আমরা কি একটি হিউরিস্টিক প্রাইম টেস্ট ব্যবহার করতে পারি? অর্থাৎ isprimeজুলিয়ায়
Rɪᴋᴇʀ

আমি সেই ক্রেজিটা শুরু করে দিয়েছি! কিন্তু ... এটা কি করেছে? রোবট ... না!
কেয়ার্ড কোইনারিংহিংহ

আকর্ষণীয়ভাবে যথেষ্ট, আমি চ্যালেঞ্জের ঠিক বিপরীত করেছি
caird coinheringaahing

@ GáborFekete তারা কি? তারা আমার কাছে সূক্ষ্ম দেখাচ্ছে ...
সকরাটিক ফিনিক্স

উত্তর:


31

05 এ বি 1 ই , 5 বাইট

vy.V,

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

ব্যাখ্যা

এই চ্যালেঞ্জটি গ্লোভের মতো 05AB1E ফিট করে :)

vy      # for each instruction in the program
  .V    # execute as 05AB1E code
    ,   # print

6
কাজের জন্য অবশ্যই সঠিক সরঞ্জাম।
এরিক আউটগল্ফার

1
এটিকে প্রতারণাপূর্ণ লাগছে ... মানে আসলেই really
ক্রিস্টোফার

@ ক্রিস্টোফার: ভাগ্যক্রমে +এবং এর pঅর্থ 05AB1Eঅ্যাড এবং প্রাইম :)
এমিগানা

@ এমিগনা আমি 05AB1E ব্যবহার করি নি, তাই আমার কোনও ধারণা ছিল না! চতুর উত্তর :)
সকরাটিক ফিনিক্স

@ এমিগনা অপেক্ষা করুন আপনি কি এনিগমা ছিলেন?
ক্রিস্টোফার

7

পাইথন 2, 135 133 বাইট

l,p=input()
i=j=0
while len(l)-i:print(int(all(l[i]%k for k in range(2,l[i])))if p[j]=='p'else l[i]+l[i+1]);i+=1+'p+'.find(p[j]);j+=1

-2 বাইট কান্ডোর ধন্যবাদ


i,j=0,0অপ্রয়োজনীয়, তাই না? এটা হতে পারে না i,j=0?
পাভেল

1
@ ফিনিক্স: না, এটি কাজ করবে না। আপনি i=j=0যদিও করতে পারেন ।
নিক মাত্তিও


5

হাস্কেল, 88 79 বাইট

('+':r)!(a:b:c)=a+b:r!c
('p':r)!(a:c)=min(foldr((*).mod a)1[2..a-1])1:r!c
_!e=e

"commands" ! [args] ব্যবহারের জন্য।

  • @ লাইকনি (# 56433) এর জন্য 9 বাইট সংরক্ষণ করা হয়েছে

আমি এখনও হাস্কেল শিখছি; গল্ফিং টিপস প্রশংসা!


ফাংশনগুলির জন্য ইনফিক্স স্বরলিপি ব্যবহার করার টিপটি আপনাকে কিছু বাইট সংরক্ষণ করতে পারে। এছাড়াও বেস i _[]=[]কেসটি সর্বশেষ প্যাটার্ন মেলানো নিয়ম হিসাবে সরানো যেতে পারে এবং তারপরে এটি সংক্ষিপ্ত করা যেতে পারে i _ e=eবা _!e=eআপনি ইনফিক্স স্বরলিপিতে স্যুইচ করার পরে এমন কিছু something
লাইকোনি

(min$product ...হতে পারে min(product ...
লাইকনি

product$map(mod a)সংক্ষিপ্ত করা যেতে পারে foldr((*).mod a)1
লাইকোনি

4

রুবি 2.4, 77 + 7 = 84 বাইট

-rprimeপতাকা ব্যবহার করে ।

->g,i{g.chars.map{|c|c==?p?i.shift.prime?? 1:0: c==?+?i.shift(2).sum: p}-[p]}

4

পার্ল 6 , 70 বাইট

{@^b.rotor($^a.comb.map(1+(*ne'p'))).map({$_-2??.[0].is-prime!!.sum})}

প্রথমে rotorপদ্ধতিটি ইনপুট তালিকাটি 1 বা 2 আকারের অংশগুলিতে বিভক্ত করতে ব্যবহৃত হয় প্রোগ্রামটির পরবর্তী অক্ষর কিনা তা নির্ভর করে p। তারপরে সেই খণ্ডিত তালিকাটি ম্যাপ করা হবে; আকার 2 এর অংশগুলি সংশ্লেষ করা হয়, এবং আকার 1 এর অংশগুলির প্রাথমিকতার জন্য তাদের একমাত্র উপাদান পরীক্ষা করা হয়।



3

সি #, 130 129 বাইট

p=>d=>{var i=0;p.Any(c=>{Console.Write((c==43?d[i++]+d[i]:Enumerable.Range(2,d[i]-2).Any(x=>d[i]%x==0)?0:1)+" ");return++i<0;});}

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

  • ফাংশনটি কারিরিং করে 1 বাইট সংরক্ষণ করা হয়েছে (সাইওসকে ধন্যবাদ)

সি # কীভাবে কাজ করে তা নিশ্চিত নন তবে আপনি কী বাইট সংরক্ষণ এবং তরকারিযুক্ত ক্রিয়াকলাপটি পরিবর্তন (p,d)=>করতে p=>d=>পারবেন?
সাইয়েস

ঠিক আছে, ধন্যবাদ। (প্রয়োজনীয় সি # বয়লারপ্লেটের কতটা বাইট গণনায় অন্তর্ভুক্ত করা উচিত তা বিতর্কযোগ্য তবে হ্যাঁ, আপনি এটি লিখতে পারেন। লিঙ্কযুক্ত টিআইও দেখুন))
মরমেগিল ২

2

পাওয়ারশেল 3+, 151 121 বাইট

$r,$v=$args;$p={0-notin((2..(($n=0+"$args")-1)|%{$n%$_}))};$i=0;$r|%{if($_-eq"p"){&p $v[$i]}else{$v[$i]+$v[($i+=1)]}$i++}

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

মন্তব্য ভিত্তিক ব্যাখ্যা

# $r is the program code. Assumed char array
# $v is the remaining variables in an assumed integer array.
$r,$v=$args
# Anonymous function to determine if a number is a prime or not.
# Test all potential factors. Check if any 0 modulus remainders are present
$p={0-notin((2..(($n=0+"$args")-1)|%{$n%$_}))}
# $i is an index for tracking location in $v
$i=0
# Cycle each of the instructions
$r|%{if($_-eq"p"){
        # Call the prime checking anonymous function on this number
        &p $v[$i]
    }else{
        # Add the next two numbers. Adjust the index accordingly. 
        $v[$i]+$v[($i+=1)]

    }
    # Next number in list. 
    $i++  
}
    # Next number in list. 
    $i++  
}


0

কিউব্যাসিক, 122 বাইট

INPUT p$
FOR i=1TO LEN(p$)
INPUT x
IF"+"=MID$(p$,i,1)THEN INPUT y:?x+y:ELSE f=0:FOR j=2TO x:f=f-(x MOD j=0):NEXT:?f=1
NEXT

কোডটিকে ইনপুটটির লাইন হিসাবে নিয়ে যায়, তারপরে প্রতিটি ইনপুট নম্বরকে তার নিজস্ব লাইনে নেয়। আউটপুটগুলি ইনপুটগুলির সাথে ছেদ করা হয় কারণ তারা গণনা করার সাথে সাথে এগুলি মুদ্রিত হয়। সত্যবাদী মান -1; ভুয়া হয় 0

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