วงจรเลขคณิต


13

การป้อนข้อมูล:

จำนวนเต็มnซึ่งเป็น>=0หรือ>=1( f(0)เป็นตัวเลือก)

เอาท์พุท:

หมายเลขn'ตามลำดับด้านล่างหรือลำดับจนถึงและรวมถึงnหมายเลข'

ลำดับ:

(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99

ลำดับนี้สร้างอย่างไร

f(n=0) = 0(อุปกรณ์เสริม)
f(n=1) = f(0) + nหรือf(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
อื่น ๆ

หรือในรหัสหลอก:

function f(integer n){
  Integer result = 0
  Integer i = 1
  Loop as long as i is smaller than or equal to n
  {
    if i modulo-4 is 1:
      result = result plus i
    if i modulo-4 is 2 instead:
      result = result minus i
    if i modulo-4 is 3 instead:
      result = result multiplied with i
    if i modulo-4 is 0 instead:
      result = result integer/floor-divided with i
    i = i plus 1
  }
  return result
}

แต่ตามที่คุณอาจสังเกตเห็นมีสองรูปแบบในลำดับ:

0, ,-1,  ,0, ,-1,  ,0, ,-1,   ,0,  ,-1,   ,0,  ,-1,   ,...
 ,1,  ,-3, ,5,  ,-7, ,9,  ,-11, ,13,  ,-15, ,17,  ,-19,...

ดังนั้นวิธีการอื่น ๆ ที่ส่งผลในลำดับเดียวกันนั้นก็เป็นเรื่องที่ดีเช่นกัน

กฏท้าทาย:

  • อินพุต 0 ดัชนีและดัชนี 1 ดัชนีจะส่งผลให้ผลลัพธ์เดียวกัน (ซึ่งเป็นสาเหตุที่f(0)เป็นทางเลือกสำหรับอินพุต 0 ดัชนีหากคุณต้องการรวมไว้)
  • คุณได้รับอนุญาตให้ส่งออกหมายเลขn'ลำดับที่ของนี้ หรือลำดับทั้งหมดขึ้นและรวมถึงnหมายเลข 'th (ดังนั้นf(5)อาจส่งผลใน5หรือ0,1,-1,-3,0,5)
    • หากคุณเลือกที่จะแสดงผลตามลำดับจนถึงและรวมถึงหมายเลขn'รูปแบบผลลัพธ์จะยืดหยุ่นได้ สามารถเป็น list / array, comma / space / new-line string ที่เป็นตัวคั่นหรือพิมพ์ไปที่ STDOUT เป็นต้น
  • หาร ( /) คือการหารจำนวนเต็ม / ชั้นซึ่งปัดเศษเป็น 0 (ไม่ใช่ลบอนันต์ดังเช่นในบางภาษา)

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น

กรณีทดสอบเพิ่มเติมด้านบนn=100:

Input     Output

1000      0
100000    0
123       -123
1234      -1
12345     12345
123456    0

1
ฉันไม่พบสิ่งนี้ในoeis.orgดังนั้นคุณอาจต้องการส่งที่นั่น เป็นลำดับที่น่าสนใจฉันแปลกใจที่ไม่มีใครลงทะเบียน
ท่อ

1
@pipe ดูเหมือนว่าจะเป็นเรื่องที่ไม่แน่นอน
qwr

คำตอบ:


20

JavaScript (ES6), 19 ไบต์

n=>[0,n,-1,-n][n&3]

ลองออนไลน์!

พิสูจน์

สมมติว่าเรามีความสัมพันธ์ดังต่อไปนี้สำหรับความหลากหลายnจาก 4 ความสัมพันธ์เหล่านี้ได้รับการตรวจสอบอย่างละเอียดสำหรับเทอมแรกของลำดับ

f(n)   = 0
f(n+1) = n+1
f(n+2) = -1
f(n+3) = -(n+3)

และปล่อยให้N = n + 4 จากนั้นตามคำนิยาม:

f(N)   = f(n+4) = f(n+3) // (n+4) = -(n+3) // (n+4) = 0
f(N+1) = f(n+5) = f(n+4) + (n+5)  = 0 + (n+5)       = N+1
f(N+2) = f(n+6) = f(n+5) - (n+6)  = (n+5) - (n+6)   = -1
f(N+3) = f(n+7) = f(n+6) * (n+7)  = -1 * (n+7)      = -(N+3)

ซึ่งโดยอุปนัยทางคณิตศาสตร์พิสูจน์ให้เห็นว่าความสัมพันธ์ไว้สำหรับการใด ๆNหลาย4


2
เนื่องจากคำตอบส่วนใหญ่เป็นพอร์ตของโซลูชันนี้ฉันต้องการเพิ่มว่าได้ตรวจสอบแล้วว่าสามารถพิสูจน์ได้
Erik the Outgolfer


Ah, nut, ฟุ้งซ่านโดยการทำงานในขณะที่ทำงานในสิ่งที่คล้ายกันมาก +1
Shaggy

จากความอยากรู้มีเหตุผลที่จะชอบ "n & 3" มากกว่า "n% 4" หรือไม่?
IanF1

2
@ IanF1 ฉันเดาว่านี่เป็นเพียงพฤติกรรมการเขียนโปรแกรมระดับต่ำ (การคำนวณระดับบิตและการประกอบนั้นง่ายกว่าและเร็วกว่าการคำนวณแบบโมดูโล) แต่มันก็ไม่สมเหตุสมผลนักและฉันก็ถูกล่อลวงให้เปลี่ยนมาเป็นครึ่งn%4หลังเพื่อให้สามารถทำงานกับตัวเลขที่มีขนาดใหญ่กว่า 32 บิต
Arnauld

4

05AB1E , 8 ไบต์

ส่งออกnthจำนวน

ÎD(®s)sè

ลองออนไลน์!

05AB1E , 14 ไบต์

ส่งออกรายการตัวเลขเกิน N โดยใช้รูปแบบตามลำดับ

ÅÉāÉ·<*āÉ<‚øí˜

ลองออนไลน์!

คำอธิบาย

ตัวอย่างการใช้ N = 7

ÅÉ               # List of odd numbers upto N
                 # STACK: [1,3,5,7]
  ā              # Enumerate 1-based
   É             # is odd?
                 # STACK: [1,3,5,7],[1,0,1,0]
    ·<           # double and decrement
                 # STACK: [1,3,5,7],[1,-1,1,-1]
      *          # multiply
                 # STACK: [1,-3,5,-7]
       āÉ<       # enumerate, isOdd, decrement
                 # STACK: [1,-3,5,-7],[0,-1,0,-1]
          ‚ø     # zip
                 # STACK: [[1, 0], [-3, -1], [5, 0], [-7, -1]]
            í    # reverse each
             ˜   # flatten
                 # RESULT: [0, 1, -1, -3, 0, 5, -1, -7]

4

Python 2 , 25 ไบต์

คำตอบของพอร์ตของ Arnauld:

lambda n:[0,n,-1,-n][n%4]

ลองออนไลน์!


โซลูชั่นไร้เดียงสา:

Python 3 , 50 49 ไบต์

lambda n:n and eval('int(f(n-1)%sn)'%'/+-*'[n%4])

ลองออนไลน์!


Python 2 , 78 77 76 58 57 53 52 ไบต์

lambda n:n and eval('int(1.*f(n-1)%sn)'%'/+-*'[n%4])

ลองออนไลน์!

ใช้จำนวนไบต์บนintเนื่องจากพื้นหลามแบ่งและไม่ไป0เช่นในคำถาม


@KevinCruijssen ใช่ขอบคุณ :)
TFeld


3

มอก -n 2 1 . 123 ไบต์

ผลผลิตจำนวนวันสำหรับn 0 <= n <= 999(ขีด จำกัด บนเกิดจากข้อ จำกัด ด้านภาษา)

@0
MOV UP ACC
MOV ACC ANY
L:SUB 4
JGZ L
JEZ L
ADD 5
JRO -5
@1
MOV UP ACC
JRO UP
SUB ACC
JRO 3
MOV 1 ACC
NEG
MOV ACC ANY
HCF

ลองออนไลน์!


TIS -n 2 1 , 124 ไบต์

ผลผลิตจำนวนวันสำหรับn 0 <= n <= 999(ขีด จำกัด บนเกิดจากข้อ จำกัด ด้านภาษา) nอาจมีหลายรายการคั่นด้วยช่องว่าง

@0
MOV UP ACC
MOV ACC ANY
L:SUB 4
JGZ L
JEZ L
ADD 5
MOV ACC ANY
@1
MOV UP ACC
JRO UP
SUB ACC
JRO 3
MOV 1 ACC
NEG
MOV ACC ANY

ลองออนไลน์!


TIS -n 3 1 , 192 ไบต์

ขาออกค่าสำหรับสำหรับ0..n 0 <= n <= 999(ขีด จำกัด บนเกิดจากข้อ จำกัด ด้านภาษา)

@0
MOV UP ACC
ADD 1
MOV ACC ANY
JRO -1
@1
SUB UP
JLZ C
HCF
C:ADD UP
MOV ACC ANY
ADD 1
SWP
ADD 1
MOV ACC ANY
SUB 4
JEZ W
ADD 4
W:SWP
@2
MOV UP ACC
JRO UP
SUB ACC
JRO 3
MOV 1 ACC
NEG
MOV ACC ANY

ลองออนไลน์!


ทั้งหมดใช้ I / O ตัวเลข ( -nแฟล็ก) โซลูชันสองรายการแรกใช้สองโหนดการคำนวณซึ่งอยู่ในตำแหน่งหนึ่งเหนืออีกโหนด ที่สามมีสแต็คของสามโหนด

สำหรับวิธีแก้ปัญหาสองวิธีแรกโหนดบนจะอ่านอินพุตส่งหมายเลขเดิมเปิดจากนั้นลบ 4 ซ้ำ ๆ จนกว่าเราจะไปลบแล้วเพิ่ม 5 ลงในดัชนีสำหรับตารางการข้ามของเรา (n % 4) + 1นี้จะเทียบเท่ากับ

โซลูชันที่สามแบ่งงานนี้ออกเป็นสองโหนด คนอันดับหนึ่งจะทำซ้ำขีด จำกัด จนกระทั่งสิ้นสุดเวลาและโหนดกลางจะนับเป็นดัชนีแบบขนาน (เทียบกับขีด จำกัด นั้น) และโมดูโลแบบด้านบน

โหนดที่ต่ำกว่าของโซลูชันทั้งสามนั้นเหมือนกัน มันมีตารางกระโดดและนี่คือที่ที่เวทมนตร์เกิดขึ้น เราเก็บหมายเลขเดิมACCแล้วJRO(อาจJขานR elative O ffset) ไปข้างหน้าโดย1, 2, 3หรือ4ขึ้นอยู่กับสิ่งโหนดข้างต้นกล่าวว่า

ทำงานย้อนหลัง:

  • 4จะa ) NEGกินACCและ ) เลื่อนACCลงเพื่อเอาท์พุท
  • 3จะใส่1เข้าไปACCแล้วทำตามขั้นตอนและข44
  • 2จะข้ามไปยังขั้นตอน4bโดยตรง
  • 1จะSUBทางเดินACCปิดตัวเอง (อย่างมีประสิทธิภาพ zeroing ACC) จากนั้นทำตามขั้นตอน2ซึ่งกระโดดไปข4

2

C (gcc) , 62 ไบต์

f(n,k){k=~-n;n=n?n%4?k%4?n-2&3?f(k)*n:f(k)-n:f(k)+n:f(k)/n:0;}

ลองออนไลน์!


คุณสามารถลดจำนวน byte-count (31 bytes) ลงครึ่งหนึ่งได้ด้วยการสร้างพอร์ตของคำตอบ JavaของOlivierGrégoire : f(n){n=n%2>0?n*(2-n%4):n%4/-2;}ฉันจะเพิ่มมันเป็นคำตอบที่สองเพราะฉันชอบวิธีเรียกซ้ำของคุณเช่นกัน :)
Kevin Cruijssen

@KevinCruijssen ฉันเห็นวิธีแก้ปัญหา Java 10 ของพวกเขาและสังเกตว่ามันสั้น แต่ฉันไม่ต้องการเพียงแค่คัดลอกโซลูชันของพวกเขาเนื่องจากไวยากรณ์ทางคณิตศาสตร์ของสองภาษานั้นคล้ายคลึงกันมากเกินไป
Jonathan Frech



1

เรติน่า 46 ไบต์

.+
*
r`(____)*$
_$.=
____
-
___.*
-1
__

_.*
0

ลองออนไลน์! คำอธิบาย:

.+
*

แปลงเป็นเอก

r`(____)*$
_$.=

แปลงกลับเป็นทศนิยม แต่ปล่อยให้n%4+1ขีดเส้นใต้

____
-

ในกรณีที่ที่ 4 -nแล้วผลที่ได้คือ

___.*
-1

กรณีที่ 3: -1

__

กรณีที่ 2: n

_.*
0

กรณีที่ 1: 0



1

APL (Dyalog Classic) , 22 12 ไบต์

บันทึกขนาดใหญ่ 10 ไบต์เนื่องจากคำพูดของ Erik the Outgolfer ขอขอบคุณ!

4∘|⊃0,⊢,¯1,-

ลองออนไลน์!

ส่งออกจำนวนที่ n

ฉันไม่รู้จัก APL ฉันพยายามทำให้ J พอร์ตของ Arnauld ทำงานใน Dyalog APL


2
เยี่ยมมาก! ไม่กี่หมายเหตุ: 1) คุณสามารถแทนที่ด้วย(0,⍵,¯1,-⍵) (0⍵¯1,-⍵)2) คุณสามารถลบได้1+โดยสมมติว่า⎕IOตัวแปรระบบถูกกำหนดให้0(ใช่ที่ได้รับอนุญาต) 3) เรามักจะไม่นับf←ส่วนเมื่อส่งฟังก์ชั่น 4) คุณสามารถใช้ฟังก์ชั่นแทนการ[]จัดทำดัชนี ผู้ที่อยู่ร่วมกันก่อร่างสิ่งนี้: ⎕IO←0(อย่านับรวม){(4|⍵)⊃0⍵¯1,-⍵}
Erik the Outgolfer

@Erik the Outgolfer ขอบคุณ!
Galen Ivanov

2
การตีกอล์ฟขั้นสูงขึ้นโดยใช้แนวทางนี้: 4∘|⊃0,⊢,¯1,-.
Erik the Outgolfer

1
@Erik the Outgolfer - ใช่แล้ว! ฉันคิดว่าคุณ4∘|⊃0,⊢,¯1,- เป็นสิ่งที่โซลูชั่น J ของฉัน4&|{0,],_1,-จะมีลักษณะเหมือนใน APL ขอบคุณอีกครั้ง!
Galen Ivanov

1
ที่จริงแล้ว J เป็นตัวแปร APL แม้ว่าจะอยู่ไกลกว่าคนอื่นเช่น APL เช่น Dyalog และ NARS2000
Erik the Outgolfer

1

Cubix , 20 19 ไบต์

Iun:^>s1ns:u@Ota3s0

ลองออนไลน์!

พอร์ตวิธีเดียวกันกับ cubix

บนลูกบาศก์:

    I u
    n :
^ > s 1 n s : u
@ O t a 3 s 0 .
    . .
    . .

บิตแรก^Iu:n>s1ns:u0sสร้างสแต็กจากนั้น3atคัดลอกรายการที่เหมาะสมไปยัง TOS จากนั้นOส่งออกและ@จบโปรแกรม


0

พื้นที่ว่าง84 84ไบต์

[S S S N
_Push_0][S N
S _Duplicate_0][T   T   S _Store][S S S T   S N
_Push_2][S S T  T   N
_Push_-1][T T   S _Store][S S S T   N
_Push_1][S N
S _Duplicate_1][T   N
T   T   _Read_STDIN_as_integer][S S S T T   N
_Push_3][S S S T    N
_Push_1][T  T   T   ][S S T T   N
_Push_-1][T S S N
_Multiply][T    T   S _Store][T T   T   _Retrieve_input][S S S T    S S N
_Push_4][T  S T T   _Modulo][T  T   T   _Retrieve_result][T N
S T _Print_as_integer]

เพิ่มตัวอักษรS(ช่องว่าง), T(แท็บ) และN(บรรทัดใหม่) เป็นการเน้นเท่านั้น
[..._some_action]เพิ่มเป็นคำอธิบายเท่านั้น

ลองใช้ออนไลน์ (ด้วยพื้นที่ว่างเปล่าแท็บและบรรทัดใหม่เท่านั้น)

ท่าเรือ@Arnauldคำตอบ JavaScript 's

คำอธิบาย (ตัวอย่างอินพุตn=7):

Command   Explanation         Stack        Heap                  STDIN   STDOUT   STDERR

SSSN      Push 0              [0]
SNS       Duplicate top (0)   [0,0]
TTS       Store               []           {0:0}
SSSTSN    Push 2              [2]          {0:0}
SSTTN     Push -1             [2,-1]       {0:0}
TTS       Store               []           {0:0,2:-1}
SSSTN     Push 1              [1]          {0:0,2:-1}
SNS       Duplicate top (1)   [1,1]        {0:0,2:-1}
TNTT      Read STDIN as nr    [1]          {0:0,1:7,2:-1}        7
SSSTTN    Push 3              [1,3]        {0:0,1:7,2:-1}
SSSTN     Push 1              [1,3,1]      {0:0,1:7,2:-1}
TTT       Retrieve input      [1,3,7]      {0:0,1:7,2:-1}
SSTTN     Push -1             [1,3,7,-1]   {0:0,1:7,2:-1}
TSSN      Multiply (-1*7)     [1,3,-7]     {0:0,1:7,2:-1}
TTS       Store               [1]          {0:0,1:7,2:-1,3:-7}
TTT       Retrieve input      [7]          {0:0,1:7,2:-1,3:-7}
SSSTSSN   Push 4              [7,4]        {0:0,1:7,2:-1,3:-7}
TSST      Modulo (7%4)        [3]          {0:0,1:7,2:-1,3:-7}
TTT       Retrieve            [-7]         {0:0,1:7,2:-1,3:-7}
TNST      Print as integer    []           {0:0,1:7,2:-1,3:-7}           -7
                                                                                  error

หยุดโดยมีข้อผิดพลาด: ไม่ได้กำหนดทางออก

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