Iccanobif 시퀀스 출력


22

nOEIS에 A014258 로 기록 된 Iccanobif 시퀀스의 최대 정수 까지 시퀀스를 출력하거나 반환하는 프로그램 또는 명명 된 함수를 작성하십시오 . 시퀀스 ( 0) 에서 0 번째 요소 만 0 이면 인쇄됩니다 n.

시퀀스는 표준 피보나치 시퀀스처럼 시작하여 생성되지만 두 개의 이전 숫자를 추가 한 후 결과를 뒤집고 선행 0을 삭제합니다. 흥미로운 사실은 적어도이 순서가 엄격하게 증가하지 않는다는 것입니다 (아래 목록 참조). 또한 피보나치 수열보다 크거나 같은 것 같습니다.

프로그램의 입력은 정수 여야합니다.

시청의 즐거움을 위해 시퀀스의 처음 20 개 숫자가 여기에 제공됩니다.

0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769

표준 허점은 금지되어 있습니다.

최단 프로그램이 이깁니다.

편집 : 시퀀스가 ​​0 번째 요소로 시작하고 0 인 경우 포함되어야 함을 명확히하기 위해 메모를 추가했습니다 n.

IO 가능성의 예 :

0    ->    0
1    ->    0 1
6    ->    0 1 1 2 3 5 8
17   ->    [0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297]

이제 몇 가지 답변이 있습니다. 다음은 마크 업으로 숨기려고 열심히 노력한 Python 2의 구현입니다.

반복 :

# 내 초기 프로그램에 가장 가깝습니다. 73 바이트 이 프로그램은 또한
 스택 오버플로에 도달 할 수 없습니다. 10 초 이내에 n = 5000 동안 실행됩니다.

i,a,b=input(),0,1
print a
while i:print b;i,a,b=i-1,b,int(str(a+b)[::-1])

재귀 :

# 이것은 n후행 줄 바꿈을 인쇄합니다 . 64 바이트
 큰 n 값에 대해 스택 오버플로 오류가 발생합니다.

def f(n,i=0,j=1):print i,n and f(n-1,j,int(str(i+j)[::-1]))or'';


8
이전에 수행되지 않은 피보나치 수열과 관련이있는 것에 대해 +1
Level River St

@ steveverrill 나는 또 다른 도전을하고 싶다고 결정한 다음 시퀀스가 ​​어떻게 생겼는지 알기로 결정했습니다. 그래서 나는 프로그램을 썼습니다. 그런 다음 OEIS를 검색하고 도전했습니다.
mbomb007

이 질문에서 영감을 얻었습니까 ?
JohnE

@JohnE 아니요. 전에 본 적이 있지만이 도전은이 사이트에서 가장 간단한 도전 중 하나입니다. 아니, 난 단지 도전으로 사용할 수있는 내 상상력에서 순수한 숫자 시퀀스를 만들고 있었다.
mbomb007

3
답변을 받기 전에 조금 더 기다려야한다고 생각합니다. 답변 중 하나가 명백히 탁월한 경우가 아니면 (예 : 1 바이트 솔루션) 적어도 일주일 동안 기다리는 것이 좋습니다.
Dennis

답변:


3

피스, 17 15 14

Pu+Gs_`s>2GQU2

온라인으로 사용해보십시오

매우 기본적인 구현으로 시작 range(2)하여 입력과 동일한 수의 요소를 추가 한 다음 엑스트라를 분리하여 마지막 요소를 제거합니다.

>반전 을 지적 해 주셔서 감사합니다 .

설명

Pu+Gs_`s>2GQU2    : Q = eval(input) (implicit)
P                 : all but the last element
 u         QU2    : reduce Q times starting with [0, 1]
  +G              : add to the previous result
       s>2G       : sum of the last two elements of G
    s_`           : int(reversed(repr(above value)))

4

파이썬 2, 58 바이트

a=0;b=1
exec"print a;a,b=b,int(str(a+b)[::-1]);"*-~input()

str파이썬 2에서 충분히 큰 숫자가 끝에 L로 쓰여지기 때문에 백틱 대신 변환에 사용 합니다. 재귀 함수를 시도했지만 더 길어졌습니다 (61).

f=lambda n,a=0,b=1:-~n*[0]and[a]+f(n-1,b,int(str(a+b)[::-1]))

3

줄리아, 79 바이트

f=n->(t=[0,1];for i=2:n push!(t,t[i]+t[i-1]|>string|>reverse|>int)end;t[1:n+1])

이것은 정수를 입력으로 받아들이고 정수 배열을 리턴하는 함수를 작성합니다.

언 골프 + 설명 :

function f(n)
    # Start with the usual Fibonacci stuff
    t = [0,1]

    # Looooooooooooooop
    for i = 2:n
        # Compute the Iccanobif number by piping results
        iccanobif = t[i] + t[i-1] |> string |> reverse |> int

        # Jam it into t
        push!(t, iccanobif)
    end

    # Return the first n + 1
    t[1:n+1]
end

예 :

julia> f(1)
2-element Array{Int64,1}:
 0
 1

julia> f(17)
18-element Array{Int64,1}:
      0
      1
      1
      2
      3
      5
      8
     31
     93
    421
    415
    638
   3501
   9314
  51821
  53116
 739401
 715297

3

티 -SQL, 149

재귀 CTE 쿼리를 사용하는 매우 간단한 인라인 테이블 함수입니다. INT를 사용함에 따라 37에서 최고가됩니다. bigint에 CAST를 추가하면 63으로 더 갈 수 있습니다.

create function i(@ int)returns table return with r as(select 0I,1N union all select n,reverse(i+n)+0from r)select 0n union all select top(@)n from r

다음과 같이 사용됩니다

select * from i(0)
n
-----------
0

(1 row(s) affected)

select * from i(1)
n
-----------
0
1

(2 row(s) affected)

select * from i(6)
n
-----------
0
1
1
2
3
5
8

(7 row(s) affected)

select * from i(17)
n
-----------
0
1
1
2
3
5
8
31
93
415
421
638
3501
9314
51821
53116
715297
739401

(18 row(s) affected)

3

K, 25 23 바이트

{-1_ x{x,.|$+/-2#x}/!2}

No Stinking Loops 의 예제 중 하나의 간단한 수정 .

이 문구 .|$는 숫자를 문자열로 변환하고 뒤집은 다음 평가합니다.

편집하다:

내 경계 조건에 부주의 한 관심. 더 정확한 지금 :

  {-1_ x{x,.|$+/-2#x}/!2}'0 1 6 10
(,0
 0 1
 0 1 1 2 3 5 8
 0 1 1 2 3 5 8 31 93 421 415)

편집 2 :

(x+1)#로 교체하여 -1_2자를 저장할 수 있습니다 . _x"drop"연산자를 변수에 적용하려는 경우 식별자가 되기 때문에 공백이 필요 x합니다.


2
OP에 따르면 출력은 0으로 시작해야합니다.
스트레칭 미치광이

수정-지금 수정해야합니다.
JohnE

1
당신이 똑같은 것을 보았을 때에 만 답을 게시하기 위해 여기에 왔습니다. 잘 했어요
tmartin

3

하스켈, 64 49 바이트

a!b=a:b!(read$reverse$show$a+b)
q n=0:take n(1!1)

사용 예 : q 15->[0,1,1,2,3,5,8,31,93,421,415,638,3501,9314,51821,53116]

작동 방식 : !첫 번째 인수 (두 번째 인수는 다음 iccanobif 번호 여야 함)부터 시작하여 무한한 iccanobif 번호 목록을 재귀 적으로 작성합니다. iccanobif 목록에서 q첫 번째 n숫자를 시작 1, 1하고 앞에 붙 습니다 0.


2

CJam, 18 바이트

U1{_2$+sW%i}ri*;]p

작동 원리

U1                      e# First two numbers in the series
  {        }ri*         e# Run the loop input numbers times
   _2$+                 e# Get sum of last two numbers in the series
       sW%i             e# Convert to string, inverse and convert back to a number
                ;       e# Remove the last number to get only first n + 1 numbers.
                 ]p     e# Wrap all numbers in an array and print the array

여기에서 온라인으로 사용해보십시오


2

자바 - 126 (124)

한동안이 사이트에서 Java를 보지 못했습니다 ...

void f(int b){for(int c=0,d=1,g;b-->=0;d=Integer.valueOf(new StringBuilder(c+(c=d)+"").reverse()+""))System.out.println(c);}

f(5) 인쇄물 0 1 1 2 3 5 8 31 93 421 415 638


또한 수락합니다...System.out.println(c);
mbomb007

감사합니다! 2 바이트를 절약했습니다.
스트레칭 미치광이

Java의 문자열 조작이 비용이 많이 들기 때문에 숫자 메소드 를 사용하여 숫자 를 뒤집을 수 있습니다.
mbomb007

1.5 년이 지났다는 것을 알고 있지만로 교체 Integer.valueOf(하여 6 바이트를 절약 할 수 있습니다 new Long((그리고 intfor 루프에서도 변경하십시오 long). 대신 정수로 작업하는 것을 선호하는 경우 new Integer(여전히.보다 짧습니다 Integer.valueOf(.
케빈 크루이 ssen

2

SWI-도입부 141 131 121 바이트

a(X,R):-X>1,A is X-1,a(A,B),reverse(B,[K,L|_]),W is K+L,name(W,Z),reverse(Z,Y),name(E,Y),nth0(X,R,E,B);X=1,R=[0,1];R=[0].

a(17,X).출력을 실행 :

[0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297] 

a(10000,X).컴퓨터 에서 결과를 출력하는 데 약 10 초가 걸립니다 .

편집 : 위의 121 바이트 버전은 하나의 술어 정의 = 하나의 라이너입니다. 이전 131 바이트 버전은 다음과 같습니다 (로 실행해야 함 p(17,X)).

a(0,[0]).
a(1,[1,0]).
a(X,[E|B]):-A is X-1,a(A,B),B=[K,L|_],W is K+L,name(W,Z),reverse(Z,Y),name(E,Y).
p(X,Y):-a(X,Z),reverse(Z,Y).

2

> <> (물고기) 592254 바이트

슈퍼 골프는 아니지만 (총 30 개의 리디렉션 토큰을 사용하지 않는 42/43 블랭크), 처음부터 작동시키는 흥미로운 운동이었습니다.

10!/{:}0=?v/{1-}}:{+:0}!/a,:1%-:0=?!v~{:1!/$:@0=?!v$~}}:&{{&*\
/-$/    ;n/\oo", "n:    \       }+1{/     \$-1$*a /|.!20}}01@/
* :{:}(?v:{!":}-1!/$:@0=?!v$~{:}1!/$:@0=?!v$~}}}:&{{{&*:1%-*&{{&+}}{1+}02.
b .1 +bb   \      \$-1$*a /       \$-1$,a /
\*9{~~~{/

당신은 그것을 테스트 할 수 있습니다 여기 에서 하여 초기 스택에서 원하는 길이를 제공 .

편집 : 반 바이트 수 이상


2

PHP, 114 , 109 바이트

function f($n){if($n==0)return 0;$f=[0,1];for($i=2;$i<=$n;++$i){$f[$i]=strrev($f[$i-1]+$f[$i-2]);}return $f;}

화려하지는 않지만 문자열 역 마법을 사용하는 평균 피보나치 알고리즘.

언 골프 드 :

function f($n)
{
    if($n == 0) return 0;
    $f = [0, 1];
    for ($i=2; $i<=$n; ++$i){
        $f[$i] = strrev($f[$i-1] + $f[$i-2]);
    }
    return $f;
}

1

Excel VBA, 279 바이트

n = InputBox("n")
For i = 0 To n
If i < 2 Then
Cells(i + 1, 1) = i
ElseIf i > 6 Then
x = Cells(i, 1) + Cells(i - 1, 1)
l = Len(x)
v = CStr(x)
For j = 1 To l
r = r + Right(v, 1)
v = Left(v, l - j)
Next j
Cells(i + 1, 1) = r
r = ""
Else
Cells(i + 1, 1) = Cells(i, 1) + Cells(i - 1, 1)
End If
Next i

매크로를 실행하면 사용자에게 n 값을 입력하라는 메시지가 표시됩니다.

그런 다음 결과는 열 A에 한 행씩 인쇄됩니다.

산출


1
코드에서 공백을 제거하여 더 짧게 만들 수 있습니까?
mbomb007

@ mbomb007 Excel VBA로 쓸 때 공백이 자동으로 입력되므로 그대로 두십시오.
Wightboy

1

자바 스크립트 (ES2015), 81 73 바이트

(a,b=0,c=1)=>{for(;a-->-1;c=[...(b+(b=+c)+"")].reverse().join``)alert(b)}

이 기능 ( f)을 6다음 과 같이 실행 :

f(6);// alerts: 0, 1, 1, 2, 3, 5, 8

1

, 13 바이트

이 질문에 답하기 전에이 프로그램에 사용 된 모든 기능이 Pip에 존재한다고 확신합니다.

LaSio:+RVi+oi

명령 행 인수로 입력을받습니다. 온라인으로 사용해보십시오!

설명

               a is 1st cmdline arg; i is 0; o is 1 (implicit)
La             Loop (a) times:
       RVi+o   Reverse of i+o
      +        Unary + treats its operand as a number, thus removing leading 0's
    o:         Assign the result to o...
  Si           ... before swapping i and o
            i  After the loop, output i

두 변수의 값은 다음과 같이 진화합니다.

Iter   o   i (output)
   0   1   0
   1   0   1
   2   1   1
   3   1   2
   4   2   3
   5   3   5
   6   5   8
   7   8  31
   8  31  93
   9  93 421
  10 421 415

0

Pushy , 18 바이트 (비경쟁)

Z1{:2d+vFs@KjkvF;_

온라인으로 사용해보십시오!

가장 우아한 프로그램은 아니지만 작동합니다.

Z1     \ Push 0 and 1 to begin the sequence
{:     \ Input times do:
 2d+   \   Add the last two terms
 vF    \   Send to second stack
 s     \   Split into digits
 @Kjk  \   Reverse and join into one number
 vF;    \   Send back to first stack
_      \ At the end of the program, print the whole stack.

@ mbomb007 네, 죄송합니다!
FlipTack 2019


0

R, 134 바이트

i=function(n){s=c(0,1);for(i in 3:n){s[i]=as.numeric(paste0(rev(strsplit(as.character(s[i-2]+s[i-1]),'')[[1]]),collapse=''))};cat(s)}

예:

> i(10)
0 1 1 2 3 5 8 31 93 421

누군가가 당신의 숫자를 가져 와서 문자열로 만들고 뒤집고 다시 숫자로 바꾸는 것보다 더 나은 R 대안이 있는지 알고 싶습니다.


0

그루비, 70 바이트

{r={"$it".reverse() as int};f={n->n<3?1:r(f(n-1))+r(f(n-2))};r(f(it))}

{
    r={"$it".reverse() as int};       // Reverse digits, costly using string.
    f={n->n<3?1:r(f(n-1))+r(f(n-2))}; // Recursive Iccanobbif implementation.
    r(f(it))                          // Reverse final output.
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.