সবচেয়ে কম অপারেশন 100


15

সংক্ষিপ্ত বিবরণ

অঙ্কগুলির একটি তালিকা দেওয়া হয়েছে, 100 করার জন্য সবচেয়ে কম অপারেশন সন্ধান করুন

ইনপুট

অঙ্কগুলির একটি স্ট্রিং, যা সংখ্যামূলক ক্রমে থাকতে পারে এবং নাও পারে। অঙ্কগুলির ক্রম পরিবর্তন করা যায় না, তবে প্রতিটি (+) বা বিয়োগ (-) অপারেটরগুলির মধ্যে প্রতিটি যোগ করা যেতে পারে যাতে মোট যোগফল 100 এর সমান হয়।

আউটপুট

সংখ্যক এবং অপারেটরের সম্পূর্ণ ক্রম অনুসরণ করে অপারেটরের সংখ্যা। দুটি স্থান, ট্যাব বা নতুন লাইন ক্রম দ্বারা পৃথক করা যায়।

উদাহরণ

বৈধ

ইনপুট: 123456789
আউটপুট:3 123–45–67+89

অবৈধ
ইনপুট: 123456789
আউটপুট:
6 1+2+34-5+67-8+9
(কম অপারেশন সহ এটি সমাধানের উপায় রয়েছে)



আমাদের কি সব অঙ্ক ব্যবহার করতে হবে? আমরা কি কেবল +এবং ব্যবহার করতে পারি -? আমরা কি ধরে নিতে পারি যে আমরা সর্বদা 100ইনপুট থেকে তৈরি করতে সক্ষম হব ?
TheLethalCoder

6
আরও কিছু পরীক্ষার কেস অনেক স্বাগত জানানো হবে।
আর্নল্ড

2
আপনি কি নিশ্চিত করতে পারবেন যে চিহ্নগুলি প্রথম অঙ্কে প্রম্পেন্ড করা যায় না? যে, দেওয়া ইনপুট 299399, -299+399বৈধ হবে?
লুইস মেন্ডো

1
'0' একটি অঙ্ক? উদাহরণস্বরূপ, '10808' একটি বৈধ ইনপুট? '1 108-08' একটি কার্যকর প্রতিক্রিয়া?
চ্যাস ব্রাউন

উত্তর:


10

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

সম্পাদনা: অ-কঠোর মোডে, জেএস 0-উপসর্গযুক্ত সংখ্যাসূচক এক্সপ্রেশনগুলি অষ্টাল হিসাবে ব্যাখ্যা করে (উদাঃ 017 15 দশমিক হিসাবে পার্স করা হয়)। এটি একটি স্থির সংস্করণ যা নেতৃস্থানীয় শূন্যগুলি সমর্থন করে।

let f =

s=>[...Array(3**(l=s.length,l-1))].map((_,n)=>m=eval((x=s.replace(/./g,(c,i)=>c+['','+','-'][o=(n/3**i|0)%3,j-=!o,o],j=l)).replace(/\b0+/g,' '))-100|j>m?m:(S=x,j),m=l)&&m+' '+S

console.log(f("123456789"))
console.log(f("20172117"))


ভাল, ইনপুট হিসাবে 20172117 সম্পর্কে কি?
mdahmoune

@ লুইস মেন্ডো আসলে, আমার মনে হয় প্রত্যাশিত উত্তরটি 2-017-2+117। তবে 017জেএস-এর একটি অষ্টাল স্বরলিপি, যা দশমিক 15 দেয়। সুতরাং আমার বর্তমান কোডটি কেবল সন্ধান করে 2-0-17-2+117। আমি আজ পরে এই সমস্যাটির সমাধান করার চেষ্টা করব।
আর্নল্ড

@ আরনাউল্ড আহ, আমি অন্য কোন সমাধান দেখিনি। আমার মন্তব্য সরানো হচ্ছে
লুইস মেন্ডো

@ এমদাহমৌনে এটি আনার জন্য ধন্যবাদ। এখন স্থির।
আর্নল্ড

3**(l=s.length,l-1)=>3**~-(l=s.length)
l4m2

5

এমএটিএল , 37 36 বাইট

n'+-'OhZ^!t2\s&SZ)"G@!vXzU100=?@z3M.

টিআইওতে পরীক্ষার কেসটি প্রায় 6 সেকেন্ড সময় নেয়।

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

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

n        % Implicitly input a string. Number of elements, say k
'+-'     % Push this string
Oh       % Append char 0. This is treated like ' ' (space)
Z^       % Cartesian power of the three-char string '+- ' raised to k.
         % Gives a matrix where each row is a Cartesian k-tuple
!        % Transpose
t        % Duplicate
2\       % Modulo 2. This turns '+' and '-' into 1, and ' ' into 0
s        % Sum of each column: number of '+' and '-' symbols
&S       % Sort and push the indices of the sorting
Z)       % Apply as column indices. This sorts the columns (k-tuples)
         % by the number of '+' and '-' they contain
"        % For each column, i.e. each k-tuple formed by '+', '-' and ' '
  G      %   Push input string again
  @!     %   Push k-tuple as row vector (string)
  v      %   Concatenate vertically into a 2×k char array
  Xz     %   Remove space (and char 0). Gives a string as result. In this
         %   process, the 2×k array is linearized in column major order 
         %   (down, then across). So the '+' and '-' signs are between 
         %   digits of the input, or at the end
  U      %   Convert to number. This performs the operation determined by
         %   by the '+' and '-' signs and returns the result. A trailing
         %   '+' or '-' sign makes the input invalid, which causes an
         %   empty result
  100=   %   Is it equal to 100?
  ?      %   If so
    @    %     Push current k-tuple
    z    %     Number of nonzeros, i.e. of '+' and '-' signs
    3M   %     Push linearized string without spaces again
    .    %     Break for loop
         %   Implicit end
         % Implicit end
         % Implicitly dispplay stack

দুর্দান্ত, ইনপুট হিসাবে কী 299399?
mdahmoune

1
@ এমদাহমউনের 299399কোনও সমাধান নেই এবং সুতরাং এটি কোনও বৈধ ইনপুট নয় (অপারেটরগুলির মধ্যে "অঙ্কগুলির মধ্যে" যেতে নির্দিষ্ট করা হয়েছিল, সেই ইনপুটটি -299+399যেখানে -সংখ্যার মধ্যে নেই তার প্রয়োজন হবে )।
জোনাথন অ্যালান

@ এমদাহমূউন যদি লক্ষণগুলি কেবলমাত্র অঙ্কগুলির মধ্যে সন্নিবেশ করা যায় (চ্যালেঞ্জ পাঠ্য অনুসারে), আমার মনে হয় এর কোনও সমাধান নেই। যদি সেগুলিও প্রথম সংখ্যায় চাপ দেওয়া যায় তবে সমাধানটি হল -299+399এবং সেক্ষেত্রে আমার কোডে আমার একটি ছোট পরিবর্তন দরকার । আমি স্পষ্টির জন্য ওপিকে জিজ্ঞাসা করেছি
লুইস মেন্ডো

এছাড়াও লক্ষণীয় যে এটি যদি আগে এবং এর মধ্যে উভয়ই বোঝানো হত তবে উদাহরণটির 123456789অপারেটর গণনা 4নেই 3
জোনাথন অ্যালান

@ এমদাহমৌনে ওপি নিশ্চিত করেছে যে লক্ষণগুলি কেবলমাত্র অঙ্কের মধ্যে থাকতে পারে। সুতরাং আমার কোডটি সঠিক এবং 299399এটি একটি অবৈধ ইনপুট কারণ ওপিও স্পষ্ট করেছে যে, প্রতিটি
লুইস মেন্ডো

3

[পাইথন 2], 164 158 বাইট

from itertools import*
f=lambda N:min((len(s)-len(N),s)for s in(''.join(sum(zip(N,p+('',)),()))for p in product(('+','-',''),repeat=len(N)-1))if eval(s)==100)

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

অঙ্ককে স্ট্রিং হিসাবে এন নিন; একটি টিপল দেয় (numOps, এক্সপ্রেশনস্ট্রিং)।

মূলত অন্যদের মতো একই পদ্ধতি; স্বতন্ত্র "কেস" নির্মাণের জন্য এটিরটিউলস প্রোডাক্ট ব্যবহার করে যেমন এন == '১৩২২' এর জন্য, একটি "কেস" হবে ('-','','+')এবং '১-২২ + ২' মূল্যায়ন করবে।

যদি ইনপুটটি অবৈধ হয় তবে (তবে আমার ধারণা ওপি কোনও অবৈধ ইনপুট গ্যারান্ট করে না) একটি মান ভঙ্গি ছুড়ে দেয়।


3

পিএইচপি, 166 171 বাইট

for(;$n<3**$e=strlen($x=$argn);eval("return $s;")-100?:$r[]=sprintf("%2d $s",strlen($s)-$e))for($i=0,$s="",$k=$n++;a&$c=$x[$i];$k/=3)$s.="+-"[$i++?$k%3:2].$c;echo min($r);

পাইপ হিসাবে চালান -nR বা এটি অনলাইনে পরীক্ষা করুন

ফলাফলগুলি সাজানোর জন্য ফর্ম্যাট করা নম্বরগুলি ব্যবহার করে ->
শীর্ষস্থানীয় ফাঁকাগুলি মুদ্রণ করতে পারে (এবং 99 টিরও বেশি সংখ্যার ইনপুট জন্য ব্যর্থ হতে পারে; সংখ্যাটি বাড়িয়ে দিন%2d সংশোধন করতে পারেন)।

10 অঙ্কের বেশি নয়, 161 বাইট

for(;$n<3**$e=strlen($x=$argn);eval("return $s;")-100?:$r[]=(strlen($s)-$e)." $s")for($i=0,$s="",$k=$n++;a&$c=$x[$i];$k/=3)$s.="+-"[$i++?$k%3:2].$c;echo min($r);

ভাঙ্গন

for(;$n<3**$e=strlen($x=$argn); # loop $n up
    eval("return $s;")-100?:        # 2. evaluate term, if 100 then
                                    # prepend number of operations, add to results
        $r[]=sprintf("%2d $s",strlen($s)-$e)
)
                                # 1. create term
    for($i=0,$s="",$k=$n++;         # init variables, increment $n
        a&$c=$x[$i];$k/=3)          # loop through digits/operator index
        $s.="+-"[$i++?$k%3:2].$c;   # prepend operator for base-3 digit (nothing for 2)
echo min($r);                   # print lowest result

3

জেলি , 32 বাইট

L’⁾+_ṗż@€
ŒṖÇ€ẎµFV=ȷ2µÐfLÞḢFṄḟ³L

একটি সম্পূর্ণ প্রোগ্রাম যা জেলি অপারেটরগুলি ব্যবহার করে প্রদর্শিত হয় (_ পরিবর্তে)- ) ।

দ্রষ্টব্য:- আউটপুট প্রদর্শন করার পরিবর্তে _(কোনও প্রয়োজন নেই) এর ⁾_-yমধ্যে যোগ করুন Fএবং ( ⁾_-এটি একটি চরিত্রের জুটি আক্ষরিক ['_','-']এবংy এটি ডায়াডিক "অনুবাদ" পরমাণু)।

কিভাবে?

L’⁾+_ṗż@€ - Link 1, form all sums from a partition: list of lists of characters
                                     e.g. ["12","345","67"]
L         - length                        3
 ’        - decremented                   2
  ⁾+_     - literal ['+','_']
     ṗ    - Cartesian power               ["++","+_","_+","__"]
      ż@€ - zip for €ach (swap @rguments) ["12+345+67","12+345_67","12_345+67","12_345_67"]

ŒṖÇ€ẎµFV=ȷ2µÐfLÞḢFṄḟ³L - Main link: list of characters
ŒṖ                     - all partitions
  Ç€                   - call the last link (1) as a monad for €ach
    Ẏ                  - tighten (flatten by 1 level)
     µ     µÐf         - filter keep if:
      F                -   flatten
       V               -   evaluate as Jelly code (perform the sum)
         ȷ2            -   literal 100
        =              -   equal?
               Þ       - sort by:
              L        -  length
                Ḣ      - head
                 F     - flatten
                  Ṅ    - print that and a newline
                   ḟ³  - filter out the characters from the input
                     L - length (number of operators)
                       - implicit print

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


2

গণিত, 136 146 149 156 165 166 বাইট

#&@@Sort[{StringLength@#-e+9!(ToExpression@#-100)^2,#}&/@StringJoin/@(Riffle[b,#]&)/@Tuples[{"","+","-"},(e=Length[b=Characters@#])-1]]&

রিটার্নস {3, 123-45-67+89}উদাহরণস্বরূপ।

পরীক্ষার কেসটি সম্পূর্ণ হতে 0.09 সেকেন্ড সময় নেয়।


2

পাইথন 2 , 256 230 208 205 172 171 170 165 বাইট, পুনরাবৃত্তি পদ্ধতি

  • চস ব্রাউনকে 33 ধন্যবাদ
  • প্রতিস্থাপন করার সময় একটি বাইট সংরক্ষণ len(a)করেw
  • প্রতিস্থাপন করার সময় একটি বাইট সংরক্ষণ z-=1;d=zকরেd=z=z-1
q=[];a=input()
w=len(a);z=n=3**w
while z-n/3:
 d=z=z-1;j=0;b=''
 while d:r=d%3;d/=3;b+=a[j]+chr(r+43)*(d>0!=r-1);j+=1
 if eval(b)==100:q+=[(len(b)-w,b)]
print min(q)

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

সামান্য ব্যাখ্যা বেস 3 এর উপস্থাপনা ব্যবহার করে কোডটি সমস্ত সম্ভাব্য সংমিশ্রণ অনুসারে অপারেটরগুলির সাথে + '+', '-', কনটেনটেশন-এর সাথে সংখ্যার সাথে ইন্টারলিভ করে।

পাইথন 2 , 167 বাইট, পুনরাবৃত্তির পদ্ধতি

def f(s):
 if len(s)==1:return[s]
 b=s[0];q=[]
 for z in f(s[1:]):q+=[b+'+'+z,b+'-'+z,b+z]
 return q
a=input()
print min((len(x)-len(a),x)for x in f(a)if eval(x)==100)

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

কিছু আউটপুট

"399299"    --> (1, '399-299')
"987654321" --> (4, '98-76+54+3+21')
"1111111"   --> (3, '1+111-1-11')

1
আমি ডিভোড ব্যবহার পছন্দ করি! কয়েক golfs আমি দেখতে পারেন: প্রতিস্থাপন list(input())শুধু সঙ্গে input(), যেহেতু একটি স্ট্রিং ইতিমধ্যে 6 বাইট সংরক্ষণ করতে iterable হয়; প্রতিস্থাপন b.count('+')+b.count('-')সঙ্গে len(b)-len(a)12 বাইট সংরক্ষণ করতে; এবং প্রতিস্থাপন chr(r+43)সঙ্গে chr(r+43)*(d>0!=r-1)এবং তারপর আপনি লাইন মুছে দিতে পারেন b=b[:-1].replace(',','')নেট 15 বাইট সংরক্ষণ করতে ( (d>0!=r-1)সমতূল্য (d>0 and 0!=r-1))।
চ্যাস ব্রাউন 21

2

ব্র্যাচল্যাগ , 36 বাইট

~cịᵐ{|ṅ}ᵐ{+100&{ℕṫ,"+"↻|ṫ}ᵐcbE&kl;E}

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

এর অর্ধেকেরও বেশি হ'ল যদিও আউটপুট ফর্ম্যাটটি পেতে। আসল মূল যুক্তি কেবলমাত্র:

15 বাইট

~cịᵐ{|ṅ}ᵐ.+100∧

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

এটি [123, –45, –67,89] এর মতো একটি তালিকা দেয়। অভিব্যক্তিটি উপাদানগুলির যোগফল, এবং অপারেটরের সংখ্যা তালিকার দৈর্ঘ্যের চেয়ে 1 কম।

~cLhℕ∧100~+Lপ্রায় 12 বাইটের জন্য কাজ করে ( এটি অনলাইনে ব্যবহার করে দেখুন! ) - তবে টিআইওতে সম্পূর্ণ 9 ডিজিটের ইনপুটটি হ্যান্ডেল করা খুব ধীর এবং আরও গুরুত্বপূর্ণ, এটি ইনপুটগুলির মতো ব্যর্থ 10808হয় - ব্র্যাচল্যাগ নেতৃস্থানীয় শূন্যগুলির সংখ্যা বিভক্ত করতে খুব স্মার্ট, তাই না ' টি [108, -08] পার্টিশনটি দেখুন।


1

হাস্কেল , 180 178 বাইট

m#[a]=[[a]]
m#(b:r)|s<-m#r=m(b:)=<<[s,m('+':)s,m('-':)s]
o '-'=(-)
o _=(+)
(p:r)?a|[(b,s)]<-lex r=s?o p a(read b)
_?a=a
g s=minimum[(sum[1|c<-t,c<'0'],t)|t<-map#s,('+':t)?0==100]

এটি অনলাইন চেষ্টা করুন! ব্যবহার: g "123456789"ফলন (3,"123-45-67+89")

#সমস্ত সম্ভাব্য পদগুলির একটি তালিকা তৈরি করে, একটি পদ ?মূল্যায়ন করে এবং gসেই শর্তাদি ফিল্টার করে যা 100 এ মূল্যায়ন করে এবং অপারেশনগুলির সংক্ষিপ্ত সংখ্যার সাথে শোধ করে।


0

জেলি , 27 বাইট

L’““+“_”ṗ⁸żF¥ⱮV⁼ȷ2ƊƇLÞḢṄḟ⁸L

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

জোনাথন অ্যালান এর পুরানো উত্তর থেকে আমি কিছু ইঙ্গিত গ্রহণ করিনি বলে বলতে পারি না। ;-)

তার উত্তরের তুলনায়, আমরা যদি ভাষা আপডেটের কারণে তুলনাটি ন্যায্য করে তুলি, তবে এটি পাঁচটি নয়, মাত্র দুটি বাইট সংক্ষিপ্ত (30):

L’““+“_”ṗ⁸żF¥Ð€V⁼ȷ2$$ÐfLÞḢṄḟ⁸L

যদি আমরা অন্য উপায়ে (পুরানো পরিবর্তে নতুন সংস্করণ) তুলনা করি তবে পার্থক্যটি একই রকম (তাঁর 29 বাইট হয়ে যায়, নীচে দেখানো হয়েছে):

ŒṖżⱮL’⁾+_ṗƲ$€ẎFV=ȷ2ƲƇLÞḢFṄḟ³L
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.