विश्वासपात्र संख्या


14

विश्वासपात्र संख्या

आज्ञा xदेना एक पूर्णांक का एक मनमाना आधार, जैसे कि Dइसके अंकों का एक सरणी है। xएक विश्वासपात्र संख्या है, यदि सभी के nबीच 1और लंबाई के लिए D:

D[n+1] = D[n] + D[n-1] + ... + D[1] + n

उदाहरण के लिए, 349आधार 10 में संख्या । 10. यदि हम इस संख्या के लिए सूचकांकों को लेबल करते हैं, तो हमारे पास निम्नलिखित हैं।

Index    Digit
-----    -----
1        3
2        4
3        9

पहले अंक से शुरू करके, हमारे पास 1 + 3 = 4अगला अंक होता है। फिर दूसरे अंक के साथ, हमारे पास 3 + 4 + 2 = 9, जो फिर से, अगले अंक प्राप्त करता है। इस प्रकार, यह संख्या एक विश्वासपात्र संख्या है।


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

9 से अधिक अंकों के लिए, अल्फा अक्षरों का उपयोग करें A-Z, और अंकों से अधिक के Zलिए अल्फा अक्षरों का उपयोग करें a-z। आपको इससे आगे के अंकों के बारे में चिंता करने की आवश्यकता नहीं होगी z

उन्हें किसी विशेष क्रम में आउटपुट करने की आवश्यकता नहीं है।


नमूना इनपुट:

16

नमूना आउटपुट:

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
12
23
34
45
56
67
78
89
9A
AB
BC
CD
DE
EF
125
237
349
45B
56D
67F
125B
237F

यह कोड गोल्फ है, इसलिए सबसे छोटा कोड जीतता है। सौभाग्य!

(स्वरूपण के साथ मदद करने और कुछ समस्याओं को इंगित करने के लिए Zach को धन्यवाद।)


क्षमा करें, मेरे और ज़च के बीच थोड़ा सा भ्रम। अभी सब कुछ फॉर्मेट किया जाना चाहिए।
एक

एक उपयोगी अवलोकन: एक विश्वासपात्र संख्या में, प्रत्येक अंक एक पिछले अंक से दोगुना है, इसके अलावा दूसरा अंक पहले अंक के बजाय एक अंक है।
xnor

कॉलमवाइज़ जाने से एक और (संभवतः) उपयोगी पैटर्न का पता चलता है;
जियोबिट्स

1
उदाहरण CDमें, सूची में क्यों नहीं है? चूंकि अन्य सभी संयोजन जहां दूसरा अंक पहले अंक की तुलना में एक अधिक है, मुझे समझ में नहीं आता कि CDयोग्य क्यों नहीं है।
रेटो कोराडी

यह एक दुर्घटना थी: पी फिक्स्ड, इसे इंगित करने के लिए धन्यवाद।
एक spaghetto

जवाबों:


2

पायथ, 38 बाइट्स

0jms@L+s`MT+rG1Gdf<eTQsm.u+N+lNsNQ]dSQ

इसे ऑनलाइन आज़माएँ: प्रदर्शन

स्पष्टीकरण:

0jms@L+s`MT+rG1Gdf<eTQsm.u+N+lNsNQ]dSQ  implicit: Q = input base
0                                       print 0
                       m            SQ  map each d of [1, 2, ..., Q] to:
                        .u       Q]d      start with N=[d], apply v Q times
                          +N+lNsN           add (len(N) + sum(N)) to N
                                          gives all intermediate results
                      s                 join to one list of candidates
                 f<eTQ                  filter those, where every digit < Q
  ms@L+s`MT+rG1Gd                       convert numbers to letters 0-9A-Za-z
 j                                      print each on separate line

9

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

n=input()
for i in range(n):
 s=''
 while i<n:s+=chr(48+i+(i>9)*7+i/36*6);print s;i+=n**0**i+i*(s>s[:1])

यह निम्नलिखित अवलोकन का उपयोग करता है: एक विश्वासपात्र संख्या में, iइसके बाद अंक होता है 2*i+1, सिवाय इसके कि यह i+1दूसरे अंक के लिए है। जब तक वे बहुत बड़े नहीं हो जाते, तब तक सभी संभव पहले अंकों की कोशिश करके और अधिक अंकों को जोड़कर, हम सभी विश्वासपात्र संख्याओं को उत्पन्न कर सकते हैं।

हम वर्ण की गणना उसी संख्या के iरूप में करते हैं chr(48+i+(i>9)*7+i/36*6), जो इसे संख्या में बदलता है, अपरकेस अक्षर, या अंतराल के लिए अपरकेस अक्षर श्रेणी 0-9, 10-35, 36-61

फिर, हम वृद्धि iके माध्यम से i+=i+1दो समायोजन के साथ। i+=1पहले अंक के बाद इसे बनाने के लिए , हम वर्णों से अधिक होने iपर सशर्त जोड़ते हैं । इसके अलावा, हमें 0 से शुरू होने वाली संख्याओं को मुद्रित करने से बचने की आवश्यकता है, जबकि उसी समय की अनुमति है । ऐसा करने के लिए, हम एक हैक करते हैं जो इसे जोड़कर अगले लूप पर स्थिति को विफल करने का कारण बनता है। इसके साथ प्रतिस्थापित करके किया जाता है , जो कि समतुल्य है, जो बराबर है या ।s10i=0i<nn1n**0**in**(0**i)n**(i==0)n if i==0 else 1


वाह, खतरा। पायथन 3 की तुलना में लगभग आधा आकार! हम्म। मुझे आश्चर्य है कि अगर मैं आपकी कुछ तरकीबों का उपयोग करूं तो मैं कितने बाइट बचा सकता हूं ...
एल'एंडिया स्ट्रैटन

4

पायथन 3, 201 200 बाइट्स

n=int(input())
X=[[i]for i in range(1,n)]
for x in X:
 y=sum(x)+len(x)
 if y<n:X.append(x+[y])
X=[[0]]+X
print('\n'.join(''.join(map(lambda x:[str(x),chr(x+55),chr(x+61)][(x>9)+(x>35)],x))for x in X))

व्याख्या

यहाँ मुख्य अंतर्दृष्टि यह है कि एक अनुक्रम दिया जाता है x(जैसे, कहते हैं, [1,2,5]), आप अनुक्रम में अगला शब्द प्राप्त कर सकते हैं sum(x)+len(x), जो 11इस मामले में देता है ( B)। यह देखने के लिए जांचें कि क्या यह इससे कम है n, और यदि यह है, तो ऐसे सभी अनुक्रमों की सूची में विस्तारित अनुक्रम जोड़ें (सभी एकल अंकों द्वारा वरीयता प्राप्त)।

[str(x),chr(x+55),chr(x+61)][(x>9)+(x>35)]

यह है कि मैं पात्रों को अनुक्रम आइटम कैसे मैप करता हूं। इन्हें ''.joinएक साथ एड किया जाता है और फिर प्रिंट किया जाता है, जो कि नई कहानियों से अलग होते हैं।


आप अपनी अंतिम पंक्ति को बदलकर एक बाइट बचा सकते हैं print('\n'.join(''.join(map(lambda x:[str(x),chr(x+55),chr(x+61)][(x>9)+(x>35)],x))for x in X))। इसके अलावा, वर्तमान में यह 201 बाइट्स है; नहीं 200.
Zach गेट्स

@ZachGates: मैंने इसके बारे में सोचा था, लेकिन महसूस नहीं किया कि मैं कोष्ठक छोड़ सकता हूं। धन्यवाद!
एल'एंडिया स्ट्रैटन

4

जीएस 2, 44 बाइट्स

26 c8 2f 08 4d 08 40 64 45 2e 30 42 67 40 24 d0
75 d3 20 e1 35 09 cb 20 23 78 22 09 34 30 e0 32
08 86 84 30 85 30 92 58 09 34 10

यह एक अलग क्रम में संख्याओं का उत्पादन करता है, लेकिन समस्या का विवरण निर्दिष्ट नहीं करता है, इसलिए मैं इसके लिए जा रहा हूं! यहाँ 16 के इनपुट के लिए आउटपुट है।

1
12
125
125B
2
23
237
237F
3
34
349
4
45
45B
5
56
56D
6
67
67F
7
78
8
89
9
9A
A
AB
B
BC
C
CD
D
DE
E
EF
F
0

यहां बाइट्स के लिए मेनेमोनिक समकक्ष हैं:

read-num dec save-a
range1
{
    itemize
    {
        dup 
        sum
        over length
        add

        swap right-cons

        dup last push-a le

            push-d eval
        block2 when
    }
    save-d eval
    init inits tail
} map

+ ' fold 

{
    ascii-digits
    uppercase-alphabet catenate
    lowercase-alphabet catenate
    select 
    show-line
} map

0

अरे यार, यह कमाल है। मैं जीएस 2 सीखने की कोशिश कर रहा हूं, लेकिन मैं इसके साथ एक वास्तविक समय बिता रहा हूं: पी
एक स्पैगेटो

3

CJam, 46 42 40 बाइट्स

ri:R,{Q{+_A,s'[,_el^+f=oNo__,+:+_R<}g&}*

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

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

ri:R            e# Read an integer from STDIN and save it in R.
,               e# Push [0 ... R-1].
{               e# Fold; For each element but the first:
                e#   Push the element.
  Q             e#   Push an empty array (accumulator for base-R digits).
  {             e#   Do:
    +           e#     Concatenate the integer and the array on the stack.
    _           e#     Push a copy of the result.
    A,s'[,_el^+ e#     Push "0...0A...Za...z".
                e#     See: http://codegolf.stackexchange.com/a/54348
    f=          e#     Replace each base-R digit with the corresponding character.
    oNo         e#     Print the resulting string and a linefeed.
    _           e#     Push another copy of the accumulator.
    _,+         e#     Append its length to it.
    :+          e#     Add all digits (including the length).
    _R<         e#     Push a copy of the result and compare it with R.
  }g            e#   If the sum is less than R, it is a valid base-R digit,
                e#   the comparison pushes 1, and the loop is repeated.
  &             e#   Intersect the accumulator with an integer that is greater
                e#   or equal to R. This pushes an empty array.
}*              e#

अंत में 0 और कुछ खाली सरणियों को स्टैक पर छोड़ दिया जाता है, इसलिए दुभाषिया प्रिंट 0


1

gawk, 111 बाइट्स

{for(n=$0;n>c=++i;)for(j=0;n>$++j=c+=j;print"")for(c=k=0;k++<j;c+=$k)printf"%c",$k+($k>9?$k>35?61:55:48)}$0="0"

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

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