给定N(2 <= N),按如下方式打印字母Fibonacci系列的N行(即N = 5)首先,从a
和开始b
:
a
b
接下来,添加两行。
a
b
ab
继续添加最后两行。
a
b
ab
bab
继续...
a
b
ab
bab
abbab
我们完成了。
提醒,这是code-golf,所以字节最少的代码将获胜。
给定N(2 <= N),按如下方式打印字母Fibonacci系列的N行(即N = 5)首先,从a
和开始b
:
a
b
接下来,添加两行。
a
b
ab
继续添加最后两行。
a
b
ab
bab
继续...
a
b
ab
bab
abbab
我们完成了。
提醒,这是code-golf,所以字节最少的代码将获胜。
Answers:
”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
和以外的任何其他起始字符串b
。我不确定是否将"a"
and "b"
参数计入字节数,因为该问题明确指出应使用a
and b
。无论如何,Java永远不会赢。;)
"a"
和+6 "b"
),而不是69,因为挑战特别要求a
and 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
保存两个字节"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
.+
$*
^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
可能有更短的方法,但这是最明显的。
+1个字节用于-n标志
$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 for -n
。
简单的方法。尝试使用数组切片最初$a[@a]="@a[-2,-1]"
但必要$"=""
或类似:(保存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
因此可以省略最后的分号(明白我的意思吗?)。(我知道,一个字节非常便宜,但我没有更好的主意。)
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
?无论如何,它可以在我的系统上运行,因此它可能与您的Perl版本或系统有关……但是请相信我,我已经对其进行了测试,并且可以正常工作!;)
-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”的结果。