একটি পূর্ণসংখ্যার নবম সংখ্যা আউটপুট করুন


13

স্ট্রিং ব্যবহার না করে (প্রয়োজনে বাদে যেমন ইনপুট বা আউটপুট সহ) বাম দিক থেকে , পূর্ণসংখ্যার (বেস 10 তে) নবম সংখ্যা গণনা করুন ।

ইনপুট এই বিন্যাসে দেওয়া হবে:

726433 5

আউটপুট হওয়া উচিত:

3

এটি "726433" এর পঞ্চম সংখ্যা।

ইনপুটটিতে শীর্ষস্থানীয় জিরো থাকবে না , যেমন "00223"।

পরীক্ষার মামলা / আরও উদাহরণ:

9 1  ->  9
0 1  ->  0
444494 5  ->  9
800 2  ->  0

এটি কোড গল্ফ; স্বল্প পরিমাণে অক্ষর জিততে পারে তবে "এনথডিজিট (এক্স, এন)" এর মতো ফাংশনগুলিতে নির্মিত কোনও গ্রহণযোগ্য নয়

আপনাকে শুরু করার জন্য এখানে কয়েকটি সিউডো কোড রয়েছে:

x = number
n = index of the digit
digits = floor[log10[x]] + 1
dropRight = floor[x / 10^(digits - n)]
dropLeft = (dropRight / 10 - floor[dropRight / 10]) * 10
nthDigit = dropLeft

আপনি দেখতে পাচ্ছেন যে আমি কোড গল্ফে নতুন, এবং যদিও আমি মনে করি যে এটির কিছুটা অন্যায় যে আমি একটি প্রশ্নের উত্তর দেওয়ার আগেই একটি প্রশ্ন জিজ্ঞাসা করি, তবে আমি এটি দেখতে চাই যে এটি কী ধরণের প্রতিক্রিয়া উত্পন্ন করে। :)

সম্পাদনা : আমি গাণিতিক উত্তরগুলির জন্য প্রত্যাশী ছিলাম, সুতরাং আমি সত্যিকার অর্থে এমন উত্তরগুলি গ্রহণ করতে পারি না যা স্ট্রিংগুলিকে অ্যারেগুলিতে রূপান্তর করতে বা অঙ্কের তালিকা হিসাবে সংখ্যাগুলিতে অ্যাক্সেস করতে সক্ষম হয়।

আমরা একটি বিজয়ী আছে

"ডিসি", 12 বাইটে লেখা ডিজিটালট্রামা দ্বারা ।


এটি কি কেবল একটি ফাংশন হতে পারে বা আই / ও পরিচালনা করতে হবে? যদি I / O পরিচালনা করার প্রয়োজন না হয় তবে এটি কেবল কোনও ফাংশনের পরিবর্তে ল্যাম্বডা হতে পারে?
slebetman

আপনার সম্পাদনাটি আপনাকে কী পছন্দ করে না তা পরিষ্কার করে দেয়। বিশেষত, "অঙ্কের তালিকা হিসাবে সংখ্যাগুলি অ্যাক্সেস করতে সক্ষম হওয়া" দিয়ে, এটি আপনার পছন্দ মতো কোনও রূপে অ্যারে ব্যবহার করা বা কেবল বিল্ট-ইন বেস রূপান্তর রুটিনের অস্তিত্ব?
পিটার টেলর

@ পিটারটেলর অ্যারির অঙ্কগুলি ঠিক নেই, কারণ সহজেই অ্যারেতে নবম আইটেমটি ধরে নেওয়া যায়। বেস-রূপান্তরটি ঠিক কীভাবে কাজ করে তা আমি নিশ্চিত নই, তবে এটি সহজ বলে মনে হচ্ছে।
kukac67

অঙ্কের তালিকা তৈরি করতে কেন সমস্যা হচ্ছে? এটি অত্যন্ত গাণিতিক - এটি বহুবর্ষ হিসাবে সংখ্যাটি উপস্থাপন করে।
2rs2ts

@ 2rs2ts আপনি যদি গাণিতিকভাবে অঙ্কগুলির একটি তালিকা তৈরি করতে পারেন, অর্থাত্ কোনও অ্যারেতে কোনও স্ট্রিংকে পার্স না করেই গ্রহণযোগ্য হতে পারে।
kukac67

উত্তর:


2

ডিসি , 12 বাইট

?dZ?-Ar^/A%p

এটি একটি গাণিতিক উত্তর। এখানে কিভাবে এটা কাজ করে:

  • ? ইনপুট নম্বর পড়ুন এবং স্ট্যাকের দিকে ধাক্কা
  • d স্ট্যাকের সদৃশ শীর্ষ
  • Z পোপগুলি স্ট্যাকের মূল্য দেয়, অঙ্কের সংখ্যা গণনা করে এবং ধাক্কা দেয়
  • ? অঙ্ক সূচকটি পড়ুন এবং স্ট্যাকের দিকে ধাক্কা
  • - অঙ্ক গণনা থেকে অঙ্ক সূচক বিয়োগ করুন
  • A স্ট্যাকের জন্য 10 টিপুন
  • r স্ট্যাকের শীর্ষ 2 মানগুলি অদলবদল করুন
  • ^ 10 ^ বিস্ফোরিত (অঙ্ক গণনা - অঙ্ক সূচক)
  • / ক্ষতিকারক ফলাফল দ্বারা বিভাজক সংখ্যা
  • A স্ট্যাকের জন্য 10 টিপুন
  • % শেষ সংখ্যাটি পেতে 10 নম্বর মোড গণনা করুন এবং স্ট্যাকের শীর্ষে টানুন
  • p প্যাক এবং স্ট্যাক শীর্ষ মুদ্রণ

কর্মে:

$ {প্রতিধ্বনি 987654321; প্রতিধ্বনি 1; } | ডিসি এনডিজিট.ডিসি
9
$ {প্রতিধ্বনি 987654321; প্রতিধ্বনি 2; } | ডিসি এনডিজিট.ডিসি
8
$ {প্রতিধ্বনি 987654321; প্রতিধ্বনি 8; } | ডিসি এনডিজিট.ডিসি
2
$ {প্রতিধ্বনি 987654321; প্রতিধ্বনি 9; } | ডিসি এনডিজিট.ডিসি
1
$ 

1
আমি মনে করি আপনি বিজয়ী। এটি তৃতীয় সংক্ষিপ্ততম কোড, তবে সংক্ষিপ্ত 2 ব্যবহৃত base conversion -> arrays
kukac67

5

গল্ফস্ক্রিপ্ট (10 বাইট)

~(\10base=

এটি ধরে নেয় ইনপুটটি একটি স্ট্রিং হিসাবে (যেমন স্টিডিনের মাধ্যমে)। যদি এটি স্ট্যাকের হিসাবে দুটি পূর্ণসংখ্যার হয় তবে প্রাথমিকটি ~1 টি সংরক্ষণ করে সরিয়ে নেওয়া উচিত।

যদি বেস রূপান্তরটি অন্তর্নির্মিত ফাংশন নিয়মকে মূর্খ বলে মনে করা হয় তবে আমার কাছে একটি 16-চর বিকল্প রয়েছে:

~~)\{}{10/}/=10%

বেস রূপান্তর সহ আপনার প্রথম প্রোগ্রামটি প্রথম সংখ্যার আউটপুট দেয় কেবলমাত্র আপনি যদি "0" লিখেন এবং দ্বিতীয়টি আপনি "1" লিখেন তবে। golfscript.apphb.com/?c=MjcwNiAxCgpcMTBiYXNlPQ%3D%3D
kukac67

@ kukac67, স্থির।
পিটার টেলর

4

সিজোম - 7

l~(\Ab=

সিজেএম হ'ল আমি যে নতুন ভাষা বিকাশ করছি তা গল্ফস্ক্রিপ্টের অনুরূপ - http://sf.net/p/cjam । এখানে ব্যাখ্যা:

lসার্চ ইনপুট থেকে একটি লাইন
~মূল্যায়ণ স্ট্রিং (সুতরাং দুটি সংখ্যার পেয়ে)
(দ্বিতীয় সংখ্যা decrements
\অদলবদল সংখ্যার
Aএকটি পরিবর্তনশীল থেকে 10 preinitialized হয়
bএকটি বেস রূপান্তর করে, 10-ভিত্তিক প্রথম সংখ্যা সংখ্যায় একটি অ্যারের উপার্জন
=আকাঙ্ক্ষিত পরার অ্যারের উপাদান

প্রোগ্রামটি মূলত পিটার টেলরের সমাধানের অনুবাদ।


আমি যুক্তি দিয়েছি যে বেসকে 10 টি অঙ্কগুলি অ্যারেতে রাখাই গাণিতিকের চেয়ে স্ট্রিং অপারেশন of
ডিজিটাল ট্রমা

4

হাস্কেল 60 বাইট এবং পঠনযোগ্য

nth x n
        | x < (10^n) = mod x 10
        | True = nth (div x 10) n

কোন স্ট্রিং জড়িত!

*Main> nth 1234567 4
4


বাহ আপনি প্রতিটি বাইট জন্য যুদ্ধ। 1 <2 "পরিবর্তে" সত্যিকারের "- চতুর।
মার্টিন Drautzburg


3

জে - 15 24 চর

যথেষ্ট পরিমাণে "গাণিতিক উত্তর"।

(10|[<.@*10^]-10>.@^.[)/

নীচের মতো একই ফলাফল, তবে গাণিতিক হওয়ার রহস্যগত মানের সাথে সমাদৃত।


সংক্ষিপ্ত সংস্করণ, বেস -10 সম্প্রসারণ ব্যবহার করে।

({0,10&#.inv)~/

আমরা 1-ভিত্তিক সূচকগুলির জন্য সামঞ্জস্য করতে 0 প্রিপেন্ড করি।

ব্যবহার:

   ({0,10&#.inv)~/ 1234567 3
3
   ({0,10&#.inv)~/ 444494 5
9

2
স্ট্রিংগুলির অনুমতি নেই।
0xcaff

2

পাইথন 127

def f(i,n):
 b=10;j=i/b;k=1;d=i-j*b
 while j>0:
  k+=1;j/=b
 if n>k:
  return -1
 while k>n:
  k-=1;j/=b;i/=b;d=i-j*b
 return d

আপনার এটিকে কোনও fn হিসাবে সংজ্ঞায়িত করার দরকার নেই:def f(i,n): ... return d
স্মি

আপনার কেসটি স্যানিটি-চেক করার দরকার নেই if n>k: return -1
স্মি

... এবং অবশ্যই এটির সাথে n- এর তুলনা করার জন্য আপনাকে কে (আইতে অঙ্কের সংখ্যা) গণনা করতে অবশ্যই প্রথম পাস করার দরকার নেই।
smci

2

সি, 50

এটি অ্যারে ব্যবহার করে।

main(int c,char**a){putchar(a[1][atoi(a[2])-1]);}

শুধু সমস্ত সতর্কতা উপেক্ষা করুন।

এবং হ্যাঁ, সি তে, স্ট্রিংগুলি কেবলমাত্র অ্যারে হয়, সুতরাং এটি সস্তা sort


আরও গাণিতিক:

সি, 83

main(int c,char**a){printf("%d",(atoi(a[1])/pow(10,strlen(a[1])-atoi(a[2])))%10);}

এটি স্ট্রিং / অ্যারে ফাংশন ব্যবহার করছে না?
ভিএক্স

প্রথমটি এটির মতো করে;) দ্বিতীয়টি স্পষ্টতই স্ট্রেনকে বাদ দেয় না, যা আমি কেবল বেছে নিয়েছিলাম কারণ এটি লগ ব্যবহারের চেয়ে কম। যদি সমস্যা হয় তবে এটি একটি সহজ সমাধান, আমি ঘরে পৌঁছে এটিকে যুক্ত করতে পারি।
এসবিআই

আমরা সেখানে যাই, খাঁটি গাণিতিক সংস্করণ যুক্ত করেছি।
এসবিআই

2
গণিত - একবারও নয়!
পটজব্লিটজ

2

বিসি (বাশ দ্বারা চালিত), 41 29

আমি মনে করি এটি গাণিতিকভাবে করার জন্য প্রথম উত্তর যা স্ট্রিং দিয়ে নয়:

bc<<<"$1/A^(length($1)-$2)%A"

length()সম্ভবত ব্যবহারটি কিছুটা দৃy় বলে মনে হচ্ছে, তবে বিসি ম্যান পৃষ্ঠাটি অঙ্কের সংখ্যা এবং স্ট্রিংয়ের দৈর্ঘ্যের বিষয়ে নয় talks

  length ( expression )
          The value of the length function is the  number  of  significant
          digits in the expression.

আউটপুট:

/ ./ndigits.bc.sh 726433 5
3
/ ./ndigits.bc.sh 9 1
9
/ ./ndigits.bc.sh 0 1
0
/ ./ndigits.bc.sh 444494 5
9
/ ./ndigits.bc.sh 800 2
0
$ 

1
@ kukac67 আমি গ্রহণযোগ্যতা ভোটের প্রশংসা করি! তবে আমি মনে করি কোড-গল্ফ প্রশ্নগুলির আরও উত্তর উত্সাহ দেওয়ার জন্য ২ ঘন্টারও বেশি সময় খোলা রাখা প্রথাগত। সম্ভবত এক সপ্তাহ বা তাই। আপনি এই উত্তরটি স্বীকার না করলে আমি বিরক্ত হব না :)
ডিজিটাল ট্রমা

1
ঠিক আছে. আমি তখন ডি-গ্রহণ করব। আশা করি আপনি জিতবেন না! : পি
kukac67

1

গণিত - 24 23

এই এক ধরনের স্পষ্ট :)

IntegerDigits[#][[#2]]&

উদাহরণ:

IntegerDigits[#][[#2]]& [726433, 5]

আউটপুট:

3

আপনি দুটি পূর্ণসংখ্যার হার্ড-কোডিংয়ের মাধ্যমে এটি খাটো করে নিতে পারেন eg

IntegerDigits[n][[m]]

কিন্তু তারপর আপনাকে প্রথমে লিখতে হবে n = 726433; m = 5;। ফাংশন কলটি একটি প্রোগ্রামের সাথে আরও অনুরূপ অনুভূত হয়েছিল।


1
আপনি নাম্বার ছেড়ে দিতে পারেন 1
ডেভিডসি

এখন এটি প্রতারণা করছে ..: ডি
কুকাক 67

1

সি 145

প্রোগ্রামটি পূর্ণসংখ্যার শেষে থেকে দূরত্ব সন্ধান করে এবং সূচক না পাওয়া পর্যন্ত বিভাজক হয় তারপরে শেষ সংখ্যাটি পেতে মডুলাস 10 ব্যবহার করে।

int main()
{
int i,a,b,d,n;
scanf("%d %d",&i,&a);
d=(int)(log(i)/log(10))+1;
n=d-a;
while(n--){i=(int)(i/10);}
b=i%10;
printf("%d",b);
}

এটি উল্লেখযোগ্যভাবে গল্ফ করা যেতে পারে। এই টিপস দিয়ে শুরু করুন
ডিজিটাল ট্রমা

শুরু করার জন্য, (অন্তর্নিহিত) কাস্টস এবং সম্পর্কিত প্যারেনগুলি অপ্রয়োজনীয়
ডিজিটাল ট্রমা

1
আমি প্রতিহত করতে পারি না। আমি এটা 87 অক্ষর নিচে golfed: i,a;main(){scanf("%d%d",&i,&a);for(a=log(i)/log(10)+1-a;a--;)i/=10;printf("%d",i%10);}
ডিজিটাল ট্রমা

1

ওল্ফ্রাম আলফা - 40 থেকে 43 এর মধ্যে

অবশ্যই, আমি সম্পূর্ণরূপে রক্ষা করতে পারি যে ব্যবহার IntegerDigitsকরা এমন কৌশল যা এর মধ্যে পড়ে না

"এনথডিজিট (এক্স, এন)" এর মতো কোনও কার্যক্রমে অন্তর্নির্মিত

তবে আমার আগের উত্তরটি এখনও কিছুটা প্রতারণার মতো অনুভূত হওয়ায় এখানে একটি বিকল্প রয়েছে। দুর্ভাগ্যক্রমে এটি বেশ খানিকটা দীর্ঘ, তবে আমি কীভাবে তার চেয়ে আর ছোট করব তা দেখিনি।

আগের মতোই গণনা করা (কোনও যুক্তি ছাড়াই অ্যাম্পারস্যান্ড সহ),

Mod[Trunc[#/10^(Trunc[Log10[#]]-#2+1)],10]&

43 টি অক্ষর আছে। ঘাতকটিকে উপেক্ষা করে এবং চারপাশে শর্তগুলি বদলে, আমি একটি পাটিগণিত অপারেটর হারাতে পারি (10^(...)x গুণ হিসাবে ব্যাখ্যা করা হবে)

Mod[Trunc[10^(#2-Trunc[Log10[#]]-1)#],10]&

আমার কাছে পরীক্ষা করার মতো ম্যাথামেটিকা ​​নেই, আমি সন্দেহ করি যে এটি আমার সন্দেহ অনুসারে হবে (এবং যেমন ছিল দয়াবান ছিল) কুকাক 67 দ্বারা যথাযথভাবে যাচাই করা হয়েছিল ) এটি গ্রহণযোগ্য নয় তবে এটি ওল্ফ্রামআল্ফায় চলে

আমি ব্যবহার সম্পর্কে সন্দেহের মধ্যে রয়েছি RealDigits, কারণ আমি IntegerDigitsএই উত্তরটির জন্য নিজেকে ব্যবহার করা থেকে বিরত রেখেছি এবং সেগুলি বেশ অনুরূপ। তবে, আমি যদি নিজেকে এটি অন্তর্ভুক্ত করার অনুমতি দিই (সর্বোপরি, এটি সরাসরি পূর্ণসংখ্যার সাথে ফিরে আসে না, কেবল তাদের মধ্যে কতগুলি রয়েছে), আমি আরও দুটি অক্ষর স্ল্যাশ করতে পারি:

Mod[Trunc[10^(#2-RealDigits[#]-1)#],10]&

আমি ম্যাথামেটিকায় চেষ্টা করেছি, এটির কোনও মান হয় না। 43 টি চরিত্রটি এটিকে আউটপুট করে:Mod[Trunc[57 2^(3 - Trunc[Log[456]/Log[10]])5^Trunc[Log[456]/Log[10]]], 10]
কুকাক 67

হ্যাঁ, আমি অনেকটা বুঝতে পেরেছি। উলফ্রাম আলফা ইনপুট ব্যাখ্যা করার ক্ষেত্রে কিছুটা বেশি হালকা n ভাগ্যক্রমে আমি এটিকে সঠিক শিরোনাম দিয়েছি;)
CompuChip

তবে আমি দেখতে পাচ্ছি এটি ওল্ফ্রামআল্ফায় কাজ করে।
kukac67

{সম্পাদনা} যদিও আমি লিঙ্কটি ভাঙ্গা দেখছি ... দৃশ্যত [অক্ষরগুলি এনকোড করার পরেও পছন্দ করে না । আমি এটি একটি ইউআরএল সংক্ষিপ্তকরণের মাধ্যমে টানবো। {edit2} স্পষ্টতই W.Alpha এর একটি রয়েছে - লিঙ্কটি পরিবর্তন হয়েছে changed
CompuChip

1

টিসিএল (42 বাইট, ল্যাম্বদা):

{{x y} {expr $x/10**int(log10($x)+1-$y)%10}}

(49 বাইট, ফাংশন):

proc f {x y} {expr $x/10**int(log10($x)+1-$y)%10}

(৮৩ বাইট, যদি আমাদের শেল থেকে ইনপুট গ্রহণ করতে হয়):

puts [expr [lindex $argv 0]/10**int(log10([lindex $argv 0])+1-[lindex $argv 1])%10]

কিভাবে কাজ করে?
kukac67

যোগ করা হয়েছে ব্যাখ্যা। এটি গাণিতিকভাবে করা সর্বাধিক সুস্পষ্ট উপায়। আপনি কাগজে এটি কীভাবে করবেন।
slebetman

আমি মনে করি আপনি ভুল প্রান্ত থেকে গণনা করছেন।
পিটার টেলর

হুম .. হ্যাঁ। দেখতে এটার মত. আমি এটিকে সংশোধন করে বাম আকারে গণনা করব।
slebetman

আমি 31 বাইট গ্রহণ করব। যদিও ল্যাম্বদা চালানো যায়? টিসিএল এর কোন দোভাষী আছে যা এটি ব্যবহার করতে পারে? বা শুধুমাত্র একটি প্রোগ্রামের অংশ হিসাবে যা যুক্তিগুলি সংজ্ঞায়িত করে?
kukac67

1

আর (60)

অঙ্কের সংখ্যা গণনা করতে লগ 10 ব্যবহার করে সমস্যার সমাধান করুন। বিশেষ কেস x == 0 এর জন্য 13 টি অক্ষর, দীর্ঘশ্বাস।

f=function(x,n)if(x)x%/%10^(trunc(log10(x))-n+1)%%10 else 0

Ungolfed:

f=function(x,n)
  if(x) 
    x %/% 10^(trunc(log10(x)) - n + 1) %% 10
  else
    0

ব্যবহার

> f(898,2)
[1] 9

1

স্কালা ( 133 99 বাইট):

সমস্ত ইতিবাচক ইনপুট জন্য কাজ করে। দশকের পাওয়ারে 10 দ্বারা ভাগ করে ডান থেকে সন্ধান করা হয়, তারপরে এটি 10 ​​মডিউল নেয়।

ডিফ কে (আই: অ্যারে [স্ট্রিং]) = {ভল মি = আই (০)
(ড * Math.pow (10, আমি (1) .toInt-1-Math.log10 (ড) toInt))। ToInt% থেকে 10}

পূর্ববর্তী সূত্রটিতে বাগটি লক্ষ্য করার জন্য আপনাকে ধন্যবাদ। এটি একটি খাটো।


আমি এটা পছন্দ করি! :) উপরে ভোট হয়েছে
kukac67

সমাধানটির পরীক্ষা করেছেন: কে (অ্যারে ("1234", "7")) যা 9. দেয় it এটি কি এন> # ডিজিট (এক্স) এর জন্য কাজ করে না?
ল্যামব্রস্কো এসিডো

এটি কারণ 10 10 -1 এই স্বরলিপিটিতে সঠিক নয়, সুতরাং আপনি যখন 10% পাও (10, -1) নেন তখন একটি রাউন্ডিং ত্রুটি থাকে যা শূন্য দেওয়া উচিত ছিল তবে পরিবর্তে 0.0999 দিয়েছিল। এই উত্তর পার্শ্ব প্রতিক্রিয়া সামঞ্জস্য করার জন্য আমার উত্তর সংশোধন করেছেন।
মিকাউল মায়ার

1

হাস্কেল, 142

আমি নিশ্চিত না যে আমি প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি, তবে এটিই আমার মনে হয় আপনি চেয়েছিলেন: স্ট্ডিন (স্ট্রিং) পড়ুন, দুটি সংখ্যাটি (স্ট্রিং নয়) তৈরি করুন, কিছু অ্যালগরিদমিক জিনিস করুন এবং তারপরে ফলাফলটি (স্ট্রিং) আউটপুট করুন। আমি এটিকে 142 টি অক্ষরে ছড়িয়ে দিয়েছি, যা অনেক বেশি:

import System.Environment
a%b|a>9=div a 10%(b+1)|1<2=b
x#n=x`div`10^(x%1-n)`mod`10
u[a,b]=read a#read b
main=fmap(u.words)getContents>>=print

উদাহরণস্বরূপ ব্যবহার:

> echo 96594 4 | getIndex
9

1

জাভাস্ক্রিপ্ট - 84

p=prompt,x=+p(),m=Math;r=~~(x/m.pow(10,~~(m.log(x)/m.LN10)+1-+p()));p(r-~~(r/10)*10)

খাঁটি গাণিতিক, কোনও স্ট্রিং নেই, তাদের কোনওটিই নয়। প্রথম প্রম্পটে প্রথম সংখ্যা এবং দ্বিতীয় প্রম্পটে দ্বিতীয় নম্বর নেয়।

পরীক্ষার কেস :

Input: 97654 5
Output: 4

Input: 224658 3
Output: 4

অবহেলিত কোড:

p = prompt,
x = +p(), // or parseInt(prompt())
m = Math;

r = m.floor( x / m.pow(10, m.floor(m.log(x) / m.LN10) + 1 - +p()) )
//                                               ^-- log(10) ^-- this is `n`

p(r - ~~(r / 10) * 10) // show output

1

perl, 38, 36   না 30 অক্ষর

(লাইনফিড গণনা করা হয় না)

কমান্ড সুইচের কারণে এটি যুক্তিযুক্তভাবে প্রতারণা করছে, তবে আমাকে খেলতে দেওয়ার জন্য ধন্যবাদ :-)

~/$ cat ndigits.pl
say((split//,$ARGV[0])[$ARGV[1]-1]);
~/$ tr -cd "[:print:]" < ndigits.pl |wc -m 
36
~/$ perl -M5.010 ndigits.pl 726433 5 
3

সম্পাদন করা :

2 টি অক্ষর মুছে ফেলতে সক্ষম হয়েছিল:

 say for(split//,$ARGV[0])[$ARGV[1]-1];
 say((split//,$ARGV[0])[$ARGV[1]-1]);

... তারপর আরও 6:

 say((split//,shift)[pop()-1]);

কিভাবে

আমরা প্রথম আর্গুমেন্টের ইনপুটটি $ARGV[0]অক্ষর দ্বারা স্ক্রিপ্টে বিভক্ত করি ( split//) একটি শূন্য সূচকযুক্ত অ্যারে তৈরি করে; $ARGV[1]স্ক্রিপ্টে দ্বিতীয় যুক্তিতে একটি যুক্ত করা তারপরে স্ট্রিং বা প্রথম যুক্তিতে সেই অবস্থানের উপাদানটির সাথে মিল রাখে। এরপরে আমরা ()একটি উপাদান তালিকার ভিতরে sayভাবটি ধরে রাখি যা দিয়ে পুনরাবৃত্তি হবে। সংক্ষিপ্ত সংক্ষিপ্ত সংস্করণের জন্য আমরা shiftপ্রথম আর্গুমেন্টে এবং @ARGV এর অবশিষ্ট অংশটি সূচকের জন্য ব্যবহার করতে পারি - একবার shiftসম্পাদনা করলেই কেবল দ্বিতীয় যুক্তিটি থাকে তাই আমরা pop()এটি করি এবং 1 টি বিয়োগ করি।

এটি গণিত অনুশীলন বলে মনে হচ্ছে? আমি ঠিক বুঝতে পেরেছি ইনপুট থেকে পড়া একটি স্ট্রিংকে সূচি দিচ্ছি, তাই ... আমার মনে হয় আমি হেরে গেছি ?? যদি আমি সমান্তরাল গল্ফ কোর্সে উপলব্ধি করি এবং আমাকে আবার চেষ্টা করব - আরও গাণিতিকভাবে - একটি পৃথক উত্তরে।

চিয়ার্স,


হ্যাঁ, দুঃখিত, স্ট্রিং ব্যবহার না করে । যাইহোক পিপিসিজিতে আপনাকে স্বাগতম!
ডিজিটাল ট্রমা

ঠিক আছে দুঃখিত 'তবে এ পর্যন্ত ... আমার গাণিতিক পদ্ধতির খুব গল্ফ যোগ্য নয় :-)
জি সিটো

0

পিএইচপি, 58

শুধুমাত্র গণিত ব্যবহার করা হচ্ছে

<?$n=$argv[1];while($n>pow(10,$argv[2]))$n/=10;echo $n%10;


1
এটি কি ডান থেকে খুঁজে পাওয়া যায় না?
সিজেফুরে

2
আপনি 1 টি এ পরিবর্তন করে সংরক্ষণ করতে পারেন echo$n%10
অমল মুরালি

@ ট্রিমস্টি না, প্রবেশ করা সংখ্যাটি 10 ​​^ x এর চেয়ে বেশি বড় না হওয়া অবধি এটি লুপ হয়ে যায়, x অঙ্ক সংখ্যা হ'ল সুতরাং, উদাহরণস্বরূপ, আপনি যদি একটি সংখ্যা হিসাবে 3457 এবং একটি অঙ্ক হিসাবে 2 লিখেন তবে এটি সংখ্যাটি 100 (10 ^ 2) এর চেয়ে ছোট হওয়া অবধি শেষ সংখ্যাটি সরিয়ে ফেলবে। এর অর্থ এটি 5 এবং 7 কেড়ে নেবে, কারণ 34 টি অবশিষ্ট রয়েছে এবং এটি 100 এর চেয়ে বড় নয় Then তারপরে এটি শেষ সংখ্যাটি (4) আউটপুট করে।
dkasipovic

তবে এটি সত্য যে দ্বিতীয় সংখ্যাটি যদি সংখ্যার সংখ্যার চেয়ে বড় হয় তবে আপনি 9 এবং শূন্য নয় আউটপুট দেন
মিকাউল মায়ার

আমি দেখছি, সংখ্যাটির সংখ্যার চেয়ে বড় হলে সংখ্যাটি শেষ সংখ্যাটি আউটপুট করে। আপনি যদি 1234 এবং 5 তম সংখ্যাটি প্রবেশ করেন তবে আপনি 1234 সাল থেকে 4 পেয়ে যাবেন আমি ইতিমধ্যে 10 ^ 5 এর চেয়ে কম।
dkasipovic

0

~ - ~! - 94 93

কিছুটা নিয়ম বেঁকে যায় - এটি এমন একটি ফাংশন যা এনকে ইনপুট হিসাবে গ্রহণ করে এবং এই সংখ্যাটি এন এর মধ্যে সঞ্চিত আছে '''''- এবং ~ - ~ সন্ধান করে! ভাসমান সমর্থন করে না।

'=~~~~~,~~:''=|*==~[']<''&*-~>,'|:'''=|*==%[%]~+*/~~~~/~~|:''''=|'''''/''&<<'''&'''''>-*-~>|:

'''''=~~~~,~~,~~,~~,~~,~~:''''''=''''&~:(2) ('' '' '' = 128) ''''''হওয়ার ফলস্বরূপ ~~


এইচএম ... তবুও অন্য এক রহস্যময় ভাষা?
ভিজিওএন

@ ভিসিওএন এটি সত্যই রহস্যজনক নয়, কেবলমাত্র একমাত্র নেটিভ ডেটা টাইপ একটি সংখ্যা এবং এটি ওএস / ইন্টারনেটের সাথে যোগাযোগ করতে পারে না। esolangs.org/wiki/No_Comment
cjfaure

1
ভাল, আমার কাছে প্রতিটি সিনট্যাক্স যা সহজেই কোনও মানুষ সহজেই পড়তে পারে না তা হ'ল রহস্যজনক। এবং হ্যাঁ, :)
পার্লও

@ ভিসিওএন কিছুক্ষণ পরে পড়া সহজ হয়ে যায়। : পি
সিজেফুরে

0

পাইথন ২.7 (89 বাইট)

আমি সংখ্যার একটি তালিকা ব্যবহার করে পূর্ণসংখ্যাকে একটি "বহুবর্ষ" রূপান্তর করি। আমি জানি আপনি বলেছিলেন যে আপনি তা গ্রহণ করতে পারবেন না, তবে আমি কেন দেখছি না কারণ এটি সংখ্যার গাণিতিক ধারণাটি তাদের ঘাঁটির বহিরাগত হিসাবে প্রতিনিধিত্ব করছে। এটি কেবলমাত্র ব্যর্থ হবে যখন পূর্ণসংখ্যাটি পাস হবে 0তবে আপনি কোনও প্যাডেড জিরো বলেছেন না;)

import sys;v=sys.argv;p,x,n=[],int(v[1]),int(v[2])
while x:p=[x%10]+p;x//=10
print p[n-1]

হিসাবে চালান test.py:

$ python test.py 726489 5
8

আমি ধরে নিই যে আপনি শেল ইনপুট চেয়েছিলেন এবং ইনপুটটি স্ট্রিং হয়ে যাবে এই সত্যটি আমি ব্যবহার করতে পারিনি। শেল ইনপুটটি এড়িয়ে যাচ্ছেন এটির সাথে কেবলমাত্র 43 বাইট:

p=[]
while x:p=[x%10]+p;x//=10
print p[n-1]

যদিও আমি কিছু অপ্রয়োজনীয় পুনরাবৃত্তি ব্যবহার করি, তবুও আমি অতিরিক্ত বর্ধন যোগ না করে কিছু বাইট সংরক্ষণ করি n


0

বর্ধিত ব্রেনফাক : 49

+[>>,32-]<<-[<<-],49-[->>>[>>]+[<<]<]>>>[>>]<33+.

ব্যবহার:

% bf ebf.bf < nth-digit.ebf > nth-digit.bf
% echo "112234567 7" | bf nth-digit.bf 
5

আমি ইবিএফ-এর কোনও বিশেষ বৈশিষ্ট্যগুলি গুণের অপারেটর (উদা। 10+ => ++++++++++) ব্যতীত নিখুঁতভাবে ব্যবহার করছি না । তা ছাড়া এটি বেশিরভাগ খাঁটি ব্রেইনফাক

কিভাবে এটা কাজ করে:

+                ; Make a 1 in the first cell
[>>,32-]         ; while cell is not zero: read byte 2 to the right and reduce by 32 (space)
<<-[<<-]         ; move back to the first cell by reducing every cell with 1
,49-             ; read index, reduce by 49 so that ascii 1 becomes 0
[->>>[>>]+[<<]<] ; use that to fill a trail of breadcrumbs to the desired number
>>>[>>]          ; follow the breadcrumbs
<33+.            ; go to value part, increase by 33 (32 + 1 which we substracted) and print

স্কিম (আর 6 আরএস): 100 (অপ্রয়োজনীয় সাদা জায়গা ছাড়াই)

(let*((x(read))(n(read))(e(expt 10(-(floor(+(/(log x)(log 10))1))n))))
  (exact(div(mod x(* e 10))e)))

0

awk - 53

{for(d=10^9;!int($1/d)||--$2;d/=10);$0=int($1/d)%10}1
  1. বিভাগ দ্বারা বিভাজন ছাঁটাই, 32 বিট স্বাক্ষরবিহীন int জন্য সর্বাধিক সম্ভব দিয়ে শুরু
  2. যখন আমরা পূর্ণসংখ্যার বাম দিকে আঘাত করি, তখন int ($ 1 / d) শূন্য থেকে ফিরে আসে
  3. এর আগে n ($ 2) অংকটি চালিয়ে যান

Ungolfed:

{
    for(d = 1000000000; int($1 / d) != 0 || --$2; d /= 10);
    print int($1 / d) % 10;
}

0

স্কালা (83)

কোনও স্কালার বিশেষ বৈশিষ্ট্য ব্যবহার করে না। বরং স্ট্যান্ডার্ড সমাধান।

def f(x:Int,n:Int)=if(x==0)0 else x/(math.pow(10,math.log10(x).toInt-n+1)).toInt%10

Ungolfed:

def f(x:Int,n:Int) = 
  if(x==0)
    0
  else
    x / (math.pow(10, math.log10(x).toInt - n + 1)).toInt % 10 

0

সি, 94

main(x,y,z,n){scanf("%d%d",&x,&y);for(z=x,n=1-y;z/=10;n++);for(;n--;x/=10);printf("%d",x%10);}

সি, 91, অ্যারে ব্যবহারের কারণে অবৈধ।

main(x,y,z){int w[99];scanf("%d%d",&x,&y);for(z=0;x;x/=10)w[z++]=x%10;printf("%d",w[z-y]);}

আমি সম্পাদনায় অ্যারেটিকে বারণ করি (আপনি এটি পোস্ট করার আগে) ... তবে আপনি কীভাবে এটি করেছেন তা আমার পছন্দ হয়। :)
kukac67

ঠিক আছে, আমি ঠিকভাবে খুঁজছিলাম না। আমি অ্যারেগুলি এড়িয়ে একটি সমাধান যুক্ত করেছি।
ভিএক্স

0

জুলিয়া 37

d(x,y)=div(x,10^int(log10(x)-y+1))%10

বিল্টিন ^ অপারেটরের কারণে। নির্বিচারে নির্ভুলতা গণিত যে কোনও আকারের জন্য মঞ্জুরি দেয়।

নমুনা

julia> d(1231198713987192871,10)
3

0

পার্ল (কিছুটা বেশি ম্যাথিক / খুব গল্ফ নয়) - 99 টি চর

 ~/$ cat ndigits2.pl
  ($n,$i)=@ARGV;
  $r=floor($n/10**(floor(log($n)/log(10)+1)-$i));
  print int(.5+($r/10-floor($r/10))*10);

এটি চালান:

 perl -M5.010 -MPOSIX=floor ndigits.pl 726433 1


0

স্মলটালক, 44

যদিও ডিসি অপরাজেয়, তবে এখানে একটি ছোট্ট টাল সমাধান:

যুক্তি, n সংখ্যা; নিষ্কাশনের জন্য d ডিজিট-এনআর:

[:n :d|(n//(10**((n log:10)ceiling-d)))\\10]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.