একচেটিয়া এবং অন্তর্ভুক্ত ব্যাপ্তির উপর পণ্য


18

দ্বারা অনুপ্রাণিত এই প্রশ্নের দ্বারা @ CᴏɴᴏʀO'Bʀɪᴇɴ

প্রশ্ন থেকে নেওয়া:

আপনার টাস্কটি সহজ: প্রদত্ত দুটি এবং দুটি সংখ্যার আউটপুট ∏ [a, b]; এটি হ'ল a এবং b এর মধ্যে ব্যাপ্তির পণ্য। আপনি কোনও যুক্তিসঙ্গত ফর্ম্যাটে a এবং b নিতে পারেন, তা কোনও ফাংশনের পক্ষে যুক্তি, তালিকার ইনপুট, এসটিডিআইএন, এবং সিটিএর হতে পারে। আপনি কোনও যুক্তিসঙ্গত বিন্যাসে আউটপুট দিতে পারেন, যেমন একটি রিটার্ন মান (ফাংশনগুলির জন্য) বা এসটিডিআউট। একটি সর্বদা খ এর চেয়ে কম হবে।

নোট করুন যে শেষটি একচেটিয়া বা বিভক্ত হতে পারে। আমি খুঁতখুঁতে না. ^: _ ^

এই চ্যালেঞ্জের জন্য পার্থক্য হ'ল আমরা ব্যাপ্তির ধরণ সম্পর্কে পছন্দসই হতে চলেছি। ইনপুট ফর্ম একটি স্ট্রিং [a,b], (a,b], [a,b), অথবা (a,b)যেখানে একটি []একটি সমেত সীমানা নেই এবং ()একটি একচেটিয়া সীমানা নেই। সুস্পষ্ট সীমানা দেওয়া, পরিসীমাটির পণ্য সরবরাহ করুন। এছাড়াও ইনপুট পরিসীমা সর্বদা কমপক্ষে 1 নম্বর অন্তর্ভুক্ত করবে, যার অর্থ রেঞ্জগুলি (3,4)অবৈধ এবং পরীক্ষার প্রয়োজন নেই।

পরীক্ষার মামলা

[a,b) => result
[2,5) => 24
[5,10) => 15120
[-4,3) => 0
[0,3) => 0
[-4,0) => 24

[a,b] => result
[2,5] => 120
[5,10] => 151200
[-4,3] => 0
[0,3] => 0
[-4,-1] => 24

(a,b] => result
(2,5] => 60
(5,10] => 30240
(-4,3] => 0
(0,3] => 6
(-4,-1] => -6

(a,b) => result
(2,5) => 12
(5,10) => 3024
(-4,3) => 0
(0,3) => 2
(-4,0) => -6

এটি একটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে।


লিডারবোর্ড

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে ক্যাটালগ তৈরি করে a) ভাষার প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেম্পলেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

উত্তর:


7

ল্যাবভিউ, 38 ল্যাবভিউ পুরষ্কার

"সামান্য" পরিবর্তিত, এখন () এবং [] এর জন্য স্ক্যান করে এবং সংখ্যায় সূচক যুক্ত করে রেঞ্জগুলি সেট করে।

প্রথম


5
অভিনব জিআইএফ দরকার এমন একটি ভাষা রেখে আপনি তত্ক্ষণাত ∞ খ্যাতি অর্জন করেছিলেন। জি জি। +1
অ্যাডিসন ক্রম্প

3

পাইথন 2, 72 বাইট

lambda s:reduce(int.__mul__,range(*eval(s[1:-1]+'+'+`']'in s`))[s<'[':])

আমরা মূল্যায়ন সংখ্যাগুলি নিষ্কাশন করতে s[1:-1] , প্রান্তগুলি সহ ইনপুট স্ট্রিংটি সরানো হয়, যা একটি টিপল দেয়। rangeএই টিপলটি পেতে এবং পণ্যটি গ্রহণ করা ধারণা ।

lambda s:reduce(int.__mul__,range(*eval(s[1:-1]))

শেষের পয়েন্টগুলি সামঞ্জস্য করতে ফ্যাদিং ঘটে। উপরের এন্ডপয়েন্টটি সহজ, ইনপুটটি শুরু হলে প্রথম উপাদানটি কেটে ফেলুন( , যেমন সম্পন্ন [s<'[':]

অন্য প্রান্তটি জটিলতর। পাইথনের শর্তসাপেক্ষে তালিকার শেষ উপাদানটি সরানোর কোনও পরিষ্কার উপায় নেই কারণ l[:0]পুরো জিনিসটি সরিয়ে দেয়। সুতরাং, আমরা কিছু অদ্ভুত কিছু করি। আমরা tuple স্ট্রিং সংশোধন আগেই স্ট্রিং উপর ট্যাক থেকে মূল্যায়ন করা হয় "+True"বা "+False"কিনা গুলি প্রান্ত উপর নির্ভর করে ]বা )। ফলাফলটি এমন কিছু3,7 হয় 3,7+Falseযা হয়3,7 , অথবা 3,7+Trueযা 3,8

বিকল্প, সুন্দর 72:

lambda s:eval("reduce(int.__mul__,range((s<'[')+%s+(']'in s)))"%s[1:-1])

3

Minecraft 15w35a +, প্রোগ্রামের আকার 638 মোট (নীচে দেখুন)

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

এখানে চিত্র বর্ণনা লিখুন

এটি PI a,bদুটি লিভারের দ্বারা বর্ণিত অন্তর্ভুক্ত / একচেটিয়া সাথে গণনা করে। এখানে চিত্র বর্ণনা লিখুনএই দুটি কমান্ড ব্যবহার করে ইনপুট দেওয়া হয়: /scoreboard players set A A {num}এবং/scoreboard players set B A {num}/scoreboard objectives add A dummyইনপুট দেওয়ার আগে ব্যবহার করতে ভুলবেন না ।

ব্যবহার করে স্কোর: {program size} + ( 2 * {input command} ) + {scoreboard command} = 538 + ( 2 * 33 ) + 34 = 638

এই কোডটি নিম্নলিখিত psuedocode এর সাথে মিলে যায়:

R = 1
T = A
loop:
  R *= A
  A += 1
  if A == B:
    if A.exclusive:
      R /= T
    if B.exclusive:
      R /= B
    print R
    end program

বিশ্ব এখানে ডাউনলোড করুন


2

পাইথ, 20 বাইট

*FPW}\)ztW}\(z}FvtPz

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

*FPW}\)ztW}\(z}FvtPz   implicit: z = input string
                 tPz   remove the first and last character of z
                v      evaluate, returns a tuple of numbers
              }F       inclusive range
        tW             remove the first number, if
          }\(z            "(" in z
  PW                   remove the last number, if
    }\)z                  ")" in z
*F                     compute the product of the remaining numbers

2

রুবি, 79 77 বাইট

->s{a,b=s.scan /\-?\d+/;(a.to_i+(s[?[]?0:1)..b.to_i-(s[?]]?0:1)).reduce 1,:*}

79 বাইট

->s{a,b=s.scan(/\-?\d+/).map &:to_i;((s[?[]?a:a+1)..(s[?]]?b:b-1)).reduce 1,:*}

Ungolfed:

-> s {
  a,b=s.scan /\-?\d+/    # Extracts integers from the input string, s
  (
    a.to_i+(s[?[]?0:1).. # Increase start of the range by 1 if s contains `(`
    b.to_i-(s[?]]?0:1)   # Decrease end of the range by 1 if s contains `)`
  ).reduce 1,:*
}

ব্যবহার:

->s{a,b=s.scan /\-?\d+/;(a.to_i+(s[?[]?0:1)..b.to_i-(s[?]]?0:1)).reduce 1,:*}["(2,5]"]
=> 60

2

গুরুতরভাবে, 31 বাইট

,#d@p@',@s`εj≈`Mi(@)']=+)'(=+xπ

স্ট্রিং হিসাবে ইনপুট নেয় (ডাবল উদ্ধৃতিতে আবৃত)

এটি অনলাইনে চেষ্টা করুন (ইনপুটটি ম্যানুয়ালি প্রবেশ করাতে হবে)

ব্যাখ্যা:

,#d@p@                             get input, take first and last character off and push them individually
      ',@s`εj≈`Mi                  split on commas, map: join on empty, cast to int; explode list
                 (@)']=+)'(=+      increment start and end if braces are ( and ] respectively (since range does [a,b))
                             xπ    make range, push product

1

পাইথন 3, 104

y,r=input().split(',')
t=int(y[1:])+(y[0]<')')
for x in range(t+1,int(r[:-1])+(r[-1]>'[')):t*=x
print(t)

স্টিডিন থেকে ইনপুট নেয়।


আমরা আসলে আমাদের উত্তরগুলি একই দ্বিতীয়
ওওতে

@ ইমেল এটি ব্যাজ হওয়া উচিত।
মরগান থ্রাপ

অসুস্থ আসলে এই মুহুর্তে
মেটাতে

@ ইমেল: আসলে আপনি নিজের 1 সেকেন্ড পোস্ট করেছিলেন মরগান থ্র্যাপের
ইভি

ওহ সত্যিই? এটি উভয় উত্তরের n সেকেন্ড আগে উত্তরটি দেখিয়েছিল
Eumel

1

ম্যাটল্যাব, 86 70 বাইট

s=sscanf(input(''),'%c%d,%d%c');a=s<42;disp(prod(a(1)+s(2):s(3)-a(4)))

এটি অষ্টাভেও কাজ করে । আপনি এখানে অনলাইনে চেষ্টা করতে পারেন । আমি কোডটিকে সেই কর্মক্ষেত্রে স্ক্রিপ্ট হিসাবে যুক্ত করেছি, যাতে আপনি কেবলমাত্র productRangeপ্রম্পটে প্রবেশ করতে পারেন , তারপরে আপনার ইনপুট প্রবেশ করুন, যেমন'(2,5]'


সুতরাং কোডটি প্রথমে বন্ধনী এবং সংখ্যাগুলি একসাথে বের করতে ইনপুটটিকে স্ক্যান করে:

s=sscanf(input(''),'%c%d,%d%c');

এটি তৈরি করে এমন একটি অ্যারে প্রদান করে [bracket, number, number, bracket]

অ্যারের সাথে তুলনা করা হয় 42, আসলে 42 থেকে 90 সমেত যে কোনও সংখ্যা করবে number এটি নির্ধারণ করে যে এটি কোন ধরণের বন্ধনী ছিল, যদি এটি একটি একচেটিত বন্ধনী হয় তবে একটি 1 প্রদান করে এবং যদি একটি অন্তর্ভুক্ত বন্ধনী হয় 0

a=s<42;

পরিশেষে, আমরা প্রয়োজনীয় ব্যাপ্তির পণ্যটি প্রদর্শন করি:

disp(prod(a(1)+s(2):s(3)-a(4)))

পণ্যটি প্রথম সংখ্যার s(2)সাথে প্রথম ব্রাকেট প্রকারের সাথে স্টারিং সংখ্যার a(1)(যা একটি বিশেষ ব্র্যাকেটটি যদি 1 হয়), s(3)দ্বিতীয় বন্ধনী প্রকারের বিয়োগ সংখ্যার বিয়োগফল সহ অন্তর্ভুক্ত a(4)। এটি সঠিক সমেত / একচেটিয়া পরিসর দেয়।


1

জুলিয়া, 75 বাইট

s->prod((x=map(parse,split(s[2:end-1],",")))[1]+(s[1]<41):x[2]-(s[end]<42))

এটি একটি বেনাম ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়। এটি কল করার জন্য, এটির একটি নাম দিন f=s->...

Ungolfed:

function f(s::AbstractString)
    # Extract the numbers in the input
    x = map(parse, split(s[2:end-1], ","))

    # Construct a range, incrementing or decrementing the endpoints
    # based on the ASCII value of the surrounding bracket
    r = x[1]+(s[1] == 40):x[2]-(s[end] == 41)

    # Return the product over the range
    return prod(r)
end

1

গণিত, 128 বাইট

1##&@@Range[(t=ToExpression)[""<>Rest@#]+Boole[#[[1]]=="("],t[""<>Most@#2]-Boole[Last@#2==")"]]&@@Characters/@#~StringSplit~","&

এটি অনেক দীর্ঘ ... বর্তমানে একটি StringReplace+ RegularExpressionসমাধান সম্পর্কে ভাবছেন ।


0

পাওয়ারশেল, 146 104 বাইট

param($i)$a,$b=$i.trim("[]()")-split',';($a,(1+$a))[$i[0]-eq'(']..($b,(+$b-1))[$i[-1]-eq')']-join'*'|iex

নম্বরগুলি কীভাবে ইনপুট থেকে নেওয়া হয় তা পরিবর্তন করে ৪২ বাইট বন্ধ রাখে। উ!

param($i)                          # Takes input string as $i
$a,$b=$i.trim("[]()")-split','     # Trims the []() off $i, splits on comma,
                                   # stores the left in $a and the right in $b

($a,(1+$a))[$i[0]-eq'(']..($b,(+$b-1))[$i[-1]-eq')']-join'*'|iex
# Index into a dynamic array of either $a or $a+1 depending upon if the first
# character of our input string is a ( or not
# .. ranges that together with
# The same thing applied to $b, depending if the last character is ) or not
# Then that's joined with asterisks before
# Being executed (i.e., eval'd)


0

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

{s/\((\-?\d+)/[$0^/;s/(\-?\d+)\)/^$0]/;s/\,/../;[*] EVAL $_}

কিছুটা ভুল-মিল রয়েছে কারণ (2,5]আপনি পার্ল 6-তে উদাহরণটি লেখার উপায়টিও হবে 2^..5(কার্যকর [2^..5])।
সুতরাং আমি সাথে অদলবদল (2করতে হবে [2^এবং ,সঙ্গে .., তারপর আমি EVALএটি একটি পরিসীমা মধ্যে আছে।


ব্যবহার:

# give it a name
my &code = {...}

# the `$ =` is so that it gets a scalar instead of a constant

say code $ = '(2,5)'; # 12
say code $ = '[2,5)'; # 24
say code $ = '(2,5]'; # 60
say code $ = '[2,5]'; # 120

say code $ = '(-4,0)' # -6
say code $ = '[-4,0)' # 24
say code $ = '(-4,0]' # 0
say code $ = '[-4,0]' # 0

say code $ = '(-4,-1)' # 6
say code $ = '[-4,-1)' # -24
say code $ = '(-4,-1]' # -6
say code $ = '[-4,-1]' # 24

# this is perfectly cromulent,
# as it returns the identity of `*`
say code $ = '(3,4)'; # 1

0

সিজেম, 34 বাইট

r)\(@+"[()]"2/\.#\',/:i.+~1$-,f+:*

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

ব্যাখ্যা:

r       Read input.
)       Split off last character.
\       Swap rest of input to top.
(       Split off first character.
@       Rotate last character to top.
+       Concatenate first and last character, which are the two braces.
"[()]"  Push string with all possible braces.
2/      Split it into start and end braces.
\       Swap braces from input to top.
.#      Apply find operator to vector elements, getting the position of each brace
        from input in corresponding list of possible braces. The lists of braces
        are ordered so that the position of each can be used as an offset for the
        start/end value of the interval.
\       Swap remaining input, which is a string with two numbers separated by
        a comma, to top.
',/     Split it at comma.
:i      Convert the two values from string to integer.
.+      Element-wise addition to add the offsets based on the brace types.
~       Unwrap the final start/end values for the interval.
1$      Copy start value to top.
-       Subtract it from end value.
,       Build 0-based list of values with correct length.
f+      Add the start value to all values.
:*      Reduce with multiplication.

0

জাভাস্ক্রিপ্ট (ES6), 90 বাইট

s=>eval(`for(n=s.match(/-*\\d+/g),i=n[0],c=s[0]<"["||i;++i<+n[1]+(s.slice(-1)>")");)c*=i`)

ব্যাখ্যা

s=>
  eval(`                    // use eval to allow for loop without return or {}
    for(
      n=s.match(/-*\\d+/g), // n = array of input numbers [ a, b ]
      i=n[0],               // i = current number to multiply the result by
      c=s[0]<"["||i;        // c = result, initialise to a if inclusive else 1
      ++i<+n[1]             // iterate from a to b
        +(s.slice(-1)>")"); // if the end is inclusive, increment 1 more time
    )
      c*=i                  // multiply result
  `)                        // implicit: return c

পরীক্ষা


0

আর, 102 104 বাইট

f=function(s){x=scan(t=gsub('\\(|\\[|,|\\)|\\]',' ',s))+c(grepl('^\\(',s),-(grepl('\\)$',s)));prod(x[1]:x[2])}

Ungolfed

f=function(s){
    # remove delimiting punctuation from input string, parse and return an atomic vector
    x=scan(t=gsub('\\(|\\[|,|\\)|\\]',' ',s)) +
    # add /subtract from the range dependent on the `[)` pre/suf-fixes
    c(grepl('^\\(',s),-(grepl('\\)$',s)))
    # get the product of the appropriate range of numbers
    prod(x[1]:x[2])
}

নেতিবাচক সংখ্যাগুলি মঞ্জুর করতে সম্পাদনা করুন [আরও 2 টি অক্ষরের ব্যয়ে)


ভাষা?
ThisSuitIsBlackNot

@ এটিসুইটস ব্ল্যাক নট - R(এবং উত্তরে স্থির করা হয়েছে)
মাইল

0

জাভাস্ক্রিপ্ট (ES6), 79

বেনামে পদ্ধতি হিসাবে

r=>eval("[a,b,e]=r.match(/-?\\d+|.$/g);c=a-=-(r<'@');for(b-=e<'@';a++<b;)c*=a")

পরীক্ষার স্নিপেট

F=r=>eval("[a,b,e]=r.match(/-?\\d+|.$/g);c=a-=-(r<'@');for(b-=e<'@';a++<b;)c*=a")

// TEST
console.log=x=>O.innerHTML+=x+'\n'

;[
 ['[2,5)',24],['[5,10)',15120],['[-4,3)',0],['[0,3)',0],['[-4,0)',24],
 ['[2,5]',120],['[5,10]',151200],['[-4,3]',0],['[0,3]',0],['[-4,-1]',24],
 ['(2,5]',60],['(5,10]',30240],['(-4,3]',0],['(0,3]',6],['(-4,-1]',-6],
 ['(2,5)',12],['(5,10)',3024],['(-4,3)',0],['(0,3)',2],['(-4,0)',-6]
].forEach(t=>{
  r=F(t[0]),k=t[1],console.log(t[0]+' -> '+r+' (check '+k+ (k==r?' ok)':' fail)'))
})
<pre id=O></pre>

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