সাইন-অদলবদলের সমষ্টি


24

ইতিবাচক পূর্ণসংখ্যার একটি দুর্দান্ত তালিকা দেওয়া আপনার কাজ হ'ল অনন্য মানের সংখ্যা নির্ধারণ করা± x ± y ± z ± (x,Y,z- র,...)±এক্স±Y±z- র±...

উদাহরণস্বরূপ, তালিকাটি বিবেচনা করুন । যোগফল তৈরির জন্য আটটি সম্ভাব্য উপায় রয়েছে:(1,2,2)

  • + +1+ +2+ +2+ +5
  • + +1+ +2-2+ +1
  • + +1-2+ +2+ +1
  • + +1-2-2-3
  • -1+ +2+ +2+ +3
  • -1+ +2-2-1
  • -1-2+ +2-1
  • -1-2-2-5

এখানে ছয়টি অনন্য অঙ্ক রয়েছে , সুতরাং উত্তরটি ।6{5,-5,1,-1,3,-3}6

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

[1, 2] => 4
[1, 2, 2] => 6
[s]*n => n+1
[1, 2, 27] => 8
[1, 2, 3, 4, 5, 6, 7] => 29
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] => 45
[1, 7, 2, 8, 3, 1, 6, 8, 10, 9] => 56
[93, 28, 92, 100, 43, 66, 2, 98, 2, 52, 57, 75, 39, 77, 45, 15, 13, 82, 81, 20, 68, 14, 5, 3, 72, 56, 57, 1, 23, 25, 76, 59, 60, 71, 71, 24, 1, 3, 72, 84, 72, 28, 83, 62, 66, 45, 21, 28, 49, 57, 70, 3, 44, 47, 1, 54, 53, 56, 36, 20, 99, 9, 89, 74, 1, 14, 68, 47, 99, 61, 46, 26, 69, 21, 20, 82, 23, 39, 50, 58, 24, 22, 48, 32, 30, 11, 11, 48, 90, 44, 47, 90, 61, 86, 72, 20, 56, 6, 55, 59] => 4728

রেফারেন্স সমাধান (গতি এবং আকারের জন্য অনুকূল নয়)।

যদি আপনি শেষ মামলাটি পরিচালনা করতে না পারেন কারণ আপনি একটি ব্রুট-ফোর্স পদ্ধতি বা অনুরূপ ব্যবহার করেন তবে তা ঠিক।

স্কোরিং

এটি , তাই সংক্ষিপ্ততম বৈধ সমাধান (বাইটগুলিতে পরিমাপ করা) জয়ী।


ইনপুটটি খালি অ্যারে হয় এমন ক্ষেত্রে কি আমাদের পরিচালনা করতে হবে?
চ্যাস ব্রাউন

পোস্ট অনুসারে @ চ্যাশব্রাউন ইনপুটটি খালি নেই।
জাংহওয়ান মিন

এইচএম, আমি বুঝতে পারি না তৃতীয় পরীক্ষার কেস কীভাবে কাজ করে, দয়া করে ব্যাখ্যা করার যত্ন করবেন?
এরিক আউটগল্ফার

@ এরিকথিউটগলফার এটি কার্যকরভাবে বলছে যদি আপনার অ্যারে সমস্ত অভিন্ন সংখ্যা হয় (উদাহরণস্বরূপ [2,2,2,2,...]) উত্তরটি অ্যারের দৈর্ঘ্য হওয়া উচিত 1. এটি কারণ কারণ এই ক্ষেত্রে লক্ষণগুলির অবস্থান অপ্রাসঙ্গিক এবং প্রতিটি বিষয়ে কেবলমাত্র সংখ্যা
রেফু

@ রেফু এটি একটি রসিকতা বেশি, এটি দেখতে দৃষ্টিনন্দন মনে হচ্ছে এটি ত্রুটি করে সেখানে অন্তর্ভুক্ত করা হয়েছে।
এরিক আউটগলফার

উত্তর:


13

ওল্ফ্রাম ভাষা (গণিত) , ২ by বাইট a

Tr[1^Fold[#⋃+##&,{0},#]]&

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

স্বতন্ত্র সাইন-অদল-বদলের অঙ্কগুলির সন্ধান করা অনন্য সাবসেটের যোগফলগুলির সন্ধানের সমতুল্য।

একটি প্রমাণের মধ্যে প্রতিটি সাইন-অদলবদলের পরিমাণগুলিতে ইনপুটটির যোগ যোগ করা এবং দুটি দ্বারা ভাগ করা জড়িত। তারপরে, একটি সুস্পষ্ট দ্বিধা আছে।

ব্যাখ্যা

Fold[#⋃+##&,{0},#]

প্রাথমিক মান হ'ল ইনপুটটির মাধ্যমে আইট্রেট করুন {0}: এর মধ্যে ইউনিয়ন নিন <current value>এবং <current value> + input element(তালিকার উপরে মানচিত্র))

Tr[1^ ... ]

ফাংশনের গোলফি সংস্করণ Length


8

জেলি , 6 বাইট

ŒPS€QL

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

পটভূমি

যাক এল ইনপুট তালিকা এবং হতে {পি, এন} ধনাত্মক এবং ঋণাত্মক নিদর্শনাবলী নিয়ে বীজগাণিতিক summands মধ্যে একটি বিভাজন। চ্যালেঞ্জ স্পেসের জন্য s {P, N} = যোগ (পি) - যোগফল (এন) গণনা করা দরকার ।

তবে যেহেতু যোগফল (পি) + যোগফল (এন) = যোগ (এল) এবং যোগফল (এল) পার্টিশনের উপর নির্ভর করে না, তাই আমাদের s {P, N} = যোগ (পি) - যোগ (এন) = যোগ ( পি) - (যোগফল (এল) - যোগ (পি)) = 2 সুম (পি) - যোগফল (এল)

সুতরাং, প্রতিটি অনন্য মান সমষ্টি (P) টি এক অনন্য মান সাথে সঙ্গতিপূর্ণ গুলি {পি, এন}

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

ŒPS€QL  Main link. Argument: A (array)

ŒP      Powerset; generate all subarrays of A.
  S€    Take the sum of each.
    Q   Unique; deduplicate the sums.
     L  Take the length.

7

এমএটিএল , 11 10 বাইট

nW:qBGY*un

এটি অনলাইন চেষ্টা করুন! এটি লুই মেন্ডোর অক্টাভা / এমএটিএলবি উত্তরের একটি বন্দর । আমি এখনও এমএটিএল শেখার চেষ্টা করছি, এবং আমি বুঝতে পেরেছিলাম যে আমি এটি একটি পোস্ট সহ পোস্ট করব, যেহেতু এমএটিএল মাসের ভাষা।

ব্যাখ্যা:

সাধারণভাবে স্ট্যাক ভিত্তিক প্রোগ্রামিংয়ের সাথে অপরিচিত কারও কাছে এবং বিশেষত এমএটিএল-এর জন্য একটি পঠন-এখানে রয়েছে।

ইনপুট ভেক্টর স্পষ্টভাবে স্ট্যাকের উপর স্থাপন করা হয়। মনে রাখবেন যে যখন স্ট্যাকের কোনও উপাদানের উপর কোনও অপারেশন করা হয়, তখন সেই উপাদানটি স্ট্যাক থেকে সরানো হয়।

                % Stack:
                % [1, 2, 2]
n               % Counts the number of elements of the vector on the top of the stack.
                % Stack:
                % [3]
 W              % Raise 2^x, where x is the number above it in the stack
                % Stack:
                % [8]
  :             % Range from 1...x, where x is the number above it in the stack.                    % Stack:
                % [1, 2, 3, 4, 5, 6, 7, 8]
   q            % Decrement. Stack:
                % [0, 1, 2, 3, 4, 5, 6, 7]
    B           % Convert to binary. Stack:
                % [0,0,0; 0,0,1; 0,1,0; 0,1,1; 1,0,0; 1,0,1; 1,1,0; 1,1,1] 
     G          % Push input again. Stack:           
                % [0,0,0; 0,0,1; 0,1,0; 0,1,1; 1,0,0; 1,0,1; 1,1,0; 1,1,1], [1; 2; 2]
      Y*        % Matrix multiplication of the two elements on the stack.
                % Stack:
                % [0; 2; 2; 4; 1; 3; 3; 5]
        u       % Keep only unique elements. Stack:
                % [0; 2; 4; 1; 3; 5]
         n      % Number of elements in the vector. Stack:
                % [6]

এবং তারপরে এটি স্ট্যাকের অন্তর্নিহিত চূড়ান্ত উপাদানকে আউটপুট করে।


1
সুন্দর ব্যাখ্যা!
লুইস মেন্ডো 10'18


6

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

k=1
for n in input():k|=k<<n
print bin(k).count('1')

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

অ্যাক্সেসযোগ্য সাবসেটের পরিমাণগুলি সঞ্চয় করতে কোনও সংখ্যার বাইনারি উপস্থাপনা ব্যবহার করে।


1
এটি কীভাবে কাজ করে তা আপনি ব্যাখ্যা করতে পারেন? আপনি নিজেই এটি নিয়ে এসেছেন, না এটি কোনও পরিচিত ফলাফল?
সূন্দর - মনিকা পুনরায় ইনস্টল করুন

1
@ সুন্দর এটি এত জটিল নয়। এই উত্তরটি অন্যান্য অনেক উত্তরের মতো অনন্য অঙ্কগুলি (সাইন-অদলবদল নয়) গণনা করে। কে প্রতিটি বিট একটি যোগফল। k<<nপ্রতিটি যোগফলকে n যোগ করে। পূর্ববর্তী kk
সমস্তগুলি

আহা, ব্রেইনক্র্যাম্বের ট্রেইল জাংহওয়ান মিনের মূর্খতা ধারণার দিকে ফিরে যায়, এটিই ছিল আমার অনুপস্থিত প্রধান অন্তর্দৃষ্টি। এখানে প্রতিটি উপসেট যোগফল বিটস্ট্রিংয়ের সেই অবস্থানে 1 দ্বারা উপস্থাপিত হয় (খালি সাবসেটের জন্য 0 টি যোগফলকে উপস্থাপন করে এলএসবিতে প্রাথমিক 1 সহ)। তবুও এমন কিছু না যাকে আমি "জটিল নয়" বলি, তবে এটি আমার অনভিজ্ঞতা হতে পারে। :)
সূন্দর - মনিকা পুনরায় ইনস্টল করুন 6'18


5

হাস্কেল, 46 বাইট

import Data.List
length.nub.map sum.mapM(:[0])

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

ইনপুট তালিকার সাবসেটগুলি সংক্ষিপ্ত করার পরিবর্তে, আমরা কোনও সংখ্যার রাখার বা এটিকে প্রতিস্থাপনের সমস্ত সংমিশ্রণ তৈরি করি 0, যেমন

mapM(:[0])[1,2,3] -> [[1,2,3],[1,2,0],[1,0,3],[1,0,0],[0,2,3],[0,2,0],[0,0,3],[0,0,0]]

এটির চেয়ে কম দুটি বাইট subsequences


চমৎকার উত্তর! আমি আশা করি f x=sum[1|i<-[0..sum x],elem i$sum<$>mapM(:[0])x]আমদানির চেয়ে ছোট কিছু হবে তবে দৃশ্যত, তা হয় না।
লিন

খুব ভালো, গাণিতিকের অনুবাদটির চেয়েও ছোট, যদিও আমি মনে করি এটি প্রাকৃতিক:import Data.List;length.foldr((<*>)union.map.(+))[0]
জন পুরী

5

আর, 83 75 বাইট

-8 বাইট জেসি এবং জিউসেপিকে ধন্যবাদ

ইনপুট ভেক্টরের আকারের জন্য (1, -1) এর সমস্ত সম্ভাব্য সংমিশ্রণের একটি ম্যাট্রিক্স তৈরি করে, অঙ্কগুলি পেতে মূল ভেক্টর দিয়ে এটিকে গুণ করে। তারপরে অনন্য এবং ফলাফলটির দৈর্ঘ্য সন্ধান করুন।

function(v)nrow(unique(t(t(expand.grid(rep(list(c(1,-1)),sum(v|1)))))%*%v))


পূর্ববর্তী সংস্করণ:

f=function(v)nrow(unique(as.matrix(expand.grid(rep(list(c(1,-1)),length(v))))%*%v))

মন্তব্যে অসম্পূর্ণ:

f=function(vector){

  List=rep(list(c(1,-1)),length(vector))   ## Create a list with length(vector) elements, all (1,-1)

  Combinations=expand.grid(Length)    ## get all combinations of the elements of the list, e.g, 1,-1,1,1,-1,1

  Matrix=as.matrix(Combinations)   ## convert to matrix

  Results=Matrix%*%vector   ## multiply the matrix original vector to get a Nx1 matrix

  Unique_results=unique(Results)   ## unique the results

  nrow(Unique_results)   ## length = number of rows of unique values
  }

কিছু বাইট এতে সংরক্ষণ করুন t: টিআইও
জাইসি

এবং এর sum(v|1)চেয়ে একটি বাইট ছোটlength(v)
জিউসেপে

4

অষ্টাভে / এমএটিএলবি, 45 41 40 বাইট

@(x)nnz(unique(dec2bin(0:2^nnz(x)-1)*x))

ইনপুট একটি কলাম ভেক্টর ( ;বিভাজক হিসাবে ব্যবহার করে )।

মেমরি সীমাবদ্ধতার কারণে শেষ পরীক্ষার ক্ষেত্রে কোড ত্রুটি।

এটি কয়েকটি বাইট সংরক্ষণ করতে জংহওয়ান মিনের উত্তর (বিকল্প চিহ্নগুলির পরিবর্তে সাবসেট) থেকে একটি ধারণা ব্যবহার করে ।

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



3

পাইথন 3 , 61 বাইট

f=lambda a,s={0}:a and f(a[1:],s|{u+a[0]for u in s})or len(s)

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

অনন্য সাবসেটের অঙ্কের উপর নজর রাখা, পুনরাবৃত্তির পদ্ধতির।

আসল মজাটি হ'ল এই itertoolsবড় ব্যবধানে প্রহার করে:

76 বাইট

lambda a:len({*map(sum,product(*([0,x]for x in a)))})
from itertools import*

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



3

সংযুক্তি , 29 বাইট

{#Unique[Flat!±_]}@Fold[`±]

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

এটি ±অপারেটরটিকে ইনপুট তালিকার উপরে ভাঁজ করে , তারপর ±সেই তালিকাটি গ্রহণের পরে অ্যারের অনন্য পরমাণু গণনা করে কাজ করে।

ভাঁজ কীভাবে কাজ করে তার কয়েকটি উদাহরণ এখানে:

Fold[`±][ [1,2] ] == 1 ± 2
                  == [1 + 2, 1 - 2]
                  == [3, -1]
Fold[`±][ [1,2,2] ] == (1 ± 2) ± 2
                    == [3, -1] ± 2
                    == [[3 + 2, 3 - 2], [-1 + 2, -1 - 2]]
                    == [[5, 1], [1, -3]]
                    == [5, 1, 1, -3]
Fold[`±][ [4,4,4,4] ] == (4 ± 4) ± 4 ± 4
                      == [8, 0] ± 4 ± 4
                      == [[12, 4], [4, -4]] ± 4
                      == [[[16, 8], [8, 0]], [[8, 0], [0, -8]]]
                      == [16, 8, 8, 0, 8, 0, 0, -8]
                      == [16, 8, 0, -8]

তারপরে আমরা আরও একবার প্লাসমিনাস প্রয়োগ করে চূড়ান্ত চিহ্নের সমস্ত অনুমতি তৈরি করি।

আরও কার্যকর সংস্করণ, 31 বাইট

`#@(q:=Unique@Flat@`±)@Fold[q]

এটি অনলাইন চেষ্টা করুন! এটি চূড়ান্ত পরীক্ষার ক্ষেত্রে সময় কাটায় না, যেহেতু এটি অপ্রয়োজনীয় সংমিশ্রণ তৈরি করে না।


3

আর , 62 বাইট

function(V)sum(unique(c(V%*%combn(rep(0:1,L),L<-sum(V|1))))|1)

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

পোর্টস ডেনিসের অ্যালগোরিদম। এটি অকটাভ / এমএটিএল উত্তরের নিকটতম কারণ এটি শর্তাদি অন্তর্ভুক্তি / বর্জনের জন্য অনুরূপ বিটম্যাপ এবং ম্যাট্রিক্স পণ্য ব্যবহার করে।





2

কাস্তে , 5 বাইট

LumΣṖ

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

পোর্ট অফ ডেনিস 'জেলি উত্তর।

ব্যাখ্যা

LumΣṖ                     [1,2,2]
    Ṗ  Powerset           [[],[1],[2],[1,2],[2],[1,2],[2,2],[1,2,2]]
  mΣ   Sum each           [0,1,2,3,2,3,4,5]
 u     Remove duplicates  [0,1,2,3,4,5]
L      Length             6

পাইথ উত্তরের সমতুল্য , চরিত্রের জন্য মূলত চরিত্র।
isaacg


2

বাশ + জিএনইউ ইউটিলিটিস, 49 বাইট

eval echo "{,-}${@//,/{+,-\}}\;"|bc|sort -u|wc -l

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

কমান্ড-লাইনে কমা-বিচ্ছিন্ন তালিকা হিসাবে দেওয়া ইনপুট।

ব্যাখ্যা

               ${@//,/{+,-\}}                      # Replace commas with {+,-}
          "{,-}${@//,/{+,-\}}\;"                   # Build a brace expansion with {+,-} before every number and ; at the end
eval echo "{,-}${@//,/{+,-\}}\;"                   # Expand to give every combination expression, separated by ;
                                |bc                # Arithmetically evaluate each line
                                   |sort -u        # Remove duplicates
                                            wc -l  # Count

2

লিনাক্সের জন্য x86_64 মেশিনের ভাষা, 31 29 বাইট

 0:   31 d2                   xor    %edx,%edx
 2:   6a 01                   pushq  $0x1
 4:   58                      pop    %rax
 5:   8b 0c 97                mov    (%rdi,%rdx,4),%ecx
 8:   48 89 c3                mov    %rax,%rbx
 b:   ff c2                   inc    %edx
 d:   48 d3 e3                shl    %cl,%rbx
10:   48 09 d8                or     %rbx,%rax
13:   39 d6                   cmp    %ese,%edx
15:   7c ee                   jle    5 <+0x5>
17:   f3 48 0f b8 c0          popcnt %rax,%rax
1c:   c3                      retq

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

@ Xnor এর উত্তরে অনুপ্রাণিত POPCNTনির্দেশ সহ একটি মেশিনের প্রয়োজন ।



1

এপিএল (ডায়ালগ ক্লাসিক) , 34 33 32 বাইট

{≢∪⍵+.×⍨↑{,⍵∘.,U}⍣(≢1↓⍵)⊢U←¯1 1}

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

-1 বাইটের জন্য @ngn ধন্যবাদ!


1-⍨≢⍵->≢1↓⍵
এনজিএন

+.×⍨->+.×
এনজিএন

দ্বিতীয়টি কাজ করে না, আমি ভয় করি।
জাকারি

ওহো, আমি জানি না কেন আমি ভেবেছিলাম তুমি ভেক্টর উপর প্রয়োগ করছি + + × ... দুঃখিত।
ngn

1

পরিষ্কার , 82 বাইট

import StdEnv
f[]=length
f[h:t]=f t o foldr(\e l=removeDup[e+h,e-h:l])[]
?l=f l[0]

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

সংযোজন বা বিয়োগফলের পরে প্রতিটি সম্ভাব্য পরিমাণের চেয়ে বেশি হ্রাস করতে সহায়ক হিসাবে ? :: [Int] -> Intব্যবহার করে ফাংশনটি সংজ্ঞায়িত করে f :: [Int] -> ([Int] -> Int)


এখানে হাস্কেলের রেফারেন্স সমাধানের গল্ফযুক্ত সংস্করণ; এটি পরিষ্কারের দিকে কতটা বহন করতে পারে তা নিশ্চিত নয় তবে আপনি এ থেকে কিছু পেতে সক্ষম হতে পারেন।
Esolanging ফল

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

1

এপিএল (ডায়ালগ ক্লাসিক) , 21 বাইট

⍴∘∪⊢+.×1-2×2(⍴⍨⊤∘⍳*)⍴

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

ব্যাখ্যা

2(⍴⍨⊤∘⍳*)⍴

একটি ফাংশন ট্রেন সমতুল্য {((⍴⍵)⍴2)⊤⍳(⍴⍵)}, যা ম্যাট্রিক্স উত্পন্ন করে যার সাথে কলাম হিসাবে ইনপুটটির দৈর্ঘ্য পর্যন্ত বাইনারি উপস্থাপনা রয়েছে

1-2×

মানচিত্র 1s থেকে -1s এবং 0s 1এর মধ্যে

⊢+.×

ইনপুট সহ ম্যাট্রিক্সের গুণন, যা সমস্ত সম্ভাব্য অঙ্কের একটি অ্যারে দেয়

⍴∘∪

সদৃশগুলি সরান, তারপরে গণনা করুন


1

জাভা 8, 207 83 44 বাইট

s->Long.bitCount(s.reduce(1L,(r,c)->r|r<<c))

@ Xnor এর পাইথন 2 উত্তরটির পোর্ট ।
-39 ধন্যবাদ বাইট @Jakob

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

s->               // Method with Long-Stream parameter and long return-type
  Long.bitCount(  //  Return the amount of 1s in the binary representation of:
    s.reduce(1L,  //   Result-Long, starting at 1
     (r,c)->      //   Loop pair-wise (result,current):
      r|          //    Bitwise-OR the result `r` with:
        r<<c))    //    result `r` bitwise left-shifted by the current `c`

2
44 বাইট আমাদের প্রয়োজন! একটি স্ট্রিম গ্রহণ Long: s->Long.bitCount(s.reduce(1l,(a,e)->a|a<<e))
Jakob

@ জাকব ধন্যবাদ! আমি সবসময় ভুলে যাই .reduce(এবং .bitCountপাশাপাশি আমি যুক্ত করতে পারি ..>।>) -39 বাইটগুলি এখনই সেখানে! :)
কেভিন ক্রুইজসেন

1
এছাড়াও আমি সবেমাত্র একটি স্বেচ্ছাসেবী-নির্ভুলতা সংস্করণ তৈরি করেছি । দেখে মনে হচ্ছে এটি করার সস্তারতম উপায়টি এখনও সেটগুলির চেয়ে বিটম্যাপের সাথে রয়েছে।
যাকোব

1

জাভা 8, 85 বাইট

Xnor এর উত্তরের আর একটি জাভা বন্দর । মূল উত্তরের মতো, এটি একটি স্বেচ্ছাসেবী-নির্ভুলতা বিটম্যাপ ব্যবহার করে যাতে উপসেটের যোগফলের আকারের উপরের সীমা থাকে না।

এটা একটা অনুক্রমিক থেকে একটি ল্যামডা এর java.util.stream.Stream<Integer>জন্য int

s->s.reduce(java.math.BigInteger.ONE,(a,e)->a.or(a.shiftLeft(e)),(u,v)->u).bitCount()

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

নোট করুন যে সংবাহকটি (তৃতীয় যুক্তিটি reduce) অব্যবহৃত থেকে স্ট্রিমটি অনুক্রমিক sequ আমি যে ফাংশনটি বেছে নিয়েছি তা নির্বিচারে।


1

জুলিয়া 0.6 , 54 52 বাইট

V->(~W=W==[]?0:∪([n=W[] -n].+~W[2:end]))(V)|>endof

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

( -2 বাইট প্রতিস্থাপনের ¬মাধ্যমে ~, জো কিংকে ধন্যবাদ )

সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে। সমস্ত সম্ভাব্য পরিমাণ সংগ্রহের জন্য সম্প্রচারের ব্যবহার করে, তারপর তাদের গণনা করা হয়।

ব্যাখ্যা:

function g_(V)
  function inner(W)  #named ~ in golf version to save bytes
    W == [] ? 0 :    #return 0 when input empty (base case)
    ∪(               #unique elements of
      [n=W[] -n]     #take the first element and its negation
      .+             #broadcast-add that to each element of
      inner([2:end]) #sign-swapping sums of the rest of the array
     )
  end                #returns the list of unique elements out of those sums
  return endof(inner(V)) #return the length of that list
end

পুরানো সমাধান:

জুলিয়া 0.6 , 64 বাইট

N->endof(∪([2(i&2^~-j>0)-1 for i=0:~-2^(l=endof(N)),j=1:l]*N))

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

63 পর্যন্ত দৈর্ঘ্যের ইনপুট অ্যারেগুলির জন্য কাজ করে (সুতরাং শেষ পরীক্ষার ক্ষেত্রে এটি কাজ করে না, যা ওপি অনুসারে ঠিক আছে)।

ব্যাখ্যা:

function f_(N)
  endof(                            #length of
        ∪(                          #unique elements of
          [
           (i & 2^(j-1) > 0)        #check j'th bit (from right) of i
           * 2 - 1                  #convert bit value from (0,1)=>(-1,1)
           for i = 0:2^endof(N)-1,  #where i is numbers 0 to 2^length(N)-1
           j = 1:endof(N)           #and j is 1 to length(N) (i.e. the bits in i)
          ]                         #so we have a matrix [-1 -1 -1;1 -1 -1;1 -1 1;...]
          *                         #matrix multiply that with the input array, 
          N                         #thus calculating different combinations of 
         ))                         #sign-swapping sums
end

0

জাভাস্ক্রিপ্ট (বাবেল নোড) , 64 বাইট tes

F=([f,...r],s=[0])=>f?F(r,s.flatMap(x=>[x+f,x])):new Set(s).size

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

এটি শেষ টেস্টকেসের জন্য কাজ করবে না।


আরও কার্যকর সমাধান (শেষ টেস্টকেসগুলিতে কাজ করে):

জাভাস্ক্রিপ্ট (বাবেল নোড) , 71 বাইট

F=([f,...r],s=[0])=>f?F(r,[...new Set(s.flatMap(x=>[x+f,x]))]):s.length

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


এটি কারণে আসল ব্রাউজারে কাজ করবে না Array#smoosh

বুবলারকে ধন্যবাদ, [x+f,x-f]-> [x+f,x]2 বাইট সংরক্ষণ করে


আপনি ( जंगওয়ান মিন দ্বারা প্রমাণ ) [x+f,x]এর জায়গায় ব্যবহার করতে পারেন । [x+f,x-f]
বুবলার

ES6 সংস্করণের জন্য +2 বাইট:F=([f,...r],s=[0])=>f?F(r,[...s,...s.map(x=>x+f)]):new Set(s).size
নীল

@ নীল, এবং ... [...s,...s.map(x=>x+f)],, s.concat(s.map(x=>x+f))এবং, s,s.map(x=>s.push(x+f))একই দৈর্ঘ্য ভাগ করুন ...
tsh

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