প্রাকৃতিক সংখ্যার সারি


22

সংজ্ঞা

সংক্ষিপ্ত প্রাকৃতিক সংখ্যার অসীম সারি রয়েছে (ইতিবাচক পূর্ণসংখ্যা, 1 দিয়ে শুরু):

1234567891011121314151617181920212223...

চ্যালেঞ্জ

  • যে কোনও ভাষায় প্রোগ্রাম লিখুন, যা অবস্থান নম্বরটি একটি ইনপুট হিসাবে গ্রহণ করে এবং উপরের সংজ্ঞায়িত সারিতে সেই অবস্থান থেকে অঙ্ক আউটপুট করে।
  • পজিশন নম্বর হ'ল স্বেচ্ছাসেবী ইতিবাচক পূর্ণসংখ্যা। এটি প্রথম অবস্থান 1, আউটপুট অঙ্ক '1' প্রদান
  • ইনপুট হয় দশমিক (যেমন 13498573249827349823740000191), বা ই-নোটেশন (যেমন 1.2e789) ইতিবাচক পূর্ণসংখ্যার সাথে সম্পর্কিত।
  • প্রোগ্রামটি যুক্তিসঙ্গত সময়ে শেষ হতে হবে (আধুনিক পিসি / ম্যাকের 10 সেকেন্ড), একটি ইনপুট হিসাবে খুব বড় সূচক দেওয়া (যেমন 1e123456 - যা 123456 জিরো সহ 1)। সুতরাং, সাধারণ পুনরাবৃত্তি লুপ গ্রহণযোগ্য নয়।
  • কোনও অবৈধ ইনপুট দেওয়া থাকলে প্রোগ্রামটিকে 1 টিতে একটি ত্রুটি দিয়ে শেষ করতে হবে। যেমন। 1.23e (অবৈধ), বা 1.23e1 (সমান নয় 12.3 - সমান)
  • সংখ্যাগুলি পার্স / স্টোর করার জন্য সর্বজনীন বিগনুম লাইব্রেরিটি ব্যবহার করা ঠিক আছে এবং তাদের (+ - * / এক্সপ্রেস) গাণিতিক ক্রিয়াকলাপগুলি করার জন্য। কোনও বাইট-পেনাল্টি প্রয়োগ করা হয়নি।
  • সংক্ষিপ্ততম কোড জিতেছে।

টি এল; ডিআর

  • ইনপুট: বিগনাম পূর্ণসংখ্যা
  • আউটপুট: অসীম সারিতে সেই অবস্থানে অঙ্ক 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 এর পজিশনে' 50406238373846151610559 6 714 '
  • 1e1000000: 0 61111 1000006111141666819445...933335777790000
    • 999995-অঙ্কের দীর্ঘ সংখ্যার 61111 পজিশনে ডিজিট '0' আমি এখানে অন্তর্ভুক্ত করব না।

আপনি যদি বোনাস টাস্কটি পূরণ করেন তবে আপনার কোডের আকার ০.75৫ দ্বারা গুণ করুন

ধার

এই কাজটি বিশাল সংখ্যক প্রয়োজন ছাড়াই ২০১২ সালে devclub.eu এর একটি সমাবেশে দেওয়া হয়েছিল। সুতরাং, বেশিরভাগ জমা দেওয়া উত্তরগুলি ছিল তুচ্ছ লুপগুলি।

আনন্দ কর!


চ্যালেঞ্জ কী তা আমি সত্যিই পাই না। আমাদের কি সেই অবস্থানটিতে নম্বরটি আউটপুট এবং আউটপুট দেওয়ার কথা আছে?
The_Basset_Hound


2
@ভিহান কিছু পাবলিক বিগনাম লাইব্রেরি ব্যবহারযোগ্য। কোন জরিমানা নেই। অবশ্যই লাইব্রেরিতে সমাধান সহ এবং লাইব্রেরিটি ওয়ান-লাইনারে ব্যবহার করে প্রতারণার বিষয়টি বিবেচনা করা হচ্ছে। সাধারণ জ্ঞান এখানে প্রযোজ্য।
metalim

1
কেবল 44 টি বাইটে ক্লক করে একটি আশ্চর্যজনকভাবে সংক্ষিপ্ত এফ # সমাধান প্রদর্শন করতে চেয়েছিলেন । মঞ্জুর, এটি কেবল 2 ^ 31-1 অবধি সূচকগুলি পরিচালনা করতে পারে (এবং এটি লেখার সাথে সাথে এটি মানটি গণনা করার চেষ্টা করছে)। যদিও আমি এটি পোস্ট করছি না কারণ এটি প্রকৃতপক্ষে নিয়মগুলি ভঙ্গ করে, তবে আমি এফ # এর পক্ষে এটি বেশ ভাল বলব!
জোস্টি

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 বাইট দীর্ঘ এবং বোনাসের জন্য যোগ্যতা অর্জন করে।

নতুন লাইনটি নিখুঁতভাবে প্রসাধনী। প্রথম লাইন ইনপুট পার্স করে, দ্বিতীয় আউটপুট উত্পন্ন করে।

এটি অনলাইন চেষ্টা করুন!

ধারণা

যেকোন ধনাত্মক পূর্ণসংখ্যার কে এর জন্য 9 × 10 কে-1 ধনাত্মক কে অঙ্কের ধনাত্মক পূর্ণসংখ্যার (শীর্ষস্থানীয় শূন্যগুলি গণনা করা হয় না) থাকে। সুতরাং, আমরা যদি তাদের সকলের সাথে একত্রীকরণ করি তবে আমরা 9 × n × 10 কে -1 এর পূর্ণসংখ্যা পাই ।

এখন, n বা কম সংখ্যার সমস্ত পূর্ণসংখ্যার সংখ্যার পূর্ণসংখ্যা পাওয়া যায়

সূত্র

ডিজিটের।

প্রদত্ত ইনপুট q এর জন্য , আমরা সর্বোচ্চ এনটি নির্ধারণ করার চেষ্টা করি যে উপরের এক্সপ্রেশনটি Q এর চেয়ে ছোট । আমরা n: = ⌈log 10 q⌉-1 , তারপরে n: = ⌈log 10 q⌉-2 , ইত্যাদি সেট করি যতক্ষণ না কাঙ্ক্ষিত এক্সপ্রেশনটি q এর চেয়ে ছোট হয়ে না যায় , ফলাফলটি প্রকাশনা q (উত্পাদক আর ) থেকে বিয়োগ করুন এবং শেষটি সংরক্ষণ করুন মান এন মধ্যে

R এখন সব ইতিবাচক পূর্ণসংখ্যার সংযুক্তকরণের সূচক নির্দিষ্ট করে ঠ + 1 টি ডিজিট, যার মানে হল যে আকাঙ্ক্ষিত আউটপুট (ঠ + 1 টি) দ% এর অঙ্ক R / (ঠ + 1 টি) এর পূর্ণসংখ্যা ঠ + 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
@ ডেনিস নাও ত্রুটি উত্থাপন করে। বড় পরীক্ষার ক্ষেত্রে ... জঘন্য। আমি পুরো জিনিস আবার লিখতে হতে পারে।
Andrea Biondo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.