কিথ নম্বর দেওয়া হলে নম্বর পরীক্ষা করুন


14

যেহেতু ফাইবোনাচি নম্বর এবং সিকোয়েন্সগুলি কোড গল্ফের জন্য একটি জনপ্রিয় বিষয় বলে মনে হচ্ছে আমি ভেবেছিলাম কীথ নম্বরগুলির সাথে কোড গল্ফের পক্ষে এটি একটি মজাদার চ্যালেঞ্জ হতে পারে ।

সুতরাং আমি একটি চ্যালেঞ্জ প্রস্তাব করছি যা একটি ফাংশন তৈরি করা যা কোনও পূর্ণসংখ্যার গ্রহণ করে এবং সংখ্যার উপর নির্ভর করে একটি সত্য বা মিথ্যা ফিরিয়ে দেয় কীথ নম্বর বা না।

কীথ সংখ্যা সম্পর্কে আরও

বিনোদনমূলক গণিতে, একটি কিথ সংখ্যা বা পুনরায় সম্পাদনা নম্বর (পুনরাবৃত্তি ফিবোনাকির মতো অঙ্কের সংক্ষিপ্ত) নিম্নলিখিত সংখ্যার ক্রমিকায় একটি সংখ্যা: 14, 19, 28, 47, 61, 75, 197, 742, 1104, 1537, 2208, 2580,…

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

14
1 + 4 = 5
4 + 5 = 9
5 + 9 = 14

ইনপুট

একটি পূর্ণসংখ্যা

আউটপুট

সংখ্যাটি কীথ সংখ্যা হলে সত্য। মিথ্যা যদি তা না হয় ..


কঠোরভাবে বলতে গেলে, "একটি পূর্ণসংখ্যা" শূন্য বা নেতিবাচক সংখ্যা অন্তর্ভুক্ত করতে পারে। আমি যথেষ্ট নিশ্চিত যে দুটিই কিথ নম্বর হতে পারে না। আমরা কি এই জন্য অ্যাকাউন্টিং প্রয়োজন?
ইসজি

আপনার সমাধানের উপর নির্ভর করে একক সংখ্যা সংখ্যা সত্য হিসাবে প্রদর্শিত হতে পারে। সুতরাং আপনার ইনপুটটিতে সম্ভাব্য ত্রুটিগুলি পরীক্ষা করা উচিত।
স্মেটেড অ্যানারকিস্ট

এর কি আউটপুট দিতে হবে true/ falseঅথবা এটি সত্য / মিথ্যা কিছু হতে পারে ?
সাইয়েস

উত্তর:


7

গল্ফস্ক্রিপ্ট ( 31 25 অক্ষর)

..[10base{.{+}*+(\}@*]?0>

স্ট্যাকের শীর্ষে পূর্ণসংখ্যা হিসাবে ইনপুট। আউটপুট 0 (মিথ্যা) বা 1 (সত্য)। অনলাইন ডেমো যা 100 পর্যন্ত কিথ সংখ্যা তালিকাভুক্ত করে।


সাথে ভাল ধারণা 0>। দুর্ভাগ্যক্রমে আমি একবারই +1 করতে পারি।
হাওয়ার্ড

7

পাইথন ( 78 75)

a=input()
n=map(int,`a`)
while a>n[0]:n=n[1:]+[sum(n)]
print(a==n[0])&(a>9)

n=n[1:]+[sum(n)]সমস্ত যাদু না। এটি প্রতিটি আইটেম লাগে তবে প্রথম আইটেমটি n, n(প্রথম আইটেম সহ) যোগফলকে আটকে দেয় , তারপরে সেট করে n

আমি আশা করি আপনি কোনও listসংখ্যার সাথে কল করতে এবং অঙ্কগুলি পৃথক করে রাখতে পারতেন ।

রিটার্নস Falseযদি এটা ফিরে 10. নীচের সমস্ত ইনপুট উপর 8 টি অক্ষর খাটো হতে পারে True


আপনি যদি n[0]পরিবর্তে এর সাথে তুলনা করেন তবে আপনি দুটি অক্ষর সংরক্ষণ করতে পারেন n[-1]
হাওয়ার্ড

সঙ্গে আরও পাঁচটি সংরক্ষণ করুন print 9<a==n[0]
মাঝামাঝি

n=n[1:]+[sum(n)]হয়ে উঠতে পারেn=n[1:]+sum(n),
Cyoce

6

গল্ফস্ক্রিপ্ট, 32 29 টি অক্ষর

...[10base\{.{+}*+(\}*]&,\9>&

একটি গল্ফস্ক্রিপ্ট বাস্তবায়ন যা অনলাইনে পরীক্ষা করা যেতে পারে । ইনপুটটিকে স্ট্যাকের শীর্ষ উপাদান হিসাবে দেওয়া হয় এবং এটি যথাক্রমে 0 (অর্থ মিথ্যা) বা 1 প্রদান করে।


@ পিটারটেলর প্রদত্ত লিঙ্কটি দেখুন যেখানে আমি ঠিক এটি করেছি - এবং এটি কাজ করে ...
হাওয়ার্ড

@ পিটারটেলর আপনার সমাধানটির দিকে তাকিয়ে আমি এমনকি আমার পদ্ধতির অক্ষরের সংখ্যা আরও কমিয়ে আনতে পারি।
হাওয়ার্ড

আমি অবশ্যই রিফ্রেশ না করে থাকতে পারি, কারণ আমার মন্তব্যটি সংস্করণ 1 এর জন্য প্রযোজ্য
পিটার টেলর

4

এপিএল, 36 34 39 36 33 29 27

*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕

1কিথ, 0অন্যথায় আউটপুট

গল্ফস্ক্রিপ্ট আবার ধর্মঘট !!


সম্পাদন করা

+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕

⊢/বিয়োগ 1 ( ) এর পরিবর্তে ডান-হ্রাস ( ) ব্যবহার করে ¯1↑সরাসরি 1 চর সংরক্ষণ এবং অপ্রত্যক্ষভাবে ডিসক্লোজ ( ) থেকে 1 সংরক্ষণ করে

ব্যাখ্যা

⍎¨⍕x←⎕ মূল্যায়ন ইনপুট নেয় (একটি সংখ্যা হিসাবে বিবেচিত) এবং এটিকে নির্ধারণ করে x । এটিকে একটি অক্ষরের অ্যারেতে রূপান্তর করে (অন্যান্য ভাষায় "ওরফে" স্ট্রিং), এবং প্রতিটি অক্ষরের (অঙ্ক) লুপ করে এটিকে একটি সংখ্যায় রূপান্তর করে। সুতরাং এটি অঙ্কগুলির একটি সংখ্যাসূচক অ্যারে ফলাফল।

{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}প্রধান "লুপ" ফাংশন: অ্যারের থেকে
+/⍵↑⍨-⍴⍕xশেষ ⍴⍕x(সংখ্যাগুলির সংখ্যা x) নেওয়া এবং তাদের অঙ্ক করে।
⍵,অ্যারের শেষ পর্যন্ত এটি যুক্ত করে তোলে।
(x>⊢/⍵)অ্যারেতে শেষ সংখ্যাটি (যা +/⍵↑⍨-⍴⍕xএখনও জড়িত হয়নি) তার চেয়ে ছোট কিনা xএবং নতুন অ্যারেতে এই ফাংশনটি বহুবার প্রেরণ করে 1বা 0
∇⍣কার্যকর করে কিনা তা পরীক্ষা করে দেখুন। সুতরাং যদি শেষ সংখ্যাটি এর চেয়ে কম হয় তবে xএই ফাংশনটি পুনরাবৃত্তি করে। অন্যথায় কেবল নতুন অ্যারেটি ফিরিয়ে দিন

ফাংশন নির্বাহ করার পর, অ্যারে অঙ্কের আপ যেখানে সংখ্যার 2 তার চেয়ে অনেক বেশী হয় বা সমান রয়েছে x(যেমন 14উত্পন্ন করবে 1 4 5 9 14 23, 13উত্পন্ন করবে 1 3 4 7 11 18 29)
অবশেষে যদি প্রতিটি সংখ্যার সমান কিনা তা পরীক্ষাx এবং আউটপুট ফলে বাইনারি এর সমষ্টি অ্যারে।


সম্পাদন করা

1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕

0ইনপুটটি যদি এক-অঙ্ক হয় তবে আউটপুট তৈরি করতে 2 টি অক্ষর যুক্ত হয়েছে :-(


তবুও অন্য একটি সম্পাদনা

+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕

ব্যাখ্যা

ফাংশনটি এখন 1↓শেষ ⍴⍕x( ↑⍨-⍴⍕x) না নিয়ে অ্যারে থেকে প্রথম সংখ্যা ( ) ফেলে দেয় drops
তবে, এই পদ্ধতির 1=একক অঙ্কের সংখ্যাগুলি হ্যান্ডেল করার পক্ষে পর্যাপ্ত পরিমাণে নেই। সুতরাং এটি এখন সমতা যাচাই করার আগে অ্যারে থেকে শেষ সংখ্যাটি ড্রপ করে x, 1 টি যোগ করে


আপনি এটি অনুমান করেছেন: সম্পাদনা করুন

+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕

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

এবং একটি 25-চর জিএস উত্তর প্রদর্শিত হবে (অরজ)


শেষ সম্পাদনা

x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕

বিশ্বাস করতে পারছি না আমি সেটা মিস করেছি।
এটি আর গল্ফ করতে পারে না।


1
আপনার 24 অক্ষরের মধ্যে এই নিচে পেতে পারেন: x∊{1↓⍵,+/⍵}⍣{x≤⊃⍺}⍎¨⍕x←⎕। পাওয়ার ফাংশনে, "পরে" মান হয়।
মেরিনাস

2

কমন লিস্প, 134

সিএল অনেক সময় অপঠনযোগ্য হতে পারে।

(defun k(n)(do((a(map'list #'digit-char-p(prin1-to-string n))(cdr(nconc a(list(apply'+ a))))))((>=(car a)n)(and(> n 9)(=(car a)n)))))

অনুভূমিক স্ক্রোলিং এড়ানোর জন্য কিছু বিন্যাস:

(defun k(n)
  (do
    ((a(map'list #'digit-char-p(prin1-to-string n))(cdr(nconc a(list(apply'+ a))))))
    ((>=(car a)n)(and(> n 9)(=(car a)n)))))

টেস্ট:

(loop for i from 10 to 1000
      if (k i)
      collect i)

=> (14 19 28 47 61 75 197 742)

1

এফ # - 184 অক্ষর

আমি আশা করি এটি ঠিক আছে যে আমি আমার নিজের চ্যালেঞ্জে অংশ নেব।

let K n=
let rec l x=if n<10 then false else match Seq.sum x with|v when v=n->true|v when v<n->l(Seq.append(Seq.skip 1 x)[Seq.sum x])|_->false
string n|>Seq.map(fun c->int c-48)|>l

সম্পাদনা করুন ছোট সংখ্যার সংক্রান্ত একটি বাগ সংশোধন করা হয়েছে।


এটি পুরোপুরি ঠিক আছে :)
beary605

আপনার সমাধান n <10 এর জন্য সত্য ফিরে আসে যা আমি মনে করি এটি মিথ্যা হওয়া উচিত।
হাওয়ার্ড

তুমি ঠিক. আমার তা খতিয়ে দেখা উচিত।
স্মেটেড অ্যানারকিস্ট

1

কে, 55

{(x>9)&x=*|a:{(1_x),+/x}/[{~(x~*|y)|(+/y)>x}x;"I"$'$x]}

k)&{(x>9)&x=*|a:{(1_x),+/x}/[{~(x~*|y)|(+/y)>x}x;"I"$'$x]}'!100000
14 19 28 47 61 75 197 742 1104 1537 2208 2580 3684 4788 7385 7647 7909 31331 34285 34348 55604 62662 86935 93993

1

পাওয়ারশেল: 120 128 123 111 110 97

$j=($i=read-host)-split''|?{$_};While($x-lt$i){$x=0;$j|%{$x+=$_};$null,$j=$j+$x}$x-eq$i-and$x-gt9

$i=read-host ব্যবহারকারীর কাছ থেকে ইনপুট নেয়, এটি stores i এ সঞ্চয় করে।

$j=(... )-split''|?{$_}$ i থেকে একটি অ্যারেতে অঙ্কগুলি ভেঙে $ জেতে সংরক্ষণ করে।

রিন্যান্টকে ধন্যবাদ জানাতে যে -ne''এটি অপ্রয়োজনীয়।

While($x-lt$i) যোগফলের পরিবর্তনশীল, $ x, পৌঁছানো বা অতিক্রম না করা অবধি F i অবধি অস্তিত্বশীল না হওয়া পর্যন্ত নিম্নলিখিত ফিবোনাসির মতো লুপটি চালিত করে।

$x=0 er x শূন্য করে, সুতরাং এটি সংশ্লেষের জন্য ব্যবহৃত হতে প্রস্তুত (যখন লুপটি আবার ফিরে আসে তার জন্য প্রয়োজনীয়)।

$j|%{$x+=$_} values ​​j থেকে $ x এ মানগুলি যোগ করতে একটি ফরইচ-অবজেক্ট লুপ ব্যবহার করে।

$null,$j=$j+$x disc জে বামে মানগুলি স্থানান্তরিত করে, disc x যুক্ত করার সময় প্রথমটিকে বর্জন করে।

হ্যাঁ! আমি অবশেষে শিফট এবং সংযোজন করার একটি ছোট উপায় আবিষ্কার করেছি এবং এই স্ক্রিপ্টটি 100 এর অধীনে পেয়েছি!

$x-eq$i লুপটি সম্পূর্ণ হওয়ার পরে পরীক্ষা করে যদি যোগফলের মান, $ x, প্রাথমিক মানের সমান হয়, $ i - সাধারণত একটি কীথ সংখ্যার সূচক।

-and$x-gt9 একক-সংখ্যা সংখ্যা, শূন্য এবং negativeণাত্মক সংখ্যাগুলি অকার্যকর করে, যা কীথ নম্বর হতে পারে না।

এই স্ক্রিপ্টটি কিছুটা "অগোছালো"। এটি করুণভাবে handle i এবং $ j অবশেষে হ্যান্ডেল করতে পারে তবে আপনাকে রানের মধ্যে $ x সাফ করতে হবে।

এই স্ক্রিপ্টের পূর্ববর্তী সংস্করণগুলিতে অঙ্কগুলি ভাঙার কয়েকটি পদ্ধতির জন্য কীথ হিল এবং মজলিনোরকে ধন্যবাদ । যদিও তারা চূড়ান্ত সংস্করণে নেই, তারা দুর্দান্ত শেখার অভিজ্ঞতা সরবরাহ করেছিল।


আপনি এটি সরান -ne''যাতে এটি ন্যায়সঙ্গত হয় ?{$_}
রিন্যান্ট

ধন্যবাদ @ রিন্যান্ট আমি দেখতে কেমন এছাড়াও প্রতিস্থাপন আরও একটি নিচে এটা ছাঁটা পারেন $i=read-host;$j=$i-split''|?{$_}'সঙ্গে $j=($i=read-host)-split''|?{$_}
ইসজি

0

রুবি, 82

def keith?(x)
  l="#{x}".chars.map &:to_i
  0while(l<<(s=l.inject :+)).shift&&s<x
  (s==x)&l[1]
end

সন্দেহজনক পাইথন এটির জন্য আরও ভাল সরঞ্জাম।


0

সি, 123

k(v){
    int g[9],i,n,s,t=v;
    for(n=s=0;t;t/=10)s+=g[n++]=t%10;
    for(i=n;s<v;){
        i=(i+n-1)%n;
        t=g[i];g[i]=s;s=s*2-t;
    }
    return n>1&&s==v;
}

জোতা মাধ্যমে পরীক্ষা:

main(i){
    for(i=0;i<20000;i++)
        if(k(i)) printf("%d ",i);
}

দেয়:

14 19 28 47 61 75 197 742 1104 1537 2208 2580 3684 4788 7385 7647 7909

আপনি প্রতিস্থাপন করতে পারেন i=(i+n-1)%n;t=g[i];g[i]=s;s=s*2-t;সঙ্গে i+=n-1;t=g[i%n];g[i%n]=s;s+=s-t;এবং দুই অক্ষর সংরক্ষণ।
schnaader

0

আর, 116

পাইথন ফিতা:

a=scan();n=as.numeric(strsplit(as.character(a),"")[[1]]);while(a>n[1])n=c(n[-1],sum(n));if((n[1]==a)&&(a>9))T else F

0

পার্ল, 90

sub k{$-=shift;$==@$=split//,$-;push@$,eval join'+',@$[-$=..-1]while@$[-1]<$-;grep/$-/,@$}

একটি মজার অনুশীলন! আমি জানি এটি একটি পুরানো পোস্ট তবে আমি লক্ষ্য করলাম পার্ল অনুপস্থিত!

আমি নিশ্চিত যে অন্যান্য প্রতিক্রিয়াগুলি আরও পুঙ্খানুপুঙ্খভাবে ডাইজেস্ট করা থেকে আমি এটি তৈরির উপায়টি উন্নত করতে পারি, তাই আমি সম্ভবত এটি আবার ঘুরে দেখব!


0

স্মার্টটাক - 136 চর

 [:n|s:=n asString collect:[:c|c digitValue]as:OrderedCollection.w:=s size.[n>s last]whileTrue:[s add:(s last:w)sum].^(s last=n and:n>9)]

এই ব্লকটি প্রেরণ করুন value:


0

জাভা - 1437

import java.io.*;
class keith
{
    public int reverse(int n)
    {
        int i,c=0;
        while(n>0)
        {
            c=(c*10)+(n%10);
            n/=10;
        }
        return(c);
    }
    public int countdigit(int n)
    {
        int i,c=0;
        while(n>0)
        {
            c++;
            n/=10;
        }
        return(c);
    }
    public void keith_chk()throws IOException
    {
        BufferedReader br=new BufferedReader(
        new InputStreamReader(System.in));
        int n,digi,r,p=0,a,tot=0,i;
        System.out.print("Enter number :-");
        n=Integer.parseInt(br.readLine());
        digi=countdigit(n);

        int ar[]=new int[digi+1];
        r=reverse(n);
        while(r>0)
        {
            a=r%10;
            ar[p++]=a;
            tot=tot+a;
            r/=10;
        }
        ar[p]=tot;
        while(true)
        {
            for(i=0;i<=p;i++)
            System.out.print(ar[i]+"\t");
            System.out.println(); 
            if(tot == n)
            {
                System.out.print("Keith Number....");
                break;
            }
            else if(tot > n)
            {
                System.out.print("Not Keith Number.....");
                break;
            }
            tot=0;
            for(i=1;i<=p;i++)
            {
                ar[i-1]=ar[i];
                tot=tot+ar[i];
            }
            ar[p]=tot;
        }
    }
}

3
কোডগলফ.এসই তে স্বাগতম! যেহেতু এই প্রশ্নটি কোড-গল্ফ তাই আপনার কোডটি গল্ফ করা উচিত (হোয়াইটস্পেসগুলি, নতুন লাইনগুলি অপসারণ করুন ...)
ভেরিয়স

0

পাইথন 3 104

#BEGIN_CODE
def k(z):
 c=str(z);a=list(map(int,c));b=sum(a)
 while b<z:a=a[1:]+[b];b=sum(a)
 return(b==z)&(len(c)>1)
#END_CODE score: 104

print([i for i in filter(k, range(1,101))])  #[14, 19, 28, 47, 61, 75]

এবং এটি একটি ফাংশন;)


0

পাইথন - 116 অক্ষর

কোডগল্ফের আসলেই বিশেষজ্ঞ নন, তাই আপনার কাছে এটি রয়েছে - আমার প্রথম চেষ্টা।

x=input();n=`x`;d=[int(i)for i in n];f=d[-1]
while f<x:d+=[sum(d[-len(n):])];f=d[-1]
if f==x>13:print 1
else:print 0

একটি ক্রিয়াকলাপের জন্য 2 টি পরিবর্তন করুন:

  • পরিবর্তন printকরুনreturn
  • xপ্যারামিটার হিসাবে বরাদ্দ করুন

PS I দ্বিতীয় @ beary605- সংখ্যা / অক্ষর / যাই হোক না কেন পৃথক করতে একটি অন্তর্নির্মিত যোগ করুন।


0

রুবি (ওওপি সহ)

class Recreationalmathematics
def Check_KeithSequence(digit) 
    sequence,sum=digit.to_s.split(//).to_a,0
    while(sum<digit) do
        sum=0
        sequence.last(digit.to_s.size).each{|v|  sum=sum+v.to_i}
        sequence<<sum
    end 
    return (sum==digit)?"true":"false" 
end
end
test = Recreationalmathematics.new
puts test.Check_KeithSequence(197)
puts test.Check_KeithSequence(198)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.