与えられたN(2 <= N)、印刷Nのこのような手紙フィボナッチ数列のラインを(すなわちN = 5)まず、で始まるa
とb
:
a
b
次に、2行を追加します。
a
b
ab
最後の2行を追加し続けます。
a
b
ab
bab
立ち止まるな...
a
b
ab
bab
abbab
これで完了です。
Remmeber、これはcode-golfなので、バイト数が最も少ないコードが優先されます。
与えられたN(2 <= N)、印刷Nのこのような手紙フィボナッチ数列のラインを(すなわちN = 5)まず、で始まるa
とb
:
a
b
次に、2行を追加します。
a
b
ab
最後の2行を追加し続けます。
a
b
ab
bab
立ち止まるな...
a
b
ab
bab
abbab
これで完了です。
Remmeber、これはcode-golfなので、バイト数が最も少ないコードが優先されます。
回答:
”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"
と"b"
パラメータがバイトカウントにカウントされるべきかどうかはわかりませんが、質問では具体的にa
and を使用する必要があると述べていますb
。とにかくJavaが勝つわけではありません。;)
"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
@Arnauldのおかげで1バイト節約
f=(n,a="a",b="b")=>n&&f(n-!alert(a),b,a+b)
'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
andを減算および加算してa
からb
、残り1
のsを前の2つの文字列の連結で再帰的に置き換えます。
$%`
!そして、他のキャプチャはただの悪い計画でした...すばらしい、ありがとう!
@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
最後の1 行で行ったのと同じ行にsetコマンドを配置することにより、もう1つ(改行)。技術的には、それらはすべて同じ行にある可能性があります...しかしそれはいでしょう...うーん
ここに私の言語を取得します: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
@;
代わりにを使用して1バイトを保存できるため@a
、最後のセミコロンを省略できます(どういう意味ですか?)。(私は知っている、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
ん いずれにせよ、それは私の上で動作するので、おそらくあなたの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;
}
}
2つのバッファ(u&v)は最後の2行を保存します。最新の行(2つのポインターで追跡: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」に同時に置換した結果です