बिट्स को विभाजित करें!


17

हम V(x) को की अलग-अलग शक्तियों की सूची के रूप में परिभाषित करते हैं जो कि बराबर है । उदाहरण के लिए, ।x V ( 35 ) = [ 32 , 2 , 1 ]2xV(35)=[32,2,1]

अधिवेशन के द्वारा, शक्तियों को उच्चतम से निम्नतम स्तर पर क्रमबद्ध किया जाता है। लेकिन यह चुनौती के तर्क को प्रभावित नहीं करता है, न ही अपेक्षित समाधानों को।

कार्य

एक सेमिप्रिम को देखते हुए , प्रत्येक पद को V (N) में 2 की शक्तियों की एक और सूची के साथ बदलें, जो इस पद के लिए है, इस तरह से कि सभी परिणामी उप-सूचियों का मिलन मैट्रिक्स M के एक सटीक आवरण के रूप में परिभाषित किया गया है:वी ( एन ) 2 एमNV(N)2M

Mi,j=V(P)i×V(Q)j

जहां P और Q NQ के मुख्य कारक हैं ।N

यह कुछ उदाहरणों के साथ समझना बहुत आसान है।

उदाहरण 1

के लिए N=21 , हमने:

  • V(N)=[16,4,1]
  • P=7 और V(P)=[4,2,1]
  • Q=3 और V(Q)=[2,1]
  • M=(842421)

को सटीक आवरण में बदलने के लिए , हम को और को में विभाजित कर सकते हैं , जबकि को अपरिवर्तित छोड़ दिया जाता है। तो एक संभावित उत्पादन है:M 16 8 + 4 + 4 4 2 + 2 1V(N)M168+4+442+21

[[8,4,4],[2,2],[1]]

एक और वैध उत्पादन है:

[[8,4,2,2],[4],[1]]

उदाहरण # 2

के लिए , हमने:N=851

  • V(N)=[512,256,64,16,2,1]
  • P=37 औरV(P)=[32,4,1]
  • Q=23 औरV(Q)=[16,4,2,1]
  • M=(512641612816464823241)

एक संभावित उत्पादन है:

[[512],[128,64,64],[32,16,16],[8,4,4],[2],[1]]

नियम

  • चूँकि फैक्टरिंग चुनौती का मुख्य हिस्सा नहीं है, आप वैकल्पिक रूप से और को इनपुट के रूप में ले सकते हैं ।पी क्यूNPQ
  • जब कई संभावित समाधान मौजूद होते हैं, तो आप या तो उनमें से सिर्फ एक को वापस कर सकते हैं या सभी को।
  • आप वैकल्पिक रूप से शक्तियों के घातांक लौटा सकते हैं (जैसे बजाय ।[[3,2,2],[1,1],[0]][[8,4,4],[2,2],[1]]
  • उप-सूचियों का क्रम मायने नहीं रखता है, और न ही प्रत्येक उप-सूची में शर्तों का क्रम है।
  • कुछ अर्धविरामों के लिए, आपको किसी भी शब्द को विभाजित नहीं करना पड़ेगा क्योंकि पहले से ही का एक पूर्ण कवर है ( A23340 देखें )। लेकिन आप अभी भी इस तरह के रूप (सिंगलटन) सूचियों की एक सूची प्रदान करने के लिए है के लिए ।V(N)M[[8],[4],[2],[1]]N=15
  • यह !

परीक्षण के मामलों

 Input | Possible output
-------+-----------------------------------------------------------------------------
 9     | [ [ 4, 2, 2 ], [ 1 ] ]
 15    | [ [ 8 ], [ 4 ], [ 2 ], [ 1 ] ]
 21    | [ [ 8, 4, 4 ], [ 2, 2 ], [ 1 ] ]
 51    | [ [ 32 ], [ 16 ], [ 2 ], [ 1 ] ]
 129   | [ [ 64, 32, 16, 8, 4, 2, 2 ], [ 1 ] ]
 159   | [ [ 64, 32, 32 ], [ 16 ], [ 8 ], [ 4 ], [ 2 ], [ 1 ] ]
 161   | [ [ 64, 32, 16, 16 ], [ 8, 8, 4, 4, 4, 2, 2 ], [ 1 ] ]
 201   | [ [ 128 ], [ 64 ], [ 4, 2, 2 ], [ 1 ] ]
 403   | [ [ 128, 64, 64 ], [ 32, 32, 16, 16, 16, 8, 8 ], [ 8, 4, 4 ], [ 2 ], [ 1 ] ]
 851   | [ [ 512 ], [ 128, 64, 64 ], [ 32, 16, 16 ], [ 8, 4, 4 ], [ 2 ], [ 1 ] ]
 2307  | [ [ 1024, 512, 512 ], [ 256 ], [ 2 ], [ 1 ] ]

क्या हम N की जगह P और Q ले सकते हैं?
ngn

@ng मैं हां कहने जा रहा हूं, क्योंकि फैक्टरिंग एन चुनौती का मुख्य हिस्सा नहीं है।
अरनुलद

1
क्या हम आउटपुट को वापस लौटा सकते हैं?
19

@EriktheOutgolfer ... आउटपुट चपटा केवल इनपुट का एक विभाजन है (उदाहरण के लिए 1 + 2 + 2 + 4 = 9)। मुझे नहीं लगता कि इसे अनुमति दी जानी चाहिए
श्री Xcoder

@EriktheOutgolfer मुझे नहीं लगता कि यह इस तरह से अस्पष्ट हो सकता है, क्योंकि उप-सूची का अंतिम शब्द अगले एक के पहले कार्यकाल के समान हो सकता है।
Arnauld

जवाबों:


4

K (ngn / k) , 66 63 बाइट्स

{(&1,-1_~^(+\*|a)?+\b)_b:b@>b:,/*/:/2#a:{|*/'(&|2\x)#'2}'x,*/x}

इसे ऑनलाइन आज़माएं!

एन के बजाय स्वीकार (पी; क्यू)

कलन विधि:

  • V (P * Q) के आंशिक योग के रूप में गणना करें

  • प्रत्येक V (Q) से प्रत्येक V (P) को गुणा करें, अवरोही क्रम में उत्पादों को क्रमबद्ध करें (चलो उस R को कॉल करें), और उनके आंशिक रकम B की गणना करें

  • बी में उन तत्वों की स्थिति का पता लगाएं जो ए में भी होते हैं; उन पदों के बाद आर काट दिया


3

जेली , 24 बाइट्स

BṚT’2*
Ç€×þ/FṢŒṖ§⁼Ç}ɗƇPḢ

दो पूर्णांकों की एक सूची को स्वीकार करने वाला एक विचित्र लिंक [P, Q]जो प्रश्न में वर्णित सूचियों की एक संभावित सूची प्राप्त करता है।

इसे ऑनलाइन आज़माएं! (पाद लेख एक स्ट्रिंग प्रतिनिधित्व को सूची दिखाने के लिए प्रिंट करता है क्योंकि यह वास्तव में है)

या टेस्ट-सूट देखें (एन की सूची लेना और प्रश्न में उन जैसा होने के लिए पुन: व्यवस्थित करना)

कैसे?

हम हमेशा के तत्वों ऊपर काट सकता है सबसे कम ऊपर से (या तो वहाँ है एक लालच से, 1 में एम या हम में से एक इनपुट था 4 , जब एम = [ [ 4 ] ] ) क्रम में एक समाधान खोजने के लिए।M1M4M=[[4]]

नोट: कोड एक सूची में सभी (एक!) ऐसे समाधान एकत्र करता है और फिर सिर (केवल) परिणाम लेता है - यानी अंतिम सिर आवश्यक है क्योंकि विभाजन सभी संभावित आदेशों के नहीं हैं।

BṚT’2* - Link 1, powers of 2 that sum to N: integer, N    e.g. 105
B      - binary                                                [1,1,0,1,0,0,1]
 Ṛ     - reverse                                               [1,0,0,1,0,1,1]
  T    - truthy indices                                        [1,4,6,7]
   ’   - decrement                                             [0,3,5,6]
    2  - literal two                                           2
     * - exponentiate                                          [1,8,32,64]

Ç€×þ/FṢŒṖ§⁼Ç}ɗƇPḢ - Main Link: list of two integers, [P,Q]
Ç€                - call last Link (1) as a monad for €ach
    /             - reduce with:
   þ              -   table with:
  ×               -     multiplication
     F            - flatten
      Ṣ           - sort
       ŒṖ         - all partitions
              Ƈ   - filter keep if:
             ɗ    -   last three links as a dyad:
         §        -     sum each
            }     -     use right...
               P  -       ...value: product (i.e. P×Q)
           Ç      -       ...do: call last Link (1) as a monad
          ⁼       -     equal? (non-vectorising so "all equal?")
                Ḣ - head

3

पायथन 2 , 261 233 232 231 बाइट्स

g=lambda n,r=[],i=1:n and g(n/2,[i]*(n&1)+r,i*2)or r
def f(p,q):
 V=[[v]for v in g(p*q)];i=j=0
 for m in sorted(-a*b for a in g(p)for b in g(q)):
	v=V[i]
	while-m<v[j]:v[j:j+1]=[v[j]/2]*2
	i,j=[i+1,i,0,j+1][j+1<len(v)::2]
 return V

इसे ऑनलाइन आज़माएं!

जो किंग से 1 बाइट ; और केविन क्रूज़सेन के कारण एक और 1 बाइट ।

इनपुट के रूप में लेता है p,q। लालची एल्गोरिथ्म का पीछा करता है।


-k-1हो सकता है ~k
जोनाथन फ्रेच

i,jकाम हो सकता है i,j=[i+1,i,0,j+1][j+1<len(v)::2]के लिए -1 बाइट
जो राजा

@ जो राजा: हाहाहा! कि मुड़ है!
चॉस ब्राउन

while v[j]>-mहो सकता हैwhile-m<v[j]
केविन क्रूज़सेन

@ केविन क्रूज़सेन: हाँ, वास्तव में। धन्यवाद!
चास ब्राउन

2

जेली , 41 बाइट्स

Œṗl2ĊƑ$Ƈ
PÇIP$ƇṪÇ€Œpµ³ÇIP$ƇṪƊ€ŒpZPṢ⁼FṢ$µƇ

इसे ऑनलाइन आज़माएं!

ÇIP$Ƈ[P,Q]


ऐसा नहीं है कि यह एक समस्या है, लेकिन यह बिल्कुल तेज़ नहीं है, क्या यह है? :)
Arnauld

@Arnauld यह एक ही रन में लगभग 3 पूर्णांक विभाजन कार्यों का उपयोग करता है :) बेशक यह बहुत तेज नहीं है
मिस्टर एक्सकोडर

अब आउटगोइंग होने का इंतजार है। मुझे लगता है कि यह सब -35 / 30 में संभव है, लेकिन मुझे नहीं लगता कि मैं कुछ कम कर
पाऊंगा

2

जेली , 34 बाइट्स

BṚT’2*
PÇŒṗæḟ2⁼ƊƇ€ŒpẎṢ⁼Ṣ}ʋƇÇ€×þ/ẎƊ

इसे ऑनलाइन आज़माएं!

इनपुट प्रारूप: [P, Q](ऊपर TIO लिंक यह स्वीकार नहीं करता है, लेकिन परीक्षण के मामलों में सहायता के लिए एक एकल संख्या इसके बजाय)।

आउटपुट स्वरूप: सभी समाधानों की सूची (TIO पर 3 डी सूची के ग्रिड प्रतिनिधित्व के रूप में दिखाया गया है)।

गति: कछुआ।



1

हास्केल, 281 195 बाइट्स

import Data.List
r=reverse.sort
n#0=[]
n#x=[id,(n:)]!!mod x 2$(n*2)#div x 2
m!0=[]
m!x=m!!0:tail m!(x-m!!0)
m%[]=[]
m%n=m!head n:drop(length$m!head n)m%tail n
p&q=r[x*y|x<-1#p,y<-1#q]%r(1#(p*q))

1
यहाँ कुछ सुझाव दिए गए हैं: बाइनरी फ़ंक्शंस के बजाय ऑपरेटरों को परिभाषित करना सस्ता है, गार्ड और पैटर्न-मिलान फिर से करना आपको बचा सकता है (==), 1>0इसके बजाय उपयोग करें Trueऔर उपयोग न करें where। इसके अलावा n'छोटा किया जा सकता है .. इसके साथ आप 72 बाइट बचा सकते हैं: इसे ऑनलाइन आज़माएं!
ბიმო

Btw। अगर आपको हवन करना है तो आपको हास्केल टिप्स सेक्शन को देखना चाहिए ।
ბიმო

मैं फिर से गार्ड की स्थिति पर एक नज़र रखता था, एक और 13 बाइट्स बंद: इसे ऑनलाइन आज़माएं!
ბიმო

@ OM @, धन्यवाद। मैं हैस्केल के लिए नया हूं, इसलिए यह मेरे लिए जादू की चाल के रूप में दिखता है
евгений Новиков

कोई चिंता नहीं :) अगर आपके पास सवाल हैं, तो मोनाड्स और पुरुषों से पूछने के लिए स्वतंत्र महसूस करें ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.