प्राकृतिक संख्याओं की पंक्ति


22

परिभाषा

समसामयिक प्राकृतिक संख्या (सकारात्मक पूर्णांक, 1 से शुरू) की अनंत पंक्ति है:

1234567891011121314151617181920212223...

चुनौती

  • किसी भी भाषा में प्रोग्राम लिखें, जो स्थिति संख्या को एक इनपुट के रूप में स्वीकार करता है, और ऊपर बताई गई पंक्ति में उस स्थिति से अंकों को आउटपुट करता है।
  • स्थिति संख्या मनमाने आकार के पूर्णांक है। यह पहला स्थान है 1, उत्पादन अंक '1' उपज है
  • इनपुट या तो दशमलव (उदाहरण। 13498573249827349823740000191), या ई-संकेतन (जैसे। 1.2e789) सकारात्मक पूर्णांक के अनुरूप है।
  • कार्यक्रम को उचित समय में समाप्त करना है (आधुनिक पीसी / मैक पर 10 सेकंड), एक इनपुट के रूप में बहुत बड़ा सूचकांक दिया गया है (उदाहरण। 1e123456 - 123456 शून्य के साथ 1)। तो, सरल पुनरावृत्ति लूप स्वीकार्य नहीं है।
  • यदि कोई अमान्य इनपुट दिया गया है, तो प्रोग्राम को 1 एस में एक त्रुटि के साथ समाप्त करना होगा। उदाहरण के लिए। 1.23e (अमान्य), या 1.23e1 (12.3 के बराबर - पूर्णांक नहीं)
  • संख्याओं को पार्स / स्टोर करने और उन पर सरल गणितीय कार्य (+ - * / ऍक्स्प) करने के लिए पब्लिक बिगनेम लाइब्रेरी का उपयोग करना ठीक है। कोई बाइट-पेनल्टी लागू नहीं हुई।
  • सबसे छोटा कोड जीतता है।

टी एल; डॉ

  • इनपुट: bignum पूर्णांक
  • आउटपुट: अनंत पंक्ति में उस स्थिति पर अंक 123456789101112131415...

कुछ स्वीकृति परीक्षण मामले

संकेतन में "इनपुट: आउटपुट"। उन सभी को पास होना चाहिए।

  • 1 1
  • 999: 9
  • 10000000: 7
  • 1e7: 7 (ऊपर की पंक्ति के समान)
  • 13498573249827349823740000191: 6
  • 1.1e10001: 5
  • 1e23456: 5
  • 1.23456e123456: 4
  • 1e1000000: 0
  • 1.23e: त्रुटि (अमान्य सिंटैक्स)
  • 0: त्रुटि (सीमा से बाहर)
  • 1.23e1: त्रुटि (पूर्णांक नहीं)

बोनस!

संख्या के अंदर आउटपुट अंक स्थिति संख्या, और स्वयं आउटपुट संख्या। उदाहरण के लिए:

  • 13498573249827349823740000191: 6 24 504062383738461516105596714
    • वह अंक '6' अंक 24 की संख्या 24 पर '50406238373846151610559 6 714' है।
  • 1e1000000: 0 61111 1000006111141666819445...933335777790000
    • ९९९९९ ५-५ अंकों की लंबी संख्या में अंक '० ’मैं यहाँ शामिल नहीं करने जा रहा हूँ।

यदि आप बोनस कार्य पूरा करते हैं, तो अपने कोड का आकार 0.75 गुणा करें

श्रेय

यह कार्य बड़ी संख्या में आवश्यकता के बिना वर्ष 2012 में devclub.eu की सभाओं में से एक में दिया गया था। इसलिए, प्रस्तुत अधिकांश उत्तर तुच्छ छोर थे।

मज़े करो!


मुझे वास्तव में चुनौती नहीं मिली। क्या हम इनपुट लेने वाले हैं और उस स्थिति में नंबर को आउटपुट करते हैं?
The_Basset_Hound


2
@vihan कुछ सार्वजनिक बोली लाइब्रेरी का उपयोग स्वीकार्य है। कोई दंड नहीं। बेशक पुस्तकालय में समाधान और एक-लाइनर में पुस्तकालय का उपयोग करना धोखा देने पर विचार कर रहा है। सामान्य ज्ञान यहां लागू होता है।
मेटिम

1
बस एक आश्चर्यजनक रूप से संक्षिप्त एफ # समाधान दिखाना चाहते थे , 44 बाइट्स में क्लॉकिंग। दी गई, यह केवल 2 ^ 31-1 तक के सूचकांकों को संभाल सकता है (और इसके मूल्य की गणना करने की कोशिश कर रहा है जैसा कि मैं यह लिखता हूं)। मैं इसे पोस्ट नहीं कर रहा हूं, क्योंकि यह वास्तव में नियमों को तोड़ता है, लेकिन मैं F # के लिए इसका बहुत अच्छा कहना चाहूंगा!
21

7
1.23456e123456मनमाने ढंग से इनपुट्स को संभालने की आवश्यकताएं ऐसी भाषाओं को दंडित करती हैं जो ऐसे मूल्यों को मूल रूप से संसाधित नहीं कर सकती हैं और उन्हें स्ट्रिंग प्रसंस्करण करने की आवश्यकता होती है जो चुनौती के लिए महत्वपूर्ण है।
xnor

जवाबों:


12

सीजेएम , 78 बाइट्स

r_A,s-" e . .e"S/\a#[SSS"'./~'e/~i1$,-'e\]s"0]=~~_i:Q\Q=Qg&/
s,:L{;QAL(:L#9L*(*)9/-_1<}g(L)md_)p\AL#+_ps=

कार्यक्रम 104 बाइट लंबा है और बोनस के लिए योग्य है।

न्यूलाइन पूरी तरह से कॉस्मेटिक है। पहली पंक्ति इनपुट को पार्स करती है, दूसरी आउटपुट उत्पन्न करती है।

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

विचार

किसी भी धनात्मक पूर्णांक k के लिए , वास्तव में k अंक के 9 × 10 k-1 धनात्मक पूर्णांक हैं (अग्रणी शून्य की गिनती नहीं)। इस प्रकार, यदि हम उन सभी को समेटते हैं, तो हम 9 × n × 10 k-1 का पूर्णांक प्राप्त करते हैं ।

अब, n या उससे कम अंकों के सभी पूर्णांक को जोड़ने से एक पूर्णांक प्राप्त होता है

सूत्र

अंक।

किसी दिए गए इनपुट q के लिए , हम उच्चतम n को निर्धारित करने का प्रयास करते हैं जैसे कि उपरोक्त अभिव्यक्ति q से छोटी है । हम n: = 10log 10 q⌉-1 सेट करते हैं , तब n: = ⌉log 10 q etc.-2 , आदि जब तक कि वांछित अभिव्यक्ति q से छोटी नहीं हो जाती, तब तक परिणामी अभिव्यक्ति को q (yielding r ) से घटाते हैं और अंतिम को बचाते हैं। एल में एन का मूल्य

r अब l + 1 अंक के सभी धनात्मक पूर्णांक के संघात में सूचकांक को निर्दिष्ट करता है , जिसका अर्थ है कि वांछित आउटपुट r% (l + 1) th अंक है r / (l + 1) वें पूर्णांक l + 1 का अंक।

कोड (इनपुट पार्सिंग)

r_          e# Read from STDIN and duplicate.
A,s-        e# Remove all digits.
" e . .e"S/ e# Push ["" "e" "." ".e"].
\a#         e# Compute the index of the non-digit part in this array.

[SSS"'./~'e/~i1$,-'e\]s"0]

            e# Each element corresponds to a form of input parsing:
            e#   0 (only digits): noop
            e#   1 (digits and one 'e'): noop
            e#   2 (digits and one '.'): noop
            e#   3 (digits, one '.' then one 'e'):
            e#     './~    Split at dots and dump the chunks on the stack.
            e#     'e/~    Split the and chunks at e's and dump.
            e#     i       Cast the last chunk (exponent) to integer.
            e#     1$      Copy the chunk between '.' and 'e' (fractional part).
            e#     ,-      Subtract its length from the exponent.
            e#     'e\     Place an 'e' between fractional part and exponent.
            e#     ]s      Collect everything in a string.
            e#   -1 (none of the above): push 0

~           e# For s string, this evaluates. For 0, it pushes -1.
~           e# For s string, this evaluates. For -1, it pushes 0.
            e# Causes a runtime exception for some sorts of invalid input.
_i:Q        e# Push a copy, cast to Long and save in Q.
\Q=         e# Check if Q is numerically equal to the original.
Qg          e# Compute the sign of Q.
&           e# Logical AND. Pushes 1 for valid input, 0 otherwise.
/           e# Divide by Q the resulting Boolean.
            e# Causes an arithmetic exception for invalid input.

कोड (उत्पादन पीढ़ी)

s,:L     e# Compute the number of digits of Q and save in L.
{        e# Do:
  ;      e#   Discard the integer on the stack.
  Q      e#   Push Q.
  AL(:L# e#   Push 10^(L=-1).
  9L*(   e#   Push 9L-1.
  *)     e#   Multiply and increment.
  9/     e#   Divide by 9.
  -      e#   Subtract from Q.
  _1<    e#   Check if the difference is non-positive.
}g       e# If so, repeat the loop.
(        e# Subtract 1 to account for 1-based indexing.
L)md     e# Push quotient and residue of the division by L+1.
_)p      e# Copy, increment (for 1-based indexing) and print.
\AL#+    e# Add 10^L to the quotient.
_p       e# Print a copy.
s        e# Convert to string.
2$=      e# Retrieve the character that corresponds to the residue.

5

सीजाम, 75 * 0.75 = 56.25

यह काफी तेज़ है, संख्या का प्रति अंकों में एक पुनरावृत्ति जिसमें वांछित स्थिति होती है। मुझे यकीन है कि यह बहुत अधिक गोल्फ हो सकता है, यह काफी कच्चा है जैसा कि यह है।

q~_i_@<{0/}&:V9{VT>}{T:U;_X*T+:T;A*X):X;}w;U-(_X(:X/\X%10X(#@+s_2$\=S+@)S+@

इनपुट के रूप में स्थिति दें, आउटपुट है:

<digit> <position> <full number>

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


@ डेनिस अब सभी इनपुट के साथ काम कर रहा है :)
एंड्रिया बियोनडो

इसके लिए अभी भी कोई त्रुटि नहीं है (जैसा कि होना चाहिए) 1.23e1। हालाँकि, यह त्रुटि है, 1.23456e123456क्योंकि इनपुट डबल का प्रतिनिधित्व नहीं कर सकता है। साथ ही, अंतिम परीक्षण के मामलों में 3 मिनट लगते हैं।
डेनिस

2
@ डेनिस अब त्रुटि उठाता है। बड़े परीक्षण के मामले के रूप में ... लानत है। मुझे पूरी बात फिर से लिखनी पड़ सकती है।
एंड्रिया बियोन्डो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.