บาร์โค้ดของฉันถูกต้องหรือไม่?


33

EAN-8บาร์โค้ดรวมถึง 7 หลักของข้อมูลและการตรวจสอบหลักที่ 8

การตรวจสอบจะคำนวณโดยการคูณตัวเลขด้วย 3 และ 1 สลับกันเพิ่มผลลัพธ์และลบออกจากผลคูณถัดไปของ 10

ตัวอย่างเช่นกำหนดตัวเลข2103498:

Digit:        2   1   0   3   4   9   8
Multiplier:   3   1   3   1   3   1   3
Result:       6   1   0   3  12   9  24

ผลรวมของตัวเลขที่ได้คือ55ดังนั้นหลักของการตรวจสอบคือ60 - 55 = 5


ความท้าทาย

งานของคุณคือกำหนดบาร์โค้ด 8 หลักให้ตรวจสอบว่ามันถูกต้องหรือไม่ - คืนค่าความจริงหากการตรวจสอบถูกต้องและเป็นเท็จ

  • คุณสามารถป้อนข้อมูลในแบบฟอร์มใด ๆ ต่อไปนี้:
    • สตริงที่มีความยาว 8 ตัวอักษรแสดงถึงตัวเลขบาร์โค้ด
    • รายการจำนวนเต็ม 8 หลักคือบาร์โค้ด
    • จำนวนเต็มไม่เป็นลบ (คุณสามารถสมมติว่าเป็นศูนย์นำหน้าซึ่งไม่ได้รับเช่น1= 00000001หรือคำขออินพุตด้วยเลขศูนย์ที่กำหนด)
  • Builtins ที่คำนวณการตรวจสอบ EAN-8 (เช่นใช้ตัวเลข 7 ตัวแรกและคำนวณตัวเลขสุดท้าย) จะถูกแบน
  • นี่คือดังนั้นโปรแกรมที่สั้นที่สุด (เป็นไบต์) ชนะ!

กรณีทดสอบ

20378240 -> True
33765129 -> True
77234575 -> True
00000000 -> True

21034984 -> False
69165430 -> False
11965421 -> False
12345678 -> False


1
คำถามนี้ไม่ได้เกี่ยวกับบาร์โค้ด (ซึ่งเป็นสิ่งที่แถบสีขาวดำ) แต่เกี่ยวกับจำนวนที่เข้ารหัสด้วยบาร์โค้ด หมายเลขสามารถมีอยู่ได้โดยไม่มีบาร์โค้ดและบาร์โค้ดสามารถเข้ารหัสสิ่งอื่นนอกเหนือจาก EAN อาจเป็นเพียงแค่ "ความถูกต้อง EAN-8 ของฉัน " เป็นชื่อที่ดีกว่าหรือไม่
Paŭlo Ebermann

2
@ PaŭloEbermannไม่มีวงแหวนเดียวกันกับมัน ...
FlipTack

7
เมื่ออ่านเกี่ยวกับบาร์โค้ดฉันคาดหวังว่าการอ่านภาพบางส่วน (หรืออย่างน้อยบิตสตริง) ไม่ได้ตรวจสอบการตรวจสอบ
Paŭlo Ebermann

คำตอบ:


5

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

s2Sḅ3⁵ḍ

ลองออนไลน์!

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

s2Sḅ3⁵ḍ  Main link. Argument: [a,b,c,d,e,f,g,h] (digit array)

s2       Split into chunks of length 2, yielding [[a,b], [c,d], [e,f], [g,h]].
  S      Take the sum of the pairs, yielding [a+c+e+g, b+d+f+h].
   ḅ3    Convert from ternary to integer, yielding 3(a+c+e+g) + (b+d+f+h).
     ⁵ḍ  Test if the result is divisible by 10.

13

JavaScript (ES6), 41 40 38 ไบต์

บันทึก 2 ไบต์ด้วย @ETHProductions และ 1 ไบต์ขอบคุณ @Craig Ayre

s=>s.map(e=>t+=e*(i^=2),t=i=1)|t%10==1

รับอินพุตเป็นรายการของตัวเลข

กำหนดผลรวมของตัวเลขทั้งหมดรวมถึงการตรวจสอบ

หากผลรวมเป็นทวีคูณของ 10 แสดงว่าเป็นบาร์โค้ดที่ถูกต้อง

กรณีทดสอบ


ฉันจะบอกว่าคุณสามารถบันทึก 3 ไบต์โดยเปลี่ยนจากการเรียกซ้ำล่วงหน้าไปเป็นการโพสต์ซ้ำด้วยg=([n,...s],i=3,t=0)=>n?g(s,4-i,t+n*i):t%10<1แต่คุณอาจพบวิธีที่ดีกว่า ...
ETHproductions

ขอบคุณ @ETHproductions ฉันเปลี่ยนไปmapซึ่งฉันคิดว่าทำงานได้ดีขึ้นเนื่องจากอินพุตอาจเป็นรายการตัวเลขแทนที่จะเป็นสตริง
Rick Hitchcock

อาจบันทึกไบต์อื่นด้วยs=>s.map(e=>t+=e*(i=4-i),t=i=1)&&t%10==1?
ETHproductions

ใช่เยี่ยมยอดขอบคุณ:)
Rick Hitchcock

สุดยอดทางออก! คุณสามารถแทนที่&&ด้วย|เอาต์พุต 1/0 เนื่องจากอนุญาตความจริง / เท็จได้หรือไม่
Craig Ayre


8

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

m2Ḥ+µS⁵ḍ

ลองชุดทดสอบ

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

JḂḤ‘×µS⁵ḍ

ลองออนไลน์หรือลองชุดทดสอบ

วิธีนี้ใช้ได้ผล

m2Ḥ + µS⁵ḍ ~ โปรแกรมเต็มรูปแบบ

m2 ~ Modular2 ส่งคืนทุกองค์ประกอบที่สองของอินพุต
  Ḥ ~ เพิ่มเป็นสองเท่า
   + µ ~ ผนวกอินพุตและเริ่ม monadic chain ใหม่
     S ~ Sum
      ⁵ḍ ~ หารด้วย 10 หรือไม่
JḂḤ '× µS⁵ḍ ~ โปรแกรมเต็มรูปแบบ (monadic)

ช่วงความยาว J ~ 1 ที่จัดทำดัชนี
 Ḃ ~ บิต; โมดูโล่แต่ละหมายเลขในช่วงด้านบนเป็น 2
  Ḥ ~ เพิ่มเป็นสองเท่า
   '~ เพิ่มแต่ละอัน
    × ~ การทวีคูณแบบคู่กับอินพุต
     µ ~ เริ่มเชน monadic ใหม่
      S ~ Sum
       ⁵ḍ ~ ผลรวมหารด้วย 10 หรือไม่

ผลลัพธ์สำหรับตัวเลข 7 หลักแรกของบาร์โค้ดและตัวเลขการตรวจสอบจะต้องเพิ่มเป็นทวีคูณของ10เพื่อให้ถูกต้อง ดังนั้นการตรวจสอบที่ถูกต้อง IFF อัลกอริทึมที่ใช้กับทั้งรายการคือหารด้วย10


ยังคงเป็น 9 ไบต์ แต่มีค่าที่สอดคล้องกัน:JḂḤ‘×µS⁵ḍ
HyperNeutrino

@HyperNeutrino ขอบคุณฉันรู้ว่ามีอะตอมสำหรับสิ่งนี้!
Mr. Xcoder

ขนาด 9 ไบต์:: JḂaḤ+µS⁵ḍP
HyperNeutrino

@HyperNeutrino ดีมีจำนวนมากของทางเลือก: P
นาย Xcoder

1
8 ไบต์หรือ 8 ตัวอักษร? m2Ḥ+µS⁵ḍคือ 15 ไบต์ใน UTF-8 ยกเว้นว่าฉันคำนวณผิด
ta.speot.is

7

MATL 10 ไบต์

ขอบคุณ@Zgarb ที่ชี้ให้เห็นข้อผิดพลาดตอนนี้แก้ไข

IlhY"s10\~

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

คำอธิบาย

Ilh     % Push [1 3]
Y"      % Implicit input. Run-length decoding. For each entry in the
        % first input, this produces as many copies as indicated by
        % the corresponding entry of the second input. Entries of
        % the second input are reused cyclically
s       % Sum of array
10\     % Modulo 10
~       % Logical negate. Implicit display

7

Befunge-98 (PyFunge) , 16 14 ไบต์

บันทึก 2 ไบต์โดยข้ามส่วนที่สองไปใช้jแทน;s รวมถึงการสลับ a ~และ+ในส่วนแรกเพื่อกำจัด a +ในวินาที

~3*+~+6jq!%a+2

อินพุตมีตัวเลข 8 หลัก (พร้อมนำ 0s ถ้ามี) และไม่มีอะไรอื่น

เอาท์พุทผ่านรหัสออก (เปิด debug ดรอปดาวน์บน TIO) โดยที่ 1 เป็นจริงและ 0 เป็นเท็จ

ลองออนไลน์!

คำอธิบาย

โปรแกรมนี้ใช้เทคนิคที่หลากหลาย

ประการแรกมันใช้ตัวเลขในแต่ละโดยผ่านค่า ASCII ของพวกเขา โดยปกติจะต้องลบ 48 จากแต่ละค่าในขณะที่เราอ่านจากอินพุต อย่างไรก็ตามถ้าเราไม่แก้ไขมันเราจะเหลือ 16 (3 + 1 + 3 + 1 + 3 + 1 + 3 + 1) 48 สำเนาในผลรวมของเราซึ่งหมายความว่าผลรวมของเราจะมากกว่า 768 สิ่งที่ "ควร" เป็น เนื่องจากเรามีความกังวลกับผลรวมของ mod mod 10 เราจึงสามารถเพิ่ม 2 ลงในผลรวมได้ในภายหลัง ดังนั้นเราสามารถรับค่า ASCII ดิบบันทึก 6 ไบต์หรือมากกว่านั้น

ประการที่สองรหัสนี้จะตรวจสอบว่าตัวละครอื่น ๆ ทุกตัวเป็น EOF หรือไม่เนื่องจากอินพุตนั้นรับประกันว่ามีความยาวเพียง 8 ตัวอักษร

ประการที่สาม#ตอนท้ายของบรรทัดจะไม่ข้ามอักขระแรก แต่จะข้าม;ถ้ามาจากทิศทางอื่น มันดีกว่าวาง#;ที่ด้านหน้าแทน

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

เป็นขั้นเป็นตอน

หมายเหตุ: อักขระ "คี่" และ "คู่" จะขึ้นอยู่กับระบบที่จัดทำดัชนี 0 อักขระตัวแรกคือเลขคู่ที่มีดัชนี 0

~3*+~+      Main loop - sum the digits (with multiplication)
~           If we've reached EOF, reverse; otherwise take char input. This will always
                be evenly indexed values, as we take in 2 characters every loop.
 3*+        Multiply the even character by 3 and add it to the sum.
    ~       Then, take an odd digit - we don't have to worry about EOF because
                the input is always 8 characters.
     +      And add it to the sum.
      6j    Jump over the second part - We only want to run it going backwards.

        q!%a+2    The aftermath (get it? after-MATH?)
            +2    Add 2 to the sum to make up for the offset due to reading ASCII
          %a      Mods the result by 10 - only 0 if the bar code is valid
         !        Logical not the result, turning 0s into 1s and anything else into 0s
        q         Prints the top via exit code and exits


6

ภาษา Wolfram (Mathematica) , 26 21 ไบต์

10∣(2-9^Range@8).#&

ลองออนไลน์!

รับอินพุตเป็นรายการ 8 หลัก

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

2-9^Range@8สอดคล้องโมดูโล 10 ซึ่งเป็น2-(-1)^Range@8 {3,1,3,1,3,1,3,1}เรานำผลคูณดอทของรายการนี้ด้วยอินพุตและตรวจสอบว่าผลลัพธ์หารด้วย 10 หรือไม่

ภาษา Wolfram (Mathematica) 33 ไบต์และไม่ใช่การแข่งขัน

Check[#~BarcodeImage~"EAN8";1,0]&

ลองออนไลน์!

รับอินพุตเป็นสตริง ส่งคืน1สำหรับบาร์โค้ดที่ถูกต้องและ0สำหรับบาร์โค้ดที่ไม่ถูกต้อง

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

สิ่งที่ดีที่สุดที่ฉันสามารถหาได้ในตัว (ตั้งแต่ Mathematica เป็นเรื่องของสิ่งนั้น)

บิตภายใน#~BarcodeImage~"EAN8";1สร้างภาพของบาร์โค้ด EAN8 จากนั้นจะข้ามมันทั้งหมดและประเมินผลเป็น 1 อย่างไรก็ตามหากบาร์โค้ดไม่ถูกต้องแล้วBarcodeImageสร้างคำเตือนที่Checkจับได้ซึ่งคืนค่า 0 ในกรณีนั้น


3
คุณกำลังคำนวณด้วยมือเพราะมันสั้นกว่าหรือเพราะ Wolfram ยังไม่มีฟังก์ชัน ValidateEAN8BarCode () บางแห่งในห้องสมุดมาตรฐานของมัน?
ทำเครื่องหมาย

1
@Mark Mathematica ไม่สามารถตรวจสอบบาร์โค้ดได้โดยตรง แต่ฉันเพิ่งพบBarcodeImageซึ่งสร้างภาพของบาร์โค้ดและตรวจสอบบาร์โค้ดในกระบวนการ ดังนั้นCheck[#~BarcodeImage~"EAN8";0,1]<1&จะใช้งานได้ (แต่จะนานกว่า)
Misha Lavrov

5

Java 8, 58 56 55 ไบต์

a->{int r=0,m=1;for(int i:a)r+=(m^=2)*i;return r%10<1;}

-2 ไบต์อ้อมขอบคุณที่@RickHitchcockโดยใช้(m=4-m)*iแทนm++%2*2*i+iหลังจากที่ได้เห็นมันในของเขาคำตอบ JavaScript
-1 ไบต์อ้อมขอบคุณที่@ETHProductions (และ@RickHitchcock ) โดยใช้แทน(m^=2)*i(m=4-m)*i

คำอธิบาย:

ลองที่นี่

a->{              // Method with integer-array parameter and boolean return-type
  int r=0,        //  Result-sum
      m=1;        //  Multiplier
  for(int i:a)    //  Loop over the input-array
    r+=           //   Add to the result-sum:
       (m^=2)     //    Either 3 or 1,
       *i;        //    multiplied by the digit
                  //  End of loop (implicit / single-line body)
  return r%10<1;  //  Return if the trailing digit is a 0
}                 // End of method

1
คุณสามารถบันทึกไบต์อื่นที่มีเคล็ดลับ @ETHProductions แสดงให้ฉันเห็นการเปลี่ยนแปลงไปm=4-m m^=2
Rick Hitchcock

@RickHitchcock อาแน่นอน .. ผมใช้^=1มักจะสวยในคำตอบเมื่อฉันต้องการที่จะปรับเปลี่ยนระหว่างและ0 ผลงานในกรณีนี้การปรับเปลี่ยนระหว่างและ เคล็ดลับดีและขอบคุณสำหรับความคิดเห็นที่พูดถึงมัน :)1^=213
Kevin Cruijssen

4

05AB1E , 14 ไบต์

θ¹¨3X‚7∍*O(T%Q

ลองออนไลน์!

ต้องการนำ0หน้าใช้รายการของตัวเลข


ดูเหมือนว่าจะล้มเหลว3100004(ควรเป็นจริง)
Zgarb

@Zarb คุณหายไปจากที่0นั่น
Erik the Outgolfer

โอ้มันต้องใช้สาย? โอเคแล้วฉันไม่ดี
Zgarb

@Zgarb ดีคุณสามารถละเว้นคำพูด 0แต่ใช่คุณจะต้องนำ คำตอบนี้ใช้ฟังก์ชันตัวเลขกับสตริงซึ่งเป็นหนึ่งในคุณสมบัติของ 05AB1E
Erik the Outgolfer

@ Mr.Xcoder คำถามที่ไม่ชัดเจนในนั้นฉันจะเพิ่มรหัสอื่นที่จะจัดการกับที่ด้านล่าง
Erik the Outgolfer

4

Pyth , 8 ไบต์

!es+*2%2

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

Pyth , 13 ไบต์

หากเราสามารถสมมติว่าอินพุตมี 8 หลักเสมอ:

!es.e*bhy%hk2

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


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

! es + * 2% 2 ~ โปรแกรมเต็มรูปแบบ

      % 2 ~ อินพุต [:: 2] ทุกองค์ประกอบที่สองของอินพุต
    * 2 ~ Double (ทำรายการซ้ำสองครั้ง)
   + ~ ผนวกอินพุต
  s ~ Sum
 e ~ ตัวเลขสุดท้าย
! ~ ตรรกะไม่
! es.e * sbhy% hk2 ~ โปรแกรมเต็มรูปแบบ

               ~ แปลงอินพุตเป็นสตริง
   .e ~ แผนที่ที่แจกแจงเก็บค่าปัจจุบันใน b และดัชนีเป็น k
          % hk2 ~ ความเท่าเทียมกันกลับของดัชนี (k + 1)% 2
        hy ~ เพิ่มขึ้นสองเท่า นี่แมปจำนวนเต็มคี่กับ 1 และคู่กับ 3
      b ~ ตัวเลขปัจจุบัน
     * ~ คูณ
  s ~ Sum
 e ~ ตัวเลขสุดท้าย
! ~ การปฏิเสธเชิงตรรกะ

ถ้าผลรวมของ 7 หลักแรกหลังจากที่ถูกนำมาใช้อัลกอริทึมถูกลบออกจาก10และเมื่อเทียบกับหลักสุดท้ายแล้วนี้จะเทียบเท่ากับการตรวจสอบว่าผลรวมของตัวเลขทั้งหมดหลังจากขั้นตอนวิธีการถูกนำไปใช้เป็นหลาย10


ดูเหมือนว่าจะล้มเหลว3100004(ควรเป็นจริง)
Zgarb

@Zarb เราควรจะรอ3*3+1*1+0*3+...หรือ0*3+3*1+1*0..ไม่ ฉันคิดว่าเราควรจะทำอดีต
Mr. Xcoder

ในข้อมูลจำเพาะใหม่จะมีการเพิ่มตัวเลขนำหน้าเพื่อให้แน่ใจว่ามี 8 อย่างแน่นอน (หากฉันเข้าใจอย่างถูกต้อง)
Zgarb

@Zgarb Ok แก้ไขแล้ว
Mr. Xcoder

4

Haskell , 40 38 ไบต์

a=3:1:a
f x=mod(sum$zipWith(*)a x)10<1

ลองออนไลน์!

รับอินพุตเป็นรายการของเลขจำนวนเต็ม 8 ตัว ตัวอย่างที่ใช้งานได้จริงของการใช้รายการที่ไม่มีที่สิ้นสุด

แก้ไข: บันทึก 2 ไบต์ด้วย GolfWolf


2
การใช้คำนิยาม recursive แทนที่จะcycle ช่วยประหยัด 2 ไบต์
Cristian Lupascu

4

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

-1 ไบต์ขอบคุณMartin Ender !

(.).
$1$1$&
.
$*
M`
1$

ลองออนไลน์!

คำอธิบาย

อินพุตตัวอย่าง: 20378240

(.).
$1$1$&

แทนที่ตัวเลขสองหลักแต่ละตัวด้วยตัวเลขตัวแรกซ้ำสองครั้งตามด้วยตัวของมันเอง เราได้รับ2220333788824440

.
$*

แปลงตัวเลขแต่ละหลักเป็นเอก ด้วยวงเล็บที่เพิ่มเข้ามาเพื่อความกระจ่างแจ้งเราได้รับ(11)(11)(11)()(111)(111)...

M`

นับจำนวนการจับคู่ของสตริงว่างซึ่งเป็นหนึ่งในจำนวนที่มากกว่าของสตริงในสตริง (ด้วยสองขั้นตอนสุดท้ายเราได้นำผลรวมของแต่ละหลัก +1) ผลลัพธ์:60

1$

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


2
ฉันคิดว่าคุณสามารถวาง.บนเวทีการแข่งขันและการแข่งขัน1$ในตอนท้าย
Martin Ender

@ มาร์ตินสุดยอดมากฉันจะทำอย่างนั้นขอบคุณ!
Leo

3

PowerShellขนาด 85 ไบต์

param($a)(10-(("$a"[0..6]|%{+"$_"*(3,1)[$i++%2]})-join'+'|iex)%10)%10-eq+"$("$a"[7])"

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

ใช้อัลกอริทึมตามที่กำหนด จะเข้า$aดึงออกแต่ละหลักด้วย"$a"[0..6]และ loops |%{...}ผ่านพวกเขาด้วย การวนซ้ำแต่ละครั้งเราใช้ตัวเลขหล่อมันเป็นสตริง"$_"แล้วโยนมันเป็น int +ก่อนที่จะคูณด้วย3หรือ1(เลือกโดยการเพิ่ม$iโมดูโลแบบเพิ่ม2)

-join'+'|iexผลที่จะรวบรวมทั้งหมดเข้าด้วยกันและสรุป เราใช้โมเดอเรนผล10นั้นลบออกจาก10และใช้มอลเดอร์ผลลัพธ์อีกครั้ง10(ตัวดัดแปลงที่สองนี้จำเป็นต่อการพิจารณา00000000กรณีทดสอบ) จากนั้นเราตรวจสอบว่าเป็น-eqไปตามหลักสุดท้ายหรือไม่ ผลลัพธ์บูลีนนั้นถูกทิ้งไว้บนไพพ์ไลน์และเอาต์พุตนั้นเป็นนัย


ดูเหมือนว่าจะล้มเหลว3100004(ควรเป็นจริง)
Zgarb

@Zgarb ใช้งานได้สำหรับฉัน ลองออนไลน์!
AdmBorkBork

อ่าฉันทดสอบโดยไม่ใส่เครื่องหมายอัญประกาศ
Zgarb

@Zgarb Ah ใช่ หากไม่มีเครื่องหมายอัญประกาศ PowerShell จะแปลงเป็นเลขจำนวนเต็มโดยปริยายศูนย์ที่นำหน้า
AdmBorkBork

3

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

ż3,1ṁ$P€SN%⁵
Ṫ=Ç

ลองออนไลน์!

รับอินพุตเป็นรายการของตัวเลข


Nitpick: การหมดเวลา TIO ของคุณ นอกจากนี้16 ไบต์
Erik the Outgolfer

@EriktheOutgolfer รออะไรอยู่ มันใช้งานได้เมื่อฉันใส่Dส่วนท้าย และขอบคุณมาก! : D
HyperNeutrino

@EriktheOutgolfer ฉันกำลังทำอะไรผิดหรือเปล่า? 16 byter ของคุณดูเหมือนจะไม่ถูกต้อง?
HyperNeutrino

บางทีก็ทำงานค่อนข้างแตกต่างกัน แต่คุณดูเหมือนว่าบิตที่ไม่ถูกต้องโดยเฉพาะเกินไป ... DµṪ=Çผมคิดว่าบรรทัดสุดท้ายที่ควรจะเป็น
Erik the Outgolfer

1
ดูเหมือนว่าจะล้มเหลว3100004(ควรเป็นจริง)
Zgarb

3

APL (Dyalog)ขนาด 14 ไบต์

เทียบเท่ากับการแก้ปัญหาของ streetster

โปรแกรมร่างกายเต็ม แสดงรายการหมายเลขจาก STDIN

0=10|+/⎕×83 1

ลองออนไลน์!

คือ…

0= ศูนย์เท่ากับ

10| mod-10 ของ

+/ ผลรวมของ

⎕× เวลาป้อนเข้า

8⍴3 1 แปดองค์ประกอบนำมาจากวงจร [3,1]

?


1
คุณหมายถึง APL ไม่สามารถทำได้ในตัวละครตัวเดียวจาก Ancient Sumerian หรือ Linear B?
ทำเครื่องหมาย

รถไฟ: 0 = 10 | - / + 2 × + /
ngn

3

05AB1E , 9 ไบต์

3X‚7∍*OTÖ

ลองออนไลน์!

3X‚7∍*OTÖ    # Argument a
3X‚          # Push [3, 1]
   7∍        # Extend to length 7
     *       # Multiply elements with elements at same index in a
      O      # Total sum
       TÖ    # Divisible by 10

ดี! สิ่งแรกที่ฉันคิดคือ "เพิ่มความยาว" เมื่อฉันเห็นสิ่งนี้ยังไม่ได้ใช้อันนั้น
Magic Octopus Urn

31×S*OTÖ8 ไบต์ ×เพียงแค่กด 31 nครั้ง เมื่อคุณคูณมันจะลด 31 พิเศษลงโดยอัตโนมัติ
Magic Octopus Urn

@MagicOctopusUrn ที่ดูเหมือนว่าจะล้มเหลวใน testcase 669165430 -> 1
kalsowerus

3

J, 17 ไบต์

-10 ไบต์ขอบคุณโคล

0=10|1#.(8$3 1)*]

ลองออนไลน์!

วิธีนี้ใช้การคูณรายการที่มีขนาดเท่ากันเพื่อหลีกเลี่ยงคำสั่งผสมซิป / ทวีคูณของโซลูชันดั้งเดิมรวมถึง "base 1 trick" 1#.เพื่อเพิ่มผลิตภัณฑ์เข้าด้วยกัน วิธีการระดับสูงคล้ายกับคำอธิบายเดิม

ดั้งเดิม 27 ไบต์

0=10|{:+[:+/[:*/(7$3 1),:}:

ลองออนไลน์!

อธิบาย

0 =                                        is 0 equal to... 
    10 |                                   the remainder when 10 divides...
         {: +                              the last input item plus...
              [: +/                        the sum of...
                    [: */                  the pairwise product of...
                          7$(3 1) ,:       3 1 3 1 3 1 3 zipped with...
                                     }:    all but the last item of the input

0=10|1#.(8$3 1)*]ควรทำงานได้ 17 ไบต์ (ทำอัลกอริทึมเดียวกันด้วย) ฉันรักแน่ใจว่าในรุ่นเบต้าที่คุณสามารถมีตะขอสิ้นสุดวันที่ด้านขวากับคำนามดังนั้น0=10|1#.]*8$3 1อาจจะทำงานเป็นเวลา 15 (ฉันต้องการตรวจสอบในติ้ว แต่ดูเหมือนว่าจะลดลง?)
โคล

@ โคลฉันรักการปรับปรุงนี้ ฉันได้เรียนรู้และลืม1#.เคล็ดลับเช่น 2 หรือ 3 ครั้ง ... ขอบคุณที่เตือนฉัน โอ้ btw เวอร์ชัน 15 ไบต์ไม่ทำงานใน TIO
Jonah

3

C (gcc), 84 82 72 61 54 ไบต์

c;i;f(x){for(i=c=0;x;x/=10)c+=(1+2*i++%4)*x;c=c%10<1;}

-21 ไบต์จากNeil

-7 bytes จากNahuel Fouilleul

ลองออนไลน์!

พัฒนาโดยอิสระจากคำตอบของ Steadybox

'f' เป็นฟังก์ชั่นที่ใช้บาร์โค้ดเป็นintและส่งกลับค่า1เป็น True และ0เป็น False

  • fเก็บตัวเลขสุดท้ายของxในs( s=x%10)

  • จากนั้นคำนวณผลรวมในc( for(i=c=0;x;x/=10)c+=(1+2*i++%4)*x;)

    • cคือผลรวมiเป็นตัวนับ

    • สำหรับแต่ละหลักรวมถึงตัวเลขแรกให้เพิ่มจำนวน1+2*i%4หลัก ( x%10) ในเช็คซัมและเพิ่มi( i++ใน3-2*i++%4)

      • 1+2*i%4คือ 1 iเมื่อiเป็นเลขคู่และ 0 เมื่อเป็นเลขคี่
  • จากนั้นส่งกลับว่าผลรวมเป็นทวีคูณของสิบหรือไม่และเนื่องจากเราได้เพิ่มตัวเลขสุดท้าย (คูณด้วย 1) ผลรวมจะเป็นทวีคูณของสิบ iff ที่บาร์โค้ดนั้นถูกต้อง (ใช้พฤติกรรมที่ไม่ได้กำหนดขึ้นอยู่กับ GCC ในการข้ามreturn)


ฉันคิดว่า(x%10)คงxเป็นไปได้ในc%10ภายหลัง นอกจากนี้ฉันคิดว่าคุณสามารถใช้i<8และจากนั้นเพียงทดสอบว่าc%10เป็นศูนย์ในตอนท้าย
Neil

@ Neil ขอบคุณ! นั่นคือ -10 ไบต์
pizzapants184

ในความเป็นจริงฉันคิดว่าsไม่จำเป็น:c;i;f(x){for(i=c=0;i<8;x/=10)c+=(1+2*i++%4)*x;return c%10<1;}
Neil

ลิงค์ของ tio คือ 61 bytes แต่ในคำตอบคือ 72 ยังไม่รู้ด้วยซ้ำว่าทำไมx=c%10<1หรือc=c%10<1แทนที่จะreturn c%10<1ยังใช้งานได้
Nahuel Fouilleul

ยังi<8สามารถถูกแทนที่ด้วยx
Nahuel Fouilleul

3

C, 63 ไบต์

i;s=0;c(int*v){for(i=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10;}

สันนิษฐานว่า0เป็นและความคุ้มค่าอื่นใดคือtruefalse

+3 ไบต์สำหรับค่าตอบแทนที่ดีขึ้น

i;s=0;c(int*v){for(i=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10==0;}

เพิ่ม==0ไปยังreturnคำสั่ง

Ungolfed

int check(int* values)
{
    int result = 0;
    for (int index = 0; index < 8; index++)
    {
        result += v[i] * 3 + v[++i]; // adds this digit times 3 plus the next digit times 1 to the result
    }
    return result % 10 == 0; // returns true if the result is a multiple of 10
}

วิธีนี้ใช้คำจำกัดความทางเลือกของ EAN checksums ที่เลือกตรวจสอบตัวเลขเพื่อให้ผลรวมตรวจสอบบาร์โค้ดทั้งหมดรวมถึงตัวเลขตรวจสอบนั้นมีค่าเท่ากับ 10 ซึ่งในทางคณิตศาสตร์มันใช้งานได้เหมือนกัน แต่มันง่ายกว่ามากในการเขียน

การเริ่มต้นตัวแปรภายในลูปตามที่แนะนำโดย Steadybox ขนาด 63 ไบต์

i;s;c(int*v){for(i=s=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10;}

การลบวงเล็บปีกกาตามที่แนะนำโดย Steadybox, 61 ไบต์

i;s;c(int*v){for(i=s=0;i<8;i++)s+=v[i]*3+v[++i];return s%10;}

ใช้<1แทน==0ค่าตอบแทนที่ดีกว่าตามที่ Kevin Cruijssen แนะนำ

i;s=0;c(int*v){for(i=0;i<8;i++){s+=v[i]*3+v[++i];}return s%10<1;}

เพิ่ม<1ไปยังreturnคำสั่งนี้เพิ่มเพียง 2 ไบต์มากกว่าการเพิ่ม==0ซึ่งเพิ่ม 3 ไบต์


คุณสามารถบันทึกไบต์ที่สองโดยการลบหลังจากที่{} forนอกจากนี้การส่งฟังก์ชั่นจะต้องนำมาใช้ใหม่ได้ดังนั้นคุณต้องเริ่มต้นsภายในฟังก์ชั่น (เพียงเปลี่ยนi;s=0;เป็นi,s;และi=0;ไปที่i=s=0;)
Steadybox

@Steadybox ฉันจะลบเครื่องหมายปีกกาได้อย่างไร
Micheal Johnson

มีเพียงหนึ่งคำสั่งในนั้น เมื่อไม่มีวงเล็บปีกกาหลังจากforนั้นร่างกายของลูปจะเป็นคำสั่งถัดไป เป็นเช่นเดียวกับfor(i=0;i<8;i++){s+=v[i]*3+v[++i];} for(i=0;i<8;i++)s+=v[i]*3+v[++i];
Steadybox

@ Steadybox โอ้แน่นอน นั่นเป็นหนึ่งในข้อผิดพลาดของไวยากรณ์ C ที่ฉันมักจะลืมเพราะเมื่อเขียนโค้ดปกติฉันมักจะใส่เครื่องหมายวงเล็บปีกกาแม้ว่าจะไม่จำเป็นก็ตามเพราะมันทำให้โค้ดอ่านง่ายขึ้น
Micheal Johnson

ในคำตอบจริง / เท็จของคุณแทนที่จะเป็น +3 โดยการเพิ่ม==0มันสามารถเป็น +2 โดยใช้<1แทน :)
Kevin Cruijssen

2

JavaScript (Node.js)ขนาด 47 ไบต์

e=>eval(e.map((a,i)=>(3-i%2*2)*a).join`+`)%10<1

แม้ว่าจะมีคำตอบที่สั้นกว่านี้มาก แต่นี่เป็นความพยายามครั้งแรกของฉันในการเล่นกอล์ฟใน JavaScript ดังนั้นฉันจึงอยากได้ยินคำแนะนำการเล่นกอล์ฟ :-)

การทดสอบ

หรือคุณสามารถลองออนไลน์ได้!


2

Perl 5, 37 32 + 1 (-p) ไบต์

s/./$-+=$&*(--$|*2+1)/ge;$_=/0$/

-5 ไบต์ขอบคุณ Dom Hastings 37 +1 ไบต์เดิมคือ

$s+=$_*(++$i%2*2+1)for/./g;$_=!!$s%10

ลองออนไลน์


1
ลองเล่นกับสิ่งนี้และคิดว่าฉันจะแบ่งปันเคล็ดลับที่มีประโยชน์: --$|สลับระหว่าง1และ0เพื่อให้คุณสามารถใช้สิ่งนั้นแทน++$i%2บูลีนสลับ! นอกจากนี้สิ่งที่สำคัญคือการ$sจับคู่ผลรวม ( ) /0$/จัดการเพื่อให้ได้ 33 ไบต์รวมการเปลี่ยนแปลงเหล่านั้นด้วยs///: ลองออนไลน์! ( -lเป็นเพียงการมองเห็น)
Dom Hastings

ใช่ฉันถึงs/./(something with $&)/geและเข้า/0$/คู่กัน แต่ไม่ใช่ทั้งสองรวมกัน
Nahuel Fouilleul

2

Brainfuck, 228 Bytes

>>>>++++[<++>-]<[[>],>>++++++[<++++++++>-]<--[<->-]+[<]>-]>[->]<<<<[[<+>->+<]<[>+>+<<-]>>[<+>-]<<<<<]>>>>[>>[<<[>>+<<-]]>>]<<<++++[<---->-]+++++[<++<+++>>-]<<[<[>>[<<->>-]]>[>>]++[<+++++>-]<<-]<[[+]-<]<++++++[>++[>++++<-]<-]>>+.

สามารถปรับปรุงให้ดีขึ้นได้ ป้อนข้อมูลครั้งละ 1 หลักเอาต์พุต 1 สำหรับจริง 0 สำหรับเท็จ

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

>>>>++++[<++>-]<

ใส่ 8 ที่ตำแหน่ง 3

[[>],>>++++++[<++++++++>-]<--[<->-]+[<]>-]

รับอินพุต 8 ครั้งเปลี่ยนจากค่า ascii เป็นค่าจริง +2 ในแต่ละครั้ง อินพุตถูกเว้นระยะโดยรายการซึ่งจะถูกลบออกเพื่อให้สามารถทำการคูณได้ง่ายขึ้นในภายหลัง

>[->]

ลบหนึ่งรายการจากแต่ละรายการ เทปของเราตอนนี้ดูเหมือน

0 0 0 0 4 0 4 0 8 0 7 0 6 0 2 0 3 0 10 0 0
                                         ^

ด้วยแต่ละค่า 1 มากกว่าที่ควรจะเป็น นี่เป็นเพราะเลขศูนย์จะทำให้กระบวนการการคูณของเรายุ่งเหยิง

ตอนนี้เราพร้อมที่จะเริ่มการคูณ

<<<<

ไปที่รายการที่สองถึงสุดท้าย

[[<+>->+<]<[>+>+<<-]>>[<+>-]<<<<<]

ในขณะที่ศูนย์ให้คูณรายการที่เป็นสามแล้วย้ายสองรายการไปทางซ้าย ตอนนี้เราได้เพิ่มทุกอย่างที่เราต้องการเป็นสามเท่าและเราอยู่ที่ตำแหน่งแรกสุดบนเทป

>>>>[>>[<<[>>+<<-]]>>]

รวมรายการทั้งหมด

<<<++++[<---->-]

ค่าที่เรามีคือ 16 มากกว่าค่าจริง แก้ไขได้โดยการลบ 16

+++++[<++<+++>>-]

เราจำเป็นต้องทดสอบว่าผลรวมนั้นเป็นผลคูณของ 10 หรือไม่ผลรวมสูงสุดคือกับ 9 ทั้งหมดซึ่งคือ 144 เนื่องจากไม่มีผลรวมมากกว่า 10 * 15 ให้ใส่ 15 และ 10 ลงในเทปตามลำดับและถูกต้อง ด้านขวาของผลรวม

<<[<[>>[<<->>-]]>[>>]++[<+++++>-]<<-]

ย้ายไปยังตำแหน่งที่ 15 ในขณะที่มันไม่ใช่ศูนย์ทดสอบว่าผลรวมไม่ใช่ศูนย์ หากเป็นเช่นนั้นให้ลบ 10 จากนั้น ตอนนี้เราอยู่ในตำแหน่งผลรวม (ว่าง) หรือบน (ยังว่าง) สิบตำแหน่ง เลื่อนไปทางขวาหนึ่งครั้ง หากเราอยู่ในตำแหน่งรวมตอนนี้เราอยู่ในตำแหน่งที่ไม่เป็นศูนย์ 15 ถ้าเป็นเช่นนั้นให้เลื่อนไปทางขวาสองครั้ง ตอนนี้เราอยู่ในตำแหน่งเดียวกันในทั้งสองกรณี เพิ่มสิบถึงสิบตำแหน่งและลบหนึ่งจาก 15 ตำแหน่ง

ส่วนที่เหลือเป็นเอาท์พุท:

<[[+]-<]<++++++[>++[>++++<-]<-]>>+.

ย้ายไปที่ตำแหน่งผลรวม หากไม่ใช่ศูนย์ (ลบ) บาร์โค้ดจะไม่ถูกต้อง กำหนดตำแหน่งเป็น -1 ตอนนี้เพิ่ม 49 เพื่อรับค่า ascii ที่ถูกต้อง: 1 ถ้ามันถูกต้อง, 0 ถ้ามันไม่ถูกต้อง


2

Java 8, 53 ไบต์

แข็งแรงเล่นกอล์ฟ:

b->(3*(b[0]+b[2]+b[4]+b[6])+b[1]+b[3]+b[5]+b[7])%10<1

การคำนวณโดยตรงในแลมบ์ดาดูเหมือนจะเป็นทางออกที่สั้นที่สุด มันพอดีในการแสดงออกเดียวลดค่าใช้จ่ายแลมบ์ดาและลบการประกาศตัวแปรภายนอกและอัฒภาค

public class IsMyBarcodeValid {

  public static void main(String[] args) {
    int[][] barcodes = new int[][] { //
        { 2, 0, 3, 7, 8, 2, 4, 0 }, //
        { 3, 3, 7, 6, 5, 1, 2, 9 }, //
        { 7, 7, 2, 3, 4, 5, 7, 5 }, //
        { 0, 0, 0, 0, 0, 0, 0, 0 }, //
        { 2, 1, 0, 3, 4, 9, 8, 4 }, //
        { 6, 9, 1, 6, 5, 4, 3, 0 }, //
        { 1, 1, 9, 6, 5, 4, 2, 1 }, //
        { 1, 2, 3, 4, 5, 6, 7, 8 } };
    for (int[] barcode : barcodes) {
      boolean result = f(b -> (3 * (b[0] + b[2] + b[4] + b[6]) + b[1] + b[3] + b[5] + b[7]) % 10 < 1, barcode);
      System.out.println(java.util.Arrays.toString(barcode) + " = " + result);
    }
  }

  private static boolean f(java.util.function.Function<int[], Boolean> f, int[] n) {
    return f.apply(n);
  }
}

เอาท์พุท:

[2, 0, 3, 7, 8, 2, 4, 0] = true
[3, 3, 7, 6, 5, 1, 2, 9] = true
[7, 7, 2, 3, 4, 5, 7, 5] = true
[0, 0, 0, 0, 0, 0, 0, 0] = true
[2, 1, 0, 3, 4, 9, 8, 4] = false
[6, 9, 1, 6, 5, 4, 3, 0] = false
[1, 1, 9, 6, 5, 4, 2, 1] = false
[1, 2, 3, 4, 5, 6, 7, 8] = false

2

QBasic, 54 52 ไบต์

อืมคำตอบที่น่าเบื่อกลายเป็นคำตอบที่สั้นที่สุด:

INPUT a,b,c,d,e,f,g,h
?(3*a+b+3*c+d+3*e+f+3*g+h)MOD 10=0

สิ่งนี้ป้อนตัวเลขคั่นด้วยเครื่องหมายจุลภาค โซลูชัน 54- ไบต์เดิมของฉันซึ่งป้อนข้อมูลครั้งละหนึ่งหลักใช้วิธี "ดีกว่า":

m=3
FOR i=1TO 8
INPUT d
s=s+d*m
m=4-m
NEXT
?s MOD 10=0

2

C # (. NET Core) , 65 62 ไบต์

b=>{int s=0,i=0,t=1;while(i<8)s+=b[i++]*(t^=2);return s%10<1;}

ลองออนไลน์!

กิตติกรรมประกาศ

-3 ไบต์ด้วย @KevinCruijssen และเคล็ดลับที่ประณีตโดยใช้ตัวดำเนินการเอกสิทธิ์หรือ

DeGolfed

b=>{
    int s=0,i=0,t=1;

    while(i<8)
        s+=b[i++]*(t^=2); // exclusive-or operator alternates t between 3 and 1.

    return s%10<1;
}

C # (. NET Core) 53 ไบต์

b=>(3*(b[0]+b[2]+b[4]+b[6])+b[1]+b[3]+b[5]+b[7])%10<1

ลองออนไลน์!

พอร์ตโดยตรงของ@ คำตอบของมนุษย์หิมะ


สำหรับคำตอบแรกของคุณ: b=>{int s=0,i=0,t=1;while(i<8)s+=b[i++]*(t^=2);return s%10<1;}( 62 bytes ) หรืออีกวิธีหนึ่งคือ foreach หรือ 62 bytes: b=>{int s=0,t=1;foreach(int i in b)s+=i*(t^=2);return s%10<1;}(ซึ่งเป็นพอร์ตของคำตอบ Java 8ของฉัน )
Kevin Cruijssen

1

MATLAB / Octave , 32 ไบต์

@(x)~mod(sum([2*x(1:2:7),x]),10)

ลองออนไลน์!

ฉันจะโพสต์สิ่งนี้แม้จะมีคำตอบ Octave อื่น ๆ ในขณะที่ฉันพัฒนารหัสนี้และวิธีการโดยไม่ต้องดูคำตอบอื่น ๆ

ที่นี่เรามีฟังก์ชั่นที่ไม่ระบุชื่อซึ่งรับอินพุตเป็นอาร์เรย์ของค่า 8 ค่าและส่งคืนค่าจริงหากบาร์โค้ดที่ถูกต้องเป็นเท็จมิฉะนั้น ..

ผลลัพธ์จะถูกคำนวณดังนี้

              2*x(1:2:7)
             [          ,x]
         sum(              )
     mod(                   ,10)
@(x)~
  1. ตัวเลขคี่ (ดัชนีหนึ่งดัชนี) คูณด้วย 2
  2. ผลลัพธ์จะถูกนำหน้าไปยังอาร์เรย์ที่ป้อนให้กับอาร์เรย์ซึ่งผลรวมจะประกอบด้วยเลขคี่สามครั้งและหลักคู่หนึ่งครั้ง
  3. เราทำยอดรวมซึ่งจะรวมถึงการตรวจสอบที่ให้มาภายในผลรวมของเรา
  4. ถัดไป modulo 10 จะถูกดำเนินการ หากการตรวจสอบที่ให้มานั้นถูกต้องผลรวมของตัวเลขที่คูณทั้งหมดรวมถึงค่าการตรวจสอบจะกลายเป็นทวีคูณของ 10 ดังนั้นเพียงบาร์โค้ดที่ถูกต้องจะกลับ 0
  5. ผลลัพธ์กลับด้านเพื่อรับเอาท์พุทแบบลอจิคัลของจริงหากถูกต้อง

1

Excel, 37 ไบต์

การตีความ "รายการจำนวนเต็ม 8 ตัว" ซึ่งอนุญาตให้แยก 8 เซลล์ใน Excel:

=MOD(SUM(A1:H1)+2*(A1+C1+E1+G1),10)=0

= MOD (SUM ((A1: H1) + 2 * (A1 + C1 + E1 + G1)) 10) = 0 สูตรนี้มีอยู่ใน Excel หรือไม่
RosLuP

@RosLuP ไม่ได้กำหนดไว้ล่วงหน้าไม่ใช่ แต่ Modulo, Sum, + etc do ;-)
Wernisch

ฉันแค่อยากจะบอกว่าดูเหมือนว่าใน APL ไปได้ดีก่อน y = (A1: H1) + 2 * (A1 + C1 + E1 + G1) และหลังจากรวมและ mod; ใน APL ไม่ได้ผลรวมที่ดีก่อน (A1: H1) ฯลฯ บางอย่างเป็น (1,2,3) + 4 = (5,6,7) และมากกว่าผลรวม (5,6,7) = 18; ทราบว่าผลรวม (1,2,3) = 6 และ 6 + 4 = 10 แตกต่างจาก 18 แต่เป็นไปได้ฉันทำผิดพลาดในบางสิ่งบางอย่าง
RosLuP

@RosLuP, ขอโทษ, พลาดการเปลี่ยนแปลง()ในความคิดเห็นของคุณ
Wernisch

ปัญหาคือการตีความของ Excel =(A1:H1): สิ่งนี้ไม่ได้จัดการเป็นอาร์เรย์ ไม่ถูกต้องหากอยู่ในคอลัมน์ใด ๆ ที่ไม่อยู่ในA-Hช่วง หากอยู่ในคอลัมน์ใน AH ให้ส่งคืนค่าสำหรับคอลัมน์นั้นเท่านั้น (สูตร% ผลลัพธ์ใน%: C2 -> C1 H999 -> H1 K1 -> #VALUE!)
Wernisch

1

Ruby, 41 ไบต์

รับอาร์เรย์จำนวนเต็ม -6 ไบต์ขอบคุณจอร์แดน

->n{n.zip([3,1]*4){|x,y|$.+=x*y};$.%10<1}

ดี! FWIW คุณไม่ต้องการmapที่นี่เลย: zipใช้เวลาบล็อก คุณสามารถบันทึกอีกสองสามไบต์ได้โดยใช้$.แทนการเริ่มต้นs:->n{n.zip([3,1]*4){|x,y|$.+=x*y};$.%10<1}
Jordan

1

TI-Basic (83 series), 18 ไบต์

not(fPart(.1sum(2Ans-Ans9^cumSum(binomcdf(7,0

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

พอร์ตของฉันคำตอบ Mathematica รวมภาพหน้าจอแทนสภาพแวดล้อมการทดสอบออนไลน์:

ภาพหน้าจอบาร์โค้ด

คุณสมบัติที่โดดเด่น: binomcdf(7,0ใช้เพื่อสร้างรายการ{1,1,1,1,1,1,1,1}(รายการความน่าจะเป็นที่มาจากการทดลอง 7 ครั้งที่มีความน่าจะเป็นที่ประสบความสำเร็จ 0 จะมีความสำเร็จสูงสุด N รายการสำหรับ N = 0,1, ... , 7) จากนั้นcumSum(เปลี่ยนเป็นสิ่งนี้{1,2,3,4,5,6,7,8}นี้จะกลายเป็น

นี่คือหนึ่งไบต์ที่สั้นกว่าการใช้seq(คำสั่งถึงแม้ว่าในอดีตประเด็นคือว่ามันเร็วกว่ามากเช่นกัน

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