এন এর সর্বশেষ অ শূন্য অঙ্ক!


22

ইনপুট হিসাবে একটি পূর্ণসংখ্যা দেওয়া 1 ≤ N as 1,000,000, এন এর শেষ অ-শূন্য অঙ্কের আউটপুট ! কোথায় ! ফ্যাক্টরিয়াল ( 1 থেকে এন পর্যন্ত সমস্ত সংখ্যার পণ্য ) অন্তর্ভুক্ত। এটি ওইআইএস ক্রম A008904

আপনার প্রোগ্রামটি কোনও বৈধ ইনপুট জন্য একটি যুক্তিসঙ্গত মেশিনে 10 সেকেন্ডের মধ্যে শেষ করতে হবে।

পরীক্ষার মামলা

1 => 1
2 => 2
3 => 6
4 => 4
5 => 2
6 => 2
7 => 4
8 => 2
9 => 8
10 => 8
100 => 4
1000 => 2
10000 => 8
100000 => 6
1000000 => 4

এটি একটি তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়!


একক ফাংশন বা সম্পূর্ণ প্রোগ্রাম?
জোয়

@ জোয়ি না, তারা কেবল পরীক্ষার মামলা। একক ইনপুট, একক আউটপুট।
fR0DDY

@ জোয়ে সম্পূর্ণ প্রোগ্রাম।
fR0DDY

1
একটি সম্পূর্ণ প্রোগ্রামের জন্য প্রয়োজনীয়তা নিরুৎসাহিত করা হচ্ছে ...
এরিক দ্য আউটগলফার

2
@ এরিকথ আউটগল্ফার এটি years বছর আগে থেকে এসেছে, সুতরাং আমি মনে করি না যে এটি সময়ে নির্ধারিত হয়েছিল
নোনি ইনি এখানে

উত্তর:


8

রুবি - 63 অক্ষর

f=->n{n<2?1:6*[1,1,2,6,4,4,4,8,4,6][n%10]*3**(n/5%4)*f[n/5]%10}

সূত্র - http://oeis.org/A008904

এক সেকেন্ডের অধীনে হাজার অঙ্ক পর্যন্ত f পরিচালনা করে।

পরীক্ষা

irb(main):014:0> for n in 2..6
irb(main):015:1> puts f[10**n]
irb(main):016:1> end
4
2
8
6
4

11

গণিত, 45 36 বাইট

Last@Select[IntegerDigits[#!],#>0&]&

একটি জয়ের উত্তরের জন্য খুব পঠনযোগ্য। :) (তারপরে আবার কোনও গল্ফস্ক্রিপ্ট ও কোং জমা দেওয়া নেই))

এটি আমার মেশিনে প্রায় 5 সেকেন্ডে 1,000,000 ইনপুট পরিচালনা করে।


1
গণিত এই প্রশ্নের জন্য নিখুঁত ভাষা।
মাইকেল স্টার্ন


3

প্যারি / জিপি - 27 বাইট

এটি আকারের জন্য গতি ব্যবসা করে - টেস্টকেসটি দীর্ঘ সময় নেয় (~ 6 সেকেন্ড)।

n->n!/10^valuation(n!,5)%10

এই সংস্করণটি আরও দ্রুত (~ 15 মাইক্রোসেকেন্ড) তবে 81 বাইট লাগে:

n->r=1;while(n,r*=Mod(4,10)^(n\10%2)*[1,2,6,4,2,2,4,2,8][max(n%10,1)];n\=5);lift(r)

আপনি পরীক্ষার জন্য এই (অ-গল্ফযুক্ত) কোডটি ব্যবহার করতে পারেন:

[%(10^n) | n <- [1..6]]

2

উইন্ডোজ পাওয়ারশেল, 53 56 59 60 63 73 90

($a=1).."$input"|%{$a="$($a*$_)".trim('0')%1e7}
$a%10

নোট:

  • 100,000 এর কাছাকাছি সংখ্যার জন্য এক মিনিটেরও বেশি সময় নেয়। তবে, শেষে জিরোগুলি সরিয়ে ফেলার জন্য স্ট্রিংয়ে রূপান্তর প্রয়োজন, গণনা করার জন্য একটি সংখ্যার প্রয়োজন হয়, সুতরাং রূপান্তরগুলি যে কোনও ক্ষেত্রেই অনিবার্য।

ইতিহাস:

  • 2011-02-08 10:31 (90) - প্রথম প্রচেষ্টা।
  • 2011-02-08 10:33 (73) - মডিউলাস কাটা এবং যোগদানের চেয়ে কম।
  • 2011-02-08 10:34 (63) - অযথা ট্রিম।
  • 2011-02-08 10:37 (60) - একটি সংখ্যাতে অযথা .ালাই। মডুলাস এটি ঠিক আছে, ইতিমধ্যে।
  • 2011-02-08 10:40 (59) - কিছু ইনলাইনিং।
  • 2011-02-08 11:00 (56) - মডুলাস খাটো হওয়ার আগে আমি কী বলেছিলাম? আউটপুট এছাড়াও প্রযোজ্য।
  • 2011-02-08 11:01 (53) - $inputএকটি স্ট্রিং এ কাস্টিং যথেষ্ট; cast intালাই স্পষ্টভাবে প্রয়োগ করা হয়।

2

পার্ল, 53 58 61 অক্ষর

সমস্ত সাদা স্থান সরানো যেতে পারে, তবে আমি "পাঠযোগ্যতা" এর জন্য রেখে দিয়েছি। দ্রষ্টব্য: স্লোয়েনের কিছু নির্বোধ সুস্পষ্ট সূত্র ব্যবহার করা হচ্ছে না।

sub f {
    $_ = $1 * ++$n || 1, /(.{1,7}?)0*$/ while $n < $_[0];
    $1 % 10
}

আমার মেশিনে 8.7 সেকেন্ডে f (10 ^ 6) গণনা করে।

আপডেট : ওপি চাইছিল এটি পুরো প্রোগ্রাম হয়ে উঠবে:

$_ = $1 * ++$n || 1, /(.{1,7}?)0*$/ while $n < $ARGV[0];
print $1 % 10

এটি এটি 55 টি অক্ষর করে তোলে।


2

সিজোম - 28

1ri{I)*_AbW%{}#A\#/1e7%}fIA%

আপনি এটি 10000 বা তার বেশি মানের জন্য http://cjam.aditsu.net/ এ চেষ্টা করতে পারেন; বড় সংখ্যার জন্য আপনার জাভা দোভাষী ব্যবহার করা উচিত । আমার ল্যাপটপে প্রায় 3 সেকেন্ডের মধ্যে 1000000 রান করে।

ব্যাখ্যা:

দুর্ভাগ্যক্রমে সহজ সরল সমাধানটি খুব ধীর, সুতরাং আমি প্রতিটি গুনের পরে কেবল সর্বশেষ 7 টি সংখ্যা (চলার শূন্যের আগে) রাখছি।

1           push 1 on the stack
ri          read a token and convert to integer
{           loop (for I from 0 to N - 1)
    I)      push I and increment
    *       multiply with the previous value (initially 1)
    _Ab     duplicate and convert to array of digits
    W%      reverse array
    {}#     find the position of the first non-zero digit
    A\#     raise 10 to that power
    /       divide, thus removing all trailing zeros
    1e7%    keep the remainder modulo 10000000
}fI         end for loop
A%          get the last digit

দ্রষ্টব্য: এই ভাষাটি প্রশ্নের চেয়ে অনেক নতুন।



2

05 এ বি 1 ই , 4 বাইট

!0м¤

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

ব্যাখ্যা

!0    # Push the factorial of the input and 0
  м   # Remove the occurences of 0 in the factorial
   ¤  # Push the last element, implicit display

1
টিআইও সংস্করণটি শেষ পরীক্ষার ক্ষেত্রে (s০ এর দশক) সমাপ্ত হয়েছিল - আপনি "যুক্তিসঙ্গত মেশিনে" এটি কীভাবে দশকের মধ্যে পেয়েছিলেন?
টবি স্পিড

2

জেলি , 4 বাইট

!Ṛȯ/

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

ব্যাখ্যা

এই সত্যটি ব্যবহার করে যে যখন (কোনও তালিকার বিপরীতে; ভেক্টরাইজ হয় না D) প্রথমে স্বয়ংক্রিয়ভাবে (অঙ্কগুলি) লাগে তখন পূর্ণসংখ্যার সাথে প্রয়োগ করা হয় ।

ইনপুট 8:

!Ṛȯ/
!     Factorial: 8! = 40320
 Ṛ    Reverse: [0,2,3,0,4]
   /  Reduce by...
  ȯ   ...logical OR: ((((0ȯ2)ȯ3)ȯ0)ȯ4) = first truthy element = 2

আমি মনে করি না যে এখানে একটি বাইট রয়েছে "প্রথম সত্যবাদী উপাদান" (যা ȯ/কাজ করে) তবে যদি থাকে তবে এটি মোট তিনটি বাইটে সংক্ষিপ্ত করা যেতে পারে।


2

জাভা (ওপেনজেডিকে 8) , 62 বাইট

n->{long f=n;for(;n>1||f%10==0;)f=n>1?f*--n:f/10;return f%10;}

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

@ কেভিন ক্রুইজসেনের মতো তবে লুপগুলি সংযুক্ত করে 5 বাইট সংরক্ষণ করে।


পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম পোস্ট! আশা করি আপনি আটকে থাকবেন!
আর

পিপিসিজিতে আপনাকে স্বাগতম! আমি @ রিকার সাথে একমত, দুর্দান্ত প্রথম পোস্ট। লুপগুলি একত্রিত করে আমার কোডটি গল্ফ করা ভাল। আপনি গলফ 1 এর আরও বেশি প্রতিস্থাপন করে আপনার বর্তমান উত্তর বাইট করতে পারেন ||সঙ্গে |, এবং প্রতিস্থাপন একটি অতিরিক্ত বাইট ==0সঙ্গে <1। উপভোগকর তোমার থাকা!
কেভিন ক্রুইজসেন

2

সি, 150 140 135 বাইট

r,d;f(k,x){r=x<5?3:f(k+1,x/5);return(d=x%5)?r*"33436"[d]*(1<<d*k%4)%5:r;}main(int c,char**v){c=atoi(*++v);printf("%d",c<2?1:2*f(0,c));}

এটি ASCII সিস্টেমগুলির জন্য সংস্করণ; স্ট্রিং প্রতিস্থাপন 33436সঙ্গে 11214একটি EBCDIC সিস্টেমের জন্য, অথবা \1\1\2\1\4পোর্টেবল প্রোগ্রামের জন্য।

সি সমাধানগুলি একটি সম্পূর্ণ প্রোগ্রাম সরবরাহ করার প্রয়োজনে কিছুটা বাধা সৃষ্টি করে; যাইহোক, এটি পুরোপুরি প্রশ্নের উত্তর দেয়।

এটি অনলাইনে চেষ্টা করুন (জাভাস্ক্রিপ্টের প্রয়োজন):

ব্যাখ্যা

এটি এন এর কমপক্ষে উল্লেখযোগ্য নন-জিরো ডিজিটে বর্ণিত অ্যালগরিদমের উপর ভিত্তি করে ! , ঘুরে দাঁড়ালেন যাতে সর্বোচ্চ পাঁচটি পাওয়ার সন্ধান করতে আমরা পুনরাবৃত্তি করি এবং বেরোনোর ​​পথে গণনা করি। ধ্রুবকের টেবিলগুলি খুব বড় ছিল, তাই আমি পূর্ববর্তী অবশিষ্টাংশ r, বর্তমান সংখ্যা dএবং পুনরাবৃত্তির গভীরতার মধ্যে একটি সম্পর্ক খুঁজে পেয়ে এগুলি হ্রাস করেছি k:

     0    1       2       3    4  =d
  0  0  3×2^k  1×2^2k  3×2^3k  2
  1  1  1×2^k  2×2^2k  1×2^3k  4
r 2  2  2×2^k  4×2^2k  2×2^3k  3
  3  3  3×2^k  3×2^2k  3×2^3k  2
  4  4  4×2^k  4×2^2k  4×2^3k  1

কারণ r>0, এটি একটি ধ্রুবক বার rবার 2^dk( সংশোধন 5) সমাধান করে; ধ্রুবকগুলি a[]নীচে রয়েছে (গল্ফযুক্ত কোডটিতে অন্তর্ভুক্ত)। আমরা এটিও (2^4)%51 টি পর্যবেক্ষণ করি , তাই এর পরিসীমাটিকে অতিরিক্ত প্রবাহ এড়াতে আমরা ঘাতককে হ্রাস করতে পারি int

const int a[] = { 1, 1, 2, 1, 4 };
int f(int k, int x){
    int r = x<5 ? 3 : f(k+1,x/5); /* residue - from recursing to higher-order quinary digits */
    int d = x%5;
    if (!d)
        return r;
    return r * a[d] * (1<<d*k%4) % 5;
}

int main(int c, char **v)
{
    c = atoi(*++v);
    printf("%d",
           c<2
           ? 1                  /* special-case 0 & 1 */
           : 2*f(0,c));         /* otherwise, it's 2 times r */
}

পরীক্ষা:

$ for i in 100 1000 10000 100000; do echo $i: `./694 $i`; done
100: 4
1000: 2
10000: 8
100000: 6
1000000: 4

পারফরম্যান্সটিও সম্মানজনক। এখানে 32-বিট সহ একটি সিস্টেমের সর্বাধিক ইনপুট রয়েছে int:

$ time ./694 2147483647
8
real    0m0.001s
user    0m0.000s
sys     0m0.000s

আমিও সর্বোচ্চ 64৪-বিট সহ একই সময় পেয়েছি int


1
এটি লক্ষ্য করা আগ্রহী হতে পারে যে 2147483647!19 বিলিয়নেরও বেশি সংখ্যা এবং (2^63-1)!170,000,000,000,000,000,000 এর চেয়ে বেশি সংখ্যক সংখ্যা রয়েছে, তাই এটি ফ্যাক্টরিয়ালগুলি গণনা করার ক্ষেত্রে এটি একটি বড় জয়। 1000000!প্রশ্নে উল্লিখিত হিসাবে বর্তমান হার্ডওয়্যার গণনা করা সম্ভব; এটি কেবল 5½ মিলিয়ন ডিজিট। :-)
টবি স্পিড


1

Python3

239 চারস

করতে পারি 10000 3.2 সেকেন্ড ~ মধ্যে (Ideone আমাকে 8 সেকেন্ডে কেটে, আমি নিশ্চিত করুন যে এটি যদিও 10secs চেয়ে দীর্ঘতর নেব আছি :()

from functools import *
N=100
r=range
s=(p for p in r(2,N)if all(p%n>0for n in r(2,p)))
f=lambda n,x:n//x+(n//x>0and f(n//x,x)or 0)
e=list([p,f(N,p)]for p in s)
e[0][1]-=e[2][1]
e[2][1]=0
print(reduce(lambda x,y:x*y,map(lambda x:x[0]**x[1],e))%10)

Python2.6

299 চর (কিছুটা দ্রুত)

from itertools import *
N=100000
r=xrange
def s(c=count(2)):
        while 1:p=c.next();c=ifilter(p.__rmod__,c);yield p
f=lambda n,x:n//x+(n//x>0and f(n//x,x)or 0)
e=[[p,f(N,p)]for p in takewhile(lambda x:x<N,s())]
e[0][1]-=e[2][1]
e[2][1]=0
print(reduce(lambda x,y:x*y,map(lambda x:pow(x[0],x[1],10),e))%10)

1

হাস্কেল, 78 টি অক্ষর

f n=head$dropWhile(=='0')$reverse$show$product[1..n]
main=interact(show.f.read)

(10 সেকেন্ডে 1,000,000 গণনা করার জন্য সম্ভবত সংকলন করা প্রয়োজন)


দুই অক্ষর সংরক্ষণ, যে প্রতিস্থাপন foldl1সঙ্গে product(CF codegolf.stackexchange.com/questions/607/find-the-factorial/... )। তবে আপনি কি 1000000 দিয়ে চেষ্টা করেছেন! ?
জেবি

PS: একটি সম্পূর্ণ প্রোগ্রাম নয়।
জেবি

দুঃখিত, মন্তব্যগুলিতে স্পষ্ট হওয়ার আগে এটি করেছিলেন। আমি এটি আপডেট করব।
stusmith

1

জে - 42 40 টি অক্ষর

একটি পুরো প্রোগ্রাম। এই প্রোগ্রামটি একটি ফাইলে সংরক্ষণ করুন এবং সাথে চালান jconsole script.ijs 1234। লক্ষ্য করুন যে এই প্রোগ্রামটি ফলাফল মুদ্রণের পরে দোভাষী থেকে প্রস্থান করে না। টাইপ করুন ^Dবা exit]0দোভাষী থেকে প্রস্থান করতে।

echo([:{:@(#~*)10&#.inv@*)/1+i.".>{:ARGV

এখানে একটি ব্যাখ্যা:

  • x #. yপূর্ণসংখ্যার ভেক্টরকে yবেস xসংখ্যা হিসাবে ব্যাখ্যা করে ; উদাহরণস্বরূপ, 10 #. 1 2 3 4ফলন 1234
  • u invএকটি ক্রিয়াটির বিপরীত ফল দেয় u। বিশেষত, একটি বেস নম্বর হিসাবে x #. inv yপ্রতিনিধিত্ব করে ; উদাহরণস্বরূপ, ফলন । লক্ষ্য করুন যে হিসাবে সংজ্ঞায়িত করা হয়েছে , যে, প্রয়োগ -1 সময়।yx10 #. 12341 2 3 4inv^:_1u
  • x * yহয় পণ্য এর xএবং y, এইভাবে x 10&#.inv@* yউৎপাদ গুণফল একটি 10-ভিত্তিক উপস্থাপনা xএবং y
  • x # yকপি n এর -th আইটেমটি yপ্রায়ই হিসাবে হিসাবে n এর -th আইটেমটি x; কখন xবুলিয়ান্সের ভেক্টর হয়, xকোনটি আইটেম yনেবে তা নির্বাচন করে । উদাহরণস্বরূপ, 1 0 1 0 # 1 2 3 4ফলন 1 3
  • * yএর সাইনাম দেয় y
  • x u~ yহয় আত্মবাচক এর u, যে, হিসাবে একই y u x
  • সুতরাং, ইতিবাচক যে y #~ * yসমস্ত আইটেম একটি ভেক্টর ফলন y। স্বরলিপি স্বরলিপি, এই হিসাবে একটি হুক দিয়ে লেখা যেতে পারে (#~ *)
  • {: yশেষ আইটেম উত্পাদন y
  • একসাথে একত্রিত হয়ে, আমরা স্বচ্ছ বাক্যাংশ পাই ([:{:@(#~*)10&#.inv@*)
  • u/ yহয় হ্রাস এর y, যে, dyadic ক্রিয়া uউপাদান মধ্যে ঢোকানো y। উদাহরণস্বরূপ, +/1 2 3 4হয় 1 + 2 + 3 + 4এবং ফলন 10
  • সুতরাং, বাক্যাংশটি ([:{:@(#~*)10&#.inv@*)/ yআইটেমগুলির পণ্যের শেষ অঙ্ক করে y
  • ARGV কমান্ড লাইন আর্গুমেন্টগুলির একটি বক্সযুক্ত ভেক্টর।
  • ".>{:ARGV শেষ যুক্তিটি আনবক্স করা এবং একটি সংখ্যা হিসাবে ব্যাখ্যা করা।
  • i. yথেকে প্রাকৃতিক সংখ্যার গণনা 0করতে y - 1
  • সুতরাং, 1+i. yথেকে প্রাকৃতিক সংখ্যার উৎপাদ 1করতে y। আমি এখানে >: ইনক্রিমেন্টও ব্যবহার করতে পারতাম , তবে 1+একই অক্ষরের অক্ষরে এটি আরও পরিষ্কার।
  • পুরো প্রোগ্রামটি কেবল ক্রিয়াটি প্রয়োগ করে 1+i.".>{:ARGV( 1শেষ কমান্ড লাইনের যুক্তির সংখ্যার ভেক্টর ) ক্রিয়াতে প্রয়োগ করে ([:{:@(#~*)10&#.inv@*)/এবং ফলাফলটি মুদ্রণ করে echo


1

আর , 63 55 51 46 বাইট

গুণগত পরিসংখ্যান করে, সর্বশেষ নন-শূন্য অঙ্কটি বের করে। মৌলিক কাঠামো সরবরাহ করার জন্য জিউসেপ্পকে ধন্যবাদ।

(y=(gamma(scan()+1))%/%10^(0:1e5)%%10)[!!y][1]

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

বিকল্পভাবে, আমার পুরানো 51-বাইট উত্তর:

ফ্যাকটোরিয়াল গণনা করে, চরিত্রে রূপান্তর করে, সমস্ত 0গুলি সরিয়ে দেয় এবং তারপরে চূড়ান্ত চরিত্রটি গ্রহণ করে। জিউসেপিকে ধন্যবাদ 2 বাইট সংরক্ষণ করা।

substring(x<-gsub("0","",gamma(scan())+1),nchar(x))

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


1
gamma(x+1)এর চেয়ে সংক্ষিপ্তfactorial(x)
জিউসেপ

স্ট্রিং রূপান্তর ছাড়াই, আমি সবচেয়ে ভাল পরিচালনা করতে পেরেছিলাম (y=(x<-gamma(scan()+1))%/%10^(0:nchar(x))%%10)[!!y][1]54 বাইটে।
জিউসেপ

@Giuseppe আমরা প্রতিস্থাপন করতে পারেন nchar(x)সঙ্গে 1e546-বাইট সমাধান জন্য! সুন্দর গমন.
rturnbull


1

পার্ল 6 ,  26  35 বাইট

{[*](1..$_)~~/.*<(<-[0]>/}

চেষ্টা করে দেখুন


একটি সম্পূর্ণ প্রোগ্রাম হিসাবে:

put [*](1..@*ARGS[0])~~/.*<(<-[0]>/

চেষ্টা করে দেখুন

সম্প্রসারিত:

{
  [*]( 1..$_ ) # reduce using &infix:« * »
  ~~           # match with
  /
    .*         # any number of values (so it matches from the end)
    <(         # only capture the following
    <-[0]>     # any value but 0 (negated character class)
  /
}

1

সি (জিসিসি) , 72 বাইট (ফাংশন)

f(n,d)long long n,d;{for(d=1;n;d%=10000)for(d*=n--;d%10<1;d/=10);d%=10;}

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

সি (জিসিসি) , 101 99 বাইট (পুরো প্রোগ্রাম)

main(){long long n,d=1;for(scanf("%lld",&n);n;d%=10000)for(d*=n--;d%10<1;d/=10);printf("%d",d%10);}

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

এই প্রশ্নটি মাত্র 8 বছরের লজ্জাজনক তাই "যুক্তিসঙ্গত মেশিন" তখনকার মতো একই নয়, তবে সমস্ত পরীক্ষার ক্ষেত্রে একসাথে করার সময় আমি আমার কম্পিউটারে 0 .01 সেকেন্ডের সময় পাচ্ছি, যদি না কম্পিউটারগুলি গতিতে না বাড়ে এই গত দশকে 1000 এর ফ্যাক্টর দ্বারা, এটি ঠিক হওয়া উচিত।


মুর আইনটি এখনও (কিন্ডা) ধরে আছে, সুতরাং এটি প্রায় x16 গুণ দ্রুত হওয়া উচিত
এএসসিআইআই

এছাড়াও, একটি ফাংশন ঠিক আছে
এএসসিআইআই


0

সংযুক্তি , 26 বাইট

Last@`\&:(All@V)@Digits@`!

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

ব্যাখ্যা

Last@`\&:(All@V)@Digits@`!

এটি 4 টি কার্যের সংমিশ্রণ:

  • `! - এটি ফ্যাক্টরিয়াল অপারেটরের একটি কার্যকরী সংস্করণ
  • Digits - এটি ফ্যাক্টরিয়াল এর অঙ্কগুলি পায়
  • \&:(All@V)- এটি একটি নির্বাচন ফাংশন। এটা তোলে বাম-বন্ধনে (করে কাজ করে &:) ফাংশন All@Vথেকে \, যা নির্বাচন হয়। পরিবর্তে, All@Vসংখ্যার ০ না হলে পরীক্ষার একটি সংক্ষিপ্ত উপায় এটি কোনও ভেক্টরের কাছে এটির ইনপুট ফেলে দিয়ে কাজ করে 0 -> [0]তারপরে এই সমস্ত সদস্য সত্যবাদী কিনা (যেমন 0 নয়) অনুসন্ধান করে। এটি 0 গুলি ছাড়াই সংখ্যার সংখ্যা দেয়।
  • Last - এটি কেবল এই অ্যারের শেষ সদস্যটি অর্জন করে।

এটি অবিশ্বাস্যরূপে ধীর বলে মনে হচ্ছে - টিআইও 100000 পরীক্ষার ক্ষেত্রে সময় নির্ধারণ (1 মিনিট) - আপনি 10 সেকেন্ডের মধ্যে 1000000 ফলাফল কীভাবে পেয়েছেন?
টবির স্পিড

@ টবিস্পাইট যখন আমি এই চ্যালেঞ্জটির জবাব দিয়েছি তখন সেই বিশেষ প্রয়োজনীয়তা ছিল না (পুনর্বিবেচনার ইতিহাসটি দেখুন)।
কনর ও'ব্রায়েন

আহ, আমার ইতিহাসের দিকে নজর দেওয়া উচিত ছিল! আপনি প্রশ্নে সমস্ত টেস্টকেস যাচাই করেছেন, যদিও?
টবি স্পিড

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

@ টবিস্পাইট হ্যাঁ, আমি করেছি। এটি দুর্ভাগ্যজনক এবং আমি এই বিষয়ে নীতি সম্পর্কে নিশ্চিত নই।
কনর ও'ব্রায়েন

0

এপিএল (ডায়ালগ ইউনিকোড) , 18 15 বাইট

{⊢/⍵/⍨0≠⍎¨⍵}⍕∘!

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

Tacit উপসর্গ ফাংশন। একক পরীক্ষার ক্ষেত্রে সঠিক অঙ্ক বা একাধিক পরীক্ষার ক্ষেত্রে সংখ্যার একটি স্ট্রিং প্রদান করে।

@ অ্যাডম এবং @ এরিকআউটগলফারকে প্রতিটি 3 টি বাইটের জন্য ধন্যবাদ।

কিভাবে?

{⊢/⍵/⍨0≠⍎¨⍵}⍕∘!  Main function. Argument is a number following the !.
              !  Factorial
                then
                Format (stringify)
        ⍎¨⍵}     Execute (turn to number) each digit of the argument
      0         Check if each is 0. This returns a boolean vector
                Swap arguments for the following fn/op
   ⍵/            Replicate. This takes a boolean vector as left arg and returns the truthy elements of the right arg. E.g.: 1 1 0/1 2 3  1 2.
{⊢/              Reduce. This returns the rightmost (last) element of a vector argument.

0

এপিএল NARS, 28 বাইট, 14 টি অক্ষর

{↑≠v/v←⌽⍎¨⍕!⍵}

কেন জানি না তবে এই পরীক্ষায় পাস করেছে:

  q←{↑≠v/v←⌽⍎¨⍕!⍵}       
  q¨1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 6 4 2 2 4 2 8 8 8 6 8 2 

0

এডাব্লুকে , 47 57 বাইট

{for(p=$1;--$1;p=(p*$1)%1e4)while(!(p%10))p/=10;$0=p%10}1

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

মূল সমাধানটি "বৃহত" ইনপুট মানগুলি খুব ভালভাবে পরিচালনা করে না। -Mএটি কাজ করতে বাধ্য করতে যোগ করতে পারে, তবে এর জন্য আরও অনেক বেশি প্রক্রিয়াজাতকরণ সময় প্রয়োজন।


হ্যাঁ, টবিস্পাইট, খুব ভাল infহয় না %। :(
রবার্ট বেনসন

আহ ... আমি যে প্রশ্নের উত্তর দিয়েছি তার সংস্করণটি দেখছি, বিপুল সংখ্যক প্রয়োজন হয়নি।
রবার্ট বেনসন

-2

জাপট , 6 বাইট

কয়েকটি ভিন্ন 6-বাইটার নিয়ে এসেছি তবে আমি এটি সেরা পছন্দ করেছি। যদিও আমি নিশ্চিত যে এটির একটি উপায় অবশ্যই 5 এ করার আছে।

Êsw ìv

চেষ্টা করে দেখুন


ব্যাখ্যা

Êইনপুটটির ফ্যাক্টরিয়াল গণনা করে, sএটি একটি স্ট্রিংতে রূপান্তরিত করে এবং wএটির বিপরীত হওয়ার পরে কোনও পূর্ণসংখ্যায় ফিরে আসে , ìফলাফলকে অঙ্কের অ্যারেতে রূপান্তর করে এবং vপ্রথম উপাদানটি প্রদান করে।


বিকল্প

Êì w æ
ÊìÈf Ì
Êì f o
Êsw sg
Êìf ìo
Êìf ìÌ

সমস্ত পরীক্ষার কেস কার্যকর করতে কতক্ষণ সময় লাগে?
টবি স্পিড

@TobySpeight; এটি চেষ্টা করার জন্য লিঙ্কটি অনুসরণ করে পরীক্ষা করা খুব সহজ। নোট করুন যে শেষ 4 টি পরীক্ষাগুলি জাভাস্ক্রিপ্টের সর্বোচ্চ পূর্ণসংখ্যার চেয়ে বড় কারণগুলির ফ্যাক্টরিয়ালগুলি ব্যর্থ হবে।
শেগি

তাহলে আসলে সমস্যার সমাধান হয় না তখন? প্রশ্নটি বলছে এটি অবশ্যই 1 ≤ N ≤ 1,000,000 এর জন্য সফল হবে । অন্যান্য উত্তরগুলি প্রমাণ করে যে উত্তরটি গণনা করার জন্য আপনাকে ফ্যাক্টরিয়াল সংরক্ষণ করতে সক্ষম হবেন না।
টবি স্পাইট

আমি অনলাইন পরীক্ষাটি চেষ্টা করেছিলাম, তবে এটির প্রথম পরীক্ষার ক্ষেত্রে আমি চেষ্টা করেছি (1000) times
টবি স্পিড

-2

পার্ল 5 , 36 + 10 ( -p -Mbigint) = 46 বাইট

$"=$_;$_*=$"while$"-=1;($_)=/(.)0*$/

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


টিআইও সংস্করণটি আমি চেষ্টা করা প্রথম দুটি পরীক্ষার ক্ষেত্রে ব্যর্থ: 1000000 ⇒ f( 4 হওয়া উচিত ) এবং 100 ⇒ 7( 4 হওয়া উচিত )
টবির স্পিচ

এটি কোন int এর আকারকে উপচে ফেলেছে। নতুন সংস্করণ বিগিন্ট ব্যবহার করে কাজ করে। পারফরম্যান্স এখনও কিছুটা পছন্দসই হিসাবে ছেড়ে দেয় কারণ এটি একটি নিষ্ঠুর শক্তি গণনা। এর অর্থ এটি বৃহত্তর সংখ্যার জন্য টিআইওর বাইরে চলে যায়।
এক্সকালি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.