당신의 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.