ภารกิจง่าย ๆ สามครั้ง


15

คุณควรเขียน 3 โปรแกรมและ / หรือฟังก์ชั่นในภาษาเดียว

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

งาน

  • คุณได้รับจำนวนเต็มnมากกว่า 1
  • คุณควรจะกลับหรือผลลัพธ์n ที่แตกต่างกันจำนวนเต็มบวกและไม่มีของพวกเขาควรจะหารด้วยn
  • ลำดับของตัวเลขไม่สำคัญและการเรียงลำดับตัวเลขจะไม่นับเป็นเอาท์พุทที่แตกต่างกัน

triplet ที่ถูกต้องของโปรแกรมที่มีบางinput => outputคู่:

program A:
    2 => 5 9
    4 => 5 6 9 10
    5 => 2 4 8 7 1

program B:
    2 => 1 11
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

program C (differs only in one number from program B):
    2 => 1 13
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

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

  • คะแนนของคุณคือผลรวมของความยาวของ 3 โปรแกรมหรือฟังก์ชั่น
  • คะแนนต่ำกว่าดีกว่า
  • หากรหัสโปรแกรม / ฟังก์ชั่นของคุณแบ่งปันรหัสควรถูกนับเป็นความยาวของทุกโปรแกรมที่ใช้รหัส

1
แต่ละโปรแกรมจะต้องสามารถเรียกใช้จากไฟล์ของตัวเองโดยไม่มีการรวมหรือไม่หรือโปรแกรมสามารถขึ้นอยู่กับโมดูล / ไลบรารีที่ใช้ร่วมกันที่ถูกนับเพียงครั้งเดียว?
quintopia

@quintopia โปรแกรม / ฟังก์ชั่นไม่ควรแบ่งปันรหัส ถ้าเป็นเช่นนั้นรหัสที่ใช้ร่วมกันควรถูกนับเป็นความยาวของโปรแกรมทั้งหมดที่ใช้รหัส
Randomra

คำตอบ:


4

Pyth, 17 16 ไบต์

5 ไบต์:

^LhQQ

ขาออก:

2: [1, 3]
3: [1, 4, 16]
4: [1, 5, 25, 125]

6 ไบต์:

mh*QdQ

ขาออก:

2: [1, 3]
3: [1, 4, 7]
4: [1, 5, 9, 13]

5 ไบต์:

|RhQQ

ขาออก:

2: [3, 1]
3: [4, 1, 2]
4: [5, 1, 2, 3]

รุ่นอื่นตามลำดับที่เพิ่มขึ้น: -ShQQ


1
โอ ฉันชอบรูปแบบที่สาม
quintopia

@isaacg โอ้ขอโทษ
Maltysen

8

J, 16 ไบต์

ฟังก์ชั่น 1, 5 ไบต์

p:^i.

ฟังก์ชั่น 2, 6 ไบต์

+p:^i.

ฟังก์ชั่น 3, 5 ไบต์

>:^i.

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

ฟังก์ชั่น 1

p:^i.     Right argument: y

   i.     Compute (0 ... y-1).
p:        Compute P, the prime at index y (zero-indexed).
  ^       Return all powers P^e, where e belongs to (0 ... y-1).

เนื่องจากPเป็นไพร์มและP> y , yจึงไม่สามารถหารP e ได้ได้

ฟังก์ชั่น 2

+p:^i.    Right argument: y

 p:^i.    As before.
+         Add y to all results.

ถ้าyหารP e + yมันก็จะแบ่งP e + y - y = P e ด้วยด้วย

ฟังก์ชั่น 3

>:^i.     Right argument: y

   i.     Compute (0 ... y-1).
>:        Compute y+1.
  ^       Return all powers (y+1)^e, where e belongs to (0 ... y-1).

ถ้าปีแบ่งออก(y + 1) eบางส่วนที่สำคัญปัจจัยQของปีจะมีการแบ่ง(y + 1)อี

แต่แล้วQจะแบ่งทั้งYและY + 1และดังนั้นY + 1 - Y = 1



2

Vitsy , 54 ไบต์

โปรแกรม:

V1V \ [DV * 1 + N '' O1 +]
V2V \ [DV * 1 + N '' O1 +]
V3V \ [DV * 1 + N '' O1 +]

ขาออก:

2 => 3 7
4 => 5 9 13 17
5 => 6 11 16 21 26
2 => 5 7
4 => 9 13 17 21
5 => 11 16 21 26 31
2 => 7 9
4 => 13 17 21 25 
5 => 16 21 26 31 36

มันทำงานอย่างไร (ใช้โปรแกรมแรกเป็นคำอธิบาย):

V1V \ [DV * 1 + N '' O1 +]
V จับอินพุตโดยนัยเป็นตัวแปรโกลบอลสุดท้าย
 1 กดหนึ่งไปยังสแต็กเพื่อใช้ในภายหลัง
  V \ [] ทำทุกอย่างในวงเล็บเวลาที่ใส่
     D ทำซ้ำรายการบนสุดของสแต็ก
      V ดันตัวแปรส่วนกลางไปยังสแต็ก
       * 1 + เพิ่มทวีคูณจากนั้นเพิ่ม 1 ทำให้ไม่สามารถหารได้
          N '' O ส่งออกตัวเลขตามด้วยช่องว่าง
               1+ เพิ่มหนึ่งหมายเลขที่เหลือในสแต็ก

ลองออนไลน์!


2

Perl, 79

ถ่านหนึ่งตัวเพิ่มลงในแต่ละโปรแกรมเพราะต้องมีการ-nตั้งค่าสถานะ

for$a(0..$_-1){say$_*$a+1}
for$a(1..$_){say$_*$a+1}
for$a(2..$_+1){say$_*$a+1}

ค่อนข้างตรงไปตรงมา


2

Mathematica, 12 + 12 + 12 = 36 ไบต์

# Range@#-1&
# Range@#+1&
#^Range@#+1&

แบบทดสอบ:

# Range@#-1&[10]
(* -> {9, 19, 29, 39, 49, 59, 69, 79, 89, 99} *)
# Range@#+1&[10]
(* -> {11, 21, 31, 41, 51, 61, 71, 81, 91, 101} *)
#^Range@#+1&[10]
(* -> {11, 101, 1001, 10001, 100001, 1000001, 10000001, 100000001, 1000000001, 10000000001} *)

คุณสามารถเพิ่มตัวอย่างผลลัพธ์ได้ไหม
Paŭlo Ebermann

2

CJam, 8 +8 + 8 = 24 ไบต์

{,:)))+}
{_,f*:)}
{)_(,f#}

ฟังก์ชันเหล่านี้สามฟังก์ชันที่ไม่มีชื่อซึ่งคาดว่าnจะอยู่ในสแต็กและปล่อยรายการจำนวนเต็มไว้ในตำแหน่งนั้น ฉันไม่แน่ใจว่าสิ่งนี้ดีที่สุด แต่ฉันจะต้องหาวิธีแก้ปัญหาที่สั้นกว่าในภายหลัง

ชุดทดสอบ

ผล:

{,:)))+}
2 => [1 3]
3 => [1 2 4]
4 => [1 2 3 5]
5 => [1 2 3 4 6]

{_,f*:)}
2 => [1 3]
3 => [1 4 7]
4 => [1 5 9 13]
5 => [1 6 11 16 21]

{)_(,f#}
2 => [1 3]
3 => [1 4 16]
4 => [1 5 25 125]
5 => [1 6 36 216 1296]

คนแรกยังทำงานเป็น

{_),:)^}

หรือ

{_(,+:)}

ผลลัพธ์ของคุณแสดงทั้งสามให้ผลลัพธ์เดียวกันเมื่อ n = 2
Sparr

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

อ่าพวกเขาจะต้องมีผลลัพธ์ที่แตกต่างกันในการป้อนข้อมูลบางอย่าง นั่นคือสิ่งที่ฉันอ่านผิด
Sparr

2

Python 2, 79 ไบต์

lambda n:range(1,n*n,n)
lambda n:range(1,2*n*n,2*n)
lambda n:range(1,3*n*n,3*n)

ฟังก์ชั่นที่สามที่ไม่ระบุชื่อที่เริ่มต้นที่1และนับขึ้นโดยแต่ละn, 2*n, 3*nสำหรับnเงื่อนไข



1

พาร์ 16 ไบต์

การเข้ารหัสที่กำหนดเองซึ่งอธิบายที่นี่ใช้เพียงหนึ่งไบต์ต่ออักขระ

✶″{*↑                   ## 3 => (0 1 2) => (0 3 6)  => (1 4 7)
✶″U{ⁿ↑                  ## 3 => (1 2 3) => (3 9 27) => (4 10 28)
✶U¡↑◄                   ## 3 => (1 2 3) =>             (1 2 4)

เอาท์พุท

2 => (1 3)
3 => (1 4 7)
4 => (1 5 9 13)
5 => (1 6 11 16 21)

2 => (3 5)
3 => (4 10 28)
4 => (5 17 65 257)
5 => (6 26 126 626 3126)

2 => (1 3)
3 => (1 2 4)
4 => (1 2 3 5)
5 => (1 2 3 4 6)

1

Haskell, 54 ไบต์

f n=n+1:[1..n-1]
g n=5*n+1:[1..n-1]
h n=9*n+1:[1..n-1]

ฟังก์ชั่นทั้งสามนี้ค่อนข้างตรงไปตรงมาดังนั้น ...



1

Python 2, 125 ไบต์

N=input();print[i*N+1for i in range(N)]
N=input();print[i*N+1for i in range(1,N+1)]
N=input();print[i*N+1for i in range(2,N+2)]

แต่ละบรรทัดที่นี่เป็นโปรแกรมที่สมบูรณ์ ทางออกที่ชัดเจนที่สุดในใจของฉัน

EDIT @ Sherlock9 บันทึกสองไบต์



0

Golfscript, 50 51 57ไบต์

เวอร์ชัน Golfscript ของสิ่งที่เคยเป็นรหัส Python ของquintopia แต่ละฟังก์ชั่นจะnปิดสแต็ค

{.,{1$*)}%\;}:f;    i*n+1 for i in range(n)
{.,{)1$*)}%\;}:g;   i*n+1 for i in range(1,n+1)
{.,{1$)\?}%\;}:h;   (n+1)**i for i in range(n)

0

TI-Basic (TI-84 Plus CE) รวม55 40 ไบต์

PRGM:C 12 bytes
    seq(AnsX+1,X,1,Ans
PRGM:B 14 bytes
    seq(AnsX+1,X,2,Ans+1
PRGM:C 14 bytes
    seq(AnsX+1,X,3,Ans+2

เรียบง่ายคล้ายกับคำตอบอื่น ๆ ที่นี่แต่ละรายการจะแสดงหมายเลข (X + A) N + 1 สำหรับ X ในช่วง (N) และด้วย A ซึ่งโปรแกรมใด (1, 2, หรือ 3)

โซลูชันเก่า (55 ไบต์):

PRGM:C 17 bytes
    Prompt N
    For(X,1,N
    Disp XN+1
    End
PRGM:B 19 bytes
    Prompt N
    For(X,2,N+1
    Disp XN+1
    End
PRGM:C 19 bytes
    Prompt N
    For(X,3,N+2
    Disp XN+1
    End

เรียบง่ายคล้ายกับคำตอบอื่น ๆ มากมายที่นี่แต่ละตัวจะแสดงตัวเลข (X + A) N + 1 สำหรับ X ในช่วง (N) และด้วย A ซึ่งเป็นโปรแกรม (1, 2 หรือ 3)

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