을 감안할 때 N (2 <= N ), 인쇄 N의 피보나치 시리즈이 (즉, 같은 문자의 라인 N = 5) 첫째, 시작 a
과 b
:
a
b
다음으로 두 줄을 추가하십시오.
a
b
ab
마지막 두 줄을 계속 추가하십시오.
a
b
ab
bab
계속 ...
a
b
ab
bab
abbab
그리고 우리는 끝났습니다.
기억하십시오, 이것은 code-golf 이므로 가장 적은 바이트를 가진 코드가 승리합니다.
을 감안할 때 N (2 <= N ), 인쇄 N의 피보나치 시리즈이 (즉, 같은 문자의 라인 N = 5) 첫째, 시작 a
과 b
:
a
b
다음으로 두 줄을 추가하십시오.
a
b
ab
마지막 두 줄을 계속 추가하십시오.
a
b
ab
bab
계속 ...
a
b
ab
bab
abbab
그리고 우리는 끝났습니다.
기억하십시오, 이것은 code-golf 이므로 가장 적은 바이트를 가진 코드가 승리합니다.
답변:
@xnor 덕분에 3 바이트 절약
a,b="ab";exec"print a;a,b=b,a+b;"*input()
재귀 적 정의를 따르기 만하면됩니다.
a,b="ab";exec"print a;a,b=b,a+b;"*input()
.
”a”bṄ;¥@¡f
”a”bṄ;¥@¡f Main link. Argument: n
”a Set the return value to 'a'.
”b ¡ Call the link to the left n times, with left argument 'b' and right
argument 'a'. After each call, the right argument is replaced with the
left one, and the left argument with the return value. The final
return value is yielded by the quicklink.
¥ Combine the two atoms to the left into a dyadic chain.
Ṅ Print the left argument of the chain, followed by a linefeed.
; Concatenate the left and right argument of the chain.
@ Call the chain with reversed argument order.
f Filter the result by presence in n. This yields an empty string
and thus suppresses the implicit output.
”a”b;@Ṅ
부분이 아래로하지만, 거기에서 어디로 나는 :-) 지금은 알고 ... 알아낼 수
String c(int n,String a,String b){return n--<1?"":a+"\n"+c(n,b,a+b);}
class fibb {
public static void main(String[] args) {
System.out.println( c( 7, "a" , "b" ) );
}
static String c(int n,String a,String b) {
return n-- < 1 ? "" : a + "\n" + c(n,b,a + b);
}
}
a
and 이외의 다른 시작 문자열에서도 작동합니다 b
. 있는지 확실하지 않습니다 "a"
및 "b"
질문은 구체적으로 사용해야 상태 때문에 매개 변수, 비록 바이트 카운트으로 계산해야 a
하고 b
. 그 자바가 어쨌든 이길 수는 없습니다. ;)
"a"
과 "b"
도전이 특별히 요구 때문에) 대신 69 a
과 b
, 그리고 현재 코드 냈다 / 방법 사용 변수 입력. 이와 같은 규칙이 무엇인지 확실하지 않지만 개인적으로 계산해야한다고 생각합니다. 그렇지 않으면 일부 언어에서 매개 변수 기능을 실행하는 기능을 가진 다음 바이트 수를 계산하지 않고 매개 변수에 전체 도전 기능을 제공 할 수 있습니다. 표준 허점 유형의 규칙처럼 들립니다.
#n숫자 n을 가진 키로 읽히려면 :
ARETBRETF3UPUPC-SPACEC-EM-WDOWNDOWNC-Y UPC-AC-SPACEC-EM-WDOWNC-EC-YRETF4C-#(n-2)F4
command(s) explanation buffer reads (| = cursor aka point)
-----------------------------------------------------------------------------------------------
A<RET> B<RET> input starting points "a\nb\n|"
<F3> start new macro "a\nb\n|"
<UP><UP> move point two lines up "|a\nb\n"
C-<SPACE> C-E M-W copy line at point "a|\nb\n"
<DOWN><DOWN> move point two lines down "a\nb\n|"
C-Y yank (paste) "a\nb\na|"
<UP> move point one line up "a\nb|\na"
C-A C-<SPACE> C-E M-W copy line at point "a\nb|\na"
<DOWN> move point one line down "a\nb|\na|"
C-E C-Y <RET> yank (paste) and add new line "a\nb|\nab\n|"
<F4> stop macro recording "a\nb|\nab\n|"
C-#(n-3) <F4> apply macro n-3 times "a\nb|\nab\nbab\nabbab\n|"
a
b
ab
bab
abbab
bababbab
abbabbababbab
bababbababbabbababbab
abbabbababbabbababbababbabbababbab
bababbababbabbababbababbabbababbabbababbababbabbababbab
'a'b{_@_n\+}ri*;;
설명
"a": Push character literal "a" onto the stack.
"b": Push character literal "b" onto the stack.
{_@_p\+}
{: Block begin.
_: duplicate top element on the stack
@: rotate top 3 elements on the stack
_: duplicate top element on the stack
n: print string representation
\: swap top 2 elements on the stack
+: add, concat
}: Block end.
r: read token (whitespace-separated)
i: convert to integer
*: multiply, join, repeat, fold (reduce)
;: pop and discard
;: pop and discard
p
은이어야합니다 ;
. n
대신을 사용하면 출력 주위의 따옴표를 제거 할 수 있습니다 p
. 마지막 'a'b
으로을 통해 2 바이트를 절약합니다 "a""b"
.
ia
bkÀñyjGpgJkñdj
또는 더 읽기 쉬운 버전 :
ia
b<esc>kÀñyjGpgJkñdj
설명:
ia
b<esc> " Insert the starting text and escape back to normal mode
k " Move up a line
Àñ ñ " Arg1 times:
yj " Yank the current line and the line below
G " Move to the end of the buffer
p " Paste what we just yanked
gJ " Join these two lines
k " Move up one line
dj " Delete the last two lines
97c98ci2-:"yyh
97c % Push 'a'
98c % Push 'b'
i2- % Input number. Subtract 2
:" % Repeat that many times
yy % Duplicate the top two elements
h % Concatenate them
.+
$*
^11
a¶b
+`¶(.+?)1
¶$1¶$%`$1
@ MartinEnder 덕분에 10 (!) 바이트를 절약했습니다 !
단항, 감산에 입력 변환 2
과 추가 a
와를 b
, 재귀 나머지 대신 1
(S)은 이전의 두 스트링의 연결로.
$%`
! 그리고 다른 캡처는 단지 나쁜 계획이었습니다 ... 놀라운, 감사합니다!
@set a=a
@set b=b
@for /l %%i in (2,1,%1)do @call:l
:l
@echo %a%
@set a=%b%&set b=%a%%b%
할당을 적용하기 전에 내가 모두를 설정할 수 있도록 다행히 변수는 모든 라인 확장됩니다 a
및 b
임시을하지 않고도 자신의 이전 값을 사용하여. 편집 : @ nephi12 덕분에 9 바이트가 절약되었습니다.
for /l %%i in (2,1,%1) etc..
@set a=a&set b=b
마지막 행 과 같은 행에 두어 한 줄 더 줄 바꿈 (개행) . 기술적으로 그들은 모두 같은 줄에있을 수 있지만 ... 추한 것입니다 ... 흠 ...
https://github.com/cheertarts/Stack-My-Golf에서 내 언어를 구하십시오 .
($1=(_(a))($2=(_(b))($2-f:1-f,)?)?)f\($1=(f)($1-p(\n),:f,)?)p\p
아마도 더 짧은 방법이 있지만 이것이 가장 분명합니다.
-n 플래그의 경우 +1 바이트
$a=a,$b=b;say($a),($a,$b)=($b,$a.$b)for 1..$_
기존 49 바이트 솔루션에 비해 약간 개선되었지만 별도로 개발되었습니다. say($a)
그렇지 않으면 괄호 가 필요합니다. 그렇지 않으면 필요한 것보다 더 많은 정크를 출력 $a,($a,$b)=($b,$a.$b)
하는 인수로 해석 됩니다 say
.
$b=<>;$_=a;say,y/ab/bc/,s/c/ab/g while$b--
위의 솔루션과 다른 접근 방식 :
$b=<>; #Read the input into $b
$_=a; #Create the initial string 'a' stored in $_
say #Print $_ on a new line
y/ab/bc/ #Perform a transliteration on $_ as follows:
#Replace 'a' with 'b' and 'b' with 'c' everywhere in $_
s/c/ab/g #Perform a replacement on $_ as follows:
#Replace 'c' with 'ab' everywhere in $_
, , while$b-- #Perform the operations separated by commas
#iteratively as long as $b-- remains truthy
음역과 교체를 하나의 짧은 작업으로 결합 할 수 없다고 아직 확신하지 못했습니다. 하나를 찾으면 게시하겠습니다.
func f(_ n:Int,_ x:String="a",_ y:String="b"){if n>1{print(x);f(n-1,y,x+y)}}
47 바이트 코드 + 1 -n
.
간단한 접근. 원래 배열 슬라이스를 사용해보십시오. $a[@a]="@a[-2,-1]"
하지만 그 $"=""
와 비슷하거나 비슷합니다 :(. @ Dada 덕분에 1 바이트를 절약하십시오 !
@;=(a,b);$;[@;]=$;[-2].$;[-1]for 3..$_;say for@
perl -nE '@;=(a,b);$;[@;]=$;[-2].$;[-1]for 3..$_;say for@' <<< 5
a
b
ab
bab
abbab
@;
대신에 @a
세미콜론을 생략 하여 1 바이트를 절약 할 수 있습니다 (무엇을 의미합니까?). (나는 1 바이트가 꽤 싸다는 것을 알고 있지만 더 좋은 아이디어는 없었습니다 ..)
perl -pe '@;=(a,b);$;[@;]=$;[-2].$;[-1]for 3..$_;say for@' <<< 5 syntax error at -e line 1, at EOF Execution of -e aborted due to compilation errors.
이있을 것이라고 생각했다. 작동 시키십시오!
-pe
대신에 관련 이 -nE
없습니까? 어쨌든, 그것은 내에서 작동하므로 아마도 당신의 펄 버전이나 시스템과 관련이있을 것입니다 ...하지만 나를 믿으십시오, 나는 그것을 테스트하고 작동합니다! ;)
-nE
(어디에서 -pe
왔는지 모릅니다 ! 금요일이어야합니다 ...) 나는 mo를 얻을 때 그것을 업데이트 할 것입니다! 공유해 주셔서 감사합니다!
a b.{;t⁴+
설명:
a b.{;t⁴+ stack on 1st cycle
a push "a" ["a"]
b push "b" ["a","b"]
.{ repeat input times ["a","b"]
; swap the two top things on the stack ["b","a"]
t output the top thing on the stack ["b","a"]
⁴ copy the 2nd from top thing from stack ["b","a","b"]
+ join them together ["b","ab"]
이것이 경쟁적이지 않은 이유는이 언어가 아직 개발 중이며 이것을 쓰는 동안 몇 가지 새로운 기능을 추가했기 때문입니다.
또한 PPCG의 첫 번째 게시물!
'a'bVUFX,XYUYJV
void f(int n)
{
char u[999]="a",v[999]="b",*a=u,*b=a+1,*c=v,*d=c+1,*e,i;
for(i=0;i<n;++i)
{
printf("%s\n",a);
for(e=c;*b++=*e++;);
e=a;a=c;c=e;e=b+1;b=d;d=e;
}
}
두 개의 버퍼 (u & v)는 마지막 두 줄을 저장합니다. 최신 행 (두 개의 포인터로 추적 됨 : start = c, end = d)이 가장 오래된 행에 추가됩니다 (start = a, end = b). 스왑 (a, b) 및 (c, d) 및 루프. 너무 많은 라인을 요청하기 전에 버퍼 크기에주의하십시오. (낮은 수준의 언어로 예상되는) 짧지는 않지만 코딩하기가 재미있었습니다.
5
했지만 그것은 사용자 입력이어야합니다
Given N (2 <= N), print N lines of the letter Fibonacci series like this (i.e. N = 5)
N
이고 고정적이지 않은 것을 의미했다 . 또는 사용자가 기능 / 프로그램을 사용하는 사람 일 수 있습니다.
J,\a\bjP.U=+Js>2J
정수를 입력 받아 결과를 출력하는 프로그램입니다.
작동 원리
J,\a\bjP.U=+Js>2J Program. Input: Q
,\a\b Yield the two element list ['a', 'b']
J Assign to J
.U Reduce over [0, 1, 2, 3, ..., Q] (implicit input):
=J+ J = J +
>2J the last two elements of J
s concatenated
P All of that except the last element
j Join on newlines
Implicitly print
f@1="a";f@2="b";f@n_:=f[n-2]<>f[n-1];g=f~Array~#&
g
단일 숫자 입력을받는 함수 를 정의합니다 . 문자열 목록을 반환합니다. 문자열 결합 연산자를 사용하여 간단한 재귀 구현<>
.
NestList[#~StringReplace~{"a"->"b","b"->"ab"}&,"a",#-1]&
명명되지 않은 기능, 위와 동일한 입력 / 출력 형식. 이 솔루션은 대체 방법으로 문자열을 생성합니다. 목록의 각 문자열은 이전 문자열에서 "a"의 모든 발생을 "b"로, "b"의 모든 발생을 "ab"로 동시에 대체 한 결과입니다.