Trình tự bình phương


29

Mỗi thuật ngữ trong chuỗi bình phương, x n , được tạo bằng cách lấy x n-1 , bình phương nó và xóa tất cả trừ bốn chữ số đầu tiên.

Chuỗi luôn bắt đầu với x 1 = 1111 . Bình phương này mang lại 1234321, vì vậy x 2 = 1234

Một vài thuật ngữ đầu tiên là:

1111
1234
1522
2316
5363
...

Các thách thức

Nhiệm vụ của bạn là, đưa ra một số nguyên n không âm , tính x n . Bạn có thể gửi một chương trình đầy đủ thực hiện I / O hoặc một hàm lấy n làm tham số.

Giải pháp của bạn có thể bằng 0 hoặc một chỉ mục, miễn là bạn chỉ định cái nào.

Vì tất cả các thuật ngữ trong chuỗi này ngắn hơn 5 chữ số, mã của bạn cũng phải càng ngắn càng tốt. Tiêu chuẩn lỗ áp dụng.

Có thể người chơi golf tốt nhất giành chiến thắng!


Các trường hợp thử nghiệm

Lưu ý: Đây là 1 chỉ mục.

1   -> 1111
8   -> 6840
15  -> 7584
20  -> 1425
80  -> 4717

2
Đây là một liên kết có liên quan :)
FlipTack

Câu trả lời:


11

05AB1E , 8 7 byte

Mã số:

$Fn4×4£

Giải trình:

$        # Push 1 and the input
 F       # Input times do...
  n      #   Square the number
   4×    #   Repeat that string 4 times
     4£  #   Take the first four characters
         # Output the last computed number

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!


3
Đánh bại tôi sau 20 giây :(.
Magic Octopus Urn

24

JavaScript (ES7), 44 43 36 byte

f=n=>--n?(f(n)**2+f).slice(0,4):1111

Đây là một ví dụ tuyệt vời về lạm dụng kiểu ép buộc: ** chuyển đổi cả đối số của nó thành số và +chuyển đổi cả đối số của nó thành chuỗi trừ khi cả hai đều là số. Điều này có nghĩa là f(n)**2+fđầu tiên chuyển đổi f(n)thành một số và bình phương nó, sau đó nối kết quả với biểu diễn chuỗi của f. Sau đó chúng ta có thể sử dụng .sliceđể lấy 4 ký tự đầu tiên của chuỗi.

Dưới đây là một vài cách tiếp cận thay thế không sử dụng chuỗi:

f=(n,x=1111)=>x<1e4?--n?f(n,x*x):x:f(n,x/10|0)
f=n=>--n?(x=f(n))*x/(x>3162?1e4:1e3)|0:1111

Kiểm tra đoạn

Lưu ý: điều này sử dụng Math.pow**không được hỗ trợ trong tất cả các trình duyệt.


6

Haskell, 40 byte

((iterate(read.take 4.show.(^2))1111)!!)

Đó là một chuỗi dựa trên 0. Ví dụ sử dụng:((iterate(read.take 4.show.(^2))1111)!!) 79 -> 4717.

Làm thế nào nó hoạt động:

iterate (   ) 1111               -- repeatedly apply a function starting
                                 -- with 1111 and collect the results in a list
                                 -- the function is
           (^2)                  -- square
        show                     -- turn into string
     take 4                      -- take the first 4 chars
  read                           -- turn back to number
                     !!          -- finally pick the nth element from the list         

6

Toán học, 48 byte

Nest[⌊10^(3-⌊t=2Log[10,#]⌋+t)⌋&,1111,#]&

Hàm không tên lấy một đối số nguyên; Chỉ số 0. Sử dụng bốn ký tự ba byte ⌊⌊⌋⌋: Mathicala sử dụng một trong haiFloor[x] hoặc ⌊x⌋để làm tròn một số thực xuống một số nguyên và nói chung là một byte ít hơn. Các tên lệnh trong Mathicala để chuyển đổi số nguyên thành chuỗi quá dài, vì vậy thay vào đó chúng tôi thực hiện một phép tính toán học để tìm bốn chữ số đầu tiên của x ^ 2: chúng tôi lấy logarit cơ số 10 của x ^ 2, trừ phần nguyên của nó, tăng 10 trở lại sức mạnh đó, và nhân 1000 và làm tròn xuống.

tl; dr: logarit ftw


6

Con trăn 2, 51 46 44 byte

Tôi muốn thoát khỏi sự vụng về ifnếu có thể, nhưng tôi nghĩ rằng execcó thể ngắn hơn .. Hóa ra cho thời điểm đó execlà ngắn hơn. Sai một lần nữa! Hàm đệ quy trả về. Đây là một chỉ mục.

f=lambda n:1111*(n<2)or int(`f(n-1)**2`[:4])

Một giải pháp 46 byte thay thế với exec:

s=1111;exec's=int(`s*s`[:4]);'*input();print s

Một giải pháp đệ quy 49 byte thay thế:

f=lambda n,s=1111:s*0**n or f(n-1,int(`s*2`[:4]))

Cảm ơn Flp.Tkc vì đã lưu một byte bằng cách nhắc nhở tôi rằng bình phương không cần lũy thừa :)


Một giải pháp 46 byte khác:f=lambda n:1111if n<2else int(`f(n-1)**2`[:4])
acrolith 2/12/2016

@daHugLenny thực sự có thể là 45: repl.it/EejD
FlipTack

1
@ Flp.Tkc Và đó thực sự có thể là 44;)
Kade

5

V , 19 byte

4é1Àñ|C="*"
5|D

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

Điều này sử dụng lập chỉ mục dựa trên 0.

Tất nhiên, vì các con số không chính xác là sở trường của V , nên điều này không phải là rất golf. Tuy nhiên, nó cho thấy một lợi thế tốt đẹp V có hơn vim. Bạn có thể chạy macro 0 lần, điều này không thể thực hiện được trong vim vì '0' là lệnh không phải là số đếm.

Điều này chứa nhiều ký tự không thể in được, vì vậy đây là một hexdump:

0000000: 34e9 31c0 f17c 4312 3d12 222a 1222 0a1b  4.1..|C.=."*."..
0000010: 357c 44                                  5|D

Và đây là một phiên bản dễ đọc:

4é1Àñ|C<C-r>=<C-r>"*<C-r>"
<esc>5|D

Giải trình:

4                           " 4 times:
 é1                         " Insert a '1'
   Àñ                       " Arg1 times:
     |                      "   Move to the first character on this line
      C                     "   Delete this whole line and enter insert mode
       <C-r>=               "   Insert the following evaluated as vimscript:
             <C-r>"         "     Insert what we just deleted
                   *        "     Times
                    <C-r>"  "     What we just deleted
<esc>                       "   Escape to normal mode
     5|                     "   Move to the fifth column on this line
       D                    "   And delete until the end of this line
                            " The second 'ñ' is added implicitly

5

Thạch , 12 9 byte

-3 byte nhờ Dennis sử dụng lập chỉ mục dựa trên 1 và nguyên tử khuôn / định hình lại. Gợi ý chơi golf chào mừng! Hãy thử trực tuyến!

²Dṁ4Ḍ
1Ç¡

Ungolfing

Helper link
²       Square.
 D      Integer to decimal (a list of digits).
  ṁ4    Mold/reshape list_of_digits to be 4 digits long.
    Ḍ   Decimal to integer.

Main link: implicit left argument n
1     Start with the nilad 1.
 Ç¡   Call the helper link n times.

Điều này tiết kiệm 3 byte với lập chỉ mục dựa trên 1.
Dennis

Uh, tôi không nghĩ bạn có thể sử dụng 1thay vì ⁽¡n.
Erik the Outgolfer

@EriktheOutgolfer Sao rồi?
Sherlock9

@ Sherlock9 Ồ, bạn dường như chỉ số 1 chuỗi này? Hừm, có vẻ như mật mã hơi khó hiểu ...
Erik the Outgolfer 28/1/18

4

Perl, 37 byte

36 byte mã + -pcờ.

$\=1x4;$\=substr$\*$\,0,4while--$_}{

Để chạy nó:

perl -pe '$\=1x4;$\=substr$\*$\,0,4while--$_}{' <<< 80

4

Powershell, 73 55 byte

Rất cảm ơn TimmyD vì đã loại bỏ 18 byte!

Mã số:

for($A=1111;$args[0]---1;$A=-join"$(+$A*$A)"[0..3]){}$A

$A=1111;1..($n=2)|%{[string]$B=[math]::pow($A,2);$A=$B.substring(0,4)};$A

$nn trong x n-1

Giải thích và mã nổ:

$A=1111                            #starting number
$n=4                               #n in formula
for($i=0; $i -lt $n;$i++)          #loop n times
{
    [string]$B=[math]::pow($A,2)   #create a new string $B and set it to $A raised to the power of 2
    $A=$B.substring(0,4)           #set $A to the first 4 characters of $B
}
$A                             #print $A

Một số lưu ý:

  • Powershell cho phép bạn gán các biến trong cùng một câu lệnh nơi bạn tham chiếu chúng. Ví dụ: 1..($n=4)|%sẽ đặt $ n thành 4 và sau đó bắt đầu một vòng lặp chạy $ n lần. 1có thể được thay đổi thành bất kỳ số nguyên nào và nó sẽ lặp $ n- [số nguyên của bạn] +1 lần.
  • Kiểu dữ liệu mặc định khi sử dụng [math]::trong Powershell là gấp đôi. Trong đoạn mã trên, chúng ta phải truyền một cách rõ ràng $Bthành một chuỗi để chúng ta có thể gọi .substring()nó bởi vì không có .substring()chức năng nào để nhân đôi trong Powershell.

4

Python 2,  44  41 byte

-3 byte nhờ xnor (sử dụng phép chia số nguyên để tránh and)

f=lambda n:int(1/n*1111or`f(n-1)**2`[:4])

thay thế

Hàm đệ quy dựa trên 1.

Khi n>1phép chia số nguyên 1/n, kết quả là 0, sau 0*1111=0đó là falsey, do đó, quyền của số orđược đánh giá, lấy bốn ký tự đầu tiên của biểu diễn bình phương của n-1kết quả thứ; cái này sau đó được đúc thành một int.

Khi n=1bộ phận số nguyên, 1/n, dẫn đến 1, sau đó 1*1111=1111, đó là truthy, và int 1111dàn diễn viên với một int1111.


Tốt, ninja sẽ cho tôi một byte!
FlipTack

Tôi chỉ tìm kiếm câu trả lời của bạn và sau đó nhận ra bạn đã viết thử thách! Công việc tốt.
Jonathan Allan

1
Ý tưởng tốt đẹp với việc lấy intbên ngoài. Nếu bạn 1 chỉ mục, bạn có thể thực hiện trường hợp cơ sở ngắn hơn với g=lambda n:int(1/n*1111or`g(n-1)**2`[:4]).
xnor

1
"Vượt qua 44 vẫn giống như 44 :("
FlipTack

1
@ Flp.Tkc không nhiều như nó không có &nbsp;s!
Jonathan Allan



3

MATL , 14 , 13 byte

1111G:"UV4:)U

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

Giải trình:

1111            % Push 1111
    G           % Push input
     :"         % Input times:
       U        %   Square the top of the stack
        V       %   Convert it to a string
         4:)    %   Take the first four digits
            U   %   Convert it back to a number
                % Implictly display

2
Bạn có thể sử dụng U(hình vuông, cho đầu vào số) bắt nguồn từt*
Luis Mendo

1
@LuisMendo Cảm ơn bạn đã nhắc nhở về chức năng tôi khuyên dùng! : P
DJMcMayhem

3

R, 58 56 55 53 byte

x=3334;for(e in N<-scan():1)x=x^2%/%10^(3+(x>3162));x

Lấy N từ stdin. 3334 thực tế là X_0, điều này là cần thiết bởi vì vòng lặp for cần được thực thi ít nhất một lần (sẽ lâu hơn để bỏ qua).

R thực sự là một ngôn ngữ khủng khiếp khi lấy bốn chữ số đầu tiên của một số, nhưng vì số lượng các trường hợp bị hạn chế, chúng tôi chỉ phải lo lắng về các bình phương x<3163x>3162, trước đây có một số có 6 chữ số, số sau có 7 chữ số .

Phần còn lại là khá đơn giản, %/%phân chia và bỏ qua phần còn lại. xđược in ra thiết bị xuất chuẩn.

Đã lưu 2 byte nhờ @ETHproductions


Điều này thật vô ích. Rực rỡ!
Andreï Kostyrka

1
Đẹp quá Điều gì sẽ xảy ra nếu bạn bắt đầu với 3334(hoặc có lẽ 3333)?
Sản xuất ETH

@ETHproductions 3333^2 = 11108889vì vậy sẽ mang lại 1110, và .... khi tôi kiểm tra điều này tôi thấy 3334sẽ hoạt động: | . Không chắc tại sao tôi không kiểm tra nó nữa.
JAD

3

Javagony - 153 byte

Javagony là một phiên bản Java bị hạn chế, không cho phép bất kỳ luồng điều khiển nào ngoại trừ đệ quy và try-catch, không cho các vòng lặp, trong khi các vòng lặp hoặc nếu là. Viết mã trong đó là một bài tập khá thú vị, nhưng bực bội. Không phải là Java thông thường gần như không gây khó chịu cho chính nó.

int a(int i){return a(i-1,1111);}int a(int i,int n){try{int x=1/i;return a(i-1,Integer.parseInt((n*n+"").substring(0,4)));}catch(Exception e){return n;}}

3

PHP, 55 52 byte

Đã lưu 3 byte nhờ @ user59178

for($i=1111;$argv[1]--;)$i=substr($i**2,0,4);echo$i;

Chạy từ dòng lệnh, không có chỉ mục.

Cảm ơn vì đã không quan tâm đến loại biến của tôi là gì, PHP! Ở đây chúng ta chỉ cần bình phương số và cắt bỏ mọi thứ qua 4 chữ số đầu tiên, tình cờ xen kẽ giữa số và chuỗi mà không cần quan tâm trên thế giới.


Bạn có thể lưu 3 byte bằng cách sử dụng $argv[1]--làm bộ đếm vòng lặp.
dùng59178

2

Brachylog , 18 byte

,1111:?:{^@[.l4,}i

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

Câu trả lời này là 0-index.

Giải trình

,1111:?:{       }i      Iteratively call Input times the predicate in brackets starting with
                          input 1111:

         ^                  Square
          @[.               Output is a prefix of the square
            .l4,            Its length is 4

2

C, 56 byte

a;s(n){for(a=1111;--n;)a=a*a/(a>3162?1e4:1e3);return a;}

Một chỉ mục.


1
Tôi có cảm giác rằng bạn có thể đi đệ quy ...
Mukul Kumar

2

Clojure, 76 byte

(defn s[n](if(= n 1)1111(read-string(subs(str(*(s(dec n))(s(dec n))))0 4))))

Golf Clojure đầu tiên (có vẻ như là một ngôn ngữ tốt đẹp). Đây là 1 chỉ mục.

Sẽ giải thích mã sau.


2

C #, 64 60 byte

Đã lưu 4 byte bằng cách theo dõi nhận xét của Olivier Grégoire về câu trả lời Java!

n=>{int x=1111;for(;n-->1;)for(x*=x;x>1e4;x/=10);return x;};

Phiên bản trước ( 64 byte ):

n=>{int x=1111;while(n-->1){x*=x;while(x>9999)x/=10;}return x;};

Chương trình đầy đủ với phương pháp vô căn cứ và các trường hợp thử nghiệm:

using System;

namespace SquaringSequence
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int, int> f = n =>
            {
                int x = 1111;
                while (n-- > 1)
                {
                    x *= x;
                    while (x > 9999)
                        x /= 10;
                }
                return x;
            };

            // test cases:
            Console.WriteLine(f(1));    // 1111
            Console.WriteLine(f(8));    // 6840
            Console.WriteLine(f(15));   // 7584
            Console.WriteLine(f(20));   // 1425
            Console.WriteLine(f(80));   // 4717
        }
    }
}

1
+1 cho người điều hành bóng tốin-->1
Karl Napf

2

Ruby, 47 byte

Golf đầu tiên! Lưu byte với -ntùy chọn (nhưng vẫn được tính là 1! :)).

a=1111;$_.to_i.times{a="#{a*a}"[0,4].to_i};p a

Chỉ số 0. Để chạy nó:

ruby -ne 'a=1111;$_.to_i.times{a="#{a*a}"[0,4].to_i};p a' <<< 80

Chào mừng đến với trang web, và câu trả lời đầu tiên tốt đẹp! Mặc dù vậy, về mặt kỹ thuật, đây là 47 byte do chính sách đếm cờ dòng lệnh của chúng tôi đối với số byte. Ngoài ra, nó có vẻ tốt với tôi!
DJMcMayhem

Cảm ơn! Không biết các quy tắc, câu trả lời đã thay đổi!
ghivert

2

Bình thường, 13 12 byte

Cảm ơn @Jakube cho -1 byte

us<*4`*GG4Q1

Một chương trình lấy đầu vào của số nguyên 1 chỉ mục và in kết quả.

Bộ kiểm tra

Điều này sử dụng một cách tiếp cận tương tự như câu trả lời của @ Adnan .

Làm thế nào nó hoạt động

us<*4`*GG4Q1  Program. Input: Q
u         Q1  Execute the following Q times, starting at 1, with variable G:
      *GG      Yield G*G
     `          Convert to string
   *4           Repeat 4 times
  <      4      Yield first 4 characters
 s              Convert to integer
              Implicitly print

1
*GGthay vì^G2<space>
Jakube


1

Mẻ, 82 byte

@set n=1111
@for /l %%i in (1,1,%1)do @set/an*=n&call set n=%%n:~0,4%%
@echo %n%

Giống như Perl, các số nguyên là các chuỗi, nhưng không giống như Perl, tôi chỉ có thể lấy chuỗi con của một biến và việc lấy các chuỗi bên trong một vòng lặp là hơi khó xử.


Tôi nghĩ bạn có thể rời khỏi không gian sau @for.
YourDeathIsComing

@YourDeathIsComing 'for' không được nhận dạng dưới dạng lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó.
Neil

1

Perl 6 , 36 byte

{(1111,{+$_².substr(0,4)}...*)[$_]}

Giải trình:

{                                 } # bare block lambda
  1111,                  ...        # sequence generator
                            *       # without a limit
       {                }           # lambda used to generate the next value
         $_²                        # start by squaring the previous value
            .substr(0,4)            # take only the first four digits
        +                           # make it numeric ( not necessary )
 (                           )[$_]  # return the requested value

Kiểm tra:

say {(1111,{+$_².substr(0,4)}...*)[$_]}( 1,8,15,20,80 X- 1 ).perl
# (1111, 6840, 7584, 1425, 4717)

1

Matlab, 79 , 78 byte

function a=s(n)
if n<2;a=1111; else f=s(n-1);a=fix(f^2/10^(3+(f>1e7^.5)));end

Các trường hợp thử nghiệm:

s(79) = 2172
s(49) = 8059
s(6)  = 2876

Không phải là một giải pháp tuyệt vời. Tôi chắc chắn phải có một cách tốt hơn để cắt ngắn thành 4 chữ số nhưng tôi không biết ngày hôm nay.

Chỉnh sửa: Cạo một byte bằng cách đặt 0,5 -> .5


1

Java 8, 77 93 74 71 69 78 byte

int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4));}

x->{int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4))‌​;}return n;}

x->{int n=1111;for(;--x>0;){n=Integer.parseInt((n*n+"").substring(0,4));}}

x->{long n=1111;for(;--x>0;){n=Long.valueOf((n*n+"").substring(0,4));}}

x->{long n=1111;for(;--x>0;)n=Long.valueOf((n*n+"").substring(0,4));return n;}

Mỗi lần lặp lại làm cho n4 ký tự đầu tiên của n*n.

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

Lịch sử bài:

  • 77 byte: mã ban đầu (không đầy đủ)

  • +16 byte, bởi Olivier Grégoire: hoàn thành mã bằng cách biến nó thành hàm Lambda.

  • -19 byte: thay thế whilebằng forchu kỳ.

  • -4 byte: được sử dụng longs thay vì ints

  • -2 byte, bởi Roman Gräf: đã xóa các dấu ngoặc không cần thiết

  • +9 byte, thiếu returncâu lệnh

Cảm ơn @ OlivierGrégoire và @ RomanGräf đã chỉ ra một số vấn đề!

Đợi đã, Java đập ... (trống) Clojure Matlab tại đây! Một tràng pháo tay lớn cho Java!


2
Câu trả lời này không đầy đủ. xkhông được tuyên bố. Đây phải là một chức năng hoặc chương trình đầy đủ. Không phải là một đoạn mã.
Phi tuyến

@NonlinearFnut Tôi đang đi cho chức năng. Có vẻ như tôi đã bỏ lỡ điều này. Ý bạn là tôi chỉ nên thay x bằng một số?
RudolfJelin

1
Điều @NonlinearFbean nói là câu trả lời của bạn, với mã hiện tại của bạn, phải là: x->{int n=1111;int m=1;while(x>m++){n=Integer.parseInt((n*n+"").substring(0,4));}return n;}(với tổng số byte là 91). Điều này là do đoạn trích không được phép: chỉ các chức năng hoặc chương trình đầy đủ.
Olivier Grégoire

@ OlivierGrégoire Không phải là 93 byte sao? Và cảm ơn vì đã chỉ ra funcions lambda.
RudolfJelin

Bạn nói đúng, đó là 93 byte, tôi phải kiểm tra từ phiên bản lỗi trước đó. Tuy nhiên, tất cả những gì tôi đã làm là gói để chương trình của bạn trở thành một mục hợp lệ. Bây giờ bạn có thể đánh golf ra khỏi nó! Ví dụ, đây là một phiên bản golfed của chương trình của bạn chỉ 75 byte: x->{Long n=1111;for(;--x>0;)n=n.valueOf((n*n+"").substring(0,4));return n;}, với một số kỹ thuật được sử dụng (sử dụng Longđể có thể sử dụng Long.valueOfvới byte ít hơn, nó không được khuyến khích trong chương trình bình thường, nhưng hoàn toàn trong chơi golf; loại bỏ mvì nó là không cần thiết nếu chúng ta giảm xthay vào đó, loại bỏ niềng răng không cần thiết)
Olivier Grégoire

1

Perl, 36 byte

Một cách tiếp cận khác với giải pháp Perl khác, dẫn đến mã ngắn hơn một chút. Không cần đối số dòng lệnh (trừ đối số lựa chọn phiên bản thông thường -M5.010, không tính theo số byte), nghĩa là đây là cùng một lượng mã nhưng có ít hình phạt hơn, cho điểm tổng thể tốt hơn.

say+eval'($&*$&||1x4)=~/(....)/;'x<>

Chúng tôi tạo một vòng lặp Underload-style thông qua việc lặp lại và eval-ing một chuỗi; Tôi đã thử nghiệm bắt đầu chuỗi ở giữa, nhưng bắt đầu chuỗi lúc bắt đầu hóa ra là ngắn nhất. Chúng tôi nhân $&(kết quả của trận đấu regex cuối cùng) với chính nó để bình phương nó; nếu kết quả bằng 0, chúng tôi sử dụng 1x4(nghĩa là 1111Perl có toán tử để lặp lại mọi thứ, bao gồm cả chữ số của một số) thay vì kết quả. Sau đó, chúng tôi regex bốn nhân vật đầu tiên. Toàn bộ điều chạy trong bối cảnh danh sách do nằm bên trong say, do đó kết quả cuối cùng evalsẽ là nội dung của dấu ngoặc đơn của trận đấu cuối cùng.


1

Java, 79 67 66 64 byte

  • Phiên bản 2.2 / 64 byte:

Cảm ơn @Oliver Grégoire.

int a(int i){i=i<2?1111:a(--i);for(i*=i;i>1e4;)i/=10;return i;}
  • Phiên bản 2.1 / 66 byte:

Cảm ơn @ETH Producttion.

long a(long i){i=i<2?1111:a(--i);for(i*=i;i>1e4;)i/=10;return i;}
  • Phiên bản 2.0 / 67 byte:

Thay thế chuỗi con và nội dung với ý tưởng từ @Xanderhall

long a(long i){i=i<2?1111:a(--i);i*=i;for(;i>1e4;)i/=10;return i;}
  • Phiên bản 1.0 / 79 byte:

Mặc dù có những giải pháp ngắn hơn tôi muốn đăng một đệ quy :). Và tôi là hàm "thực" ngắn nhất :). Chỉnh sửa: Có vẻ như tôi là người thấp nhất bây giờ :)))

long a(long i){i=i<2?1111:a(--i);return Long.valueOf((i*i+"").substring(0,4));}

Bạn có thể làm được for(i*=i;i>1e4;)i/=10;không Điều đó sẽ tiết kiệm một byte.
Sản xuất ETH

Hmmm ... Về khiếu nại của bạn về hàm Java ngắn nhất, hàm này muốn có một số từ ;-)
Olivier Grégoire

Hmmm, nghĩ về nó, tại sao bạn thậm chí sử dụng longs? Bạn có thể giết hai byte bằng cách sử dụng ints.
Olivier Grégoire

Tôi đã bỏ lỡ điều đó khi tôi cập nhật lên 2.0
Roman Gräf

1

Pushy , 26 20 byte

1111@:2esL4-:.;Kjk;#

Đưa ra các đối số trên dòng lệnh : $ pushy sqseq.pshy 79.

Định dạng độc đáo, với lời giải thích:

            % Implicit: N is on stack
1111@       % Push 1111, and then reverse stack to get [1111, n]
:           % N times do: (this consumes N)
 2e         %   Square last term
 s          %   Split into individual digits
 L4-:.;     %   Get stack length -4, pop that many times
 Kj         %   Join remaining digits (Uses flag "K" for whole stack)
 k          %   Set "K" flag to false, so operations only affect last item
;           % End loop.       
#           % Output final calculated term
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.