मुझे कितने कार्डबोर्ड अंकों की आवश्यकता है?


32

मुझे कुछ संख्या ( उदाहरण ) प्रदर्शित करने के लिए कार्डबोर्ड से बने अंक तैयार करने की आवश्यकता है । मुझे पहले से नहीं पता है कि मुझे किस नंबर को प्रदर्शित करना चाहिए - केवल एक चीज जो मुझे पता है कि यह इससे अधिक नहीं है n

मुझे कितने कार्डबोर्ड अंक तैयार करने चाहिए?

उदाहरण: n = 50

सीमा 0 ... 50 में किसी भी संख्या को प्रदर्शित करने के लिए, मुझे निम्नलिखित अंकों की आवश्यकता है:

  1. 0, या किसी अन्य राउंड नंबर को प्रदर्शित करने के लिए एक शून्य
  2. संबंधित नंबरों को प्रदर्शित करने के लिए अंक 1, 2, 3 और 4 की दो प्रतियां
  3. अंक 5, 6, 7 और 8 की एक प्रतिलिपि, इस मामले के लिए कि वे संख्या में कम से कम महत्वपूर्ण अंक दिखाई देते हैं
  4. अंक 9 की आवश्यकता कभी नहीं होती है, क्योंकि मैं इसके बजाय उल्टे अंक 6 का उपयोग कर सकता हूं

कुल: 13 अंक

टेस्ट केस (प्रत्येक लाइन "इनपुट; आउटपुट" प्रारूप में एक टेस्ट केस है)

० १
१ २
९ ९
११ १०
५० १३
९९ १ 17
१०० १ 18
१३५ १ ९
५३१ २२
1000 27
8192 34
32767 38

2
क्या 6/9 के अलावा किसी अन्य अंक को घुमाया जा सकता है?
feersum

नहीं (उदाहरण देखें)
anatolyg

तो दो 1 एक 7 तो बनाने के लिए अधिक नहीं किया जा सकता
user253751

2
... और दो शून्य नहीं बना सकते हैं 8. यह बदसूरत होगा।
अनातोली

संभवतः एक अजीब सवाल है, लेकिन जैसा कि ये 'कार्डबोर्ड' अंक हैं, क्या उन्हें कुल आवश्यकता पर बचाने के लिए दो तरफा मुद्रित किया जा सकता है? उदाहरण के लिए, उदाहरण के लिए, आपको कभी भी 6 और 0 की आवश्यकता नहीं होगी।
वीकर ई।

जवाबों:


16

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

‘ḶDœ|/ḟ9L

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

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

‘ḶDœ|/ḟ9L
‘Ḷ         [0,1,...,n]
  D        convert each to list of its digits
   œ|/     fold by multiset union
      ḟ9   remove 9
        L  length

14
बहुत तेज>। <मैं कसम खाता हूं, आपके पास ब्रह्मांड में हर ज्ञात चुनौती के लिए एक जेली उत्तर है और आपके पास चुनौती के ठीक बाद उन्हें पोस्ट करने के लिए एक बॉट है। : पी अच्छा जवाब।
हाइपरनेत्रिनो

10
@ हाइपर न्यूट्रिनो मुझे लगता है कि बॉट चुनौती से टेस्टकेस निकालता है और सुपर कंप्यूटर का उपयोग करके हर संभव जेली प्रोग्राम की कोशिश करता है।
निएडजेककोब

1
@HyperNeutrino आप भावना को जानते हैं ... खासकर यदि आपका समाधान है 0rDŒr€ẎQṪÞẎḟ9ĠẎL
निकोल

मैंने एक क्षण के लिए part9 भाग की वैधता पर संदेह किया, फिर मुझे 6 <9 का एहसास हुआ, इसलिए 6s की संख्या प्रत्येक संयोजन में 6s और 9s की कुल संभावित संख्या से कम नहीं हो सकती है।
नादेर घनबरी

7

पायथन 2 , 49 बाइट्स

lambda n:9*len(`n`)-9+(n*9+8)/10**len(`n`)+(n<10)

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

एक अनाड़ी अंकगणित सूत्र। मान लें कि nएक के भीतर फिट बैठता है intकि Lसंलग्न नहीं है।

5 बाइट्स बचाने के लिए नील को धन्यवाद दें कि 9 के अप्रयुक्त होने के n*9+8बजाय ऐसा करने से नियंत्रित किया जा सकता है n*9+9, इसलिए, कहते हैं, 999*9+8=89999000 से अधिक रोल नहीं करता है।


@ovs जो काफी काम नहीं करता है, यह पहला अंक जानने के लिए पर्याप्त नहीं है। उदाहरण के लिए 33333पाँच 3 की 22222आवश्यकता होती है लेकिन केवल चार की आवश्यकता होती है। n*9[0] आकर्षक है, लेकिन साथ शुरू संख्या के लिए विफल रहता है है 1और कम है कि 111..
xnor

मेरे हिसाब से (मेरा बैच जवाब देखें) आप शायद इस्तेमाल (n*9+8)/10**len(`n`)करने से बच सकते हैं min
नील

7

हास्केल , 117 114 108 95 89 88 87 84 82 63 बाइट्स

6 बाइट्स ने लायकोनी को धन्यवाद दिया

1 4 6 बाइट्स नेमी को धन्यवाद दिया

g x=sum[maximum[sum[1|u<-show y,d==u]|y<-[0..x]]|d<-['0'..'8']]

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


3
1.) के maximum[a,b]रूप में ही है max a b। 2.) सूची की समझ अक्सर कम होती है filter:max d$sum[1|x<-show a,x==b]
लाईकोनी

1
आप gएक पॉइंटफ्री फ़ंक्शन शाब्दिक के साथ बदल सकते हैं sum.(#[-9..]):।
नीमी

@nimi मुझे नहीं पता कि एक पॉइंटफ्री फंक्शन शाब्दिक क्या है, लेकिन मुझे लगता है कि मैं देख रहा हूं कि आप क्या सुझाव दे रहे हैं। अगर मैं गलत हूं तो मुझे बताओ।
गेहूं जादूगर

1
... और length[x|x<-...]है sum[1|x<-...]
नीमी

1
फ़ंक्शंस अनाम हो सकते हैं, इसलिए इसके लिए कोई ज़रूरत नहीं है g=(लेकिन शायद आप इसे TIO संस्करण में शामिल करना चाहते हैं)।
नीमी

5

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

Tr@Delete[Max~MapThread~DigitCount@Range[0,#],9]&

अच्छा! क्या यह मेरे उत्तर पर आधारित है?
J42161217

5

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

f=(n,i=9)=>n>(i%9+1+"e"+(i/9|0))/9-1?1+f(n,-~i):n>9^1

एक प्रकार का हैकी पुनरावर्ती समाधान। यह उन संख्याओं को उत्पन्न करता है जिन्हें एक अंक जोड़ने की आवश्यकता होती है:

1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 22, 33, 44, 55, 66, 77, 88, 100, 111, 222, ...

और फिर गिना जाता है कि इनपुट से कितने कम हैं। एक सुखद चमत्कार से, अंक को हटाने से 9वास्तव में फ़ंक्शन से कई बाइट्स निकालते हैं , क्योंकि अनुक्रम तब उत्पन्न हो सकता है जैसे (पूर्णांक विभाजन को मानते हुए):

1e1 / 9 = 1, 2e1 / 9 = 2, ..., 8e1 / 9 = 8, 9e1 / 9 = 10, 1e2 / 9 = 11, 2e2 / 9 = 22, ...

हमें इस तथ्य को ध्यान में रखना होगा कि 10 से कम संख्या में अभी भी शून्य की आवश्यकता होती है, लेकिन यह n > 9 ? 0 : 1परिणाम को जोड़ने के समान सरल है ।

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


n>9^1शायद हो सकता हैn<10
कैलक्यूलेटरफलाइन

@CalculatorFeline अच्छा है, जो trueइनपुट के लिए देता है 0, इसलिए मुझे ऐसा करने में थोड़ी झिझक है।
ETHproductions

0>9गलत है, false^11 है ...?
कैलक्यूलेटरफलाइन

@CalculatorFeline हाँ, मैं कह रहा हूँ कि संख्या के स्थान पर बूलियन का उत्पादन करने में मुझे संकोच है । true1
ETHproductions

4

बैच, 67 बाइट्स

@if %1 geq 10%2 %0 %1 0%2 -~%3
@cmd/cset/a(%1*9+8)/10%2+9*%30+!%30

इस समस्या के मानक सूत्रीकरण में, आपको अलग 6और 9अंकों की आवश्यकता होती है, लेकिन आपको प्रदर्शित करने की आवश्यकता नहीं है 0। जैसे ही अधिकतम मूल्य में nवृद्धि होती है, आवश्यक संख्या की संख्या हर बार जब आप एक प्रतिनिधि तक पहुँचते हैं तब बढ़ जाती है (क्योंकि आपके पास उस संख्या में पर्याप्त नहीं होता है) और हर बार 10जब आप एक अतिरिक्त शून्य की आवश्यकता होती है तो आप एक शक्ति तक पहुँचते हैं । कुल में प्रत्येक शक्ति को पिछले वाले की तुलना में अधिक अंकों की 10आवश्यकता होती है 10, जिसे के रूप में कैलकुलेट किया जा सकता है floor(log10(n))*10n10 की शक्तियों के बीच के मूल्यों के लिए , मध्यवर्ती प्रतिक्षेप की संख्या को तब floor(n/((10**floor(log10(n))*10-1)/9))या वैकल्पिक रूप से गणना की जा सकती है floor(n*9/(10**floor(log10(n))*10-1))

मैं floor(log10(n))पहली पंक्ति पर लूप के माध्यम से गणना करता हूं । हर बार, %2एक अतिरिक्त लाभ 0और %3एक अतिरिक्त लाभ -~। इसका मतलब है कि 10%2है 10*10**floor(log10(n))और %30है floor(log10(n))

के दोहराव 6और 9दो प्रभाव हैं: सबसे पहले, 9प्रत्येक शक्ति के लिए केवल अंकों की आवश्यकता होती है 10, और दूसरी बात यह है कि रेपिडिट का पता लगाने के लिए 9रेपिडिट्स की अनदेखी करने की आवश्यकता होती है। सौभाग्य से, क्योंकि वे 10 की शक्ति से कम हैं, परिणाम प्राप्त करने के लिए सूत्र को घुमाकर इसे प्राप्त किया जा सकता है floor((n*9+8)/(10**floor(log10(n))*10))

शून्य से निपटना यथोचित सरल है: इसके लिए केवल एक अतिरिक्त अंक की आवश्यकता होती है n<10, अर्थात floor(log10(n))==0


2

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

v=DigitCount;s=v@0;(Table[s[[i]]=v[j][[i]]~Max~s[[i]],{i,10},{j,#}];s[[9]]=0;Tr@s)&


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