รุกฆาต (aka ปัญหาปัสสาวะ)


35

ครู Precalc ของฉันมีหนึ่งในปัญหาที่เขาโปรดปรานที่เขาสร้างขึ้น (หรือมีแนวโน้มที่จะขโมยแรงบันดาลใจจากxkcd ) ที่เกี่ยวข้องกับแถวของnโถฉี่ "รุกฆาต" เป็นสถานการณ์ที่ทุกปัสสาวะมีอยู่แล้วหรือมีปัสสาวะอยู่ถัดจากพวกเขา ยกตัวอย่างเช่นถ้าเป็นคนที่เป็นXแล้ว

X-X--X

ถือว่ารุกฆาต โปรดทราบว่าคนที่ไม่สามารถครอบครองปัสสาวะถัดจากปัสสาวะที่ถูกครอบครองแล้ว

งาน

โปรแกรมของคุณจะใช้ตัวเลขstdin, args ของบรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชัน โปรแกรมของคุณจะพิมพ์ออกมาหรือส่งกลับจำนวนวิธีที่รุกฆาตสามารถเกิดขึ้นได้กับจำนวนของโถฉี่

ตัวอย่าง

0 -> 1(นับกรณี null เป็นรุกฆาต)
1 -> 1( X)
2 -> 2( X-หรือ-X)
3 -> 2( X-Xหรือ-X-)
4 -> 3( X-X-, -X-XหรือX--X)
5 -> 4( X-X-X, X--X-, -X-X-หรือ-X--X)
6 -> 5( X-X-X-, X--X-X, X-X--X, -X--X-หรือ-X-X-X)
7 -> 7( X-X-X-X, X--X-X-, -X-X--X, -X--X-X, X-X--X-, X--X--Xหรือ-X-X-X-)
8 -> 9( -X--X--X, -X--X-X-, -X-X--X-, -X-X-X-X, X--X--X-, X--X-X-X, X-X--X-X, X-X-X--X, X-X-X-X-)
...

เกณฑ์การให้คะแนน

โปรแกรมที่เล็กที่สุดเป็นไบต์ชนะ


3
ที่เกี่ยวข้อง
เดิมพัน


12
โทรศัพท์ n = 0 กรณีที่ควรจะเป็น 1. ''มีการติดตั้งตรงหนึ่งซึ่งเป็นรุกฆาตและว่า นี่เหมือนกับแฟคทอเรียลและพีชคณิต 0! = 1 เนื่องจากมีวิธีการจัดเรียง 0 รายการอย่างแน่นอน
orlp


19
ไม่มีห้องน้ำเลยเป็นสถานการณ์รุกฆาต : D
ติตัส

คำตอบ:


20

โอเอซิส 5 ไบต์

รหัส

cd+2V

รุ่นขยาย

cd+211

คำอธิบาย

1 = a(0)
1 = a(1)
2 = a(2)

a(n) = cd+
       c      # Calculate a(n - 2)
        d     # Calculate a(n - 3)
         +    # Add them up

ลองออนไลน์!


7
นี่คือคำตอบที่แปลกภาษาที่ถูกสร้างขึ้นประมาณหนึ่งเดือนที่ผ่านมาโดยไม่มีเอกสารประกอบที่เหมาะสมใน repo ....

2
@tuskiomi มีเอกสารในinfo.txt
TuxCrafting

6
@ TùxCräftîñgแน่นอนถ้าคุณต้องการที่จะเป็นเทคนิค ฉันสามารถวาดม้าและเรียกมันว่าเอกสารไปยังโครงการการเขียนโปรแกรมของฉัน ที่ไม่ได้มีประโยชน์หรือเด็ดขาด

1
@tuskiomi info.txtมีประโยชน์มันมีเอกสารประกอบสำหรับคำสั่ง Oasis ทุกคำ
TuxCrafting

8
@tuskiomi นั่นเป็นผลมาจากการผัดวันประกันพรุ่งและความเกียจคร้าน ฉันจะพยายามเพิ่มเอกสารสั้น ๆ เกี่ยวกับการทำงานของภาษาจริงในปัจจุบัน
Adnan

12

Java 7, 65 42 ไบต์

int g(int u){return u>1?g(u-2)+g(u-3):1;}

ลำดับเพียงเพิ่มองค์ประกอบก่อนหน้าเพื่อรับสิ่งใหม่ Hat tip เป็น orlp และ Rod สำหรับวิธีที่สั้นกว่านี้)

เก่า:

int f(int u){return u<6?new int[]{1,1,2,2,3,4}[u]:f(u-1)+f(u-5);}

หลังจากองค์ประกอบที่ห้าช่องว่างในลำดับเพิ่มขึ้นตามองค์ประกอบที่ห้าก่อนหน้านี้


ถ้า u = 3 ฟังก์ชันของคุณจะคืนค่า 1 แต่ตัวอย่างแสดงว่าควรเป็น 2
Poke

อ๊ะ! ฉันใช้fฟังก์ชั่นของฉันจากตัวอย่างอื่นแทนการเรียกซ้ำ โง่ฉันกำลังซ่อม ...
Geobits

1
ส่วนสุดท้าย ( u>0?u:1;) กลายเป็น1;ไม่ได้ใช่ไหม
Conor O'Brien

2
@ จอร์แดนหากไม่มีศูนย์โถฉี่แล้ว "ทุกโถปัสสาวะอยู่แล้ว" ในการกำหนดค่าเดียวที่เป็นไปได้ ฉันเชื่อว่ากรณีทดสอบที่แสดงในคำถามนั้นผิด
Geobits

1
คุณสามารถแทนที่u>0?u:1;)ด้วย1;ถ้าคุณเปลี่ยนการเปรียบเทียบแรกu>1จากนั้นเมื่อ u = 2 ผลลัพธ์จะเป็น g (0) + g (-1) ซึ่งจะเป็น 2
Rod

9

Python 2, 42 40 39 35 ไบต์

f=lambda n:n>1and f(n-2)+f(n-3)or 1

การสร้างชุดจริง:

lambda n:["{:0{}b}".format(i,n).replace("0","-").replace("1","X")for i in range(2**n)if"11"not in"{:0{}b}".format(i*2,2+n).replace("000","11")]

8

Ruby, 58 34 ไบต์

แรงบันดาลใจจากคำตอบ Java ดั้งเดิมของ Geobits อย่างมาก

f=->n{n<3?n:n<6?n-1:f[n-1]+f[n-5]}

ดูได้ที่ repl.it: https://repl.it/Dedh/1

ความพยายามครั้งแรก

->n{(1...2**n).count{|i|!("%0#{n}b"%i)[/11|^00|000|00$/]}}

ดูได้ที่ repl.it: https://repl.it/Dedh


6

Python ขนาด 33 ไบต์

f=lambda n:+(n<2)or f(n-2)+f(n-3)

f(-1) = f(0) = f(1) = 1ใช้ขยับกรณีฐาน หากTrueสามารถนำมาใช้เป็นเวลา 1 เราจะไม่ต้อง 3 +()ไบต์สำหรับ


6

J, 31 27 23 ไบต์

บันทึกแล้ว 4 ไบต์ด้วยไมล์!

0{]_&(]}.,+/@}:)1 1 2"_

คำอธิบายจะมาเร็ว ๆ นี้

วิธีการแก้ปัญหาเก่า

(>.1&^)`(-&3+&$:-&2)@.(2&<)

นี่คือวาระการประชุม LHS เป็นอาการนามประกอบด้วยสองคำกริยา: และ>.1&^ -&3+&$:-&2ตัวแรกจะถูกใช้หากเงื่อนไข ( 2&<) ล้มเหลว นั่นหมายความว่า>.1&^มีการเปิดใช้งานfork เหนืออาร์กิวเมนต์ สังเกต:

   1 ^ 0 1 2
1 1 1
   (1&^) 0 1 2
1 1 1
   0 1 2 >. (1&^) 0 1 2
1 1 2
   (>.1&^) 0 1 2
1 1 2

ที่นี่>.ใช้เวลาสูงสุดสองค่า ดังนั้นมันให้ 1, 1, และ 2 เป็นคำเริ่มต้น

กริยาที่สองใน gerund คือทางแยก:

-&3 +&$: -&2

ซี่ซ้ายและขวาถูกนำไปใช้กับคำกริยาลบ 3 และ 2 ตามลำดับ กริยาตรงกลางจะถูกเรียกด้วยอาร์กิวเมนต์ซ้ายและขวาเท่ากับ $:เรียกกริยาในแต่ละอาร์กิวเมนต์และ+เพิ่มสองตัวนั้น มันเทียบเท่ากับ($: arg - 3) + ($: arg - 2)

กรณีทดสอบ

   f =: (>.1&^)`(-&3+&$:-&2)@.(2&<)
   f 0
1
   f 2
2
   f 4
3
   f 6
5
   f 8
9
   F =: f"0         NB. for tables
   F i.13
1 1 2 2 3 4 5 7 9 12 16 21 28
   i.13
0 1 2 3 4 5 6 7 8 9 10 11 12
   (,. F) i.13
 0  1
 1  1
 2  2
 3  2
 4  3
 5  4
 6  5
 7  7
 8  9
 9 12
10 16
11 21
12 28

4

MATL , 25 23 ไบต์

W:qB7BZ+t!XAw3BZ+!3>a>s

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

สองความเชื่อมั่น! เย้!

สิ่งนี้จะสร้างอาร์เรย์ที่ชื่อว่า A โดยที่แต่ละการกำหนดค่าที่เป็นไปได้คือแถว 1ในอาร์เรย์นี้แสดงถึงตำแหน่งที่ถูกครอบครอง ตัวอย่างเช่นสำหรับการป้อนข้อมูล4อาร์เรย์ A คือ

0 0 0 0
0 0 0 1
0 0 1 0
···
1 1 1 0
1 1 1 1

รหัสแล้ว convolves อาร์เรย์ A [1 1 1]กับ สิ่งนี้จะให้อาร์เรย์ B. ตำแหน่งที่ถูกครอบครองและเพื่อนบ้านของตำแหน่งที่ถูกครอบครองใน A ให้ผลลัพธ์ที่ไม่ใช่ศูนย์ในอาร์เรย์ B:

0 0 0 0
0 0 1 1
0 1 1 1
···
2 3 2 1
2 3 3 2

ดังนั้นเงื่อนไขแรกสำหรับการกำหนดค่าให้เป็นรุกฆาตคือ B ไม่มีเลขศูนย์ในแถวนั้น ซึ่งหมายความว่าในแถวนั้นของ A ไม่มีตำแหน่งว่างเปล่าหรือมีบางส่วน แต่เป็นเพื่อนบ้านของตำแหน่งว่าง

เราต้องการเงื่อนไขที่สอง ตัวอย่างเช่นแถวสุดท้ายเป็นไปตามเงื่อนไขข้างต้น แต่ไม่ได้เป็นส่วนหนึ่งของโซลูชันเนื่องจากการกำหนดค่าไม่ถูกต้องที่จะเริ่มต้นด้วย การกำหนดค่าที่ถูกต้องไม่สามารถมีสองเพื่อนบ้านครอบครองตำแหน่งคือไม่สามารถมีสองต่อเนื่องกัน1's ใน A. เท่าก็ไม่สามารถมีสองค่าต่อเนื่องกันใน B 1เกิน ดังนั้นเราสามารถตรวจจับสิ่งนี้ได้โดยการโน้มน้าว B ด้วย[1 1]และตรวจสอบว่าในอาเรย์ผลลัพธ์, C,

0 0 0 0
0 1 2 1
1 2 2 1
···
5 5 3 1
5 6 5 2

3ไม่มีค่าในแถวที่เกิน ผลลัพธ์สุดท้ายคือจำนวนการกำหนดค่าที่ตรงตามเงื่อนไขสองข้อ

W:q    % Range [0 1 ... n-1], where n is implicit input
B      % Convert to binary. Each number produces a row. This is array A
7B     % Push array [1 1 1] 
Z+     % 2D convolution, keeping size. Entries that are 1 or are horizontal 
       % neighbours of 1 produce a positive value. This is array B
t!     % Duplicate and transpose (rows become columns)
XA     % True for columns that contain no zeros
w      % Swap. Brings array B to top
3B     % Push array [1 1]
Z+     % 2D convolution, keeping size. Two horizontally contiguous entries
       % that exceed 1 will give a result exeeding 3. This is array C
!      % Transpose
3>     % Detect entries that exceed 3
a      % True for columns that contain at least one value that exceeds 3
>      % Element-wise greater-than comparison (logical and of first
       % condition and negated second condition)
s      % Sum (number of true values)

4

PHP, 105 113 93 ไบต์

+3 สำหรับn=1; +9 สำหรับ$argv, -1-3 golfed
-20: สังเกตว่าฉันไม่จำเป็นต้องใช้ชุดค่าผสม, แต่นับได้เท่านั้น

for($i=1<<$n=$argv[1];$i--;)$r+=!preg_match("#11|(0|^)0[0,]#",sprintf("%0{$n}b,",$i));echo$r;

ทำงานด้วย -r

วนซ้ำจาก 2 ** n-1 ถึง 0:

  • ตรวจสอบไบนารีตัวแทน n หลักสำหรับ11, 000, 00ที่จุดเริ่มต้นหรือจุดสิ้นสุดหรือเดี่ยว0
  • หากไม่มีการแข่งขันเพิ่มผลลัพธ์

ผลการพิมพ์

ขนาดเดียวกัน regex ง่ายขึ้นเล็กน้อย

for($i=1<<$n=$argv[1];--$i;)$r+=!preg_match("#11|^00|00[,0]#",sprintf("%0{$n}b,",$i));echo$r;
  • วนซ้ำจาก 2 ** n-1 ถึง 1 (แทน 0)
  • ตรวจสอบแทน binary สำหรับ11, 00ที่จุดเริ่มต้นหรือจุดสิ้นสุดหรือ000
  • พิมพ์ไม่มีอะไรสำหรับ n = 0

PHP, 82 ไบต์

คำตอบของ Arnauldรังเพลิงและgolfed :

for($i=$k=1<<$n=$argv[1];--$i;)$r+=!($i&$x=$i/2|$i*2)&&(($i|$x)&~$k)==$k-1;echo$r;

พิมพ์ไม่มีอะไรสำหรับ n = 0


เพิ่ม 3 ไบต์สำหรับใหม่n=0: ใส่ไว้?:1ก่อนสุดท้าย;
ติตัส

4

เยลลี่ 11 ไบต์

,’fR_2߀So1

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

,’fR_2߀So1  Main link. Argument: n

 ’           Decrement; yield n - 1.
,            Pair; yield [n, n - 1].
   R         Range; yield [1, ..., n].
  f          Filter; keep the elements that are common to both lists.
             This yields [n, n - 1] if n > 1, [1] if n = 1, and [] if n < 1.
    _2       Subtract 2 from both elements, yielding [n - 2, n - 3], [-1], or [].
      ߀     Recursively call the main link for each integer in the list.
        S    Take the sum of the resulting return values.
         o1  Logical OR with 1; correct the result if n < 1.

2
มันทำงานอย่างไร มันใช้สูตรแบบเรียกซ้ำหรืออย่างอื่นใช่ไหม
Conor O'Brien

@ ConorO'Brien ใช่มันใช้สูตรแบบเรียกซ้ำ ฉันได้เพิ่มคำอธิบายแล้ว
เดนนิส

4

JavaScript (ES6) / เรียกซ้ำ, 30 27 ไบต์

แก้ไข: บันทึกแล้ว 3 ไบต์ด้วย Shaun H

let

f=n=>n<3?n||1:f(n-2)+f(n-3)

for(var n = 1; n < 16; n++) {
  console.log(n, f(n));
}

JavaScript (ES6) / Non-recursive 90 77 ไบต์

แก้ไข: บันทึก 13 ไบต์ขอบคุณ Conor O'Brien และ Titus

let f =

n=>[...Array(k=1<<n)].map((_,i)=>r+=!(i&(x=i>>1|i+i))&&((i|x)&~k)==k-1,r=0)|r

for(var n = 1; n < 16; n++) {
  console.log(n, f(n));
}


1
ฉันคิดว่า((i|r|l)&(k-1))สามารถเป็น((i|r|l)&k-1)หรือแม้แต่((i|r|l)&~-k)
Conor O'Brien

หนึ่งไบต์: i<<1-> i*2หรือi+i
ติตัส

1
คุณสามารถใช้หนึ่งตัวแปรสำหรับ l และ r, บันทึก 6 ไบต์: !(i&(x=i>>1|i+i))&&((i|x)&(k-1))==k-1; และถ้าคุณสามารถแทรก,k--ที่ไหนสักแห่งคุณสามารถแทนที่k-1ด้วยkเพื่อบันทึก parens
ติตัส

&(k-1)ไม่จำเป็นต้องมี parens อยู่ดี แต่คุณสามารถใช้&~kแทน
ติตัส

1
ฉันแค่จะออกจากที่นี่:f=n=>n<3?n||1:f(n-2)+f(n-3)
ฌอน H

3

Mathematica, 35 ไบต์

a@0=a@1=1;a@2=2;a@b_:=a[b-2]+a[b-3]

aกำหนดฟังก์ชั่น รับจำนวนเต็มเป็นอินพุตและส่งคืนจำนวนเต็มเป็นเอาต์พุต โซลูชันแบบเรียกซ้ำง่าย ๆ


3

AnyDice , 51 ไบต์

function:A{ifA<3{result:(A+2)/2}result:[A-2]+[A-3]}

ควรมีคำตอบใด ๆ เพิ่มเติมที่นี่

a(n)=a(n-2)+a(n-3)ทางออกของฉันกำหนดฟังก์ชันเวียนที่คำนวณ มันกลับมาa(0)=a(1)=1และa(2)=2ใช้เวทย์มนตร์หารจำนวนเต็ม

ลองออนไลน์

หมายเหตุ: ผลลัพธ์อาจดูแปลกและนั่นเป็นเพราะมันมักจะใช้ในการส่งออกความน่าจะเป็นลูกเต๋า เพียงดูที่ตัวเลขทางด้านซ้ายของแผนภูมิแท่ง


3

Perl, 35 34 ไบต์

รวม +1 สำหรับ -p

ให้อินพุตบน STDIN

checkmate.pl <<< 8

checkmate.pl:

#!/usr/bin/perl -p
$\+=$b-=$.-=$\-$b*4for(++$\)x$_}{

สูตรลับที่พัฒนาขึ้นใหม่ Ripple อัพเดตตัวแปรสถานะ 3 ตัวโดยไม่จำเป็นต้องกำหนดแบบขนาน

สั้นพอ ๆ กัน (แต่ช้ากว่ามากและใช้หน่วยความจำมากขึ้น) เพื่อแก้ปัญหาเดิม:

#!/usr/bin/perl -p
$_=grep!/XX|\B-\B/,glob"{X,-}"x$_

แต่นั่นไม่ได้ผล 0


2

JavaScript (ES6), 62 ไบต์

n=>[1,...Array(n)].reduce(($,_,i,a)=>a[i]=i<3?i:a[i-3]+a[i-2])

นี่เป็นครั้งแรกที่ฉันต้องการชื่อตัวแปรจำลองสองตัว รุ่นเรียกซ้ำอาจสั้นกว่านี้ แต่ฉันชอบreduce... แก้ไข: พบวิธีแก้ปัญหาด้วยเช่น 62 ไบต์ซึ่งมีตัวแปรจำลองเพียงตัวเดียว:

n=>[1,...Array(n)].reduce((p,_,i,a)=>a[i]=i<5?i+2>>1:a[i-5]+p)

2

เยลลี่ขนาด 19 ไบต์

วิธีการแก้ปัญหา recursive คืออาจจะสั้น ...

Ḥ⁹_c@⁸
+3µ:2R0;瀵S

ดูได้ที่TryItOnline
หรือดูซีรี่ส์สำหรับn = [0, 99]ได้ที่TryItOnline

อย่างไร?

ส่งกลับn+3ตัวเลขของ Padovan โดยการนับรวมกัน

Ḥ⁹_c@⁸ - Link 1, binomial(k, n-2k): k, n
Ḥ      - double(2k)
 ⁹     - right argument (n)
  _    - subtract (n-2k)
     ⁸ - left argument (k)
   c@  - binomial with reversed operands (binomial(k, n-2k))

+3µ:2R0;瀵S - Main link: n
  µ       µ  - monadic chain separation
+3           - add 3 (n+3)
   :2        - integer divide by 2 ((n+3)//2)
     R       - range ([1,2,...,(n+3)//2]
      0;     - 0 concatenated with ([0,1,2,...,(n+3)//2]) - our ks
        ç€   - call previous link as a dyad for each
           S - sum

2

> <> , 25 + 2 = 27 ไบต์

211rv
v!?:<r@+@:$r-1
>rn;

ต้องการอินพุตที่จะแสดงบนสแต็กเมื่อเริ่มต้นโปรแกรมดังนั้น +2 ไบต์สำหรับ-vแฟล็ก ลองออนไลน์!

บรรทัดแรกจะเริ่มต้นสแต็กถึง1 1 2 nโดยที่nเป็นหมายเลขอินพุต บรรทัดที่สองวิ่งไปข้างหลังตรวจสอบว่าnมีค่ามากกว่า 1 ถ้าเป็นnจะลดลงและองค์ประกอบถัดไปในลำดับจะถูกสร้างขึ้นดังนี้:

r$:@+@r              a(n-3) a(n-2) a(n-1) n

r        Reverse   - n a(n-1) a(n-2) a(n-3)
 $       Swap      - n a(n-1) a(n-3) a(n-2)
  :      Duplicate - n a(n-1) a(n-3) a(n-2) a(n-2)
   @     Rotate 3  - n a(n-1) a(n-2) a(n-3) a(n-2)
    +    Add       - n a(n-1) a(n-2) a(n)
     @   Rotate 3  - n a(n) a(n-1) a(n-2)
      r  Reverse   - a(n-2) a(n-1) a(n) n

บรรทัดสุดท้ายให้ผลลัพธ์ตัวเลขที่ด้านล่างของสแต็กซึ่งเป็นองค์ประกอบที่จำเป็นในลำดับ


2

CJam , 20 ไบต์

1_2_{2$2$+}ri*;;;o];

ลองออนไลน์!

คำอธิบาย

นี้จะใช้ความสัมพันธ์ที่เกิดซ้ำที่แสดงในหน้า OEIS

1_2_                   e# Push 1, 1, 2, 2 as initial values of the sequence
           ri          e# Read input
    {     }  *         e# Repeat block that many times
     2$2$              e# Copy the second and third elements from the top
         +             e# Add them
              ;;;      e# Discard the last three elements
                 o     e# Output
                  ];   e# Discard the rest to avoid implicit display

2

05AB1E , 12 ไบต์

XXXIGX@DŠ0@+

คำอธิบาย

XXX            # initialize stack as 1, 1, 1
   IG          # input-1 times do:
     X@        # get the item 2nd from bottom of the stack
       DŠ      # duplicate and push one copy down as 2nd item from bottom of the stack
         0@    # get the bottom item from the stack
           +   # add the top 2 items of the stack (previously bottom and 2nd from bottom)
               # implicitly print the top element of the stack after the loop

ลองออนไลน์!


1

FRACTRAN, 104 93 ไบต์

การป้อนข้อมูลเป็นและเอาท์พุท11**n*2929**checkmate(n)

นี่เป็นเรื่องสนุกเป็นส่วนใหญ่โดยเฉพาะอย่างยิ่งเมื่อตอนนี้ฉันกำลังโดน Python, JS และ Java จำนวนไบต์เดียวกันกับ PHP แม้ว่า: ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ D

403/85 5/31 3/5 9061/87 3/41 37/3 667/74 37/23 7/37 38/91 7/19 5/77 1/7 1/17 1/2 340/121 1/11

Ungolfing

               At the start we have 11**n * 29
1/11           If n < 2, we remove the 11s and print 29**1
340/121        If n >= 2, we subtract two 11s (n-2) and add one 17, two 2s and one 5.
                 We now have 17**1 * 29**1 * 2**2 * 5.
                 These are the register for a, b, c at registers 17, 29, and 2.
                 5 is an indicator to start the first loop.
                 This loop will move a to register 13.
403/85 5/31    Remove the 17s one at a time, adds them to the 13 register.
                 5 and 31 reset the loop.
3/5            Next loop: moves b to a and adds b to a in register 13.
9061/87 3/41   Remove the 29s one at a time, adds them to the 17 and 13 registers.
                 3 and 41 reset the loop.
37/3           Next loop: moves c to b in register 29.
667/74 37/23   Remove the 2s one at a time, adds them to the 29 register.
                 37 and 23 reset the loop.
7/37           Next loop: moves a+b to c in register 2.
38/91 7/19     Remove the 13s one at a time, adds them to the 2 register.
                 7 and 19 reset the loop.
5/77           Move to the first loop if and only if we have an 11 remaining.
1/7 1/17 1/2   Remove the 7 loop indicator, and all 17s and 2s.
               Return 29**checkmate(n).

1

ที่จริงแล้ว 25 ไบต์

ดูเหมือนว่าจะมีความยาวเพียงเล็กน้อยสำหรับf(n) = f(n-2) + f(n-3)ความสัมพันธ์ที่เกิดซ้ำแบบง่าย ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ ลองออนไลน์!

╗211╜¬`);(+)`nak╜2╜2<I@E

Ungolfing

         Implicit input n.
╗        Save n to register 0.
211      Stack: 1, 1, 2. Call them a, b, c.
╜¬       Push n-2.
`...`n   Run the following function n-2 times.
  );       Rotate b to TOS and duplicate.
  (+       Rotate a to TOS and add to b.
  )        Rotate a+b to BOS. Stack: b, c, a+b
         End function.
ak       Invert the resulting stack and wrap it in a list. Stack: [b, c, a+b]
╜        Push n.
2        Push 2.
╜2<      Push 2 < n.
I        If 2<n, then 2, else n.
@E       Grab the (2 or n)th index of the stack list.
         Implicit return.

1

จริงแล้ว 18 ไบต์

นี่คือพอร์ตที่แท้จริงของคำตอบ Jelly ที่ยาวกว่าของ Dennis ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ ลองออนไลน์!

3+;╖½Lur⌠;τ╜-@█⌡MΣ

Ungolfing

         Implicit input n.
3+       Add 3. For readibility, m = n+3.
;╖       Duplicate and store one copy of m in register 0.
½Lu      floor(m/2) + 1.
r        Range from 0 to (floor(m/2)+1), inclusive.
⌠...⌡M   Map the following function over the range. Variable k.
  ;        Duplicate k.
  τ╜-      Push m-2k. Stack: [m-2k, k]
  @█       Swap k and m-2k and take binomial (k, m-2k).
            If m-2k > k, █ returns 0, which does not affect the sum() that follows.
         End function.
Σ        Sum the list that results from the map.
         Implicit return.



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.