संतुलित आधारों के बीच परिवर्तित करें!


13

संतुलित आधार:

संतुलित आधार अनिवार्य रूप से सामान्य आधारों के समान हैं, सिवाय इसके कि अंक सकारात्मक या नकारात्मक हो सकते हैं, जबकि सामान्य आधारों में अंक केवल सकारात्मक हो सकते हैं।

यहाँ से, आधार के संतुलित आधारों का bप्रतिनिधित्व किया जा सकता है balb- इसलिए संतुलित आधार 4 = bal4

इस चुनौती की परिभाषा में, आधार का एक संतुलित आधार में अंकों की सीमा bसे है -(k - 1)करने के लिए b - kहै, जहां

k = ceil(b/2)

विभिन्न संतुलित आधारों में अंकों की सीमा के उदाहरण:

bal10:
  k = ceil(10/2) = 5
  range = -(5 - 1) to 10 - 5 = -4 to 5
        = -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
bal5:
  k = ceil(5/2) = 3
  range = -(3 - 1) to 5 - 3 = -2 to 2
        = -2, -1, 0, 1, 2

संतुलित आधारों में संख्याओं का प्रतिनिधित्व मूल रूप से सामान्य आधारों के समान है। उदाहरण के लिए, संख्या 27(आधार 10) से bal4(संतुलित आधार 4) का प्रतिनिधित्व है 2 -1 -1, क्योंकि

  2 -1 -1 (bal4)
= 2 * 4^2 + -1 * 4 + -1 * 1
= 32 + (-4) + (-1)
= 27 (base 10)

कार्य:

आपका कार्य तीन इनपुट दिए गए हैं:

  • परिवर्तित होने वाली संख्या ( n)
    • यह इनपुट लचीला हो सकता है, "I / O लचीलापन" देखें
  • nवर्तमान में जो आधार है ( b)
  • आधार जिसे nपरिवर्तित किया जाना है ( c)

कहाँ 2 < b, c < 1,000?

के संतुलित आधार cप्रतिनिधित्व में संख्या लौटाएँ n। आउटपुट भी लचीला हो सकता है।

प्रोग्राम / फ़ंक्शन को nइनपुट से ही लंबाई निर्धारित करनी चाहिए ।

मैं / हे लचीलापन:

आपके इनपुट nऔर आउटपुट को इन तरीकों से दर्शाया जा सकता है:

  • आपकी भाषा की एक सरणी की परिभाषा
  • एक स्ट्रिंग, विभाजक के रूप में किसी भी वर्ण के साथ (जैसे रिक्त स्थान, अल्पविराम)

उदाहरण:

ध्यान दें कि ये nआउटपुट और आउटपुट के रूप में पायथन सरणी का उपयोग करते हैं। जब तक यह "I / O लचीलापन" परिभाषा में फिट बैठता है, तब तक आप अपनी भाषा का उपयोग करते हैं।

[2, -1, -1] 4 7 = [1, -3, -1]
[1, 2, 3, 4] 9 5 = [1, 2, 2, -1, 2]
[10, -9, 10] 20 5 = [1, 1, 1, -2, 1, 0]

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है!


आपके पहले उत्तर में, 4 एक कानूनी बाल 7 अंक नहीं है; मेरा मानना ​​है कि उत्तर [1, -3, -1] होना चाहिए। और मुझे दूसरे टेस्ट केस ([1,2,2, -1,2]) और तीसरे टेस्ट केस ([1,1,0, -2,,0,0]) के लिए अलग-अलग उत्तर मिलते हैं ...?
ग्रेग मार्टिन

@GregMartin आह, वूप्स - मैंने हाथ से उन लोगों की गणना की, इसलिए कुछ समस्याएं होने की संभावना थी। ध्यान देने के लिए धन्यवाद! क्या आप अपने समाधान की जांच कर सकते हैं, बस मामले में?
क्लिस्मिक

@GregMartin @ Qwerp-Derp तीसरा टेस्ट केस[1,1,1,-2,1,0]
ngenisis

जवाबों:


2

गणितज्ञ, 85 बाइट्स

#~FromDigits~#2~IntegerDigits~#3//.{p___,a_:0,b_,q___}/;b>⌊#3/2⌋:>{p,a+1,b-#3,q}&

व्याख्या

#~FromDigits~#2

कन्वर्ट #1(1 निहित है - इनपुट 1, अंकों की एक सूची) एक पूर्णांक आधार #2(इनपुट 2) में।

... ~IntegerDigits~#3

#3अंकों के आधार पर सूची बनाते हुए परिणामी पूर्णांक को आधार (इनपुट 3) में बदलें ।

... //.{p___,a_:0,b_,q___}/;b>⌊#3/2⌋:>{p,a+1,b-#3,q}

बार-बार अंकों की सूची को बदलना; यदि कोई अंक फर्श ( #3/ 2) से अधिक है , तो #3उसमें से घटाएं और 1अंक को बाईं ओर जोड़ें। यदि बाईं ओर कुछ भी नहीं है, तो एक डालें 0और जोड़ें 1


यह आमतौर पर आपके समाधान के बारे में बात करने की सलाह देता है, और इसे उन लोगों के लिए समझाता है जो शायद गणितज्ञ को नहीं जानते हैं।
ATaco

@ATaco जोड़ा स्पष्टीकरण!
जुंगह्वान मिन

मैं इससे थोड़ा रोमांचित हूं। मैंने कभी भी वैकल्पिक पैटर्न का उपयोग नहीं किया है लेकिन फ़ंक्शन परिभाषाएँ कहीं भी उपयोग की जाती हैं। आपको बाहरी की जरूरत नहीं है {...}क्योंकि केवल एक प्रतिस्थापन नियम है।
नगीनिसिस

1
@JungHwanMin सच, मुझे लगता है कि जो मुझे भ्रमित कर रहा है वह इस मैच के लिए कैसे प्रभावित करता है p___। क्या यह या p___तो a_,b_या उसके बाद सबसे छोटा है b_, या यह प्रत्येक वैकल्पिक पैटर्न की आवश्यकता वाले पूरे पैटर्न की जांच करता है और तब तक वैकल्पिक पैटर्न को छोड़ देता है जब तक कि यह एक मैच (या कोई तीसरा विकल्प) नहीं मिल जाता?
नगीनिसिस

1
@ngenisis मुझे लगता है कि मैं पिछली टिप्पणी (हटाए गए) में गलत था, के परिणाम को देख रहा था FixedPointList[k=#3;#/.{p___,a_:0,b_,q___}/;b>⌊k/2⌋:>{p,a+1,b-k,q}&, #~FromDigits~#2~IntegerDigits~#3]&{p___,a_,b_,q___}पहले (सभी संभव के लिए p) {p___,b_,q___}मिलान किया जाता है , और फिर मिलान किया जाता है। दूसरा प्रतिस्थापन केवल तभी लागू होता है जब bशुरुआत में होता है क्योंकि अगर कोई bबीच में है जो स्थिति को संतुष्ट करता है, {p___,a_,b_,q___}तो इसके बजाय इसका मिलान करेगा।
जुंगह्वान मिन

1

पर्ल 6 , 121 बाइट्स

->\n,\b,\c{sub f{sum [R,](@^n)Z*($^b X**0..*)}
first {f(b,n)==f c,$_},map {[$_-($_>floor c/2)*c for .base(c).comb]},0..*}

धीमी गति से बल समाधान।

यह काम किस प्रकार करता है:

  • map {[ .base(c).comb]}, 0..*- आधार में प्राकृतिक संख्या के आलसी अनंत अनुक्रम को उत्पन्न करें c, प्रत्येक संख्या को अंकों की एक सरणी के रूप में दर्शाया गया है।
  • $_ - ($_ > floor c/2) * c- इसे cप्रत्येक अंक से घटाकर परिवर्तित करें जो फर्श से अधिक है (c / 2)।
  • first { f(b, n) == f(c, $_) }, ...- उस क्रम की पहली सरणी प्राप्त करें, जब आधार cसंख्या के nरूप में व्याख्या की जाती है, तो आधार bसंख्या के रूप में व्याख्या किए गए इनपुट सरणी के बराबर होती है ।
  • sub f { sum [R,](@^n) Z* ($^b X** 0..*) }- हेल्पर फ़ंक्शन जो @^nआधार $^bकी संख्याओं के अनुक्रम के साथ उलट सरणी को ज़िप करके प्राप्त किए गए उत्पादों का योग लेकर आधार में एक संख्या को आधार में बदल देता है।

1

जावास्क्रिप्ट (ईएस 6), 89 बाइट्स

(n,b,c,g=(n,d=n%c,e=d+d<c)=>[...(n=n/c+!e|0)?g(n):[],e?d:d-c])=>g(n.reduce((r,d)=>r*b+d))

के नकारात्मक मूल्यों के लिए 100 बाइट्स काम करता है n

(n,b,c,g=(n,d=(n%c+c)%c)=>[...(n-=d,n/=c,d+d<c||(d-=c,++n),n?g(n):[]),d])=>g(n.reduce((r,d)=>r*b+d))

0

गणितज्ञ, ११hem ११४ बाइट्स

IntegerDigits[#3~FromDigits~#2,k=⌊#/2⌋;#]//.{{a_,x___}/;a>k:>{1,a-#,x},{x___,a_,b_,y___}/;b>k:>{x,a+1,b-#,y}}&

और क्रमशः 3-बाइट वर्ण हैं U+230Aऔर U+230B। धर्मान्तरित #3आधार को 10आधार से #2, तो धर्मान्तरित आधार के लिए #(ताकि तर्क आदेश उदाहरण से उलट है)। यदि कोई अंक अधिकतम अनुमत अंक से अधिक है k=⌊#/2⌋, तो उस अंक को घटाकर #और अगले अंक को बढ़ाकर (पूर्ववर्ती करने की आवश्यकता हो सकती है 1)। ऐसा तब तक करते रहें जब तक सभी अंक कम न हों k

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