ความแตกต่างที่ N


26

ในคณิตศาสตร์วิธีหนึ่งที่จะคิดออกว่าประเภทของความสัมพันธ์ที่กำหนด (เส้นตรง, กำลังสอง, ฯลฯ ) คือการคำนวณความแตกต่าง ในการทำเช่นนั้นคุณจะต้องบันทึกรายการค่า y ที่ช่องว่างระหว่างค่า x ที่เหมือนกันและลบแต่ละค่าออกจากตัวเลขด้านบนสร้างรายการของตัวเลขหนึ่งที่สั้นกว่าจากรายการก่อนหน้า หากรายการผลลัพธ์ประกอบด้วยตัวเลขที่เหมือนกันทั้งหมดความสัมพันธ์มีความแตกต่าง 1 (เป็นเส้นตรง) หากพวกเขาไม่เหมือนกันแล้วคุณทำซ้ำกระบวนการในรายการใหม่ หากตอนนี้พวกเขาเหมือนกันความสัมพันธ์มีความแตกต่างของ 2 (มันเป็นกำลังสอง) หากพวกเขาไม่เหมือนกันคุณเพียงดำเนินการต่อกระบวนการนี้จนกว่าพวกเขาจะ ตัวอย่างเช่นหากคุณมีรายการค่า y [1,6,15,28,45,66] สำหรับการเพิ่มค่า x แบบเพิ่มหน่วย:

First Differences:

1
6   1-6  =-5
15  6-15 =-9
28  15-28=-13
45  28-45=-17
66  45-66=-21

Second differences:

-5 
-9  -5+9  =4
-13 -9+13 =4
-17 -13+17=4
-21 -17+21=4

As these results are identical, this relation has a difference of 2

งานของคุณ:

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

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

อาเรย์ของจำนวนเต็มซึ่งอาจมีความยาว> 1

เอาท์พุท:

จำนวนเต็มที่แทนความแตกต่างของความสัมพันธ์ที่อธิบายโดยอินพุต

กรณีทดสอบ:

Input                            => Output
[1,2,3,4,5,6,7,8,9,10]           => 1
[1,4,9,16,25,36]                 => 2
[1,2,1]                          => 2 (when there is only one value left, all values are automatically identical, so the largest difference an array can have is equal to the length of the array-1)
"Hello World"                    => undefined behavior (invalid input)
[1,1,1,1,1,1,1,1,1]              => 0 (all elements are already identical)
[1, 3, 9, 26, 66, 150, 313, 610] => 6

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

นี่คือคะแนนต่ำสุดเป็นไบต์ในแต่ละภาษาชนะสำหรับภาษานั้น คะแนนต่ำสุดโดยรวมได้รับเครื่องหมายถูกสีเขียว


อินพุตสามารถเป็น "ไม่ถูกต้อง" ได้หรือไม่หากอินพุตนั้นไม่เป็นไปตามข้อกำหนดที่ให้มาเราควรผิดพลาดหรือไม่ ให้ -1 เป็นผลลัพธ์หรือไม่
Magic Octopus Urn

พฤติกรรมไม่ได้กำหนดไว้สำหรับการป้อนข้อมูลที่ไม่ถูกต้อง (ฉันไม่สนใจว่าโค้ดของคุณทำอะไร)
Gryphon - Reinstate Monica

ไม่ควร[1,2,1]ให้ 2 [1,2,1] -> [1,-1] -> [-2]
HyperNeutrino

@HyperNeutrino, อ๋อขอโทษ ฉันมีสมองผายลมที่นั่น
Gryphon - Reinstate Monica

เพิ่มกรณีทดสอบนี้[1,3,9,26,66,150,313,610]-> 6หากคุณต้องการ
J42161217

คำตอบ:


10

Husk , 6 ไบต์

ขอบคุณลีโอที่ให้ฉันใช้เวอร์ชั่นที่เหมาะกับฉัน[1,1,1,1,1,1]

←VE¡Ẋ-

ลองออนไลน์!

คำอธิบาย

   ¡     Repeatedly apply function, collecting results in a list
    Ẋ-     Differences
 VE      Get the index of the first place in the list where all the elements are equal
←        Decrement

2
เมื่อใดก็ตามที่มีคนพูดว่า Husk เป็นวุ้นใหม่พวกเขาก็ค่อนข้างถูก > _ <
Zacharý

ประณามผมจะโพสต์นี้ ทำได้ดี แต่ +1!
Leo

@Leo กรณีทดสอบที่ฉันไม่เห็น[1,1,1,1]ฉันสามารถใช้ของคุณได้หรือไม่
H.PWiz

@ H.PWiz แน่นอนไป!
Leo


7

MATL , 8 ไบต์

`dta}x@q

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

คำอธิบาย

สิ่งนี้รวบรวมความแตกต่างติดต่อกันซ้ำ ๆ กันจนผลลัพธ์เป็นศูนย์ทั้งหมด เอาต์พุตเป็นจำนวนซ้ำที่ต้องการลบ 1

`      % Do... while
  d    %   Consecutive diffferences. Takes input (implicitly) the first time
  t    %   Duplicate
  a    %   True if any element is nonzero. This is the loop condition
}      % Finally (execute before exiting the loop)
  x    %   Delete. This removes the array of all zeros
  @    %   Push iteration index
  q    %   Subtract 1. Implicitly display
       % End (implicit). Proceed with next iteration if top of the stack is true

7

R , 50 44 ไบต์

function(l){while(any(l<-diff(l)))F=F+1
F*1}

ลองออนไลน์!

ยิงdiffของlชุดมันlและการตรวจสอบถ้าผลที่ได้มีค่าใด ๆ ที่ไม่ใช่ศูนย์ ถ้าไม่เพิ่มขึ้นF(เริ่มต้นเป็นFALSEโดยปริยาย) และผลตอบแทนF*1การแปลงFALSEไป0ในกรณีที่ทั้งหมดlจะเหมือนกันอยู่แล้ว



5

Mathematica, 49 ไบต์

(s=#;t=0;While[!SameQ@@s,s=Differences@s;t++];t)&  

thanx @alephalpa สำหรับ -6 ไบต์และ @hftf -1 ไบต์

และนี่คือวิธีการอื่นจาก @hftf

Mathematica, 49 ไบต์

Length@NestWhileList[Differences,#,!SameQ@@#&]-1&

(s=#;t=0;While[UnsameQ@@s,s=Differences@s;t++];t)&
alephalpha

1
UnsameQ[1,2,1]เป็นเท็จ !SameQ[1,2,1]เป็นความจริง. ฉันไม่คิดว่าวงคู่มือช่วยตัวอักษรอย่างใดอย่างหนึ่งLength@NestWhileList[Differences,#,!SameQ@@#&]-1&ที่มีอยู่แล้วความยาวเช่นเดียวกับคุณหลังจากเปลี่ยนด้วยUnsameQ !SameQ
hftf


4

Japt , 10 7 ไบต์

è@=ä-)d

ลองออนไลน์!

ขึ้นอยู่กับความจริงที่ว่าผลลัพธ์นั้นมีการรับประกันว่าจะอยู่ภายในความยาวของอาเรย์อินพุต

คำอธิบาย

è@=ä-)d     Implcit input of array U
 @          For each value in U...
  =ä-)      Update U to be equal to its subsections, each reduced by subtraction
      d     Check if any values in that are truthy
è           Count how many items in that mapping are true

โดยท้ายที่สุดนี้จะ map อาร์เรย์
[1, 3, 9, 26, 66, 150, 313, 610]ไป[true, true, true, true, true, true, false, false],
ซึ่งประกอบด้วย6 true s

เวอร์ชัน 10 ไบต์ก่อนหน้า

@=ä-)e¥0}a

ลองออนไลน์!


4

Perl 6 , 37 ไบต์

{($_,{@(.[] Z- .[1..*])}...*.none)-2}

ลองออนไลน์!

คำอธิบาย:ฟังก์ชันรับอินพุตเป็นหนึ่งรายการ จากนั้นสร้างลำดับแบบเรียกซ้ำเช่นนี้องค์ประกอบแรกคือรายการเดิม ( $_) องค์ประกอบถัดไปจะถูกส่งคืนโดย{@(@$_ Z- .[1..*])}ถูกเรียกบนองค์ประกอบก่อนหน้าและจะถูกทำซ้ำจนกว่าจะมีเงื่อนไข*.noneเป็นจริงซึ่งจะเกิดขึ้นเฉพาะเมื่อรายการนั้นเป็นทั้ง ว่างเปล่าหรือมีเลขศูนย์เท่านั้น (หรือในทางเทคนิคค่าเท็จอื่น ๆ ) จากนั้นเราจะดึงรายการและลบ 2 จากมันซึ่งบังคับให้มันก่อนถึงบริบทตัวเลข (และรายการในบริบทตัวเลขเท่ากับจำนวนองค์ประกอบของพวกเขา) และในตอนท้ายส่งคืน 2 น้อยกว่าจำนวนองค์ประกอบใน รายการ.

บล็อกประหลาด{@(@$_ Z- .[1..*])}ใช้เวลาเพียงแค่รายการที่กำหนด ( .[]- เรียกว่าZen slice - การจัดทำดัชนีด้วยวงเล็บเปล่าให้ผลกับรายการทั้งหมด) บีบอัดโดยใช้เครื่องหมายลบ ( Z-) ด้วยรายการเดียวกันโดยไม่มีองค์ประกอบแรก ( .[1..*]) และบังคับให้รายการ ( @(...)- เราต้องการเพราะ zip ส่งคืนเฉพาะ Seq ซึ่งเป็นรายการทางเดียวที่สามารถทำซ้ำได้เพียงครั้งเดียวซึ่งเป็นสิ่งที่เราไม่ชอบ) และนั่นก็คือ


การเปลี่ยน@(.[] Z- .[1..*])เป็น[.[] Z-.[1..*]]ควรบันทึกสองไบต์
nwellnhof

4

Java 8, 191 + 58 = 249 198 140 ไบต์

ขอบคุณ PunPun1000 สำหรับ 51 ไบต์
ขอบคุณ Nevay สำหรับ 58 ไบต์

int f(int[]a){int x=a.length-1,b[]=new int[x];for(;x-->0;)b[x]=a[x+1]-a[x];return java.util.Arrays.stream(a).distinct().count()<2?0:1+f(b);}

ลองออนไลน์!

ลองออนไลน์ (รุ่น 198 ไบต์)

ดังนั้นนี่เป็นครั้งแรกของฉันที่โพสต์ที่นี่ใน PPCG (และเป็นครั้งแรกที่เคยท้าทายรหัสกอล์ฟ) คำติชมที่สร้างสรรค์ใด ๆ ยินดีต้อนรับและชื่นชม ฉันพยายามปฏิบัติตามคำแนะนำในการโพสต์หากมีอะไรไม่เหมาะสมที่จะชี้ให้เห็น

รุ่นสวยงาม:

int f(int[] a) {
    int x = a.length - 1, b[] = new int[x];
    for (; x-- > 0;) {
        b[x] = a[x + 1] - a[x];
    }
    return java.util.Arrays.stream(a).distinct().count() < 2 ? 0 : 1 + f(b);
}

3
ยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem

แทนที่จะนำเข้าโมดูลเหล่านั้นคุณสามารถใช้java.util.stream.IntStream k = java.util.Arrays.stream(a);
PunPun1000

ในความเป็นจริงมีการเปลี่ยนแปลงสองสามอย่างที่คุณสามารถทำได้ฟรี 1) publicไม่จำเป็นต้องรวมอยู่ในจำนวนไบต์ 2) คุณไม่ควรยอมรับพารามิเตอร์ตัวที่สอง แต่การลบมันสามารถบันทึกไบต์ได้จริง 3) คุณสามารถลบวงเล็บเหลี่ยมที่ไม่จำเป็นออกได้
PunPun1000

4) ไม่ใช่ตัวรักษา แต่คุณควรรวม TIO ถ้าเป็นไปได้นี่คือตัวอย่างพร้อมคำแนะนำเหล่านั้นที่ 198 bytes TIO
PunPun1000


3

Haskell, 46 ไบต์

g l|all(==l!!0)l=0|0<1=1+g(zipWith(-)l$tail l)

นี้เพียง recurses - คือรายการความแตกต่างของzipWith(-)l$last l lและgเป็นฟังก์ชั่นที่ตอบคำถาม


การแก้ปัญหาแบบเรียกซ้ำเป็นวิธีที่ดี
jferard

@ jferard นั่นเป็นเรื่องจริงมาก
ภูมิใจ Haskeller

3

Kotlin , 77 ไบต์

โพสต์แรกพยายามแก้ไขคำตอบสุดท้ายบน kotlin 2 ครั้ง; D

{var z=it;while(z.any{it!=z[0]})z=z.zip(z.drop(1),{a,b->a-b});it.size-z.size}

ทำการทดสอบส่วนหนึ่งจาก @jrtapsell

TryItOnline


ยินดีต้อนรับสู่ PPCG! คำตอบแรกที่ดี outgolf เกินไป
H.PWiz

3

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

{1=≢∪⍵:01+∇2-/⍵}

ลองออนไลน์!

ขอบคุณ @ngn สำหรับ -5 ไบต์!

อย่างไร?

  • { ... }, ฟังก์ชั่น
  • 1=≢∪⍵:0หากทุกองค์ประกอบเท่ากันในอาร์กิวเมนต์ให้ส่งคืน 0
  • 1+∇2-/⍵มิฉะนั้นส่งคืน 1 + nของความแตกต่าง (ซึ่งก็คือn-1การเพิ่มหนึ่งเข้าไปn)

มันจะสั้นลงถ้าคุณเสียสละหาง: recursiveness:{1=≢∪⍵:0⋄1+∇2-/⍵}
ngn

2

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

IÐĿEÐḟL

ลองออนไลน์!

คำอธิบาย

IÐĿEÐḟL  Main link
 ÐĿ      While results are unique (which is never so it stops at [])
I        Take the increments, collecting intermediate values # this computes all n-th differences
    Ðḟ   Filter out
   E     Lists that have all values equal (the first n-th difference list that is all equal will be removed and all difference lists after will be all 0s)
      L  Take the length (this is the number of iterations required before the differences become equal)

-1 ไบต์ขอบคุณ Jonathan Allan


1
@Gryphon เสร็จสิ้น! :)
HyperNeutrino

IÐĿEÐḟLสำหรับเจ็ด (ฉันเห็นไมล์ก็พบทั้งเจ็ดด้วยการเรียกซ้ำ)
Jonathan Allan

@JonathanAllan เยี่ยมมากขอบคุณ!
HyperNeutrino


2

JavaScript (ES6), 58 ไบต์

f=a=>+(b=a.slice(1).map((e,i)=>e-a[i])).some(e=>e)&&1+f(b)

+0 ไม่เพียงพอ Jquery: p แม้ว่าที่จริงแล้ว +1 ดีมากฉันรู้ว่าฉันจะไม่สามารถเล่นกอล์ฟใน JS ได้
Zacharý

2

Python 2 , 65 ไบต์

-7 ไบต์ขอบคุณ Jonathan Allan

f=lambda l,c=1:any(l)and f([j-i for i,j in zip(l,l[1:])],c-1)or-c

ลองออนไลน์!


บันทึกไบต์ initialising cไป1, decrementing print-cแล้วใช้
Jonathan Allan

ประหยัดอีกหกด้วยการทำให้เป็นฟังก์ชันแบบเรียกซ้ำ:f=lambda l,c=1:any(l)and f([j-i for i,j in zip(l,l[1:])],c-1)or-c
Jonathan Allan

มันเป็นแค่ฉันหรือเปลี่ยนเป็นแลมบ์ดาแบบเรียกซ้ำไม่บันทึกไบต์ที่เพียงพอหรือไม่ : P ขอบคุณ!
สิ้นเชิงมนุษย์

ฉันคิดว่านี่ต้องmax(...,0)ผ่านการ[1, 1, 1, 1, ...]ทดสอบกรณี
Yonatan N

2

Dyalog APL ขนาด 19 ไบต์

≢-1+(≢2-/⍣{1=≢∪⍵}⊢)

คำอธิบาย:

≢                      length of input
 -1+(             )    minus 1+
     ≢                 length of
      2-/              differences between elements
         ⍣             while
          {1=≢∪⍵}      there is more than 1 unique element
                 ⊢     starting with the input

1
มันใช้ได้ไหม? ≢-1+∘≢2-/⍣{1=≢∪⍵}⊢
Zacharý

2

k , 21 ไบต์

#1_(~&/1_=':)(1_-':)\

สิ่งนี้ใช้งานได้ใน k แต่ไม่ใช่ใน oK เนื่องจาก oK ในขณะที่ลูปทำงานก่อนที่จะตรวจสอบเงื่อนไข (ต่างจากการตรวจสอบสภาพก่อนแล้วจึงเรียกใช้รหัส) ดังนั้นใน oK1 1 1 1 1ตัวอย่างจะทำงานไม่ถูกต้อง

ลองใช้ oK ออนไลน์!

Running the k example with 1 1 1 1 1 1 in the k interpreter.

คำอธิบาย:

   (        )       \ /while(
    ~&/               /      not(min(
       1_=':          /              check equality of all pairs))) {
             (1_-':)  /    generate difference list
                      /    append to output }
#1_                   /(length of output) - 1

~&/1_=':->1<#?
ngn

2

Haskell , 66 61 60 ไบต์

z=(=<<tail).zipWith
f=length.takeWhile(or.z(/=)).iterate(z(-))

ลองออนไลน์!

บันทึก 5 ไบต์ขอบคุณ Christian Sievers

บันทึก 1 ไบต์ขอบคุณที่ภูมิใจฮาสเคลเลอร์

iterate(z(-)) คำนวณรายการที่แตกต่าง

or.z(/=) ทดสอบว่ามีองค์ประกอบที่ไม่เท่ากันในรายการเหล่านั้นหรือไม่

length.takeWhile นับรายการความแตกต่างที่มีองค์ประกอบไม่เท่ากัน


ฉันคิดว่าคุณสามารถทดสอบองค์ประกอบที่ไม่เท่ากันได้ด้วยor.z(/=)
Christian Sievers

@ChristianSievers ขอบคุณ! นั่นเป็นสิ่งที่ชัดเจน แต่ผมไม่เห็นมัน ...
jferard

นอกจากนี้คุณยังสามารถใช้งานz=(=<<tail).zipWithได้หนึ่งไบต์ที่สั้นลง
Haskeller ภูมิใจ

@proudhaskeller และสง่างามยิ่งขึ้นเช่นเคยพร้อมกับคำจำกัดความฟรี ขอบคุณ!
jferard


2

Japtap , 7 ไบต์

วิธีการเดียวกัน (แต่ได้มาโดยอิสระ) เช่นเดียวกับJustin ที่มีการใช้งานที่แตกต่างกัน

£=äaÃèx

ทดสอบมัน


คำอธิบาย

Uการป้อนข้อมูลโดยปริยายของอาร์เรย์

£   Ã

แผนที่เหนือแต่ละองค์ประกอบ

äa

ใช้แต่ละคู่ลำดับ ( ä) ขององค์ประกอบในUและลดลงโดยความแตกต่างแน่นอน ( a)

=

Uมอบหมายอาร์เรย์ที่

èx

นับ ( è) จำนวนอาร์เรย์ย่อยที่ส่งกลับค่าความจริง (เช่นไม่ใช่ศูนย์) เมื่อลดลงด้วยการเพิ่ม


1

TI-Basic, 19 ไบต์

While max(abs(ΔList(Ans
ΔList(Ans
IS>(A,9
End
A

โดยค่าเริ่มต้นตัวแปรเริ่มต้นที่ศูนย์ นอกจากนี้ไม่เคยคิดว่าฉันจะใช้IS>(เพื่อประโยชน์อะไร


1

C # (. NET Core) , 70 69 + 18 ไบต์

-1 ไบต์ต้องขอบคุณKevin Cruijssen

g=a=>i=>a.Distinct().Count()>1?g(a.Zip(a.Skip(1),(y,z)=>y-z))(i+1):i;

จะต้องได้รับ 0 เมื่อโทรทำงานอย่างถูกต้อง รวมอยู่ในจำนวนไบต์:

using System.Linq;

ลองออนไลน์!

คำอธิบาย:

g = a => i =>                      // Function taking two arguments (collection of ints and an int)
    a.Distinct()                   // Filter to unique elements
    .Count() > 1 ?                 // If there's more than one element
        g(                         //     Then recursively call the function with
            a.Zip(                 //     Take the collection and perform an action on corresponding elements with another one
                a.Skip(1),         //         Take our collection starting at second element
                (y, z) => y - z    //         Perform the subtraction
            )
        )(i + 1)                   //     With added counter
        : i;                       // Otherwise return counter

เวอร์ชันซ้ำ 84 + 18 ไบต์:

a=>{int i=0;for(;a.Distinct().Count()>1;i++)a=a.Zip(a.Skip(1),(y,z)=>y-z);return i;}

ลองออนไลน์!


1
(y,z)=>y-zคุณสามารถลบพื้นที่ที่ซ้ำซ้อน แต่คำตอบที่ดี +1 จากฉัน
Kevin Cruijssen

@KevinCruijssen ขอบคุณ! นอกจากนี้โอ๊ะโอ
Grzegorz Puławski

1

Clojure 62 ไบต์

#(loop[c % i 0](if(apply = c)i(recur(map -(rest c)c)(inc i))))

อย่าง=สามารถใช้จำนวนของการขัดแย้งใด ๆ และอาร์กิวเมนต์เดียวเป็นเหมือน "ตัวเอง" ได้รับการดำเนินการตาม(apply = [1 2 3])(= 1 2 3)


ดีสิ่งที่ฉันพยายามทำ แต่ฉันพยายามดิ้นรนเพื่อหาคู่ที่มีขนาดกะทัดรัดต่างกัน นั่นยอดเยี่ยมฉันจะต้องจำไว้ว่าสำหรับอนาคต
MattPutnam

1

Pyth , 15 ไบต์

W.E.+Q=.+Q=hZ)Z

ตรวจสอบกรณีทดสอบทั้งหมด

อย่างไร?

คำอธิบาย # 1

W.E.+Q=hZ=.+Q)Z   ~ Full program.

W                 ~ While...
 .E.+Q            ~ ... The deltas of Q contain a truthy element.
      =hZ         ~ Increment a variable Z, which has the initial value of 0.
         =        ~ Transform the variable to the result of a function applied to itself...
          .+Q     ~ ... Operate on the current list and deltas.
             )Z   ~ Close the loop and output Z.

-1 ไบต์Wtl{Q=hZ=.+Q)Z
เดฟ

@ เดฟดียิ่งขึ้น: WP{Q=hZ=.+Q)Z. ขอบคุณ!
Mr. Xcoder



0

Pyth, 10 ไบต์

tf!t{.+FQt

หากเราสามารถจัดทำดัชนีจาก 1 เราสามารถบันทึกไบต์โดยการลบนำ tหน้า

ลองออนไลน์

คำอธิบาย

tf!t{.+FQt
 f        T  Find the first (1-indexed) value T...
     .+FQt   ... such that taking the difference T - 1 times...
  !t{        ... gives a set with more than one value in it.
t            0-index.

0

Kotlin , 83 ไบต์

{var z=it
var c=0
while(z.any{it!=z[0]}){c++
z=(0..z.size-2).map{z[it+1]-z[it]}}
c}

เชิดชู

{
    // Make input mutable
    var z=it
    // Count for returning
    var c=0
    // While the array is not identical
    while (z.any { it != z[0] }) {
        // Increment count
        c++
        // Update list to differences
        z = (0..z.size-2).map { z[it+1] - z[it] }
    }
    // Return count
    c
}

ทดสอบ

var n:(List<Int>)->Int =
{var z=it
var c=0
while(z.any{it!=z[0]}){c++
z=(0..z.size-2).map{z[it+1]-z[it]}}
c}

data class TestData(var input: List<Int>, var output: Int)

fun main(args: Array<String>) {
    val items = listOf(
        TestData(listOf(1,2,3,4,5,6,7,8,9,10), 1),
        TestData(listOf(1,4,9,16,25,36), 2),
        TestData(listOf(1,2,1), 2),
        TestData(listOf(1,1,1,1,1,1,1,1,1), 0),
        TestData(listOf(1, 3, 9, 26, 66, 150, 313, 610), 6)
    )

    val fails = items.map { it to n(it.input) }.filter { it.first.output != it.second }

    if (fails.isEmpty()) {
        println("Test passed")
    } else {
        fails.forEach {println("FAILED: $it")}
    }
}

TryItOnline


หากใครบางคนสามารถแก้ไขเพื่อแก้ไขคำแนะนำภาษาของฉันได้ฉันก็ดูเหมือนว่าพวกเขาจะไม่สามารถทำงานได้
jrtapsell

มันlang-kotlinไม่ใช่เพียงแค่kotlinในคำแนะนำของเครื่องมือเน้นข้อความ
Ruslan

0

Swift 4 , 90 bytes

func f(_ a:[Int])->Int{return a.contains{$0 != a[0]} ?f(zip(a, a.dropFirst()).map(-))+1:0}

ทางเลือกการติดตั้งแบบปิด:

var f: ((_ input: [Int]) -> Int)!
f = {a in a.contains{$0 != a[0]} ?f(zip(a, a.dropFirst()).map(-))+1:0}

กรณีทดสอบ:

let testcases: [(input: [Int], expected: Int)] = [
    (input: [1,2,3,4,5,6,7,8,9,10],           expected: 1),
    (input: [1,4,9,16,25,36],                 expected: 2),
    (input: [1,2,1],                          expected: 2),
    (input: [1,1,1,1,1,1,1,1,1],              expected: 0),
    (input: [1, 3, 9, 26, 66, 150, 313, 610], expected: 6),
]

for (caseNumber, testcase) in testcases.enumerated() {
    let actual = f(testcase.input)
    assert(actual == testcase.expected,
        "Testcase #\(caseNumber) \(testcase.input) failed. Got \(actual), but expected \(testcase.expected)!")
    print("Testcase #\(caseNumber) passed!")
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.