สองก้าวไปข้างหน้าและถอยหลังหนึ่งก้าว


15

สมมติว่าฉันอยู่ห่างจากจุดหมายปลายทางของฉันสิบก้าว ฉันเดินไปที่นั่นตามคำพูดเก่า ๆ ว่า "สองก้าวไปข้างหน้าและถอยหลังหนึ่งก้าว" ฉันก้าวไปข้างหน้าสองก้าวย้อนกลับหนึ่งจนกว่าฉันจะยืนอยู่ตรงปลายทางของฉัน (สิ่งนี้อาจเกี่ยวข้องกับการก้าวผ่านปลายทางของฉันและกลับไปที่มัน) ฉันเดินได้กี่ก้าว

แน่นอนว่าฉันอาจอยู่ห่างออกไปไม่ถึง 10 ก้าว ฉันอาจอยู่ห่างออกไป 11 ก้าวหรือ 100 ฉันสามารถวัดได้สิบก้าวและเดินต่อไปเรื่อย ๆ เพื่อแก้ปัญหาหรือ ... ฉันสามารถเขียนรหัส!

  • เขียนฟังก์ชั่นเพื่อคำนวณจำนวนขั้นตอนที่ต้องใช้เพื่อให้ได้ N ขั้นตอนตามลำดับ: ไปข้างหน้าสองขั้นตอนและถอยหลังหนึ่งก้าว
  • สมมติว่าคุณเริ่มต้นในขั้นตอนที่ 0 นับ "ก้าวไปข้างหน้าสองขั้น" เป็นสองขั้นตอนไม่ใช่หนึ่งขั้น
  • สมมติว่าทุกขั้นตอนมีความยาวสม่ำเสมอ
  • มันควรกลับจำนวนขั้นตอนแรกเมื่อคุณมาถึงพื้นที่นั้น (ตัวอย่างเช่นขั้นตอน 10 ขั้นตอนใช้เวลา 26 ขั้นตอน แต่คุณจะต้องทำขั้นตอนที่ 30 อีกครั้ง) เราสนใจใน 26
  • ใช้ภาษาที่คุณชอบ
  • มันควรจะยอมรับจำนวนเต็มบวกใด ๆ ที่เป็นอินพุต สิ่งนี้แสดงถึงขั้นตอนเป้าหมาย
  • จำนวนไบต์ที่น้อยที่สุดชนะ

ตัวอย่าง:

ฉันต้องการไป 5 ขั้นตอน:

| | | | | | <- I'm at step 0, not yet on the grid.
| |X| | | | <- I take two steps forward, I'm on step 2: the count is 2
|X| | | | | <- I take one step back, I'm on step 1: the count is 3
| | |X| | | <- I take two steps forward, I'm on step 3: the count is 5
| |X| | | | <- I take one step back, I'm on step 2 again: the count is 6
| | | |X| | <- I take two steps forward, I'm on step 4: the count is 8
| | |X| | | <- I take one step back, I'm on step 3 again: the count is 9
| | | | |X| <- I take two steps forward, I'm on step 5: the count is 11

ในกรณีนี้ผลลัพธ์ของฟังก์ชันจะเป็น 11

ตัวอย่างผลลัพธ์:

1      =>  3
5      =>  11
9      =>  23
10     =>  26
11     =>  29
100    =>  296
1000   =>  2996
10000  =>  29996
100000 =>  299996

ขอให้สนุกนักกอล์ฟ!


7
อืม ... มันรู้สึกคุ้นเคยดี
Shaggy


@ Rod Hooray! ฉันไปกับมัน! ;)
AJFaraday

ใช่นั่นดูเหมือนว่าฉันคิด @Rod
Shaggy

@Shaggy Rod เปลี่ยนความคิดเห็นของเขาเล็กน้อย คนก่อนหน้านี้ตั้งข้อสังเกตว่าคำถามหอยทาก / เวลส์กำลังถามจำนวนการวนซ้ำ แต่นี่เป็นการขอระยะทางที่ครอบคลุม
AJFaraday

คำตอบ:


5

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

บันทึก 1 ไบต์ขอบคุณ @Adnan

3+23

เพื่อไม่ให้สับสนกับ 23+3

ลองออนไลน์!

อย่างไร?

      implicitly push a(n-1)
3     push 3
 +    sum and implicitly print
  2   a(2) = 2
   3  a(1) = 3

1
bคุณสามารถปล่อยออกมา
Adnan

ฉันคิดว่าคุณหมายถึงการคูณด้วย 3 ไม่ต้องเพิ่ม
Erik the Outgolfer

@EriktheOutgolfer โปรแกรมคำนวณA (n)เป็นA (n-1) 3
เดนนิส




9

หลายภาษา: Java 8 / JavaScript / C # .NET, 16 14 12 ไบต์

n->3*n-1%n*4

ลองใช้ออนไลน์ (Java 8)

n=>3*n-1%n*4

ลองออนไลน์ (JavaScript)
ลองมันออนไลน์ (C # .NET)

คำตอบ Python 2ของพอร์ตของ@Lynnดังนั้นอย่าลืมตอบคำถามของเขา / เธอ


คำตอบเก่า:

หลายภาษา: Java 8 / JavaScript / C # .NET, 16 14 ไบต์

n->n<2?3:n*3-4

ลองใช้ออนไลน์ (Java 8)

n=>n<2?3:n*3-4

ลองออนไลน์ (JavaScript)
ลองมันออนไลน์ (C # .NET)

คำอธิบาย:

n->       // Method with integer as both parameter and return-type
  n<2?    //  If the input is 1:
   3      //   Return 3
  :       //  Else:
   n*3-4  //   Return the input multiplied by 3, and subtract 4

จาวาสคริปต์หลายภาษาถ้าคุณใช้ลูกศรอ้วน
Shaggy

@Shaggy เพิ่มแล้วเช่นเดียวกับ C # .NET :) แม้ว่าจะn=>(--n*3||4)-1เป็นไปได้ใน JavaScript (เช่น 14 ไบต์)
Kevin Cruijssen

7

R , 20 ไบต์

N=scan();3*N-4*(N>1)

ลองออนไลน์!

ไม่สังเกตเห็นรูปแบบจนกระทั่งหลังจากฉันใช้โซลูชันที่หรูหราน้อยลง


3
ขอแสดงความยินดีกับ 10k BTW!
Luis Mendo

4
@ LuisMendo ขอบคุณ! ฉันคิดว่าวันครบรอบหนึ่งปีของฉันในเว็บไซต์เป็นสองสามวันที่ผ่านมาดังนั้นมันจึงเป็นสัปดาห์ที่ดีสำหรับฉัน PPCG-wise
Giuseppe

3
@iuseppe ฉันรู้ความรู้สึก: 20k สัปดาห์ที่แล้วเช่นเดียวกับวันครบรอบปีที่ 2 :)
Kevin Cruijssen








4

MATL , 7 ไบต์

ใช้3*n-4*(n>1)สูตร ป้อนข้อมูลคูณด้วย 3 ( 3*) แล้วกดอินพุตอีกครั้ง ( G) และลดระดับลง ( q) หากผลลัพธ์ไม่เป็นศูนย์ ( ?) ให้ลบ 4 จากผลลัพธ์ ( 4-)

3*Gq?4-

ลองออนไลน์!


6 ไบต์ย้ายคำตอบของ Jelly Dennis2-|EG+
Giuseppe




3

MachineCodeบน x86_64, 34 32 24 ไบต์

8d47fe9931d029d08d0447c3

ต้องการiแฟล็กสำหรับเอาต์พุตจำนวนเต็ม การป้อนข้อมูลจะถูกนำไปใช้ผ่านการผนวกกับรหัสด้วยตนเอง

ลองออนไลน์!


ฉันผ่านฟังก์ชั่น C ที่แตกต่างกันทั้งสี่เพื่อค้นหาโปรแกรม MachineCode ขนาด 24 ไบต์:

  • n+2*abs(n-2)= 8d47fe9931d029d08d0447c3(24 ไบต์)
  • 3*n-4*!!~-n= 8d047f31d2ffcf0f95c2c1e20229d0c3(32 ไบต์)
  • n*3-4*(n>1)= 31d283ff028d047f0f9dc2c1e20229d0c3(34 ไบต์)
  • n<2?3:n*3-4= 83ff01b8030000007e068d047f83e804c3(34 ไบต์)

แล้วภาษานี้คืออะไรกันแน่?
qwr

@qwr ตรวจสอบ README ในที่เก็บสำหรับคำอธิบายง่ายๆ
MD XF


2

4 , 54 ไบต์

3.6010160303604047002020003100000180010202046000095024

ลองออนไลน์!

หากคุณถามวิธีการป้อนข้อมูลโปรดไปที่การป้อนค่าตัวเลขและเอาท์พุทก่อนอาจได้รับเป็นเมตาดาต้ารหัสตัวอักษร


ทำไมการลงคะแนนนี้
Uriel

เพราะคำตอบดูเหมือนจะเป็นหนึ่งในสี่ซึ่งไม่ใช่ผลลัพธ์ที่ถูกต้อง เท่าที่ฉันสามารถบอกได้มันไม่ได้แก้ปัญหา
AJFaraday

@AJFaraday ใช้ byte input และ output ซึ่งใช้ได้กับ meta consensus ดูคำอธิบายในส่วนอินพุต
Uriel

มีแหล่งข้อมูลใดบ้างในการตีความผล? หรืออินพุต?
AJFaraday

1
@AJFaraday รหัส char ของผลลัพธ์คือคำตอบ ฉันได้แก้ไขคำถามเพื่อรวมเมตาโพสต์ที่เกี่ยวข้อง 4มีอินพุตถ่านเท่านั้น
Uriel

2

Japtap, 7 ไบต์

พอร์ตของโซลูชัน Python ของ Lynn

*3É%U*4

ลองมัน


ทางเลือก

นี่เป็นทางเลือกที่สนุกสำหรับโซลูชันสูตรปิดที่น่าเสียดายที่ไบต์ต่อไปยาวกว่า:

_+3}gN³²

ลองมัน




2

รหัสเครื่อง 65816, 22 ไบต์

ฉันสามารถสร้างรหัสเครื่อง 65C02 นี้ได้อย่างง่ายดายโดยลดลง 3 ไบต์ แต่ไม่ได้เนื่องจากขนาดการลงทะเบียนบน 65C02 เป็น 8 บิตแทนที่จะเป็น 16 บิต มันใช้งานได้ แต่มันน่าเบื่อเพราะคุณสามารถใช้ตัวเลขที่ต่ำจริงๆ ;-)

xxd dump:

00000000: 7aa9 0000 aa89 0100 d004 8888 e824 c8e8  z............$..
00000010: 1ac0 0000 d0ef                           ......

คำอธิบายการถอดแยกชิ้นส่วน / รหัส:

; target is on the stack
  ply              7A                  ; pull target from stack
  lda #$0000       A9 00 00            ; set loop counter to 0
  tax              AA                  ; set step counter to 0
loop:
  bit #$0001       89 01 00            ; sets Z if loop counter is even
  bne odd          D0 04               ; if Z is not set, jump to 'odd'
  dey              88                  ; decrement target twice
  dey              88
  inx              E8                  ; increment step counter
  .byte $24        24                  ; BIT $xx opcode, effectively skips the next byte
odd:
  iny              C8                  ; increment target

  inx              E8                  ; increment step counter
  inc a            1A                  ; increment loop counter

  cpy #$0000       C0 00 00            ; sets zero flag, can be optimized maybe?
  bne loop         D0 EF               ; if Y is non-zero, loop

; result is in register X

ทดสอบด้วยเครื่องจำลองที่รองรับ 65816:

testing


1

SHELLขนาด28 ไบต์

F(){ bc<<<$1*3-$(($1>1))*4;}

การทดสอบ:

F 1
3

F 2
2

F 3
5

F 4
8

F5
11

F 11
29

F 100
296

F 100000
299996

คำอธิบาย:

สูตรคือ:

if n == 1  ==> F(1) = 3
else F(n) = 3*n - 4

ตามลำดับของ 3 ขั้นตอน "สองขั้นตอนไปข้างหน้าและถอยหลังหนึ่งก้าว" เราจะมีชุดเลขคณิต:

 +2  2 => 2  ( or 6 )
 -1  1 => 3
 -----------
 +2  3 => 5  ( or 9 )
 -1  2 => 6
 -----------
 +2  4 => 8  ( or 12 )
 -1  3 => 9
 -----------
 +2  5 => 11 ( or 15 )
 -1  4 => 12
 -----------
 +2  6 => 14 ( or 18 )
 -1  5 => 15 
 -----------
 +2  7 => 17 ( or 21 )
 -1  6 => 18

อย่างน้อยที่สุดหรือเรื่องบังเอิญแรก:

 1 => 3
 2 => 2
 3 => 5
 4 => 8
 5 => 11
 6 => 14

ในหนึ่งสูตร:

F(n) = 3*n - 4(n>1)     with n>1 is 1 or 0 (if n==1)

โปรดอธิบายว่านี่คือเชลล์ใด
qwr

ทดสอบกับ Cygwin (CYGWIN_NT-10.0 2.3.1 (0.291 / 5/3) 2015-11-14 12:44 x86_64 Cygwin)
Ali ISSA

คุณเขียนมันเป็น bc โดยตรงได้ไหม?
qwr

ฉันไม่คุ้นเคยกับ bc แต่เนื่องจากมีการใช้ฟังก์ชันอาร์กิวเมนต์ ($ 1) หลายครั้งและมีบางสิ่งที่เฉพาะเจาะจงเชลล์ (การขยายเลขคณิต$((…))) เสร็จแล้วอาจจะไม่
2xsaiko

1
F(){bc<<<$1*3-$(($1>1))*4}ทำงานในรูปแบบ zsh และลบ 2 ไบต์
2xsaiko

1

Python 3 , 48 ไบต์

def a(x):
    if x!=1:
        return((3*x)-4)
    return(3)

ลองออนไลน์!


ทำได้ดีมาก คุณอาจต้องการใส่รหัสในส่วน "ท้ายกระดาษ" ด้วย ด้วยวิธีนี้คุณสามารถทดสอบฟังก์ชั่นของคุณได้โดยไม่ต้องขยายออกจากสนามกอล์ฟของคุณ ...
AJFaraday

@AJFaraday ส่วนท้ายของโพสต์หรือรหัสของฉัน
Nathan Dimmer

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


@JoKing คุณรู้จักคำแนะนำที่ดีเกี่ยวกับฟังก์ชั่นแลมบ์ดาใน Python หรือไม่? ฉันไม่เข้าใจวิธีการทำงานของไวยากรณ์
นาธานหรี่



1

Brain-Flak , 38 ไบต์

({<([()()]{})>()(){(<((){})>)()}{}}{})

ลองออนไลน์!

คำตอบแรกที่ฉันเห็นในการคำนวณคำตอบโดยการก้าวไปมา

({ while not at 0
  <([()()]{})>()() take two steps forward, counting 2 steps
  {(<((){})>)()}{} take one step back, if not at 0, and add 1 step
}{}) remove the 0 and push step sum

1

W d , 7 ไบต์

♦óÖ╣░Θ$

คำอธิบาย

3*1a<4*-

ประเมิน(a*3)-4*(a>1)ผล

ทางเลือกอื่นที่เป็นไปได้

3*1am4*-

ประเมิน(a*3)-4*(1%a)ผล

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