একটি সংখ্যার ডিজিটের পার্থক্য সমষ্টিটি গণনা করুন


39

কিছু অ-নেতিবাচক পূর্ণসংখ্যা যেমন 8675309 গ্রহণ এবং প্রতিবেশী অঙ্কগুলির জোড়গুলির মধ্যে পার্থক্যের নিরঙ্কুশ মানগুলি গণনা করার বিষয়ে বিবেচনা করুন।

জন্য 8675309আমরা পেতে |8-6| = 2, |6-7| = 1, |7-5| = 2, |5-3| = 2, |3-0| = 3, |0-9| = 9। এই ফলাফল একসঙ্গে গাঁথন অন্য ছোট অ নেতিবাচক পূর্ণসংখ্যা উৎপাদ: 212239। প্রক্রিয়াটি পুনরাবৃত্তি করার 11016পরে 0115, যা কনভেনশনের মাধ্যমে নেতৃস্থানীয় শূন্যগুলি লিখিত হয় না তা সরল করে 115, যা হয়ে যায় 04বা 4, যা আর কোনও হ্রাস করা যায় না। এই সমস্ত মান সমষ্টি আপ আমরা পেতে 8675309 + 212239 + 11016 + 115 + 4 = 8898683

আসুন অঙ্কের পার্থক্য যোগফলকে (বা ডিডিএস) সংজ্ঞায়িত করুন বারবার একটি সংখ্যার অঙ্কের পার্থক্য গ্রহণ করে একটি নতুন সংখ্যা গঠনের জন্য, তারপরে সমস্ত ফলাফলের সংখ্যাটি মূলতে যুক্ত করুন।

সংশ্লিষ্ট ডিডিএস অনুক্রমের প্রথম 20 টি মান এখানে দেওয়া হয়েছে:

N   DDS(N)
0   0
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10  11
11  11
12  13
13  15
14  17
15  19
16  21
17  23
18  25
19  27

এখানে প্রথম 10000 মান রয়েছে , গ্রাফটি যার জন্য বেশ কৌতূহলযুক্ত:

ডিডিএস 10000 প্লট

বিশেষত যেহেতু এটি 1000 বা এমনকি 100 এ প্লট করার সময় এটি দেখতে একই রকম হয়:

ডিডিএস 1000 প্লট

ডিডিএস 100 প্লট

(আমি এটিকে ডেন্টিস্টের সিঁড়ি বলব ...)

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি অ-নেতিবাচক পূর্ণসংখ্যায় নিয়ে যায় এবং তার ডিডিএস মান মুদ্রণ করে বা প্রদান করে। উদাহরণস্বরূপ, যদি ইনপুটটি হয় 8675309তবে আউটপুটটি হওয়া উচিত 8898683

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


দাঁতের দাঁতের সিঁড়ি?
মার্টিজন

12
@ মার্তিজএনআর ডেন্টিস্টের সিঁড়ি
ক্যালভিনের

@ ক্যালভিনের শখগুলি অর্থোডন্টিস্টের সিঁড়ি?
বিটা ক্ষয়

1
@ বেটাডে ডেন্টিস্টের সিঁড়ি
অ্যালেক্স এ

উত্তর:


11

পাইথ, 17

s.ui.aM-VJjNTtJTQ

এখানে এটি ব্যবহার করে দেখুন বা টেস্ট স্যুটটি চালান

ব্যাখ্যা:

s.u            Q   # Cumulative reduce, i.e. getting the intermediate values of each reduce
                     step and returning them as a list, then sum the list
   i ... T         # Convert the resulting list of numbers into a base 10 number
   .aM             # Get the absolute value of each element of ...
      -VJjNTtJ     # Perform vector subtraction on the lists given by
        JjNT       # assign J the number we currently have converted to its base 10 digits
            tJ     # and J[1:]. e.x. for 123 we get J = [1,2,3] then we do
                   # zip(J,J[1:]) which gives [[1,2],[2,3]] then element wise subtract
                   # to get [-1, -1]

এই কি ভাষা? এত গুপ্ত! T_T
asgs

1
@asgs PPCG স্বাগতম :) এটা Pyth বলা হচ্ছে, আপনি একজন দোভাষী এবং তার কিছু ডকুমেন্টেশন জানতে পারেন গিটহাব পৃষ্ঠা । এই ভাষার বেশিরভাগ ব্যবহারকারী এই সাইটে সক্রিয় আছেন, সুতরাং আপনার যদি এই সম্পর্কে প্রশ্ন থাকে তবে চ্যাট করতে বা এটি উত্সর্গীকৃত ঘরে জিজ্ঞাসা করতে নির্দ্বিধায় :)
FryAmTheEggman

17

পাইথন 2, 73

ভাগ্যক্রমে, আমি কোনও স্ট্রিং অপারেশন এড়াতে সক্ষম হয়েছি।

t=lambda n:n>9and abs(n%10-n/10%10)+10*t(n/10)
g=lambda n:n and n+g(t(n))

g উত্তরটি গণনা করে এমন ফাংশন।


4
কি এই কালো যাদু ?!
বিটা ক্ষয়

7
@ বেটাডেকে বিশ্বাস করি একে "গণিত" বলা হয়।
lirtosiast

আমি পাইথনকে বলার মতো যথেষ্ট পরিমাণে জানি না, তবে আপনি কী এক বাকী উভয় পদেই বাকী অপারেশন প্রয়োগ করতে পারেন? যে, (n-n/10)%10একই হিসাবে কাজ করবে n%10-n/10%10? নাও হতে পারে (9*n/10)%10?
গ্লেন

পাইথনে জিলেনো, %একজন সত্যিকারের মডুলাস অপারেটর, বাকী নয়, যাতে কাজ করে না।
ফেয়ারসাম

15

মতলব, 101 105 বাইট

ধন্যবাদ তার পরামর্শ ব্যবহার করার জন্য @beaker অনেক polyvalপরিবর্তে যদি base2dec। এটি আমাকে অনুমতি দিয়েছে

  • 4 বাইট সংরক্ষণ করুন;
  • সাধারণীকরণকে স্বেচ্ছাচারিত বেসে সহজতর করুন (নীচে দেখুন) এবং সেখানে 22 বাইট সংরক্ষণ করুন; এবং অধিকাংশ,
  • আমাকে বুঝতে সাহায্য করেছিল যে সাধারণ মামলার কোডটি ভুল ছিল (শীর্ষস্থানীয় জিরো সরানো হচ্ছে না)। কোড এবং গ্রাফগুলি এখন সঠিক।

কোড:

function y=f(y)
x=+num2str(y);while numel(x)>1
x=polyval(abs(diff(x)),10);y=y+x;x=+dec2base(x,10);end

উদাহরণ:

>> f(8675309)
ans =
     8898683

বোনাস: নির্বিচার বেস

একটি ছোট সাধারণীকরণ একটি স্বেচ্ছাসেবী সংখ্যা বেস ব্যবহার করার অনুমতি দেয়, অগত্যা দশমিক নয়:

  • নির্বিচার বেস 2 থেকে 10, 108 104 বাইট base

    function y=f(y,b)
    x=+dec2base(y,b);while numel(x)>1
    x=polyval(abs(diff(x)),b);y=y+x;x=+dec2base(x,b);end
    

    কারণ এই পর্যন্ত বেস কেবল কাজ করে 10মতলব এর যে dec2baseফাংশন ব্যবহার ডিজিটের 0, 1, ..., 9, A, B, ..., এবং সেখান থেকে অক্ষরের (ascii) কোড একটি লাফ এর 9জন্য A

  • 2 থেকে 36, 124 146 বাইটে নির্বিচারে বেস

    উপরে বর্ণিত লাফের 9জন্য Aবিশেষ চিকিত্সা প্রয়োজন। সর্বোচ্চ বেসটি 36মাতলাবের dec2baseফাংশন অনুযায়ী।

    function y=f(y,b)
    x=+dec2base(y,b);x(x>57)=x(x>57)-7;while numel(x)>1
    x=abs(diff(x));x=x(find(x,1):end);y=y+polyval(x,b);end
    

ডেন্টিস্টের সিঁড়িটি বিভিন্ন ঘাঁটির জন্য এইভাবে সন্ধান করে:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


1
এটিই আমি করতাম ... অন্য উত্তরটি নিয়ে ভাবার সময় হল। +1 টি।
রায়রিং - মনিকা 22

@ রাইরিং :-) ধন্যবাদ
লুইস মেন্ডো

@ বেটাডেকে ধন্যবাদ! :-) তারা সত্যই সুন্দর
লুইস মেন্ডো

11

সিজেম, 22 21 বাইট

ri_{\s2ew::-:zsi_@+}h

নোট করুন যে এই প্রোগ্রামটি একটি ত্রুটি সহ প্রস্থান করে, যা ডিফল্টরূপে অনুমোদিত

জাভা দোভাষী দ্বারা, ত্রুটিগুলি STDERR বন্ধ করে দমন করা যেতে পারে ressed আপনি যদি সিজেএম ইন্টারপ্রেটারে এই কোডটি অনলাইনে চেষ্টা করেন তবে শেষ লাইনের আগে সমস্ত আউটপুট উপেক্ষা করুন।

আসল পুনর্বিবেচনায় একটি ত্রুটি নির্দেশ করার জন্য @ এসপি 3000 কে ধন্যবাদ।

1 বাইট বন্ধ করে গল্ফ করার জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ।

উদাহরণ রান

$ cjam digit-difference.cjam 2>&- <<< 8675309     
8898683

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

ri_   e# Read an integer (I) from STDIN and push a copy (A).
{     e# Do:
  \   e#   Swap I on top of A.
  s   e#   Cast I to string.
      e#   For example, 123 -> "123".
  2ew e#   Push the overlapping slices of length 2 (pair of adjacent digits).
  ::- e#   Replace each pair by its difference.
  :z  e#   Apply absolute value to each difference.
  si  e#   Cast to string, then to integer. This is the new I.
      e#   For example, [1 2 3] -> "123" -> 123.
  _   e#   Push a copy of I.
  @   e#   Rotate A on top of the copy of I.
  +   e#   Add I to A, updating A.
}h    e# While A is truthy, repeat the loop.

একজন সবসময় truthy হবে যখন চেক h। যাইহোক, একবার আমি একক অঙ্কের পূর্ণসংখ্যার 2ewহয়ে গেলে অ্যারেটি আহ্বানের পরে তা ত্রুটি করে ব্যর্থ হবে। এটি কেবল স্ট্যাকের উপর কাঙ্ক্ষিত ফলাফল ছেড়ে দেয় যা প্রস্থান করার আগে মুদ্রিত হয়।


2
7 মিনিটের ফ্ল্যাট পোস্ট করেছেন: ও
ক্যালভিনের

10

ল্যাবরেথ , 176 134 127 119 103 97 88 82 79 76 72 বাইট

1 বাইট সংরক্ষণ এবং আরও 2 টির জন্য পথ প্রশস্ত করার জন্য Sp3000 কে ধন্যবাদ।

এটি সম্ভবত এখনও সংক্ষিপ্ত করা যেতে পারে, তবে ওহে, এটি জাভা মতলব পাইথনকে পরাজিত করে ...

?
_
)/:}+{:`};!
9       "
_ :}-"" :_10
;;{: `" "  :
  {  (_:/=%}
  0+;`"

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

এটি একটি ত্রুটির সাথে শেষ হয় তবে ত্রুটি বার্তাটি STDERR এ লেখা হয় (যার কারণে আপনি এটি টিআইওতে দেখেন না)।

বাস্তবায়ন মোটামুটি সোজা-এগিয়ে। আমরা একটি চলমান মোট বর্তমান মান যোগ করুন। যদি বর্তমান মানটি এর চেয়ে বেশি হয় তবে 9আমরা এর বেস -10 অঙ্কগুলি (পুনরাবৃত্ত ডিভ-মোডের মাধ্যমে) গণনা করব এবং পরম পার্থক্য থেকে একটি নতুন সংখ্যা গঠন করি। আমরা যদি 9কম বা কম পেয়ে যাই তবে আমরা চলমান মোট মুদ্রণ করি।

বর্তমান সংখ্যার অঙ্কগুলি সহায়ক স্তুপে শীর্ষে সর্বাধিক উল্লেখযোগ্য অঙ্ক সহ সংগ্রহ করা হয়।

ভাল, abs(...)আমি অভিনব বাস্তবায়ন এখানে নতুন সমাধানের তুলনায় হাস্যকরভাবে জটিল হয়ে উঠেছে ... আমি যখন আরও গল্ফ করছিলাম তখন আমি একটি আপডেট ব্যাখ্যা যোগ করব।


5

জাভা - 300 বাইট

গল্ফ সংস্করণ

static Long t=new Scanner(System.in).nextLong();static char[]c=t.toString().toCharArray();public static void main(String[]z){while(c.length>1)s();System.out.print(t);}static void s(){String s="";for(int i=0;i<c.length-1;)s+=Math.abs(c[i]-c[++i]);Long a=new Long(s);t+=a;c=a.toString().toCharArray();}

অবহেলিত / সম্পূর্ণ সংস্করণ

import java.util.Scanner;

public class DigitDifference {

    static Long t = new Scanner(System.in).nextLong();
    static char[] c = t.toString().toCharArray();

    public static void main(String[] args){
        while( c.length > 1 )
            s();
        System.out.print(t);
    }

    static void s(){
        String s="";
        for(int i = 0; i < c.length-1;)
            s += Math.abs(c[i]-c[++i]);
        Long a = new Long(s);
        t += a;
        c = a.toString().toCharArray();
    }
}

@ লভজো, চিয়ার্স ..
কোডার

1
পিপিসিজিতে আপনাকে স্বাগতম! এটি এখনও অনেক গল্ফ করা যেতে পারে। আমি যুক্তিটির দিকে তেমন তাকাতে পারি নি তবে: ১) এগুলিকে একটি ফাংশনে টানুন কারণ আপনার সত্যিকার অর্থে আলাদা কোনও প্রয়োজন নেই (বা সেই বিষয়ে একটি সম্পূর্ণ প্রোগ্রাম / শ্রেণি) 2) staticটান দেওয়ার পরে এস থেকে মুক্তি পান (a+"")এগুলিতে 3) সাধারণত একই রকম a.toString()তবে সংক্ষিপ্ত 4) আপনার কোনও স্ক্যানারের দরকার নেই যদি এটি কেবল কোনও ফাংশন হয় তবে কেবল ইনপুট হিসাবে দীর্ঘ সময় নিন।
জিওবিটস

2
উদাহরণস্বরূপ, বেশিরভাগ কাজের পরিবর্তন না করে এবং কেবল long f(long t){long a=t;char[]c;while((c=(a+"").toCharArray()).length>1){String s="";for(int i=0;i<c.length-1;)s+=Math.abs(c[i]-c[++i]);t+=a=new Long(s);}return t;}
ক্রাফ্ট

2
@ জিওবিটস, এটি আশ্চর্যজনক বন্ধু ছিল। আমি কোড গল্ফে নতুন, তাই আমি আমার কোডিন দক্ষতা উন্নত করার চেষ্টা করব। চেরার্স ..
কোডার

5

জুলিয়া, 81 60 বাইট

n->(s=n;while n>9 s+=n=int(join(abs(diff(["$n"...]))))end;s)

Ungolfed:

function f(n::Int)
    # Initialize a sum to the input
    s = n

    while n > 9
        # Get absolute values of the pairwise differences of the
        # digits of n, join as a string, convert it to an integer,
        # and reassign n
        n = int(join(abs(diff(["$n"...]))))

        # ["$n"...] actually splits n as a string into a vector
        # of its characters, but the difference between ASCII
        # codes is the same as the difference between the numbers
        # so it works as expected

        # Add the new n to the running sum
        s += n
    end

    # Return the sum
    return s
end

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

ফেয়ারসাম এবং গ্লেন ও-তে 21 বাইট সংরক্ষণ করা!


1
এর ndigits(n)>1চেয়ে আলাদা কোনও কারণ আছে কি n>9?
feersum

পরামর্শ: int(join(abs(diff(["$n"...]))))9 বাইট সংরক্ষণ করুন n>9আরও 9 টি বাইট সংরক্ষণের জন্য ফেয়ারসামের পরামর্শ অনুযায়ী স্যুইচ করুন । এক ধাপে লুপের সময় দুটি কার্য সম্পাদন করে আরও তিনটি বাইট সংরক্ষণ করুন (এবং অতিরিক্ত, এখন অপ্রয়োজনীয় সেমিকোলন অপসারণ):n->(s=n;while n>9 s+=n=int(join(abs(diff(["$n"...]))))end;s)
গ্লেন ও

@ ফেয়ারসাম উম, নাহ। ধন্যবাদ!
অ্যালেক্স এ।

@ গ্লেএনও দুর্দান্ত, ধন্যবাদ!
অ্যালেক্স এ।

5

ওকে , 37 32 24 23 বাইট

+/(10/{%x*x}1_-':.:'$)\

কর্মে:

  +/(10/{%x*x}1_-':.:'$)\8675309
8898683

  (+/(10/{%x*x}1_-':.:'$)\)'!20
0 1 2 3 4 5 6 7 8 9 11 11 13 15 17 19 21 23 25 27

কে 5 এর কয়েকটি বৈশিষ্ট্য রয়েছে যা এই "এনকোড" এবং "ডিকোড" -এর সাথে উপযুক্তভাবে বেস রূপান্তর সম্পাদন করতে পারে, প্রতিটি জোড় ( ':) একটি তালিকায় ক্রমিক উপাদান যুক্ত করে এবং নির্দিষ্ট পয়েন্ট স্ক্যান ( \) এটি না থামানো পর্যন্ত পুনরাবৃত্ত ক্রম উত্পাদন করতে পারে পরিবর্তন। আদিমতার অভাব abs()কিছুটা কদর্য বাল্কের আকারে নিয়ে যায় {(x;-x)x<0}', যদিও।

সম্পাদনা:

এর পরিবর্তে {(x;-x)x<0}', আমি (কিছুটা অপ্রয়োজনীয়ভাবে) সিকোয়েন্সের বর্গাকার বর্গমূল নিতে পারি ( {%x*x}5 বাইট সংরক্ষণ করে)।

সম্পাদনা 2:

@ মরিনাসের এপিএল সমাধান দ্বারা অনুপ্রাণিত হয়ে আমি ((#$x)#10)\xসংখ্যার স্ট্রিং প্রতিনিধিত্বের প্রতিটি চরিত্রকে মূল্যায়ন করে "ডিকোড" ( ) প্রতিস্থাপন করতে পারি .:'$x! এটি অতিরিক্ত অক্ষর সংরক্ষণ করে পুরো এক্সপ্রেশনটির স্বতন্ত্র ফর্মটিও আমাকে ব্যবহার করতে দেয়।


4

পাইথন 2, 87 বাইট

f=lambda n:n and n+f(int('0'+''.join(`abs(int(a)-int(b))`for a,b in zip(`n`,`n`[1:]))))

পুনরাবৃত্তভাবে বর্তমান সংখ্যা যুক্ত করে এবং সংখ্যার পার্থক্য নেয়। সংখ্যা এবং স্ট্রিংয়ের মধ্যে প্রচুর রূপান্তর। সম্ভবত উন্নতি করা যেতে পারে।


4

জুলিয়া, 55 48 বাইট

h=n->(n>9&&h(int(join(abs(diff(["$n"...]))))))+n

Ungolfed:

function h(n)
  if n>9
    # If multiple digits, find the digit difference...
    digitdiff=int(join(abs(diff(["$n"...]))))
    # ... recurse the function...
    downsum=h(digitdiff)
    # ... and return the sum so far (working up from the bottom)
    return downsum+n
  else
    # If single digit, no further recursion, return the current number
    return n
  end
end

মূলত, এটি একক-অঙ্কের স্তরে পুনরাবৃত্তি করে (যেখানে কোনও অঙ্কের পার্থক্য সম্পাদন করা যায় না), তারপরে এটি পুনরাবৃত্তি থেকে বেরিয়ে আসার সাথে সাথে স্তরের স্তরের স্তরের ব্যাক আপটি যোগ করে।


3

হাস্কেল, 140 বাইট

d কাজ করে

import Data.Char
d n=sum.m(read.m intToDigit).fst.span(/=[]).iterate s.m digitToInt.show$n
s l@(h:t)=snd$span(==0)$m abs$zipWith(-)l t
m=map

দীর্ঘ রূপান্তর ফাংশন আমদানি এড়াতে কীভাবে কেউ জানেন?


intToDigitহয় toEnum.(+48)এবং digitToIntহয় (\i->fromEnum i-48)। এছাড়াও আপনি চালু করতে পারেন sসঙ্গে একটি pointfree সংস্করণে =<<তালিকা প্রেক্ষাপটে: s=snd.span(==0).m abs.(zipWith(-)=<<tail)। অবশেষে, (==0)হয় (<1)কারণ আমরা অ নেতিবাচক পূর্ণসংখ্যার সঙ্গে কাজ করছি।
নিমি

... ওহ, এবং যদি sবিন্দু মুক্ত হয় তবে এটির নাম দেওয়ার দরকার নেই। এটিকে সরাসরি কল করুন:iterate(snd.span ... tail))
নিমি

... এটি আমার প্রথম মন্তব্যে একটি ভুল সংশোধন করার জন্য আমি আবার: =<<ফাংশন প্রসঙ্গে ব্যবহৃত হয়, তালিকা প্রসঙ্গে নয়, দুঃখিত sorry
নিমি

উজ্জ্বল! এছাড়াও, জিএইচসি এক্সটেনশনগুলি ব্যবহার করা কি এখানে সাধারণ পদ্ধতি? NoMonomorphismRestrictionআমাকেও dপয়েন্টফ্রি করতে দেবে
লিফ উইলার্টস 18

1
chrএবং ordউভয়ই Data.Charরয়েছেন, সুতরাং আপনি এটিকে বাদ দিতে পারবেন না import। সংকলক পতাকাগুলি বাইট হিসাবেও গণনা করা হয়, তাই NoMonomorphismRestrictionআপনার স্কোর 25 দ্বারা বৃদ্ধি করে
নিমিম


3

এপিএল (22)

{⍵≤9:⍵⋄⍵+∇10⊥|2-/⍎¨⍕⍵}

ব্যাখ্যা:

  • ⍵≤9:⍵: যদি ⍵ ≤ 9, অপরিবর্তিত। ফিরে আসুন।
  • ⍎¨⍕⍵: ⍵ কে একটি স্ট্রিংয়ে রূপান্তর করুন, তারপরে প্রতিটি অক্ষরকে মূল্যায়ন করুন
  • 2-/: প্রতি দুটি সংলগ্ন সংখ্যা বিয়োগ করুন
  • |: পরম মান গ্রহণ
  • 10⊥: অ্যারেটিকে বেস -10 সংখ্যায় পরিণত করুন
  • ⍵+∇: এই নতুন মানটির সাথে ক্রিয়াকলাপটি পুনরাবৃত্তভাবে কল করুন এবং ফলাফলটি ইনপুটটিতে যুক্ত করুন

3

গণিত, 72 69 65 বাইট

Tr@FixedPointList[FromDigits@*Abs@*Differences@*IntegerDigits,#]&

আমি এখানে পরামর্শের জন্য উন্মুক্ত।


Tr@FixedPointList[FromDigits@*Abs@*Differences@*IntegerDigits,#]&
আলেফাল্ফ

@alephalpha জবর ধারণা, অতিরিক্ত শূণ্যসমূহ ... তৈরি
LegionMammal978

2

জাভাস্ক্রিপ্ট ES6, 73 বাইট

t=n=>(b=10,M=Math).ceil(n&&n+t((j=n=>n>9&&M.abs(n%b-n/b%b)+b*j(n/b))(n)))

এটি কোনও সংক্ষিপ্ততর পাচ্ছে না: / আমি আরও পদ্ধতির চেষ্টা করব তবে এটি এখন পর্যন্ত সংক্ষিপ্ততম


যদি আপনি এটিকে নির্ধারণের পরিবর্তে এটি কেবল একটি বেনামি ফাংশন হিসাবে রেখে দেন তবে এটি tবৈধ এবং আপনাকে 2 বাইট সংরক্ষণ করে।
প্যাট্রিক রবার্টস

@ পেট্রিক রবার্টস হ্যাঁ তবে আমি পুনরাবৃত্তিটি ব্যবহার করছি যাতে আমার এটির নাম রাখা দরকার
ডাউনগোট

ওহ, এটি যথেষ্ট মিস হয়েছে।
প্যাট্রিক রবার্টস

2

জাভাস্ক্রিপ্ট (ES6), 69

নীচের স্নিপেটটি একটি ইকামাস্ক্রিপ্ট comp অনুবর্তী ব্রাউজারে চলমান পরীক্ষা করুন (তবে ক্রোম এখনও এটি স্প্রেড অপারেটরকে সমর্থন করে না ...) এমএস এজ হয়তো?

f=n=>n&&(n+=r='',[...n].map(d=>(r+=d>p?d-p:p-d,p=d),p=n[0]),+n+f(+r))

function test()
{
  var i=+I.value
  O.innerHTML = i+' -> '+f(i) + '\n' + O.innerHTML 
}
<input id=I value=8675309><button onclick=test()>-></button>
<pre id=O></pre>

বিকল্প, অ্যারে বোধগম্যতা ব্যবহার করে যা এখন ইকমাস্ক্রিপ্ট ২০১ ((ES7), 67 বাইট লক্ষ্যযুক্ত:

f=n=>n&&(n+=r='',p=n[0],[for(d of n)(r+=d>p?d-p:p-d,p=d)],+n+f(+r))

2

পাইথন 3, 125 বাইট

আমি যতক্ষণ না আমি এই চ্যালেঞ্জ জন্য এটা ব্যবহার করার চেষ্টা Regex ক্ষুদ্রতা পছন্দ করতাম ... re.findall('\d\d',s,overlapped=True)হয় না উপর;)

s=input()
p=int
x=p(s)
while p(s)>9:g=str(s);s=p(''.join(str(abs(p(g[i])-p(g[i+1])))for i in range(len(g)-1)));x+=s 
print(x)

চিয়ারস @ টড :)


1
আপনি কোনও তালিকার চেয়ে পূর্ণসংখ্যায় স্থান সংযোজন সম্পাদন করতে পারেন যা বর্গাকার বন্ধনী এবং চূড়ান্ত যোগফলের প্রয়োজন সরিয়ে দেবে। 's = p (ইনপুট ())' আপনাকে লুপের সময় এক্স রূপান্তর অপসারণ এবং এক্সকে অ্যাসাইনমেন্ট দেয়। জি এবং জি [1:] এর জিপ দিয়ে লুপিংয়ের বিষয়টিও বিবেচনা করুন যা কিছু বাইট সংরক্ষণ করতে পারে।
টড

1

জে, 70 বাইট

 +/([:10&#.[:(2|@:-/\])[:10&(]#:~[#~[:>.[^.])])`]@.(11&>)^:a:".(1!:1)3

0

সি 162 বাইট

golfed:

main(int argc,char **argv){char *c=argv[1];int u=atoi(c),d;do{while(c[1]!=0){*c=abs(*c-*(c+1))+48;c++;}*c=0;c=argv[1];d=atoi(c);u+=d;}while(d>9);printf("%d",u);}

ungolfed:

main(int argc, char **argv)
{
    char *c=argv[1];
    int u=atoi(c),d;

    do
    {
        while(c[1]!=0)
        {
            *c=abs(*c-*(c+1))+48;
            c++;
        }

        *c=0;
        c=argv[1];
        d=atoi(c);
        u+=d;
    }
    while(d>9);

    printf("%d\n",u);
}

0

আর, 134 বাইট

কোড

f=function(x){z=x;while(z>9){n=seq(nchar(z));z=abs(diff(strtoi(substring(z,n,n))));z=sum(z*10**(rev(seq(length(z)))-1));x=x+z};cat(k)}

এটি অনলাইনে পরীক্ষা করুন

Ungolfed

f=function(x){
  z=x;
  while(z>9){
    n=seq(nchar(z));
    z=abs(diff(strtoi(substring(z,n,n))));
    z=sum(z*10**(rev(seq(length(z)))-1));
    x=x+z
  };
  cat(x)
}

এফ (1) থেকে চ (1 মি) পর্যন্ত "সংখ্যার ডিফারেন্স ডিফারেন্স সামমের একটি সংখ্যা" সিরিজের পার্থক্যের প্লটটি এখানে রয়েছে। আমি আলাদা করতে ভালোবাসি বলেই।

প্লট কোড

s <- seq(1,100000)
serie <- sapply(s,f)
plot(diff(ts(serie)),xlab="",ylab="")

0

ম্যাটল্যাব (141)(137)

সম্পাদনা: 4 বাইট কম, @ আন্ড্রেসকে ধন্যবাদ

function[s j]=n(T,b,c),if(T/b>9),u=fix(T/10);[x e]=n(T,b*10,0);y=n(u,b,0);[w z]=n(u,b,c);s=abs(x-y);j=s+e+10*c*z;else,s=mod(T,10);j=s;end
  • এটি লুইস মেন্দোর জবাবকে সবচেয়ে মারধর করেছে তবে কমপক্ষে আমি মৃত্যুদণ্ড কার্যকর করার সময়টি হ্রাস করতে পেরেছিলাম, যার দ্বারা আমি এই সমস্যা মোকাবিলার উপায়গুলিকে বৈচিত্র্যময় করার চেষ্টা করেছি মাত্র।
  • আমি এটিকে আরও কমিয়ে আনতে পারি তবে আমি যেমন কম সময়ের জন্য যাই, আমি বেশি বাইট নষ্ট করি, তাই এখানে মূলনীতিটি:

প্রোগ্রামটি ইনলাইনড অঙ্কগুলির আগে একই সারির অঙ্কগুলি সংক্ষিপ্ত করে তুলছে, এর অর্থ এটি কেবলমাত্র পূর্ণসংখ্যা বিভাগ "এন / 10" লগ_10 (এন) বার ব্যবহার করেছে, জটিলতা হ'ল (এন)।

যদি n= a b c d

a          b           c           d
   |a-b|       |b-c|       |c-d|
    ||a-b|-|b-c|| ||b-c|-|c-d||
   ....

আমার প্রোগ্রাম গণনা:

a+|a-b| + | |a-b|-|b-c| |  +  |  | |a-b|-|b-c| | - | |b-c|-|c-d| |  |
+10*(
b+|b-c| + | |b-c|-|c-d| |
+10*(
c+|c-d|
+10*(
d
)
)
)

ব্যবহার:

  [a b]=n(13652,1,1)

a =

1

 b =

   16098

আপনি ঐচ্ছিক বাদ দ্বারা 4 বাইট অনাবশ্যক করতে পারেন ,endএর functionঘোষণা।
আন্দ্রেস ডেক 24'15

আপনার পোস্টের ব্যাকরণ সংশোধন বিবেচনা করুন। আপনি যা বলেছিলেন তা আমি বেশ বুঝতে পারি না।
রায়রিং - মনিকা 22

0

প্রোলোগ, 143 বাইট

কোড:

q(X,N):-X<9,N=0;A is abs(X mod 10-X//10 mod 10),Y is X//10,q(Y,M),N is A+M*10.
r(X,N):-X<9,N=X;q(X,Y),r(Y,M),N is X+M.
p(X):-r(X,N),write(N).

ব্যাখ্যা:

q(X,N):-X<9,N=0;                                                         % If only one digit, the difference is 0
        A is abs(X mod 10-X//10 mod 10),Y is X//10,q(Y,M),N is A+M*10.   % Else, the difference is the difference between the last 2 digits + the recursive difference of the number without the last digit
r(X,N):-X<9,N=X;                                                         % If we only have 1 digit the final answer is that digit
        q(X,Y),r(Y,M),N is X+M.                                          % Else, the final answer is the current number + the recursive difference of that number
p(X):-r(X,N),write(N).         

q গণনাগুলি করে যা কোনও সংখ্যাকে এটি ডিজিটের পার্থক্যে রূপান্তর করে।
r পুনরাবৃত্তভাবে q কল করে এবং সংখ্যার পার্থক্যের যোগফলটি খুঁজে পেতে ফলাফলগুলি যোগ করে।
p হল এন্ট্রি পয়েন্ট। একটি নম্বর নেয়, কল করে আর প্রিন্ট করে।

উদাহরণ:

>p(8675309).
8898683

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


0

পিএইচপি - 198 বাইট

<?$x=$t=$_GET['V'];function z($x){global$t;for($i=0;$i<strlen($x)-1;$i++){$z=str_split($x);$r.=str_replace('-','',$z[$i]-$z[$i+1]);}$r=ltrim($r,'0');$t+=$r;return strlen($r)>1?z($r):0;}z($x);echo$t;

Ungolfed

<?
$x=$t=$_GET['V']; // Gets the value from input
function z($x){
    global$t;
    for($i=0;$i<strlen($x)-1;$i++){
        $z=str_split($x); //Turns the string into an array
        $r.=str_replace('-','',$z[$i]-$z[$i+1]); // Sums the two values and removes the minus signal
    }
    $r=ltrim($r,'0'); // Remove trailing zeroes
    $t+=$r; // Adds to global var
    return strlen($r)>1?z($r):0; // Checks the size of the string. If >1, calls the function again
}

z($x);
echo$t;

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.