माचिस की एक पहेली को हल करें


17

एसई को गुदगुदाने पर "मैचस्टिक प्रॉब्लम्स" कहलाती हैं जिसमें गणित को मैच स्टिक में लिखा जाता है और आपको एक निश्चित संपत्ति प्राप्त करने के लिए उनमें से एक निश्चित संख्या को स्थानांतरित करने की अनुमति होती है।

इस प्रश्न में हम केवल 7-खंड प्रदर्शन प्रारूप में प्रतिनिधित्व किए गए पूर्णांकों पर विचार करेंगे। यहाँ उस प्रारूप में सभी 10 अंक हैं:

 __          __   __          __    __    __    __    __
|  |     |   __|  __|  |__|  |__   |__      |  |__|  |__|
|__|     |  |__   __|     |   __|  |__|     |  |__|   __|    

प्रदर्शन का प्रत्येक खंड एक "मैच-स्टिक" है जिसे स्वतंत्र रूप से बाकी संख्या में स्थानांतरित किया जा सकता है। मैचस्टिक्स अविभाज्य और अविनाशी हैं, किसी भी तरह से तोड़ा या हटाया नहीं जा सकता।

एक सामान्य पहेली आधार 10 में दी गई संख्या को लेना है और दिए गए संख्याओं में सबसे बड़ी संख्या को संभव बनाने की कोशिश करना है। एक चाल को किसी भी कब्जे वाले स्लॉट से किसी भी अन्य अप्रकाशित स्लॉट से मैचस्टिक के एक आंदोलन के रूप में माना जाता है। आपको पूरी तरह से संख्या के दोनों ओर नए अंक बनाने की अनुमति है, उदाहरण के लिए 0 को 77 में 3 चालें दी जा सकती हैं

 __      __  __      __   __      __   __
|  |    |  |        |  |    |       |    |
|__| ,   __|     ,     |      ,     |    |

हालाँकि आप एक स्लॉट को 2 में नहीं बना सकते हैं या मौजूदा लोगों के बीच नए स्लॉट नहीं बना सकते हैं, उदाहरण के लिए किसी संख्या के बीच में 4 को 11 में बदलना या मौजूदा लोगों के बीच नए अंकों को सम्मिलित करना। प्रत्येक चाल को एक उचित संख्या बनाने की आवश्यकता नहीं है लेकिन अंतिम परिणाम आधार 10 सात खंड प्रदर्शन में एक उचित संख्या होनी चाहिए। यदि आप नहीं चाहते हैं तो आपको हर कदम का उपयोग करने की आवश्यकता है। उलट-पुलट करने के विपरीत यह एक [टैग: क्लोज एंडेड क्वेश्चन] हो सकता है कि आप अपने उत्तर में किसी भी ऑपरेटर (गुणा, घातांक, आदि) या गणितीय स्थिरांक (पाई, ग्राहम की संख्या आदि) का उपयोग न करें।

कार्य

एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट के रूप में एक संख्या और कई चालें लेता है और सबसे बड़ी संख्या देता है जिसे मूल संख्या पर कई चालों के साथ बनाया जा सकता है।

यह एक प्रश्न है, इसलिए उत्तर बाइट्स में स्कोर किए जाएंगे, कम बाइट बेहतर होने के साथ।

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

n, moves -> max
0, 1     -> 9
0, 3     -> 77
0, 4     -> 111
8, 3     -> 74
220, 1   -> 320
220, 2   -> 520
220, 3   -> 7227
220, 4   -> 22111
220, 5   -> 32111
747, 1   -> 747
747, 2   -> 7171
747, 3   -> 7711

सम्बंधित


5
मैं ... वास्तव में देर रात तक रुका रहा, विभिन्न माचिस के अंकों के बीच लेवेंसहाइट दूरी की ओर
इशारा किया

1
क्या बीच में बने खाली स्लॉट्स को अंत में अनदेखा किया जा सकता है? जैसे919, 2 -> 991
DanTheMan


गेहूं के जादूगर, किस ग्रिड का उपयोग किया जा रहा है?
tuskiomi

@tuskiomi "हालाँकि आप 2 में एक स्लॉट नहीं बना सकते हैं या मौजूदा लोगों के बीच नए स्लॉट बना सकते हैं"
पोस्ट रॉक गार्फ हंटर

जवाबों:


7

जावास्क्रिप्ट (ईएस 6), 297 286 279 267 बाइट्स

करी सिंटैक्स में इनपुट लेता है (s)(k), जहाँ s एक अंक वर्णों का सरणी है और k चाल की संख्या (पूर्णांक) है।

s=>k=>(B=(n,b=0)=>n?B(n^n&-n,b+1):b,b=[...p='u"[k,iy#}m'].map(c=>c.charCodeAt()+2),r=[],g=(n,d='')=>n?n>0&&b.map((v,i)=>g(n-B(v),d+i)):r.push(d))(s.reduce((s,c)=>s+B(b[c]),M=0))&&b.map((_,j)=>r.map(n=>M=[...n+p].reduce((t,d,i)=>t+B(b[d]^b[s[i-j]]),0)>k*2|+n<M?M:n))|M

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


कैसे?

आकृति डेटा और सहायक कार्य

  • सरणी b अंकों के आकार को 7-बिट पूर्णांक के रूप में वर्णित करता है, जहां प्रत्येक बिट एक खंड है:

    7-खंड

    उदाहरण के लिए, "7" का आकार 0b0100101 = 37 है।

  • सहायक फ़ंक्शन B () दिए गए नंबर के बाइनरी प्रतिनिधित्व में 1 की संख्या देता है:

    B = (n, b = 0) => n ? B(n ^ n & -n, b + 1) : b

चरण 1

हम पहले इनपुट संख्या में प्रयुक्त माचिस की संख्या की गणना करते हैं:

s.reduce((s, c) => s + B(b[c]), 0)

चरण 2

हम इस मान को पुनरावर्ती फ़ंक्शन g () में पास करते हैं , जो सभी संख्याओं के साथ एक सूची r को पॉप्युलेट करता है, जिसे बिल्कुल इसी मैचस्टिक्स के साथ बनाया जा सकता है:

g = (n, d = '') =>
  n ?
    n > 0 &&
    b.map((v, i) => g(n - B(v), d + i))
  :
    r.push(d)

उदाहरण के लिए, जी (5) आर[ '17', '2', '3', '5', '71' ] में लोड होगा ।

चरण 3

हमें अब r में उच्चतम संख्या M का चयन करना है जो वास्तव में इनपुट नंबर से प्राप्त किया जा सकता है, अनुमत संख्या के भीतर कदम k

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

दो अंकों x और y के बीच खंड अंतर की संख्या b [x] XOR b [y] के द्विआधारी प्रतिनिधित्व में 1 की संख्या से दी गई है ।

अंत में, यह ध्यान रखना महत्वपूर्ण है कि हमें कई संभावित अंकों के संरेखण का प्रयास करने की आवश्यकता है, क्योंकि s के पहले अंक को n के पहले अंक में मैप करना आवश्यक नहीं है । अंकों के बीच की पारी कोड में चर जे द्वारा दी गई है ।


1

गणितज्ञ, १ 188 197 200 203 170 174 बाइट्स

नोट: कोड अभी भी छोटी गाड़ी है। मैं इस पर काम कर रहा हूँ।

बग के लिए +30 बाइट्स

(p=PadLeft;q=IntegerDigits;g=Join@@(#~q~2~p~7&/@ToCharacterCode["w$]m.k{% o"][[1+q@#]])&;h=(v=g@#2~#~96-g@i~#~96;Tr@v==0&&Tr@Abs@v<=2#3)&;For[i=10^Tr@g@#,!h[p,##]&&!h[PadRight,##],--i];i)&

के बीच का चरित्र %और oहोना चाहिए 0x7Fलेकिन एसई इसे अनुमति नहीं देगा। आप मूल कोड को कॉपी करने के लिए पास्टबिन लिंक पर क्लिक कर सकते हैं ।

जब 6-7 से अधिक चिपक जाते हैं तो कोड में बहुत समय लगता है। (आप iइसे जांचने के लिए कम संख्या के शुरुआती मूल्य को संशोधित कर सकते हैं )

व्याख्या

gएक सहायक समारोह छड़ी प्रतिनिधित्व (के अनुसार की एक सूची में अंक को परिवर्तित है यहां इस तरह के रूप में), {1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1}के लिए 220

h दो संख्याओं के बीच बाएं-पेडिंग और राइट-पेडिंग से निपटने के लिए एक सहायक कार्य है।

fएक पूर्णांक की तलाश 10^Tr@g@#करने के 1लिए (ऊपरी सीमा) से पुनरावृत्त होता है, जिसकी छड़ी प्रतिनिधित्व में मूल संख्या की तुलना में समान मात्रा होती है 1 -> 0और 0 -> 1दूसरी तर्क की तुलना में मात्रा छोटी या बराबर होती है।


मैंने आपको एक +1 दिया क्योंकि मैंने कभी नहीं देखा कि एक विजयी उत्तर में दूसरे उत्तर की तुलना में इतना कम अंक हो। मैं मानता हूं कि यह ऑनलाइन परीक्षण विकल्पों की कमी है। हो सकता है कि कुछ लोग जिनके पास गणितज्ञ हैं, वे आकर इसका परीक्षण कर सकते हैं और सत्यापित कर सकते हैं कि यह अच्छी तरह से काम करता है, इसलिए आप कुछ और उत्थान प्राप्त कर सकते हैं। या हो सकता है कि कोई इसे यदि संभव हो तो ऑक्टेव में बदल सकता है।
जियोकॉवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.