Yếu tố và chu kỳ không bao giờ kết thúc!


33

Như bạn có thể biết, giai thừa của một số nguyên dương nlà tích của tất cả các số nguyên dương bằng hoặc nhỏ hơn n.

Ví dụ :

6! = 6*5*4*3*2*1 = 720
0! = 1

Bây giờ chúng tôi sẽ xác định một hoạt động đặc biệt với một tên không liên quan như sumFac:

Cho một số nguyên dương n, sumFac(n)là tổng các giai thừa của các chữ số.

Ví dụ :

sumFac(132) = 1! + 3! + 2! = 9

Bài tập

Nhiệm vụ của bạn, cho dù bạn có chọn chấp nhận hay không, là trả về chuỗi (có khả năng vô hạn) của các ứng dụng sumFaccho một số nguyên được đưa vào đầu vào.

Thí dụ : 132 -> 132, 9, 362880, 81369, 403927, ...

Nhưng đó không phải là tất cả! Thật vậy, các ứng dụng sumFaccuối cùng sẽ tạo ra một chu kỳ. Bạn cũng phải trả lại chu kỳ này!

Nếu ngôn ngữ của bạn có một giai thừa được xây dựng, bạn có thể sử dụng nó. Tôi không kén chọn loại trả về, bạn chỉ cần trả về chuỗi các ứng dụng sumFac và chu trình ở định dạng dễ hiểu bởi một con người.

EDIT: Để giúp bạn hình dung rõ hơn đầu ra trông như thế nào, tôi đã sao chép Leaky Nun ngay bên dưới:

[132, 9, 362880, 81369, 403927, 367953, 368772, 51128, 40444, 97, 367920, 368649, 404670, 5810, 40442, 75, 5160, 842, 40346, 775, 10200, 6, 720, 5043, 151, 122, 5, 120, 4, 24, 26, 722, 5044, 169, 363601, 1454]

Bạn chỉ cần dừng chuỗi khi chu kỳ sắp bắt đầu lần thứ hai!

Nhưng đây là golf-code nên câu trả lời ngắn nhất tính bằng byte sẽ thắng!

Bảng xếp hạng

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.



Chào mừng đến với PPCG! Đây có vẻ là một thử thách tốt, BTW.
clismique

@ Qwerp-Derp Cảm ơn bạn rất nhiều! Tôi đã cố gắng sáng tạo ^^

@Zgarb Vâng, nó giống hệt như sản phẩm của Leaky Nun. Trình tự của các ứng dụng và sau đó sẽ kết thúc ngay trước khi bắt đầu chu kỳ thứ hai. Tôi sẽ sao chép đầu ra của anh ấy trong câu hỏi để mọi người có thể hiểu rõ. Cảm ơn bạn đã chỉ ra điều đó :)

1
@ 2501 Mã hóa giá trị là gian lận, nhưng liên quan đến định dạng đầu ra, bạn có thể sử dụng bất kỳ dấu tách nào bạn muốn

Câu trả lời:


19

Thạch , 6 byte

D!SµÐĿ
    ÐĿ  Repeat until the results are no longer unique. Collects all intermediate results.
D           Convert from integer to decimal (list of digits)
 !          Factorial (each digit)
  S         Sum

Hãy thử trực tuyến!

Tôi không thấy cách nào khác để làm cho nó ngắn hơn ngoài cách làm như đã nói.

Thông số kỹ thuật

  • Đầu vào: 132(dưới dạng đối số dòng lệnh)
  • Đầu ra: [132, 9, 362880, 81369, 403927, 367953, 368772, 51128, 40444, 97, 367920, 368649, 404670, 5810, 40442, 75, 5160, 842, 40346, 775, 10200, 6, 720, 5043, 151, 122, 5, 120, 4, 24, 26, 722, 5044, 169, 363601, 1454]

Tôi không mong đợi có câu trả lời ngắn như vậy. Nice :)

4
@Antoine Đó là Jelly: D Nó luôn ngắn hơn tôi nghĩ nó sẽ xảy ra;)
HyperNeutrino

8
@HyperNeutrino Bằng cách nào đó Dennis sẽ đi kèm với một câu trả lời thậm chí còn ngắn hơn
Leaky Nun

Bằng cách nào đó, vâng. Vì Dennis. : P
HyperNeutrino

Vậy ... bạn sử dụng mã hóa ký tự nào để tạo ra 6 byte cho 6 ký tự đó? Không phải Jelly được mã hóa UTF-8, có nghĩa là chương trình này thực sự là 9 byte?
LordOfThePigs


9

05AB1E , 12 byte

[DˆS!O©¯så#®

Hãy thử trực tuyến!

Giải trình

[               # infinite loop
 Dˆ             # add a copy of current value to the global list (initialized as input)
   S            # split current number to digits
    !O          # calculate factorial of each and sum
      ©         # save a copy in register
       ¯så#     # if the current number is in the global list, exit loop
           ®    # retrieve the value from the register for the next iteration
                # implicitly output the global list

Ngắn gọn và chính xác, chơi tốt!

Nghĩ rằng tôi có thể thoát khỏi s, là sai, câu trả lời tốt đẹp.
Bạch tuộc ma thuật Urn

8

Brachylog , 17 byte

g:I{tẹḟᵐ+}ᵃ⁾L¬≠Lk

Hãy thử trực tuyến!

Giải trình

g:I{     }ᵃ⁾         Accumulate I (a variable) times, with [Input] as initial input:
    t                  Take the last integer
     ẹḟᵐ+              Compute the sum of the factorial of its digits
            L        The result of the accumulation is L
            L­      Not all elements of L are different
               Lk    Output is L minus the last one (which is the start of the loop)

Inghĩa là gì?
Leaky Nun

1
@LeakyNun Đó là một tham số ᵃ⁾. ᵃ³có nghĩa là "tích lũy 3 lần". ᵃ⁾có nghĩa là "tích lũy nhiều lần như phần tử cuối cùng của đầu vào", trong trường hợp đó là I. Vì Ilà một biến hoàn toàn miễn phí, nó sẽ thử các giá trị cho nó từ 0đến +inf.
Gây tử vong vào

8

Ngôn ngữ Wolfram, 62 60 56 byte

Most@NestWhileList[Tr[IntegerDigits@#!]&,#,UnsameQ,All]&

Thật là quá tệ khi Ngôn ngữ Wolfram có tên hàm dài ghê gớm như vậy. *Thở dài*

Giải trình:

Most[NestWhileList[Tr[IntegerDigits[#]!]&,#,UnsameQ,All]]&
                      IntegerDigits[#]                     (*Split input into list of digits*)
                                      !                    (*Factorial each element in the list*)
                   Tr[                 ]&                  (*Sum the list together*)
     NestWhileList[                      ,#,UnsameQ,All]   (*Iterate the function over itself, pushing each to a list, until a repeat is detected*)
Most[                                                   ]& (*Remove the last element in the list*)

Câu trả lời tốt đẹp. Tôi không nghĩ rằng điều này có thể được cải thiện.
Kelly Lowder

1
@KellyLowder Cảm ơn! Tôi thực sự có thể lưu thêm hai byte bằng cách ánh xạ giai thừa vào danh sách, sau đó tóm tắt nó Tr.
Scott Milner

1
Sử dụng tốt đẹp NestWhileList[...,All]!
Greg Martin

6

JavaScript (ES6), 91 89 byte

Đã lưu 2 byte nhờ fəˈnɛtɪk

Nó hóa ra khá giống với câu trả lời JS khác .

f=(n,x=!(a=[n]))=>n?f(n/10|0,x+(F=n=>n?n--*F(n):1)(n%10)):~a.indexOf(x)?a:f(x,!a.push(x))


Trong hàm giai thừa của bạn, bạn không nên sử dụng n thay vì n> 1 vì 0! = 1?
fnɛtɪk

@ fəˈnɛtɪk Tôi không biết tôi đang nghĩ gì ở đây. Cảm ơn bạn!
Arnauld

5

ClojureScript, 146 109 byte

#(loop[n[%]](let[f(apply +(for[a(str(last n))](apply *(range 1(int a))))](if(some #{f}n)n(recur(conj n f)))))

Rất tiếc, đó là một điều quái dị. Ai đó làm ơn giúp tôi chơi gôn này ...

Cảm ơn bạn đã @cliffrootcạo sạch một con số khổng lồ 37 byte!

Đây là một chức năng ẩn danh, để chạy chức năng, bạn phải làm điều này:

(#(...) {arguments})

TIO không có ClojureScript, vì vậy đây là một liên kết đến REPL ClojureScript.

Đây là một liên kết đến một chương trình Clojure in phần tử cuối cùng trong danh sách từ 0 đến 1000.

Đây là đầu ra cho 9999:

[9999 1451520 269 363602 1455 265 842 40346 775 10200 6 720 5043 151 122 5 120 4 24 26 722 5044 169 363601 1454]

Tôi có một sự nghi ngờ mạnh mẽ rằng tất cả các số cuối cùng phải giải quyết tại 1hoặc vòng lặp [169 363601 1454].

Mã bị đánh cắp:

(defn fact-cycle [n]
  (loop [nums [n]]
    (let [fact-num
          (let [str-n (str (last nums))]
            (apply +
              (for [a (range (count str-n))]
                (apply *
                  (range 1
                    (inc (int (nth str-n a))))))))]
      (if (some #{fact-num} nums) nums
        (recur
          (conj nums fact-num))))))

Giải thích đến sớm!


Khá dài nhưng đúng;) Tôi thực sự không thể giúp bạn chơi golf này xin lỗi ^^

bên trong forcó thể (for[a s](apply *(range 1(-(int a)47)))), phải không?
cliffroot

và cái này sẽ cho phép loại bỏ cái kia let #(loop[n[%]](let[f(apply +(for[a(str(last n))](apply *(range 1(-(int a)47)))))](if(some #{f}n)n(recur(conj n f)))))
cliffroot

oh, có vẻ như bạn thậm chí không cần (- ... 47) đến ClojureScript, chỉ là intsẽ đủ
cliffroot

tốt, (inc(int a))nên làm cho ClojureScript và (-(int a)47)cho Clojure.
vách đá

5

Perl 6 , 64 byte

{my@a;$_,{[+] .comb.map:{[*] 2..$_}}...^{$_@a||!@a.push: $_}}

Thử nó

Mở rộng:

{

  my @a;             # array of values already seen

  $_,                # seed sequence with the input

  {
    [+]              # reduce using &infix:<+>
      .comb          # the digits of $_ (implicit method call)
      .map:          # do the following for each
      {
        [*] 2..$_    # get the factorial of
      }
  }


  ...^               # keep generating values until
                     # (「^」 means throw away the last value when done)

  {
      $_  @a        # is it an elem of @a? (「∈」 is shorter than 「(cont)」)

    ||               # if it's not

      !              # boolean invert so this returns False
        @a.push: $_  # add the tested value to @a
  }
}

Mỗi dòng ở trên đã {bắt đầu một lambda khối mới với một tham số ngầm định là $_.

Tôi đã sử dụng [*] 2..$_thay vì [*] 1..$_hoàn toàn là một tối ưu hóa vi mô.


4

JavaScript, 92 byte

Cảm ơn @Shaggy đã chơi golf một byte với bao gồm
Cảm ơn @Neil vì đã chơi golf hai byte

Mã được phân tách thành các hàm riêng lẻ 92 byte

f=(x,a=[])=>a.includes(x)?a:f(k(x),a,a.push(x))
p=y=>y?y*p(y-1):1
k=n=>n?p(n%10)+k(n/10|0):0

Mã trên một dòng 92 byte

f=(x,a=[])=>a.includes(x)?a:f((k=n=>n?(p=y=>y?y*p(y-1):1)(n%10)+k(n/10|0):0)(x),a,a.push(x))

Giải trình

Ban đầu gọi hàm chỉ bằng một đối số duy nhất, do đó a = [].

Nếu x tồn tại trong mảng, trả về a a.includes(x)?a:...

Mặt khác, nối x vào a và truyền tổng chữ số giai thừa và a cho hàm (a.push(x),f(k(x),a))

p=y=>y?y*p(y-1):1
k=n=>n?p(n%10)+k(n/10|0):0

Tổng số chữ số được thực hiện sao cho nó sẽ không vượt quá giới hạn đệ quy tối đa.

Danh sách tất cả các điểm cuối có thể: 1, 2, 145, 169, 871, 872, 1454, 40585, 45361, 45362, 363601

Hãy thử trực tuyến!


1
Gah, tôi đã rất gần! Lưu một byte vớif=(x,a=[])=>a.includes(x)?a:(a.push(x),f(k(x),a))
Shaggy

Bạn không thể viết f(k(x),a,a.push(x))? Ngoài ra, tôi nghĩ bạn có thể viết k=n=>n&&để lưu một byte khác.
Neil

4

Haskell , 80 67 byte

g#n|elem n g=g|h<-g++[n]=h#sum[product[1..read[d]]|d<-show n]
([]#)

Hãy thử trực tuyến! Sử dụng:([]#) 132

Chỉnh sửa: Đã lưu 13 byte với các typs từ Ørjan Johansen!


(1) Kiểm tra và append nthay vì s(giống như trong Python câu trả lời OVS của), sau đó f=([]#). (2) Chuyển đổi các nhánh, nội tuyến svà sử dụng elem.
Ørjan Johansen

Thay đổi của bạn ++cho :cũng.

1
@Canyon Đó là thứ tự sai xung quanh cho điều đó, nó sẽ cho kết quả cuối cùng đảo ngược. Bạn có thể gần như sửa chữa nó lên sau đó, bởi prepending thêm n:và thay đổi =gđến =[], nhưng nó có vẻ là chỉ một cà vạt.
Ørjan Johansen

4

Bình thường, 9 byte

.us.!MjNT
.us.!MjNTQ  implicit Q

.u          explained below
       N      current value
      j T     convert to decimal (list of digits)
   .!M        factorial of each digit
  s           sum

Hãy thử trực tuyến!

Câu trả lời này sử dụng .u("Điểm cố định tích lũy. Áp dụng cho đến khi kết quả đã xảy ra trước đó được tìm thấy. Trả về tất cả các kết quả trung gian.")




2

R, 120 byte

o=scan()
repeat {
q=sum(factorial(as.double(el(strsplit(as.character(o[length(o)]), "")))))
if(q%in%o)break
o=c(o,q)
}
o

bạn có thể làm o=scan(), sử dụng el()thay vì [[1]]gamma(n+1)=factorial(n)tôi tin rằng tiết kiệm một byte và tôi nghĩ as.numericcũng giống như as.doubleđối với các số nguyên, cũng lưu một byte và bạn có thể sử dụng toStringthay vì as.character.
Giuseppe

@Giuseppe Cảm ơn bạn đã nhập, cập nhật.
Neil

2

Java 9 JSHell, 213 byte

n->{Set<Integer>s=new HashSet<>();
return IntStream.iterate(n,i->(""+i).chars()
.map(x->x<50?1:IntStream.rangeClosed(2,x-48)
.reduce(1,(a,b)->a*b)).sum()).boxed()
.takeWhile(x->s.add(x)).collect(Collectors.toList());}

Hãy thử trực tuyến!

Lưu ý: Giải pháp này dựa trên biểu diễn chuỗi của một số có điểm mã trong phạm vi 48-57. Hoạt động cho ASCII, UTF-8, Latin-1, tất cả các bộ ký tự ISO-8859- *, hầu hết các trang mã. Không hoạt động cho EBCDIC. Tôi không nghĩ ai sẽ trừ điểm cho điều đó. :)

Ung dung:

Function<Integer, List<Integer>> f =        // function from Integer to List of Integer
n -> {
    Set<Integer> s = new HashSet<>();       // memo of values we've seen
    return IntStream.iterate(n,             // iterate over n, f(n), f(f(n)), etc.
    i -> (""+i).chars()                     // the sumFac function; for all chars
        .map(x -> x < 50? 1 :               // give 1 for 0! or 1!
        IntStream.rangeClosed(2, x-48)      // else produce range 2..d 
        .reduce(1,(a,b)->a*b))              // reduction to get the factorial
        .sum())                             // and sum up the factorii!

                                            // now we have a stream of ints
                                            // from applying sumFac repeatedly
        .boxed()                            // box them into Integers (thanks, Java)
        .takeWhile(x->s.add(x))             // and take them while not in the memo
        .collect(Collectors.toList());      // collect them into a list
}

Ghi chú:

  • Giá trị trả về của Set :: add rất hữu ích ở đây; trả về true khi và chỉ khi mục không có trong tập hợp
  • Tôi đã mỉa mai khi tôi nói "Cảm ơn, Java"
  • factorii không thực sự là một từ; Tôi vừa mới làm nó lên

1
Tôi thừa nhận đây là bản gốc! Làm tốt lắm :)

@Antoine Tôi thừa nhận, Java không phải là ngôn ngữ tốt nhất để chơi gôn, nhưng đó hầu như không phải là điều điên rồ nhất mà tôi đã làm gần đây. :) codegolf.stackexchange.com/a/117644/794
David Conrad

2

Bình thường, 22 11 byte

.usm.!sd+Nk

Hãy thử trực tuyến!

Rất nhiều tín dụng cho câu trả lời của Leaky Nun , đã giới thiệu cho tôi .uvà đã giúp tiết kiệm 11 byte lớn của chương trình này.

Giải trình:

.usm.!sd+NkQ | ending Q is implicitly added
             | Implicit: Q = eval(input())
.u         Q | Repeat the function with initial value Q until a previous value is found. Return all intermediate values
  s          | Summation
   m.!sd     | For each character 'd' in the string, convert to integer and take the factorial
        +Nk  | Convert function argument to string

Pyth có nhiều chức năng hữu ích hơn một tưởng tượng. Xem câu trả lời của tôi làm tài liệu tham khảo.
Leaky Nun

@LeakyNun Tôi đã viết lại câu trả lời của mình để sử dụng .u. Tôi đoán tôi sẽ cần xem qua tham chiếu nhân vật một lần nữa để xem liệu có bất kỳ chức năng hữu ích nào khác ở đó không.
K Zhang

Bạn có thể sử dụng `Nđể chuyển đổi thành chuỗi thay vì +Nk.
Leaky Nun

@LeakyNun Khi đó Nsẽ là lỗi thời, và có một giải pháp 9 byte ...
Erik the Outgolfer

1

Tiên đề, 231 byte

l(a:NNI):List NNI==(r:List NNI:=[];repeat(r:=cons(a rem 10,r);a:=a quo 10;a=0=>break);r)
g(a:NNI):NNI==reduce(+,[factorial(x) for x in l(a)])
h(a:NNI):List NNI==(r:=[a];repeat(a:=g(a);member?(a,r)=>break;r:=cons(a,r));reverse(r))

không có chức năng chơi gôn và một số bài kiểm tra

-- convert one NNI in its list of digits
listify(a:NNI):List NNI==
    r:List NNI:=[]
    repeat
        r:=cons(a rem 10,r)
        a:=     a quo 10
        a=0=>break
    r

-- g(1234)=1!+2!+3!+4!
SumfactorialDigits(a:NNI):NNI==reduce(+,[factorial(x) for x in listify(a)])

ListGenerateFromSumFactorialDigits(a:NNI):List NNI==
    r:=[a]
    repeat
       a:=SumfactorialDigits(a)
       member?(a,r)=>break
       r:=cons(a,r)
    reverse(r)

(9) -> h 132
   (9)
   [132, 9, 362880, 81369, 403927, 367953, 368772, 51128, 40444, 97, 367920,
    368649, 404670, 5810, 40442, 75, 5160, 842, 40346, 775, 10200, 6, 720,
    5043, 151, 122, 5, 120, 4, 24, 26, 722, 5044, 169, 363601, 1454]

1

Java 7, 220 byte

String c(int n){String r=n+",",c;for(;!r.matches("^"+(c=(n=d(n))+",")+".*|.*,"+c+".*");r+=c);return r;}int d(int n){int s=0;for(String i:(n+"").split(""))s+=f(new Long(i));return s;}long f(long x){return x<2?1:x*f(x-1);}

Giải trình:

String c(int n){                            // Method with integer parameter and String return-type
  String r=n+",",                           //  Result-String (which starts with the input integer + a comma
         c;                                 //  Temp String
  for(;!r.matches(                          //  Loop as long as the result-String doesn't match the following regex:
    "^"+(c=(n=d(n))+",")+".*|.*,"+c+".*");  //    "^i,.*|.*,i,.*" where `i` is the current integer
                                            //   `n=d(n)` calculates the next integer in line
                                            //   `c=(n=d(n))+","` sets the temp String to this integer + a comma
    r+=c                                    //   And append the result-String with this temp String
  );                                        //  End of loop
  return r;                                 //  Return the result-String
}                                           // End of method

int d(int n){                               // Separate method (1) with integer parameter and integer return-type
  int s=0;                                  //  Sum
  for(String i:(n+"").split(""))            //  Loop over the digits of `n`
    s+=f(new Long(i));                      //   And add the factorial of these digits to the sum
                                            //  End of loop (implicit / single-line body)
  return s;                                 //  Return the sum
}                                           // End of separate method (1)

long f(long x){                             // Separate method (2) with long parameter and long return-type (calculates the factorial)
                                            // (NOTE: 2x `long` and the `new Long(i)` is shorter than 2x `int` and `new Integer(i)`, hence long instead of int)
  return x<2?                               //  If `x` is 1:
      1                                     //   return 1
    :                                       //  Else:
      x*f(x-1);                             //   return `x` multiplied by the recursive-call of `x-1`
}                                           // End of method (2)

Mã kiểm tra:

Hãy thử nó ở đây.

class M{
  String c(int n){String r=n+",",c;for(;!r.matches("^"+(c=(n=d(n))+",")+".*|.*,"+c+".*");r+=c);return r;}int d(int n){int s=0;for(String i:(n+"").split(""))s+=f(new Long(i));return s;}long f(long x){return x<2?1:x*f(x-1);}

  public static void main(String[] a){
    System.out.println(new M().c(132));
  }
}

Đầu ra:

132,9,362880,81369,403927,367953,368772,51128,40444,97,367920,368649,404670,5810,40442,75,5160,842,40346,775,10200,6,720,5043,151,122,5,120,4,24,26,722,5044,169,363601,1454,



1

TI-BASIC, 85 79 64 60 byte

:Prompt L₁                             //Get input as 1 length list, 4 bytes
:Lbl C                                //create marker for looping, see below, 3 bytes
:int(10fPart(Xseq(10^(~A-1),A,0,log(X //split input into list of digits, 20 bytes
:sum(Ans!→X                           //factorial and sum the list, write to new input, 6 bytes
:If prod(L₁-X                         //Test to see if new element is repeated, see below, 7 bytes
:Then                                 //Part of If statement, 2 bytes
:augment(L₁,{X→L₁                     //Push new input to List 1, 10 bytes
:Goto C                               //Loop back to beginning, 3 bytes
:Else                                 //Part of If statement, 2 bytes
:L₁                                   //Print Answer, 2 bytes

Vì điều này đang chạy trên một máy tính đồ họa, có RAM hạn chế. Hãy thử kiểm tra nó với các số vòng lặp nhanh chóng, như thế nào 169.

Giải thích thêm:

:int(10fPart(Xseq(10^(~A-1),A,0,log(X
              seq(10^(~A-1),A,0,log(X //Get a list of powers of 10 for each digit (i.e. 1, 0.1, 0.01, etc.)
             X                        //Multiply by input
       fPart(                         //Remove everything but the decimal
     10                               //Multiply by 10 (move one digit in front of the decimal
:int(                                 //Truncate to an integer

If prod(L₁-Xhoạt động bằng cách trừ phần tử mới khỏi danh sách cũ, sau đó nhân tất cả các phần tử của danh sách lại với nhau. Nếu phần tử đã có trong danh sách, sản phẩm sẽ là 0một giá trị falsey. Nếu không, sản phẩm sẽ là số nguyên dương, giá trị trung thực.



1

J , 40 31 byte

Chỉnh sửa: 9 byte được lưu bằng các cải tiến của FrownyFrog. Cảm ơn!

f=.$:@,~`]@.e.~[:+/@:!10#.inv{:

Mã gốc:

f =. [`($: @,) @. ([: -. e. ~) [: + /! @ (". "0 &": @ {:)

Trong trường hợp này, tôi quyết định đếm byte cho định nghĩa động từ, vì nếu không thì nó không hoạt động trong trình thông dịch.

Giải trình:

                         ({:) - Lấy phần tử cuối cùng của mảng
                               ": @ - chuyển đổi nó thành chuỗi
                          "." 0 & - chuyển đổi từng ký tự thành số nguyên
                       ! @ - tìm giai thừa
                     + / - tổng hợp chúng
                   [: - cap (có 2 động từ dẫn xuất ở trên, chúng ta cần 3 cho một ngã ba)
          (e. ~) - kiểm tra xem kết quả có trong danh sách không    
             -. - phủ nhận kiểm tra trên
           [: - mũ lưỡi trai
        @. - Chương trình nghị sự kết hợp, cần thiết cho đệ quy
  ($: @,) - nếu kết quả không có trong danh sách, hãy thêm nó vào danh sách và tái diễn
[`- nếu kết quả có trong danh sách, hiển thị nó và dừng lại    

Hãy thử trực tuyến!


1
([:-.e.~)->(1-e.~)
FrownyFrog


@FrownyFrog Cảm ơn, mã của bạn tốt hơn nhiều! Tôi đã thử 10 # .inv sớm trong khi thử nghiệm, nhưng sau đó tôi đã viết nó 10 & #. Inv và nó dài hơn, vì vậy tôi đã từ chối nó. Cảm ơn tất cả đề xuất của bạn! Tôi có nhiều thứ để học :)
Galen Ivanov

@FrownyFrog Đảo ngược các trường hợp cho chương trình nghị sự là rất tốt, tôi rất tiếc tôi đã không nhìn thấy nó :)
Galen Ivanov

[:+/!@"."0@":@{:có cùng độ dài, vì vậy không có cải thiện với 10#.inv. Chỉ cần phải thả ().
FrownyFrog

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.