पूर्ण जटिलता


29

आपका कार्य एक प्रोग्राम लिखना है, जो इनपुट n पर, क्रम में n के माध्यम से प्रत्येक नंबर 1 की न्यूनतम अभिव्यक्ति को आउटपुट करता है । बाइट्स में सबसे छोटा कार्यक्रम जीत जाता है।

एक न्यूनतम अभिव्यक्ति दी गई संख्या में परिणाम के लिए 1 के जोड़ और गुणा के साथ जोड़ती है, कुछ 1 का यथासंभव उपयोग करते हुए। उदाहरण के लिए,2323=((1+1+1)(1+1)+1)(1+1+1)+1+1 ग्यारह लोगों के साथ व्यक्त किया जाता है, जो न्यूनतम है।

आवश्यकताएँ:

  1. कार्यक्रम को इनपुट के रूप में एक सकारात्मक प्राकृतिक संख्या n लेना चाहिए।
  2. आउटपुट इस प्रारूप में होना चाहिए: 20 = ((1+1+1)(1+1+1)+1)(1+1)
  3. आपके आउटपुट में अनावश्यक कोष्ठक नहीं हो सकते हैं, जैसे 8 = ((1+1)(1+1))(1+1)
  4. गुणन चिन्ह * वैकल्पिक है।
  5. रिक्त स्थान वैकल्पिक हैं।
  6. आपको दिए गए मान के लिए सभी संभावित समीकरणों को आउटपुट करने की आवश्यकता नहीं है: उदाहरण के लिए, आपके पास आउटपुट 4=1+1+1+1या पसंद का विकल्प है 4=(1+1)(1+1)। आप दोनों का उत्पादन करने की जरूरत नहीं है।
  7. प्रत्येक भाषा में सबसे छोटा कार्यक्रम (बाइट्स में) जीतता है।
1 = 1
2 = 1 + 1
3 = 1 + 1 + 1
4 = 1 + 1 + 1 + 1
5 = 1 + 1 + 1 + 1 + 1
6 = (1 + 1 + 1) (1 + 1)
7 = (1 + 1 + 1) (1 + 1) +1
8 = (1 + 1 + 1 + 1) (1 + 1)
9 = (1 + 1 + 1) (1 + 1 + 1)
10 = (1 + 1 + 1) (1 + 1 + 1) +1
11 = (1 + 1 + 1) (1 + 1 + 1) + 1 + 1
12 = (1 + 1 + 1) (1 + 1) (1 + 1)
13 = (1 + 1 + 1) (1 + 1) (1 + 1) +1
14 = ((1 + 1 + 1) (1 + 1) +1) (1 + 1)
15 = (1 + 1 + 1 + 1 + 1) (1 + 1 + 1)
16 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1)
17 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) +1
18 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1)
19 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) +1
20 = ((1 + 1 + 1) (1 + 1 + 1) +1) (1 + 1)

यहाँ कुछ और परीक्षण मामले हैं: (याद रखें, कि 1 के समान संख्या वाले अन्य भाव भी अनुमत हैं)

157=((1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1

444=((1+1+1)(1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)

1223=((1+1+1)(1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)(1+1+1+1+1)+1+1+1

15535=((((1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)((1+1+1)(1+1)+1)+1)(1+1+1)+1)(1+1+1)(1+1+1)+1

45197=((((1+1+1)(1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1+1)+1+1

शुभ लाभ! - कछुआ 🐢


1
1) आपकी बुलेट # 6 समाप्त नहीं हुई है (इसके लिए उदाहरण आउटपुट याद आ रहा है n=20) और 2) आप शुरुआत में कहते हैं कि पूर्णांक जटिलता, जो समीकरण से अलग है, को आउटपुट होना है, लेकिन आप इसे शामिल नहीं करते हैं बहुत पहले वाले को छोड़कर कोई भी उदाहरण।
एलेंडिया स्ट्राटन

मैं अभी भी स्पष्ट नहीं हूं। क्या आप सिर्फ समीकरण का उत्पादन करते हैं?
xnor

हाँ। पूर्णांक जटिलता को आउटपुट नहीं किया जाना चाहिए। मैं यह भी स्पष्ट करूंगा कि गलतियों के लिए क्षमा करें। :(
कछुए

वूप्स, मैंने कहा बुलेट # 6 जब मुझे आपकी आवश्यकताओं की सूची में बुलेट # 5 कहा जाना चाहिए। अन्य मुद्दे के रूप में, इसे ठीक करने के लिए धन्यवाद। :)
एल'एंडिया स्टैट्रान

1
संबंधित: oeis.org/A005245 oeis.org/A061373 और अंत में oeis.org/A091333
त्रुटिपूर्ण

जवाबों:


10

अजगर, 60 बाइट्स

LjWqeb\1b`()L?tbho/N\1++'tb"+1"m+y'/bdy'df!%bTr2b1VSQ++N\='N

प्रदर्शन

ऑनलाइन संकलक टाइम आउट से पहले 1223 तक पहुंच सकता है, जो पायथ के स्वचालित फ़ंक्शन संस्मरण के लिए धन्यवाद है।

1223=((1+1+1)(1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)(1+1+1+1+1)+1+1+1

पृथक नोटा में,

1223=(3^5+1)*5+3

यह एक पुनरावर्ती फ़ंक्शन का उपयोग करता है ', जो सभी possbile उत्पादों और रकमों की गणना करता है जो वांछित आउटपुट दे सकता है, प्रत्येक अंतिम ऑपरेशन के साथ सबसे कम स्ट्रिंग पाता है, फिर उनकी 1गणना करके गणना करता है और पहले वाला रिटर्न देता है।

यह एक सहायक फ़ंक्शन का उपयोग करता है y, जो किसी अभिव्यक्ति को केवल तभी संक्षिप्त करता है, जब उसे कोष्ठक की आवश्यकता होती है।

ऑफ़लाइन, मैं इनपुट के साथ कार्यक्रम चला रहा हूं 15535, और यह लगभग पूरा हो गया है। परिणाम वृद्धिशील रूप से मुद्रित होते हैं, इसलिए प्रगति को देखना आसान है।

आउटपुट की अंतिम पंक्तियाँ:

15535=((((1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)((1+1+1)(1+1)+1)+1)(1+1+1)+1)(1+1+1)(1+1+1)+1

real    7m8.430s
user    7m7.158s
sys 0m0.945s

संक्षिप्त संकेतन में,

15535=(((3^4+1)*(3*2+1)+1)*3+1)*3^2+1

7

CJam, 105 102 98 96 बाइट्स

q~{)'=1$2,{:I{I1$-'+}%3/1>Imf'*+aImp!*+{)\{j}%\+}:F%{e_"+*"-:+}$0=}j2,{F)_'*={;{'(\')}%1}&*}jN}/

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

परीक्षण चालन

बड़े परीक्षण मामलों के लिए ऑनलाइन दुभाषिया बहुत धीमा है। यहां तक ​​कि जावा दुभाषिया के साथ, बड़े परीक्षण मामलों में लंबा समय लगेगा और स्मृति की महत्वपूर्ण मात्रा की आवश्यकता होगी।

$ time cjam integer-complexity.cjam <<< 157
1=1
2=1+1
3=1+1+1
4=1+1+1+1
5=1+1+1+1+1
6=(1+1)(1+1+1)
7=1+(1+1)(1+1+1)
8=(1+1)(1+1)(1+1)
9=(1+1+1)(1+1+1)
10=1+(1+1+1)(1+1+1)
11=1+1+(1+1+1)(1+1+1)
12=(1+1)(1+1)(1+1+1)
13=1+(1+1)(1+1)(1+1+1)
14=(1+1)(1+(1+1)(1+1+1))
15=(1+1+1)(1+1+1+1+1)
16=(1+1)(1+1)(1+1)(1+1)
17=1+(1+1)(1+1)(1+1)(1+1)
18=(1+1)(1+1+1)(1+1+1)
19=1+(1+1)(1+1+1)(1+1+1)
20=(1+1)(1+1)(1+1+1+1+1)
21=(1+1+1)(1+(1+1)(1+1+1))
22=1+(1+1+1)(1+(1+1)(1+1+1))
23=1+1+(1+1+1)(1+(1+1)(1+1+1))
24=(1+1)(1+1)(1+1)(1+1+1)
25=1+(1+1)(1+1)(1+1)(1+1+1)
26=(1+1)(1+(1+1)(1+1)(1+1+1))
27=(1+1+1)(1+1+1)(1+1+1)
28=1+(1+1+1)(1+1+1)(1+1+1)
29=1+1+(1+1+1)(1+1+1)(1+1+1)
30=(1+1)(1+1+1)(1+1+1+1+1)
31=1+(1+1)(1+1+1)(1+1+1+1+1)
32=(1+1)(1+1)(1+1)(1+1)(1+1)
33=1+(1+1)(1+1)(1+1)(1+1)(1+1)
34=(1+1)(1+(1+1)(1+1)(1+1)(1+1))
35=(1+1+1+1+1)(1+(1+1)(1+1+1))
36=(1+1)(1+1)(1+1+1)(1+1+1)
37=1+(1+1)(1+1)(1+1+1)(1+1+1)
38=(1+1)(1+(1+1)(1+1+1)(1+1+1))
39=(1+1+1)(1+(1+1)(1+1)(1+1+1))
40=(1+1)(1+1)(1+1)(1+1+1+1+1)
41=1+(1+1)(1+1)(1+1)(1+1+1+1+1)
42=(1+1)(1+1+1)(1+(1+1)(1+1+1))
43=1+(1+1)(1+1+1)(1+(1+1)(1+1+1))
44=(1+1)(1+1)(1+1+(1+1+1)(1+1+1))
45=(1+1+1)(1+1+1)(1+1+1+1+1)
46=1+(1+1+1)(1+1+1)(1+1+1+1+1)
47=1+1+(1+1+1)(1+1+1)(1+1+1+1+1)
48=(1+1)(1+1)(1+1)(1+1)(1+1+1)
49=1+(1+1)(1+1)(1+1)(1+1)(1+1+1)
50=(1+1)(1+1+1+1+1)(1+1+1+1+1)
51=(1+1+1)(1+(1+1)(1+1)(1+1)(1+1))
52=(1+1)(1+1)(1+(1+1)(1+1)(1+1+1))
53=1+(1+1)(1+1)(1+(1+1)(1+1)(1+1+1))
54=(1+1)(1+1+1)(1+1+1)(1+1+1)
55=1+(1+1)(1+1+1)(1+1+1)(1+1+1)
56=(1+1)(1+1)(1+1)(1+(1+1)(1+1+1))
57=(1+1+1)(1+(1+1)(1+1+1)(1+1+1))
58=1+(1+1+1)(1+(1+1)(1+1+1)(1+1+1))
59=1+1+(1+1+1)(1+(1+1)(1+1+1)(1+1+1))
60=(1+1)(1+1)(1+1+1)(1+1+1+1+1)
61=1+(1+1)(1+1)(1+1+1)(1+1+1+1+1)
62=(1+1)(1+(1+1)(1+1+1)(1+1+1+1+1))
63=(1+1+1)(1+1+1)(1+(1+1)(1+1+1))
64=(1+1)(1+1)(1+1)(1+1)(1+1)(1+1)
65=1+(1+1)(1+1)(1+1)(1+1)(1+1)(1+1)
66=(1+1)(1+1+1)(1+1+(1+1+1)(1+1+1))
67=1+(1+1)(1+1+1)(1+1+(1+1+1)(1+1+1))
68=(1+1)(1+1)(1+(1+1)(1+1)(1+1)(1+1))
69=1+(1+1)(1+1)(1+(1+1)(1+1)(1+1)(1+1))
70=(1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
71=1+(1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
72=(1+1)(1+1)(1+1)(1+1+1)(1+1+1)
73=1+(1+1)(1+1)(1+1)(1+1+1)(1+1+1)
74=(1+1)(1+(1+1)(1+1)(1+1+1)(1+1+1))
75=(1+1+1)(1+1+1+1+1)(1+1+1+1+1)
76=(1+1)(1+1)(1+(1+1)(1+1+1)(1+1+1))
77=1+(1+1)(1+1)(1+(1+1)(1+1+1)(1+1+1))
78=(1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1))
79=1+(1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1))
80=(1+1)(1+1)(1+1)(1+1)(1+1+1+1+1)
81=(1+1+1)(1+1+1)(1+1+1)(1+1+1)
82=1+(1+1+1)(1+1+1)(1+1+1)(1+1+1)
83=1+1+(1+1+1)(1+1+1)(1+1+1)(1+1+1)
84=(1+1)(1+1)(1+1+1)(1+(1+1)(1+1+1))
85=1+(1+1)(1+1)(1+1+1)(1+(1+1)(1+1+1))
86=(1+1)(1+(1+1)(1+1+1)(1+(1+1)(1+1+1)))
87=(1+1+1)(1+1+(1+1+1)(1+1+1)(1+1+1))
88=(1+1)(1+1)(1+1)(1+1+(1+1+1)(1+1+1))
89=1+(1+1)(1+1)(1+1)(1+1+(1+1+1)(1+1+1))
90=(1+1)(1+1+1)(1+1+1)(1+1+1+1+1)
91=1+(1+1)(1+1+1)(1+1+1)(1+1+1+1+1)
92=1+1+(1+1)(1+1+1)(1+1+1)(1+1+1+1+1)
93=(1+1+1)(1+(1+1)(1+1+1)(1+1+1+1+1))
94=1+(1+1+1)(1+(1+1)(1+1+1)(1+1+1+1+1))
95=(1+1+1+1+1)(1+(1+1)(1+1+1)(1+1+1))
96=(1+1)(1+1)(1+1)(1+1)(1+1)(1+1+1)
97=1+(1+1)(1+1)(1+1)(1+1)(1+1)(1+1+1)
98=(1+1)(1+(1+1)(1+1+1))(1+(1+1)(1+1+1))
99=(1+1+1)(1+1+1)(1+1+(1+1+1)(1+1+1))
100=(1+1)(1+1)(1+1+1+1+1)(1+1+1+1+1)
101=1+(1+1)(1+1)(1+1+1+1+1)(1+1+1+1+1)
102=(1+1)(1+1+1)(1+(1+1)(1+1)(1+1)(1+1))
103=1+(1+1)(1+1+1)(1+(1+1)(1+1)(1+1)(1+1))
104=(1+1)(1+1)(1+1)(1+(1+1)(1+1)(1+1+1))
105=(1+1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
106=1+(1+1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
107=1+1+(1+1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
108=(1+1)(1+1)(1+1+1)(1+1+1)(1+1+1)
109=1+(1+1)(1+1)(1+1+1)(1+1+1)(1+1+1)
110=1+1+(1+1)(1+1)(1+1+1)(1+1+1)(1+1+1)
111=(1+1+1)(1+(1+1)(1+1)(1+1+1)(1+1+1))
112=(1+1)(1+1)(1+1)(1+1)(1+(1+1)(1+1+1))
113=1+(1+1)(1+1)(1+1)(1+1)(1+(1+1)(1+1+1))
114=(1+1)(1+1+1)(1+(1+1)(1+1+1)(1+1+1))
115=1+(1+1)(1+1+1)(1+(1+1)(1+1+1)(1+1+1))
116=(1+1)(1+1)(1+1+(1+1+1)(1+1+1)(1+1+1))
117=(1+1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1))
118=1+(1+1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1))
119=(1+(1+1)(1+1+1))(1+(1+1)(1+1)(1+1)(1+1))
120=(1+1)(1+1)(1+1)(1+1+1)(1+1+1+1+1)
121=1+(1+1)(1+1)(1+1)(1+1+1)(1+1+1+1+1)
122=(1+1)(1+(1+1)(1+1)(1+1+1)(1+1+1+1+1))
123=(1+1+1)(1+(1+1)(1+1)(1+1)(1+1+1+1+1))
124=(1+1)(1+1)(1+(1+1)(1+1+1)(1+1+1+1+1))
125=(1+1+1+1+1)(1+1+1+1+1)(1+1+1+1+1)
126=(1+1)(1+1+1)(1+1+1)(1+(1+1)(1+1+1))
127=1+(1+1)(1+1+1)(1+1+1)(1+(1+1)(1+1+1))
128=(1+1)(1+1)(1+1)(1+1)(1+1)(1+1)(1+1)
129=1+(1+1)(1+1)(1+1)(1+1)(1+1)(1+1)(1+1)
130=(1+1)(1+1+1+1+1)(1+(1+1)(1+1)(1+1+1))
131=1+(1+1)(1+1+1+1+1)(1+(1+1)(1+1)(1+1+1))
132=(1+1)(1+1)(1+1+1)(1+1+(1+1+1)(1+1+1))
133=(1+(1+1)(1+1+1))(1+(1+1)(1+1+1)(1+1+1))
134=1+(1+(1+1)(1+1+1))(1+(1+1)(1+1+1)(1+1+1))
135=(1+1+1)(1+1+1)(1+1+1)(1+1+1+1+1)
136=1+(1+1+1)(1+1+1)(1+1+1)(1+1+1+1+1)
137=1+1+(1+1+1)(1+1+1)(1+1+1)(1+1+1+1+1)
138=(1+1)(1+1+1)(1+1+(1+1+1)(1+(1+1)(1+1+1)))
139=1+(1+1)(1+1+1)(1+1+(1+1+1)(1+(1+1)(1+1+1)))
140=(1+1)(1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
141=1+(1+1)(1+1)(1+1+1+1+1)(1+(1+1)(1+1+1))
142=(1+1)(1+(1+1)(1+1+1+1+1)(1+(1+1)(1+1+1)))
143=(1+1+(1+1+1)(1+1+1))(1+(1+1)(1+1)(1+1+1))
144=(1+1)(1+1)(1+1)(1+1)(1+1+1)(1+1+1)
145=1+(1+1)(1+1)(1+1)(1+1)(1+1+1)(1+1+1)
146=(1+1)(1+(1+1)(1+1)(1+1)(1+1+1)(1+1+1))
147=(1+1+1)(1+(1+1)(1+1+1))(1+(1+1)(1+1+1))
148=(1+1)(1+1)(1+(1+1)(1+1)(1+1+1)(1+1+1))
149=1+(1+1)(1+1)(1+(1+1)(1+1)(1+1+1)(1+1+1))
150=(1+1)(1+1+1)(1+1+1+1+1)(1+1+1+1+1)
151=1+(1+1)(1+1+1)(1+1+1+1+1)(1+1+1+1+1)
152=(1+1)(1+1)(1+1)(1+(1+1)(1+1+1)(1+1+1))
153=(1+1+1)(1+1+1)(1+(1+1)(1+1)(1+1)(1+1))
154=1+(1+1+1)(1+1+1)(1+(1+1)(1+1)(1+1)(1+1))
155=(1+1+1+1+1)(1+(1+1)(1+1+1)(1+1+1+1+1))
156=(1+1)(1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1))
157=1+(1+1)(1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1))

real    0m3.896s
user    0m4.892s
sys     0m0.066s

पर्याप्त समय को देखते हुए, यह अगले परीक्षण मामलों के लिए इन समाधानों का उत्पादन करेगा:

444=(1+1)(1+1)(1+1+1)(1+(1+1)(1+1)(1+1+1)(1+1+1))
1223=1+1+(1+1+1)(1+1+(1+1+1)(1+1+1))(1+(1+1)(1+1)(1+1+1)(1+1+1))

यह कैसे काम करता है?
त्रुटिपूर्ण

@flawr मैं अभी भी इसे थोड़ा और अधिक करने की उम्मीद कर रहा हूं। मैं एक स्पष्टीकरण जोड़ दूंगा जब मैं कर रहा हूँ / हार।
डेनिस

4

जूलिया, 229 बाइट्स

n->(F=i->K[i]>0?E[i]:"("E[i]")";C=[1;3:n+1];K=0C;E=fill("1",n);for s=1:n for i=1:s÷2 (D=C[i]+C[s-i])<C[s]?(C[s]=D;E[s]=E[i]"+"E[s-i];K[s]=0):s%i>0||(D=C[i]+C[j=s÷i])<C[s]&&(C[s]=D;E[s]=F(i)F(j);K[s]=1)end;println("$s="E[s])end)

यह वास्तव में बहुत तेज है। फ़ंक्शन को fचलाने और चलाने के @time f(15535)लिए आउटपुट देता है (केवल अंतिम दो लाइनें)

15535=1+(1+1+1)(1+1+1)(1+(1+1+1)(1+(1+(1+1)(1+1+1))(1+(1+1+1)(1+1+1)(1+1+1)(1+1+1))))
32.211583 seconds (263.30 M allocations: 4.839 GB, 4.81% gc time)

और इसके लिए @time f(45197), यह देता है

45197=1+1+(1+1+1)(1+1+1+1+1)(1+(1+1)(1+1)(1+1+1)(1+(1+1)(1+1+1+1+1)(1+(1+1)(1+1)(1+1)(1+1+1))))
289.749564 seconds (2.42 G allocations: 43.660 GB, 4.91% gc time)

तो, कोड क्या कर रहा है? सरल - संख्या के लिए Cवर्तमान एक- Count को धारण करता है , Kएक संकेतक सरणी है जो इस बात पर नज़र रखता है कि क्या अभिव्यक्ति, मौलिक रूप से, एक योग या उत्पाद है, जो ब्रैकेट से निपटने के प्रयोजनों के लिए है, और स्वयं xpression Eरखता Eहै। इसके s=1माध्यम से अपने तरीके से काम करते हुए n, कोड sएक योग या उत्पाद की तलाश करके, कम मूल्यों के संदर्भ में संख्या के न्यूनतम प्रतिनिधित्व के लिए खोज करता है। यदि यह एक उत्पाद है, तो यह दो घटकों की जाँच करता है और यदि वे रकम रखते हैं तो उनके चारों ओर कोष्ठक लगाते हैं। वह चेक Fबाइट्स को बचाने के लिए फ़ंक्शन में किया जाता है (क्योंकि यह दो कारकों के लिए दो बार किया जाना है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.