당신의 fib-abc를 배웠습니까?


31

나는 숫자를 좋아하지 않지만 피보나치 시퀀스를 좋아합니다. 나는 우리가 무언가를 해결할 수 있다고 확신합니다.

하나의 정수 읽어주세요 N STDIN로부터 출력 N 베이스 (26) (의 일 피보나치 수 abcdefghijklmnopqrstuvwxyz대신 0123456789STDOUT 행 참조).

첫 번째 피보나치 수는 0입니다. 두 번째 숫자는 1입니다. n 번째 피보나치 수는 n -2와 n -1st 피보나치 수의 합입니다 .

처음 32 개의 fib-abc 번호 :

fib(0) = a
fib(1) = b
fib(2) = b
fib(3) = c
fib(4) = d
fib(5) = f
fib(6) = i
fib(7) = n
fib(8) = v
fib(9) = bi
fib(10) = cd
fib(11) = dl
fib(12) = fo
fib(13) = iz
fib(14) = on
fib(15) = xm
fib(16) = blz
fib(17) = cjl
fib(18) = dvk
fib(19) = gev
fib(20) = kaf
fib(21) = qfa
fib(22) = baff
fib(23) = bqkf
fib(24) = cqpk
fib(25) = egzp
fib(26) = gxoz
fib(27) = leoo
fib(28) = scdn
fib(29) = bdgsb
fib(30) = bvivo
fib(31) = cypnp

이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


3
@ l0b0 자릿수를 나타내는 문자 선택은 전적으로 임의적이며 일반적인 16 진수는 단지 규칙이기 때문에 여전히 26이라고합니다.
— Martin Ender

2
여전히 base26입니다. 사용하는 문자는 임의적이며 여기서는 알파벳순으로 az를 사용합니다.
— Filip Haglund

맞습니다. 기존의 26 표기법과는 다르지만 여전히 26 표기법입니다.
— Monica와의 가벼움 경주

5
입력에 왜 불쾌한 숫자를 사용합니까?
— ugoren

이름 제안 : Fibona-bc
— Matthew Roh

답변:


12

CJam, 18 바이트

UXri{_@+}*;26b'af+

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

UX    e# Push 0 and 1.
ri{   e# Read an integer and execute the loop that many times.
  _   e#   Push a copy the topmost integer.
  @   e#   Rotate the bottom-most integer on top of the stack.
  +   e#   Pop the two topmost integers and push their sum.
}*    e#
;     e# Discard the topmost integer from the stack.
26b   e# Convert the remaining integer to base 26.
'af+  e# Add the character 'a' to each base-26 digit.

8

티 스크립트 , 34 바이트 37 51 54

TeaScript는 골프를위한 JavaScript입니다. 또한 ES2015 기능을 일반 브라우저에 제공합니다.

F(x)b(26)l(#C(lc()+(l<'a'?49:10)))

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

설명

          // x is the input
F(x)      // Fibonacci from input
.b(26)    // To Base-26 string but with 0-9, a-p
          // instead of a-z, to fix this...
.l(#      // Loops through each char
   C(          // Charcode from...
       l.c()+  // Charcode from char
       (l<'a'? // If number
           49  // Add 49 to char code
          :10  // Else add 10
       )
   )
)

*이 답변은 경쟁이 아닙니다


1
JS의 멋진 golf-y 버전! 한 달 전에 내 자신의 버전을 디자인했지만 아직 통역을 시작하지 않았습니다. 피보나치 내장 또는 암시 적 입력이 없으면이 동일한 프로그램의 길이는 48 바이트입니다. 그러나 내장 함수를 만들고 암시 적 입력을 추가하려면 34가됩니다. 아마도 통역사 작업을 시작해야 할 것입니다. ;)
— ETHproductions

오, 훨씬 나아 졌어요. 여기에 적용될 수있는 내 언어의 요령 중 하나는 모든 변수를 대문자 (Math, Date 등 포함)와 모든 방법을 소문자로 만드는 것이므로 마침표가 필요하지 않습니다. 이것은 단지 제안 일뿐입니다. 이 언어에 가장 적합한 아이디어는 아니지만 결정하도록하겠습니다. (이름을 사랑하십시오, BTW)
— ETHproductions

@ETHproductions 재미있는 아이디어. 경우에 따라 구현할 수 있는지 살펴 보 겠지만, 현재로서는 간단한 찾기-바꾸기 메소드를 통해 대부분의 기능을 구현하여보다 복잡한 의미를 구현하기가 어렵습니다.
— Downgoat

6

매스 매 티카, 67 61 바이트

Print[""<>Alphabet[][[Fibonacci@Input[]~IntegerDigits~26+1]]]

f(1000000)약 51 밀리 초로 계산합니다 .


아, Mathematica 답변이 이미 있다는 것을 보지 못했습니다! IntegerString숫자 형식을 지정하는 데 사용되는 광산 :IntegerString[Fibonacci@#~IntegerDigits~26+10,36]<>""&

나는 그것을 삭제했다; 사용 Input[]및 Print[]공정한 비교를 위해, 내 솔루션은 길이 66 바이트 될 것입니다. 그러나 Alphabet[]10.1 기능이므로 주석으로 남겨 두겠다고 생각했습니다.

@ user5254 인덱스 목록을 제외하고 FromLetterNumber내부적으로 사용 Alphabet하고 사용 하기 전에 먼저 사용 했습니다 Part.
— LegionMammal978

5

심플 렉스 v.0.6 , 35 바이트

때때로 나는 한숨을 쉬며 "이것은 제출할 가치가 있는가?이기는 것이 아니므로 왜 귀찮게 하는가?" 이에 대한 대답으로, "헥. 재미있었습니다. 게다가, 정말 어리석은 생각입니다. 너무 초라하지는 않습니다."

5_*Ij1~SRpRi@T[Uj&ERp]pSR5_Vj26@pWo
5_                                  ~~ sqrt(5)
  *                                 ~~ copy to next byte, move right
   I                                ~~ increment [sqrt(5),sqrt(5)+1]
    j1                              ~~ insert a new cell and set it to one 
                                    ~~ [sqrt(5),1,sqrt(5)+1]
      ~                             ~~ switch the previous with the current byte
                                    ~~ [1,sqrt(5),sqrt(5)+1]
       S                            ~~ perform subtraction [1-sqrt(5),0,sqrt(5)+1]
        Rp                          ~~ remove next cell [1-sqrt(5),sqrt(5)+1]
          Ri@                       ~~ take numeric input (n) into register
             T[      ]              ~~ applies the following to every cell
               U                    ~~ halves the current cell
                j&                  ~~ dumps and restores the value to the register
                  ERp               ~~ raises cell to the nth power, remove cell made
                      p             ~~ remove last cell
                       S            ~~ subtract the two values
                        R5_         ~~ goes right and sets sqrt(5)
                           V        ~~ divides the prev. two cells
                            j       ~~ inserts new cell
                             26@    ~~ puts 26 into the register
                                p   ~~ removes cell
                                 Wo ~~ converts the current to base 26 and outputs as number

아, 그리고 제쳐두고, W명령은 base 26을 소문자 알파벳으로, base 52를 대문자와 소문자 알파벳으로 해석하며, base 64는 본질적으로 JavaScript btoa함수입니다.
— 코너 O'Brien



3

파이썬 2.7, 82 바이트

a=0
b=1
s=''
exec"a,b=b,a+b;"*input()
while a:s=chr(a%26+97)+s;a/=26
print s or'a'

1

하스켈, 114 자

예상치 못하게 길다. 도움을 환영합니다. 이전에 fib (0)에 대한 버그가 발견되었습니다.

f=scanl(+)0$1:f
k 0=[]
k x=k(x`div`26)++[toEnum$97+x`mod`26]
l 0=0
l x=k x
main=interact$l.(f!!).read.head.lines

f피보나치의 무한 목록입니다. toEnum와 동일 chr그 전자는 Data.Char를 가져올 필요가 없습니다 제외.


0

루비, 67 바이트

a,b=0,1
gets.to_i.times{a,b=b,a+b}
puts a.to_s(26).tr"0-9a-p","a-z"

0

Matlab, 133 바이트

n=input('');if n<2,y=n;else
f=0;g=1;for k=2:n
h=f+g;f=g;g=h;end
y=fix(mod(g./26.^(fix(log(g)/log(26)):-1:0),26));end
disp(char(y+97))

0

루비, 125 바이트

조만간 이길 수는 없지만 재미 있고 첫 번째 코드 골프였습니다 : ')

def f(n);n<3?(n>0?1:0):f(n-1)+f(n-2);end
def a(s);s.bytes.map{|n|n<58?n+49:n+10}.pack("C*");end
puts a(f(gets.to_i).to_s(26))

첫 번째 줄은 피보나치를 계산하는 함수이고, 두 번째는 Ruby의 내장 된 기본 26 인코딩 (0-9, ap)을 z 인코딩으로 변환하고, 세 번째는 STDIN에서 한 줄을 가져 와서 둘 다를 통해 실행합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.