মাইনাস, প্লাস, টাইমস, এক্সপেনশনেশন?


26

এটি একটি সিএমসি (চ্যাট মিনি চ্যালেঞ্জ) যা আমি আমাদের চ্যাটরুম, দ্য নাইনটিথ বাইটে কিছুক্ষণ আগে পোস্ট করেছি।

চ্যালেঞ্জ

ইতিবাচক পূর্ণসংখ্যার দেওয়া x, শেষ 2 বিটের উপর নির্ভর করে xনিম্নলিখিতটি করুন:

x & 3 == 0: 0
x & 3 == 1: x + x
x & 3 == 2: x * x
x & 3 == 3: x ^ x (exponentiation)

ইনপুট আউটপুট

Single Integer -> Single Integer  

আউটপুটে একটি ট্রেলিং নিউলাইন অনুমোদিত। অন্য কোনও সাদা স্থানের অনুমতি নেই।

Testcases

input       output
    1            2
    2            4
    3           27
    4            0
    5           10
    6           36
    7       823543
    8            0
    9           18
   10          100
   11 285311670611
   12            0

এটি একটি চ্যালেঞ্জ, তাই সংক্ষিপ্ততম কোডটি জয়ী!


8
না করা উচিত 0ক্ষেত্রে হতে x + 2, যেমন অন্যরা কীভাবে হয় এইজন্য x * 2, x ^ 2এবং x ^^ 2(tetration)? : পি
ইটিএইচ প্রোডাকশনগুলি

আমাদের সবচেয়ে বড় আউটপুটটি কী সমর্থন করা উচিত (সম্পর্কিত x ^ x)? 32-বিট ইতিমধ্যে পরীক্ষার ক্ষেত্রে যথেষ্ট নয় এবং পরীক্ষার ক্ষেত্রে 1164-বিট যথেষ্ট নয় 19
কেভিন ক্রুইজসেন

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

@ হাইপারনিউট্রিনো ঠিক আছে, সেক্ষেত্রে আমি আমার (জাভা)) কোডটি ঠিক করেছি (+২২ বাইটের জন্য .. xD)
কেভিন ক্রুইজসেন

উত্তর:


13

জেলি , 8 বাইট

ị“+×*_”v

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

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

প্রথমত, লক্ষ্য করুন যে x&3সমতুল্য x%4, যেখানে %মডুলো mod তারপরে, জেলি যেহেতু মডিউলার ইনডেক্সিং ( a[n] == a[n+len(a)]) ব্যবহার করে , তাই আমাদের এটির মোকাবেলা করারও দরকার নেই।

তারপর:

  • যদি x%4==0, ফিরে x_x(বিয়োগ) (ধারাবাহিকতার জন্য);
  • যদি x%4==1, ফিরে x+x;
  • যদি x%4==2, ফিরে x×x(গুণ);
  • যদি x%4==3, ফিরে x*x(ক্ষয়ক্ষতি)

নোট করুন যে জেলি 1-ইনডেক্সিং ব্যবহার করে, তাই বিয়োগটি "_"শেষ পর্যন্ত সরানো হয়েছে।

ị“+×*_”v  example input: 10
ị“+×*_”   index 10 of the string “+×*_”, which gives "×"
       v  evaluate the above as a Jelly expression,
          with 10 as the argument, meaning "10×" is the
          expression evaluated. The dyad "×" takes the
          second argument from the only argument, effectively
          performing the function to itself.

2
@ অ্যান্ড্রাইবাক এএফাইক জেলির নিজস্ব এনকোডিং রয়েছে - দেখুন এখানে , তবে আমি জানি যে এর সমস্ত চরিত্র 1 বাইট।
স্টিফেন

"8 বাইট"। বাইটগুলি কীভাবে গণনা করা উচিত? এই উত্তরটিতে আটটি অক্ষর রয়েছে, তবে অন্তত এনকোডিং স্ট্যাকেক্সচেঞ্জে এই পৃষ্ঠাটি পরিবেশন করে, এটি 15 বাইট নেয় (ব্যবহার করে গণনা করা wc --bytes)।
andrybak

যদি ভাষাটি একটি এনকোডিংয়ে এটি ব্যাখ্যা করে তবে বাইট গণনা (ইমো) এর জন্য অন্য এনকোডিংটি ব্যবহার করা বুদ্ধিমান হবে না
ম্যাকেনজি ম্যাকক্লেইন

@andrybak কোডটি একটি এনকোডিংয়ে এনকোড করা হয়েছে যাতে ব্রাউজারটি সঠিকভাবে 15 বাইট দেখায়। একটি এনকোডিংয়ে কোড যা জেলি বুঝতে পারে এটি 8 বাইট। এটি কীভাবে এনকোড করা হয়েছে তা জানতে চাইলে github.com/DennisMitchell/jelly/wiki/Code- পৃষ্ঠা দেখুন ।
ইটোপ্লে


9

সিজেম , 12 বাইট

ri__"-+*#"=~

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

ব্যাখ্যা

ri            e# Read an int from input (call it x).
  __          e# Duplicate x twice.
    "-+*#"    e# Push this string.
          =   e# Get the character from the string at index x (mod 4).
           ~  e# Eval that char, using the two copies of x from before.

xমান মান 4 (মডেল 4 এবং 3 এর সমতুল্য) উপর নির্ভর করে নিম্নলিখিত ক্রিয়াকলাপগুলির মধ্যে একটি চালিত করে ।

0:  -  Subtraction
1:  +  Addition
2:  *  Multiplication
3:  #  Exponentiation

6

গণিত 25 বাইট

0[2#,#*#,#^#][[#~Mod~4]]&

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


4

পাইথ, 8 বাইট

.v@"0y*^

অনুবাদক


হ্যাঁ আমি এটি পরীক্ষা করেছি এবং এটি কাজ করে। এবং না, আমি এর vপরিবর্তে ব্যবহার করতে পারি না .v
এরিক আউটগলফার

আমি মনে করলাম সুযোগটি স্থানীয় ছিল ... আমি ভেবেছিলাম .vঅ্যাক্সেস করতে পারি না Q... স্পষ্টতই আমি পাইথের মধ্যে ছড়িয়ে পড়েছি। আপনার জন্য +1
ফাঁস নুন

@ লিক্যুন না এটির vস্থানীয় সুযোগ নেই এটি .vকেবল একটি অভিব্যক্তি প্রকাশ করে।
এরিক আউটগলফার

আমার শিখার মতো অনেক কিছুই আছে ...
লিকি নুন

3
ঐটা সুন্দর! একদম আশ্চর্যজনক! আমি এমনকি সম্ভব যে ধারণা ছিল না। শৈলী পয়েন্ট জন্য, "0y*^হতে পারে "-+*^
isaacg



3

হাস্কেল, 28 27 বাইট

f x=cycle[0,x+x,x*x,x^x]!!x

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

সম্পাদনা: 1 বাইটের জন্য @ janrjan জোহানসেনকে ধন্যবাদ।


এইচএম আমি খুব দেরী করেছি, তবে আপনি এটি দিয়ে বাইটটি সংক্ষিপ্ত করতে পারেন cycle
janrjan জোহানসেন

@ আরজান জোহানসেন: আগের চেয়ে ভাল দেরি। ধন্যবাদ!
নিমি


2

সি, 63 বা 62 বাইট

#include<math.h>
f(x){return(int[]){0,x+x,x*x,pow(x,x)}[x&3];}

-১ বাইট যদি ম্যাক্রোগুলিকে অনুমতি দেওয়া হয় তবে ধরে xনেওয়া কোনও অভিব্যক্তি নয় 3+5(যেহেতু এটি অগ্রাধিকারটি জগাখিচুড়ি করবে):

#include<math.h>
#define f(x)(int[]){0,x+x,x*x,pow(x,x)}[x&3]

@ সেলিংক্যাট ঠিক আছে, সে সম্পর্কে ভুলে গেছি।
টিম

এমএসভিএস ২০১৫ তে সংকলন করে না; Intellisense বলেন cast to incomplete array type "int[]" is not allowedকম্পাইলার বলেন error C4576: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax; করাও! int f (int x) কোথায়? কোডটি আসলে কমপক্ষে 8 বাইট দীর্ঘ হয়; এছাড়াও এটি খুব ধীর এবং অদক্ষ, কারণ এটি প্রতিটিটি মূল্যায়ন করে - এটি IRL পুনরাবৃত্তি করবেন না

@ xakepp35 কি? 1) এটি একটি সি সংকলক সংকলন করতে হবে । সর্বাধিক (পড়ুন: এমএসভিসি ব্যতীত সমস্ত কিছু) সি সংকলকরা (int[])এই পরিস্থিতির জন্য এই বাক্য গঠনটিকে সমর্থন করে । 2) f(x)পুরোপুরি আইনী সি 89। আমি স্ট্যান্ডার্ড নির্দিষ্ট করিনি। 3) এটি কোড আকার সম্পর্কে, দক্ষতা নয়। এবং 4) আপনি পৃষ্ঠপোষকতা করতে চলেছেন, কমপক্ষে একটি বাস্তব সংকলক ব্যবহার করুন এবং / অথবা আপনার তথ্য যাচাই করুন।
টিম Čas

@ টিম Čএস হ্যাঁ, রাই সরি! আমি এটি সি ++ কোড হিসাবে সংকলন করার চেষ্টা করছিলাম। এটি আমার দোষ) এটি সংকলন করে এবং দুর্দান্ত কাজ করে!

2

জাভা 7, 75 বাইট

long c(int n){int x=n%4;return x<1?0:x<2?n+n:x<3?n*n:(long)Math.pow(n,n);}

যদিও এটি বিধি অনুসারে বৈধ, long64৪-বিট, তাই এটি 19^19উপরের এবং এক্সপেনশনেশন পরীক্ষার ক্ষেত্রে ব্যর্থ । আমরা একটি BigDecimalপদ্ধতির ব্যবহার করতে পারি তা ঠিক করতে :

148 146 বাইট

import java.math.*;BigDecimal c(int n){int x=n%4;BigDecimal m=new BigDecimal(n);return x<1?m.subtract(m):x<2?m.add(m):x<3?m.multiply(m):m.pow(n);}

ব্যাখ্যা (বিগডিসিমাল পদ্ধতির):

import java.math.*;                // Import required for BigDecimal
BigDecimal c(int n){               // Method with integer parameter and BigDecimal return-type
  int x=n%4;                       //  Input modulo-4
  BigDecimal m=new BigDecimal(n);  //  Convert input integer to BigDecimal
  return x<1?                      //  If the input mod-4 is 0:
    m.subtract(m)                  //   Return input - input (shorter than BigDecimal.ZERO)
   :x<2?                           //  Else if the input mod-4 is 1:
    m.add(m)                       //   Return input + input
   :x<3?                           //  Else if the input mod-4 is 2:
    m.multiply(m)                  //   Return input * input
   :                               //  Else:
    m.pow(n);                      //   Return input ^ input
}                                  // End of method

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

import java.math.*;
class M{
  static BigDecimal c(int n){int x=n%4;BigDecimal m=new BigDecimal(n);return x<1?m.subtract(m):x<2?m.add(m):x<3?m.multiply(m):m.pow(n);}

  public static void main(String[] a){
    for (int i = 1; i <= 25; i++) {
      System.out.print(c(i) + "; ");
    }
  }
}

আউটপুট:

2; 4; 27; 0; 10; 36; 823543; 0; 18; 100; 285311670611; 0; 26; 196; 437893890380859375; 0; 34; 324; 1978419655660313589123979; 0; 42; 484; 20880467999847912034355032910567; 0; 50; 

আপনার এইভাবে প্রোগ্রামটি ঠিক করার দরকার নেই: পি সংখ্যার অসীম আকারে থাকলে পুরানো উত্তরটি কাজ করবে; প্রথম প্রোগ্রামটি আমার চশমা অনুসারে বৈধ হয়ে উঠত। : পি
হাইপারনিউট্রিনো

@ হাইপারনিট্রিনো তারপরে আমি উত্তরে এটি নির্দিষ্ট করে দিয়েছি .. আহা ভাল, জাভা কোনওভাবেই কোনও কোড-গল্ফ চ্যালেঞ্জ জিতবে না। ;)
কেভিন ক্রুইজসেন

1
হ্যাঁ, আমি উল্লেখ করব এবং হ্যাঁ, এটি জাভা, এটি জিততে পারে না। : ডি
হাইপারনিউটারিনো

2
" এবং হ্যাঁ, এটি জাভা, এটি জিততে পারে না।: ডি " আমি এটিতে অভ্যস্ত। : পি এমনকি আমার সর্বনিম্ন জাভা উত্তর 8 বাইটের মধ্যে গল্ফিং উত্তরের তুলনায় দীর্ঘ পথ। xD যদিও আমি প্রথমবার আমার জাভা উত্তরের সাথে পাইথন উত্তরটি মারলাম, যা আমার অনুমানের জন্য গণনা করতে হবে। ;)
কেভিন ক্রুইজসেন

2

x86 এসেমব্লার, ইনটেল সিনট্যাক্স, 192 বাইট

.data
f dw @q,@w,@e,@r
.code
mov ecx, eax
and ecx, 3
mov edx,dword ptr f[ecx*4]
call [edx]
ret
q:
xor eax,eax
ret
w:
add eax,eax
ret
e:
mul eax,eax
ret
r:
mov ecx,eax
t:
mul eax,eax
loop t
ret

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

আপডেট: এক্স 64 এর জন্য "ই" এর পরিবর্তে নিবন্ধভুক্ত নামগুলিতে "আর" ব্যবহার করুন (উদাহরণস্বরূপ raxপরিবর্তে eax, rcxপরিবর্তে ecx)। আকার পরিবর্তন করা হবে না এবং এটি -৪-বিট স্বাক্ষরযুক্ত শব্দ ব্যবহার করবে use


পিপিসিজিতে আপনাকে স্বাগতম! এই চ্যালেঞ্জের উদ্দেশ্যটি হল আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করা। এই ক্ষেত্রে, আপনার কোডগুলি সহজেই সমস্ত ফাংশন ঘোষণাগুলির সংমিশ্রণ করে একগুচ্ছ ছোট করা যেতে পারে। আপনি কিছু সাদা স্থান সরাতে পারেন।
হাইপারনিউটারিনো

@ হাইপারনিউট্রিনো এএসএম নিজেই দারুণ "দীর্ঘ" ভাষা :) এটি কীভাবে আরও সংক্ষিপ্ত করা যায় সে সম্পর্কে আমার ধারণা নেই। কোন উদাহরণ-পরামর্শ?

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

@ হাইপারনিট্রিনো, দুঃখিত .. তবে মনে হচ্ছে না) এটি অন্যদের মধ্যে দীর্ঘতম কোড হতে হবে, আমি উইন্ডোজ ক্রলফটিকে লিনাক্স ফর্ম্যাটে ছাঁটাই করতে পারি তাই 209-> 192 বাইট, পরিবর্তনগুলি দৃশ্যমান নয়)

হুম। ওটা খুব খারাপ. তবে নির্বিশেষে চমৎকার জমা! :)
হাইপারনিউট্রিনো

2

সি #, 39 বাইট

x=>new[]{0,2,x,Math.Pow(x,x-1)}[x&3]*x;

ব্যাখ্যা

এটি পর্যবেক্ষণ করুন:

(xx, x + x, x * x, x ^ x) == (0, 2, এক্স, এক্স ^ (এক্স -1)) * x

সমাধানটি একটি অ্যারে তৈরি করে, এতে সূচি তৈরি করে এবং এরপরে ফলাফলটিকে বহুগুণ করে x:

x => new[] { 0, 2, x, Math.Pow(x,x-1) }[x&3] * x;

বিকল্প সংস্করণ:

x=>new[]{0,x+x,x*x,Math.Pow(x,x)}[x%4];

(39 বি, অ্যারেতে সমস্ত গুনগুলি x%4প্রতিস্থাপিত হয় x&3)

x=>x%4<2?x%2*2*x:Math.Pow(x,x%4<3?2:x);

(39 বি, @ মেটাকলনের জবাবের মতো তবে x%2*2*xপ্রতিস্থাপন করা x*x%4<1?0:2)





1

ওসিস , 25 বাইট

mn4%3Q*nkn4%2Q*nxn4%1Q*++

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

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

লক্ষ্য করুন যে x&3সমতুল্য x%4, যেখানে %মডুলো।

mn4%3Q*nkn4%2Q*nxn4%1Q*++  input is n
mn4%3Q*                    (n**n)*((n%4)==3)
       nkn4%2Q*            (n**2)*((n%4)==2)
               nxn4%1Q*    (n*2)*((n%4)==1)
                       +   add the above two
                        +  add the above two

ওএসিস হ'ল স্ট্যাক-ভিত্তিক ভাষা যেখানে প্রতিটি চরিত্রই একটি আদেশ।



1

সি #, 42 বাইট

x=>x%4<2?x*x%4<1?0:2:Math.Pow(x,x%4<3?2:x)

আসলে এটি সাধারণ সি #, তবে আপনি এটি পুরো প্রোগ্রাম হিসাবে চালাতে পারবেন না এবং আপনাকে এটি ইন্টারেক্টিভতে টাইপ করতে হবে, আমার ধারণা আপনি এটি সি # ইন্টারেক্টিভ বলতে পারেন

ব্যাখ্যা :

x => (x % 4) < 2     //If the bits are smaller than 2 (1 or 0)
? x *           //multiply x with
    (x % 4) < 1 //if the bits are 0
    ? 0         //0 (results in 0)
    : 2         //or else with 2 (results in 2*x or x+x)
: Math.Pow(x,   //otherwise power x by
    (x % 4) < 3 //if the bits are 2
    ? 2         //2 (results in x^2 or x*x)
    : x);       //or else x (results in x^x)

আমি এটি সংক্ষিপ্ততম বৈকল্পিকের সাথে বলতে পারি না, কোনও পরামর্শ প্রশংসা করা হয়।


আমি এটা বৈধ মনে করি না। আপনার সাধারণত একটি প্রোগ্রাম বা ফাংশন জমা দেওয়া উচিত । স্নিপেটগুলি ডিফল্টরূপে অনুমোদিত নয়।
সাইয়েস

@ কিয়েস এটি একটি প্রোগ্রাম। আপনাকে কেবল এটি ইন্টারেক্টিভের মাধ্যমে চালাতে হবে যা প্রোগ্রামটির ব্যাখ্যা করবে।
মেটালাকন

আমি যখন এটি ইন্টারেক্টিভ চালাচ্ছি তখন আমি একটি ত্রুটি পাই কারণ xসংজ্ঞায়িত নয়। এটি এটিকে একটি স্নিপেট করে তোলে, পুরো প্রোগ্রাম নয়।
সাইয়েস

@ কোয়েস চ্যালেঞ্জটিতে এটি বলেছে, এখানে একটি ভেরিয়েবল এক্স সংজ্ঞায়িত হবে।
মেটাকলন

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




1

সি, 115 বাইট

#include<math.h>
#define D(K,L)K(x){return L;}
D(q,0)D(w,x+x)D(e,x*x)D(r,pow(x,x))(*g[])()={q,w,e,r};D(f,g[x%4](x))

উদাহরণ একটি ফাংশন int f(int x)

এটি দ্রুত কাজ করার গতির ভান করে কারণ এটি সিপিইউকে শর্তযুক্ত জাম্প ব্যবহার থেকে দূরে রাখে। এবং এটি এই কাজের জন্য সঠিক গতি-অনুকূলকরণের উপায়। এছাড়াও, এটি অ্যারের সি উদাহরণ হিসাবে সমস্ত কিছু মূল্যায়ন না করার চেষ্টা করে return(int[]){0,x+x,x*x,pow(x,x)}[x%4];তবে বুদ্ধিমানের সাথে ফন্টনগুলিতে পয়েন্টারগুলির অ্যারে ব্যবহার করার জন্য, আরও দ্রুত শর্তযুক্ত পাটি (জেএমপি / কল) করার জন্য আরও দ্রুত ঠিকানা গাণিতিকগুলি, একটি অনুকূলিত সংস্করণ হিসাবে " সুইচ () - যদি .. "। এই কৌশলটি বিভিন্ন ধরণের ফিনিটা অটোমেটাতেও কার্যকর হতে পারে - যেমন প্রসেসর এমুলেটর, এক্সিকিউটর, কমান্ড স্ট্রিম পার্সার এবং আরও - যেখানে গতির বিষয়গুলি এবং কোডটি switch(x%4) case(0):... case(1):... অনুপযুক্ত কারণ এটি একাধিক সিএমপি / জেএনজেড নির্দেশনা দেয়; এবং এগুলি সিপিইউর জন্য ব্যয়বহুল অপারেশন

মামলার সহজতম এবং সংক্ষিপ্ততম পরীক্ষা প্রোগ্রাম (ডিফল্ট শর্তে) নিম্নলিখিত হবে:

D(main,f(x))

এটি পেলোডের মাত্র 12 বাইট যোগ করবে এবং আমাদের আকারটি মোট 127 বাইটে যোগ করবে;

তবে আপনার লিঙ্কারে আরও ভালভাবে বলা উচিত যে fপরিবর্তে একটি এন্ট্রি পয়েন্ট হিসাবে ফাংশনটি ব্যবহার করুন main। এই উপায়টি, যদি আমরা সংক্ষিপ্ততম কোড থেকে এই কাজের জন্য দ্রুততম বাইনারি পাওয়ার লক্ষ করি ;-) এটি ঘটে কারণ সি লাইব্রেরিটি আপনার মূল () ফাংশনটি কল করার আগে অতিরিক্ত আরম্ভ / শাটডাউন কোড যুক্ত করে।

কোডটি কোনও কৌশল এবং সমস্যা ছাড়াই এমএসভিএস সম্প্রদায় 2015 তে সংকলন করে এবং সঠিক ফলাফল দেয়। আমি এটি জিসিসি দিয়ে পরীক্ষা করিনি, তবে আমি নিশ্চিত যে এটিও ভাল কাজ করবে।


1
পিপিসিজিতে আপনাকে স্বাগতম! এই চ্যালেঞ্জের উদ্দেশ্যটি হল আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করা। এই ক্ষেত্রে, আপনার কোডগুলি সহজেই সমস্ত ফাংশন ঘোষণাগুলির সংমিশ্রণ করে একগুচ্ছ ছোট করা যেতে পারে। আপনি কিছু সাদা স্থান সরাতে পারেন।
হাইপারনিউটারিনো

আমি ফাংশনগুলিতে পয়েন্টার ব্যবহার করার ধারণাটি পছন্দ করি
রোজলুপুর

@ রোসলুপ আপনি, তবে এটি আপনার 60 বাইট সংস্করণের চেয়ে প্রায় দ্বিগুণ বেশি। তবে এটি আরও দ্রুত কাজ করে, এটি এর আকারের মতো।

@ হাইপার নিউট্রিনো ঠিক আছে। আমি এটি আরও সংকুচিত করেছি। মনে হচ্ছে এটি চূড়ান্ত সংস্করণ! কোনও বাগ নেই, সমস্ত পরীক্ষা 8-) পাশ করেছে

@ xakepp35 আপনি কি আমার চেয়ে দ্রুত মাপলেন?
রোজলুপি

1

আর, 47 42 বাইট

x=scan();c(`-`,`+`,`*`,`^`)[[x%%4+1]](x,x)

ফাংশন প্রযোজ্য -, +, *, অথবা ^মডুলাস উপর ভিত্তি করে xকরা xএবং x

-x-xসর্বদা 0 থেকে একমাত্র (কিছুটা) স্মার্ট জিনিস ।

আর, 33 বাইট

pryr::f(c(0,2*x,x^2,x^x)[x%%4+1])

অন্যান্য লোকেরা যেমন ব্যবহার করেন তেমন পদ্ধতি। যদিও এটি সংক্ষিপ্ত, আমি এটি প্রায় পছন্দ করি না।


0

পাইথ , 12 বাইট

.vjd,+@"-+*^

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

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

প্রথমত, লক্ষ্য করুন যে x&3সমতুল্য x%4, যেখানে %মডুলো mod তারপরে, পাইথ যেহেতু মডিউলার ইনডেক্সিং ( a[n] == a[n+len(a)]) ব্যবহার করে , তাই আমাদের এটির সাথে ডিল করারও দরকার নেই।

তারপর:

  • যদি x%4==0, ফিরে x-xআসুন (ধারাবাহিকতার জন্য);
  • যদি x%4==1, ফিরে x+x;
  • যদি x%4==2, ফিরে x*x;
  • যদি x%4==3, ফিরে x^x

.vjd,+@"-+*^  example input: 10
      @"-+*^  "-+*^"[10], which is "*"
     +        "*10"
    ,         ["*10","10"]
  jd          "*10 10"
.v            evaluate as Pyth expression
              (Pyth uses Polish notation)

পোলিশ স্বরলিপি সম্পর্কে আরও: উইকিপিডিয়া (আপনি তুরস্কে থাকলে খুব খারাপ)।


তাই না? এটি আমার কাছে খুব বেশি লাগে। বিস্তারিত জানার জন্য আমার উত্তর দেখুন।
এরিক আউটগলফার

0

জাপট , 13 বাইট

Ov"^+*p"gU +U

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

এটি অন্যান্য ইওলাল উত্তরগুলির মতো একই পদ্ধতি ব্যবহার করে, প্রোগ্রামটি -Uকেবলমাত্র উপেক্ষা করে U, তাই আমরা ^পরিবর্তে (বিটওয়াইস এক্সওআর) ব্যবহার করি।


0

ভিম, 50 বাইট

y$o^R"A-+*^^V^[0^R"lx0"_Dp^[0D@"kJ0"ad$:r!echo ^R"^R0|bc^<Enter>

এখানে, ^Vএকটি প্রতিনিধিত্ব করে Ctrl+V, ^Rপ্রতিনিধিত্ব করে Ctrl-Rএবং ^[প্রতিনিধিত্ব করে escকী

প্রথমে এক্সপ্রেশনটি তৈরি করে এবং তার পরে bcমূল্যায়ন করে কাজ করে। অন্যথায় ফাঁকা বাফারে প্রথম লাইনে ইনপুট আশা করে।

ব্যাখ্যা:

y$o^R"                                                          Copies the input into register " and pastes it on the second line
      A-+*^^V^[0^R"lx0"_Dp                                      Enters that text after the input on the second line
                          ^[0D@"                                Executes the second line as a Vim command.
                                                                For example, if the input is 12, the second line would be 12A-+*^^[012lx0"_Dp, which means:
                                                                  12A-+*^^[           Insert the text -+*^ 12 times
                                                                           012lx0"_Dp Go 12 chars to the right and remove everything except for that.
                                                                If effect, this basically just selects the appropriate operation.
                                kJ0"ad$                         Put the operator after the number, cut it into register a
                                       :r!                      Execute the following shell command and put the result into the buffer:
                                          echo ^R"^R0|bc<Enter> The shell command "echo [contents of register a][contents of registers 0]|bc. As said above, register a contains the input and the operator, and register 0 contains the input. The <enter> then executes this command.

আমি যখন ^Vএটি টাইপ করি তখন আমার ক্লিপবোর্ডে যা আছে তা কেবল সংখ্যার পরিবর্তে
আটকায়

1
এটি অনলাইন চেষ্টা করুন! এছাড়াও, আপনি এর Dপরিবর্তে করতে পারেনd$
ডিজেএমসিএমহেম

0

পাইথ, 9 বাইট

@[0yQ*QQ^

পরীক্ষা স্যুট

এখানে অভিনব কিছু হচ্ছে না, কেবলমাত্র চারটি মান গণনা করুন এবং মডুলার ইনডেক্সিং সহ একটি নির্বাচন করুন।

@[0yQ*QQ^
@[0yQ*QQ^QQ)Q    Implicit variable introduction
@           Q    Modularly index into the following list
 [0        )     0
   yQ            Q*2
     *QQ         Q*Q
        ^QQ      Q^Q

0

ব্যাচ, 135 বাইট

@set/an=%1*2^&6
@goto %n%
:6
@set n=1
@for /l %%i in (1,1,%1)do @set/an*=%1
@goto 0
:4
@set n=%1
:2
@set/an*=%1
:0
@echo %n%

আমি [0+...+0, 2+...+2, x+...+x, x*...*x]শেষ দুটি বিটের উপর নির্ভর করে ফর্মের একটি স্ট্রিং তৈরি করে এবং মূল্যায়ন করে ক্ষতিকারকটি তৈরি করার আশাবাদী ছিলাম xতবে দুর্ভাগ্যক্রমে অপারেশনটি নির্বাচন করতে কোডটি প্রকাশ করতে খুব বেশি সময় লেগেছে কারণ আমি প্যারামিটার *হিসাবে ব্যবহার করতে পারিনি for, তবে আমি ছিলাম কমপক্ষে কিছু বাইট গল্ফ করতে কিছু পতন-যদিও কৌশল ব্যবহার করতে সক্ষম able


0

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

.+
$*1;$&$*
;((1111)*)(1?)$
;$3$3
1(?=1.*;((1111)*111)$)
$1;
+`\G1(?=.*;(1*))|;1*$
$1
1

এটি অনলাইন চেষ্টা করুন! (লিঙ্কে পরীক্ষার স্যুট অন্তর্ভুক্ত রয়েছে))

ব্যাখ্যা: প্রথম দুটি লাইন ইনপুটটিকে অকেরে রূপান্তরিত করে এবং এটির সদৃশ করে (তাই এখন আমাদের কাছে রয়েছে x;x)। পরবর্তী দুই লাইন একটি জন্য চেহারা x&3পারেন এর 0বা 1পরিবর্তন x;xমধ্যে x;0বা x;2উপযুক্তভাবে। আগামী দুই লাইনের জন্য চেহারা x&3==3এবং পরিবর্তন x;xমধ্যে x;x;x;...;x;1;x( x xগুলি)। এই উপায় আছে যে আমরা পারেন x;0, x;2, x;x, অথবা x;...;xএবং গুন সবকিছু একসাথে দশমিক রূপান্তর পিছনে রয়ে যায়। (গুণাগুলি কোডটি রেটিনা উইকির উপর ভিত্তি করে তবে শূন্য দ্বারা গুণন পরিচালনা করার জন্য সংশোধিত হয়েছে))

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