สายพันธุ์ดั้งเดิม


27

สตริง Primenary ( binary-prime ) คือสิ่งที่เมื่อเขียนเป็นกริดไบนารีทุกแถวและคอลัมน์จะมีจำนวนรวมทั้งหมด

นั่นเป็นคำอธิบายที่คลุมเครือดังนั้นเรามาทำลายตัวอย่างการทำงาน ...


สำหรับตัวอย่างนี้เราจะใช้สตริงbunny:

ก่อนอื่นให้หาจุดโค้ด ASCII ของตัวละครแต่ละตัวและการแทนค่าไบนารี่:

Char | ASCII | Binary

b      98      1100010
u      117     1110101
n      110     1101110
n      110     1101110
y      121     1111001

ใช้ค่าไบนารีเหล่านี้จากบนลงล่างและจัดเรียงเป็นตาราง (เพิ่มศูนย์นำหน้าถ้าจำเป็น):

1 1 0 0 0 1 0
1 1 1 0 1 0 1
1 1 0 1 1 1 0
1 1 0 1 1 1 0
1 1 1 1 0 0 1

จากนั้นนับจำนวน1s ในแต่ละแถวและคอลัมน์:

1 1 0 0 0 1 0   > 3
1 1 1 0 1 0 1   > 5
1 1 0 1 1 1 0   > 5
1 1 0 1 1 1 0   > 5
1 1 1 1 0 0 1   > 5

v v v v v v v

5 5 2 3 3 3 2

ถ้าและต่อเมื่อทุกผลรวมทั้งหมดเป็นจำนวนเฉพาะ (เช่นที่นี่) สตริงจะเป็นเลขฐานสองที่ถูกต้อง


ความท้าทาย

งานของคุณคือการสร้างฟังก์ชั่นหรือโปรแกรมซึ่งเมื่อได้รับสตริงผลตอบแทน / เอาท์พุทtruthyถ้าสตริงเป็นต้นและfalsyอื่น ๆ

กฎ / รายละเอียด

  • คุณอาจสันนิษฐานว่าตัวละครของสตริงจะอยู่ในช่วง ASCII เสมอ33-126(รวมอยู่ด้วย)
  • สตริงจะไม่ว่างเปล่า
  • สตริงดั้งเดิมไม่จำเป็นต้องมีความยาวเฉพาะ - ตัวอย่างเช่นW1n*ถูกต้องแม้ว่าจะมีอักขระ 4 ตัว
  • นี่คือดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ แต่การส่งทั้งหมดยินดีต้อนรับ
  • ช่องโหว่มาตรฐานถูกแบน

กรณีทดสอบ

'husband'     -> True
'HOTJava'     -> True
'COmPaTIBILE' -> True
'AuT0HACk'    -> True

'PPCW'        -> False
'code-golf'   -> False
'C++'         -> False
'/kD'         -> False

'HI'          -> False
'A'           -> False

นอกจากนี้ยังมีตัวอย่าง Python ที่ใช้งานได้จริงอย่างเหลือเชื่อบน repl.itซึ่งคุณสามารถทดสอบโซลูชันของคุณได้


ฉันจะถามว่าคุณค้นพบว่าhusbandถูกต้องได้อย่างไร? หรือใด ๆ ของพวกเขา ปัญหาใหญ่ แต่!
Gabriel Benamy

3
@GabrielBenamy ฉันดีใจที่มีคนถาม! ฉันวนลูปผ่านไฟล์พจนานุกรมออนไลน์พยายามพิมพ์ตัวพิมพ์เล็กของตัวอักษรแต่ละตัวบางครั้งก็สลับตัวอักษรเป็นตัวเลข ฯลฯ จากนั้นฉันก็ดูรายการเอาท์พุทและเลือกกรณีทดสอบที่ฉันชอบ
FlipTack

ทุกอินพุต 1-2 อักขระรับประกันว่าจะส่งคืนFalseถูกต้องหรือไม่
mbomb007

... เพราะ0และ1ไม่ได้สำคัญและทุกๆ 1-2 อักขระอินพุตถ่านที่มีตัวอักษรเฉพาะในช่วงที่กำหนดรับประกันว่าจะมีอย่างน้อยหนึ่ง0หรือ1เป็นผลรวมแนวตั้ง คุณควรเพิ่มสตริงอักขระ 1 และ 2 เป็นกรณีทดสอบ
mbomb007

@ 1 mbomb007 ปัจจัยการผลิตถ่านไม่สามารถจะมีตัวเลขที่สำคัญ columnwise falseดังนั้นพวกเขาจะกลับมา 2 อินพุตถ่านสามารถทำได้ แต่ไม่อยู่ในช่วง ASCII ที่เราใช้อยู่ดังนั้นสำหรับสถานการณ์นี้คุณถูกต้อง
FlipTack

คำตอบ:


8

MATL 10 ไบต์

BtXsw!shZp

ลองออนไลน์!

นี่คือภาษาที่เหมาะสำหรับงาน มันค่อนข้างจะเป็นการทับศัพท์ความหมายที่แท้จริงของสเปคการท้าทาย

Bt % Converts input to binary matrix, duplicate
Xs  % Sum columns (alternative X version to prevent defaulting to sum along first non-singleton dimension, thanks @Jonathan Allan)
w! % Get the duplicate to the top of the stack, transpose
s  % Sum again
h  % Concatenate horizontally
Zp % Check primality element-wise. Display implicitly.

ตั้งแต่ศูนย์ใด ๆ ที่ทำให้ falsy MATL อาร์เรย์เป็นต่อเมตาไม่มีอะไรอื่นเป็นสิ่งจำเป็น - โดยทั่วไปนัยAถูกเรียกบน?(ถ้ามี)


aควรเป็นเท็จ แต่กลับมา1 1? (คอลัมน์จะไม่เพิ่มขึ้นเป็นจำนวนเฉพาะ)
FlipTack

ฉันคิดว่าBtXsw!shZpจะแก้ไขปัญหานี้และเป็นผู้ชนะสำหรับ 10
Jonathan Allan

@ Flp.Tck ลืมไปโดยสิ้นเชิงเกี่ยวกับพฤติกรรม 'ให้อภัย' ของ MATLAB เมื่อทำงานกับเวกเตอร์แถว ฉันขอโทษซ่อมมันตอนนี้
Sanchises

ใช้งานได้แล้ว :) (อาจต้องการอัปเดตลองออนไลน์ได้ที่ลิงค์)
FlipTack

@ Flp.Tkc เสร็จสิ้น ขอบคุณสำหรับความท้าทายที่ดี!
Sanchises

4

เยลลี่ , 13 12 11 ไบต์

OBUZ;$S€ÆPẠ

TryItOnline! หรือกรณีทดสอบทั้งหมด

อย่างไร?

OBUZ;$S€ÆPẠ - Main link: word                  e.g. ha!
O           - cast to ordinals                 e.g. [104,97,33]
 B          - convert to binary                e.g. [[1,1,0,1,0,0,0],[1,1,0,0,0,0,1],[1,0,0,0,0,1]]
  U         - reverse each entry (say "b")     e.g. [[0,0,0,1,0,1,1],[1,0,0,0,0,1,1],[1,0,0,0,0,1]]
     $      - last two links as a monad
   Z        - transpose                        e.g. [[0,1,1],[0,0,0],[0,0,0],[1,0,0],[0,0,0],[1,1,1],[1,1]]
    ;       - concatenate with "b"             e.g. [[0,1,1],[0,0,0],[0,0,0],[1,0,0],[0,0,0],[1,1,1],[1,1],[0,0,0,1,0,1,1],[1,0,0,0,0,1,1],[1,0,0,0,0,1]]
      S€    - sum €ach                         e.g. [2,0,0,1,0,3,2,3,3,2]
        ÆP  - is prime (1 if prime, 0 if not)  e.g. [1,0,0,0,0,1,1,1,1,1]
          Ạ - all truthy?                      e.g. 0


3

เยลลี่ 15 ไบต์

O+⁹Bṫ€3µS€;SÆPP

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

คำอธิบาย

O+⁹Bṫ€3µS€;SÆPP  Main link. Input: string z
O                Ordinal, get ASCII value of each char
  ⁹              Nilad representing 256
 +               Add 256 to each ordinal value
   B             Binary digits of each
    ṫ€3          Tail, take each list of digits from the 3rd value to the end
                 These are the last seven digits of each
       µ         Start a new monadic chain
        S€       Sum each list of digits by rows
           S     Sum by column
          ;      Concatenate
            ÆP   Test if each is prime, 1 if true else 0
              P  Product

3

Mathematica, 75 ไบต์

And@@Join@@PrimeQ@{+##&@@#,+##&@@@#}&@IntegerDigits[ToCharacterCode@#,2,7]&

ฟังก์ชั่นที่ไม่มีชื่อการสตริงเป็น input และกลับหรือTrueFalse

ToCharacterCode@#แปลงอินพุตเป็นรายการของค่า ASCII IntegerDigits[...,2,7]เปลี่ยนค่าแต่ละค่าเป็นรายการของบิตเพิ่มความยาว 7 หากจำเป็น ตอนนี้เรามีอาร์เรย์ 2 มิติและเราต้องการผลรวมแถวและผลรวมคอลัมน์ทั้งหมด แท้จริงและดูเถิดลักษณะของอาการกระตุก{+##&@@#,+##&@@@#}&@...นั้นทำอย่างนั้นจริง ๆ+##& , "รวมอาร์กิวเมนต์ทั้งหมด", ฟังก์ชั่นไปยังรายการของเวกเตอร์ในพิกัดแรกที่ใช้@@และแต่ละเวกเตอร์เป็นรายการของจำนวนเต็มในพิกัดที่สองที่ใช้@@@) . จากนั้นเราก็ตรวจสอบว่าผลลัพธ์นั้นPrimeQเรียบJoin@@หรือไม่และใช้Andค่าเหล่านั้นทั้งหมด


2

ทับทิม -rprime , 100 ไบต์

->s{a=s.bytes.map{|b|b.digits 2}
a.all?{|r|r.sum.prime?}&([0]*7).zip(*a).all?{|c|c.count(1).prime?}}

ลองออนไลน์!

คำอธิบาย

->s{
    a=s.bytes                       # Get byte values from string
             .map{|b|b.digits 2}    # For each, map it to its binary digits
                                    #   (least significant digits first)
a.all?{|r|r.sum.prime?}             # Each character has a prime number of 1's?
    &                               # Bit-and (because it saves bytes here)
    ([0]*7).zip(*a)                 # Zip bit array with an all-zero array
                                    #   (If we don't, then uneven array lengths
                                    #   cause some columns to not be returned.)
    .all?{|c|c.count(1).prime?}     # All columns have a prime number of 1's?
                                    #   (We use count instead of sum here because
                                    #   zip pads columns with trailing nils, which
                                    #   can't be added to numbers via sum.)
}

1

Perl, 151 121 111 + 3 = 114 ไบต์

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

ขอบคุณ @Dada ที่แจ้งให้ฉันทราบ//ภายหลังว่าFมีความซ้ำซ้อน สามารถลบไบต์เพิ่มเติมได้ (สำหรับ 112) โดยการป้อนข้อมูลผ่านทางท่อecho -nแต่ฉันรู้สึกว่ามันเป็นการเพิ่มรหัสเพิ่มเติมดังนั้น YMMV

for$c(@a=map{sprintf"%07b",ord}@F){$b[$_].=substr$c,$_,1 for 0..6}s/0//g,$d|=/^1?$|^(11+?)\1+$/ for@a,@b;say!$d

อ่านได้:

                                     #Implicitly split input into characters in @F array
for$c(@a=map{sprintf"%07b",ord}@F)  #Convert @F to 7-bit binary as @a, then loop through it                        
    $b[$_].=substr$c,$_,1 for 0..6   #Transpose @a's bits into @b
}
s/0//g,$d|=/^1?$|^(11+?)\1+$/ for@a,@b; #Remove any zeros, then run through composite regex
say!$d                          #If all composite regex checks fail, then it's fully prime.

1
เวอร์ชันที่ใช้งานได้กับอินพุตแรกเท่านั้นจึงใช้งานได้ดีดังนั้นคุณสามารถใส่เวอร์ชัน 141 ไบต์เป็นเวอร์ชันหลักและแนะนำอีกอันให้ใช้กับอินพุตหลายตัว
Dada

นอกจากนี้โปรดทราบว่าคุณสามารถละเว้นได้//หลังจาก-Fและคุณสามารถรับอินพุตได้โดยไม่ต้องขึ้นบรรทัดใหม่ขั้นสุดท้าย (พร้อมecho -n) เพื่อกำจัดการ-lตั้งค่าสถานะ
Dada

1

Python 3 228 227 225 ไบต์

ไม่ใช่คำตอบที่ยอดเยี่ยมฉันไม่สามารถเล่นกอล์ฟได้มากเท่าที่ฉันจะชอบ แต่ฉันใช้เวลานานมากกับมันฉันรู้สึกว่าฉันควรโพสต์ไว้ คำแนะนำเกี่ยวกับการตัดไบต์จะนิยมมาก

r=range
n=[format(ord(c),"08b")for c in input()]
n=map(lambda s:s.count("1"),n+["".join([f[1]for f in filter(lambda e:e[0]%8<1,enumerate("X"*-~i+"".join(n)))][1:])for i in r(8)])
print(all(all(s%d for d in r(2,s))for s in n))

แก้ไข 1:แทนที่e[0]%8==0ด้วยe[0]%8<1สูญเสียไบต์ ขอบคุณ Flp.Tkc!

แก้ไข 2:แทนที่ (i + 1) ด้วย - ~ i เสียสองไบต์เพิ่มเติม ขอขอบคุณเอริคที่เปิดเผยว่าความรู้ระดับบิตของฉันแย่แค่ไหน :) ขณะทดสอบการแก้ไขนี้ฉันพบว่าkappaถูกต้อง ... ทำตามที่คุณต้องการ


1
คุณเปลี่ยนe[0]%8==0เป็นe[0]%8<1เหรอ
FlipTack

@ Flp.Tkc เป็นจุดที่ดี! ไม่มีเหตุผลที่ทำไม่ได้
FourOhFour

1
@ Flp.Tkc ฉันไม่คิดว่าฉันสามารถบันทึกไบต์ด้วยการทำให้ฟังก์ชั่น ฉันชอบวิธีที่คุณมี 404 ตัวแทน btw :)
FourOhFour

มันควรจะเป็น<1ไม่<0?
เลมอนที่ถูกทำลายได้

@ ทำลายแตงโมใช่แล้วให้ฉันแก้ไขให้ถูกต้อง
FourOhFour

1

Groovy, 151 137 ไบต์

{p={x->x<3||(2..(x**0.5)).every{x%it}};y={it.every{p(it.count("1"))}};x=it.collect{0.toString((int)it,2) as List};y(x)&&y(x.transpose())}

ไม่มีการตรวจสอบแบบดั้งเดิมใน Groovy ...

p={x->x<3||(2..(x**0.5)).every{x%it}}; - ปิดการทดสอบเบื้องต้น

y={it.every{p(it.count("1"))}}; - การปิดเพื่อให้แน่ใจว่าการนับทั้งหมดของ "1" สำหรับอาเรย์ไบนารี 2D ที่ผ่านนั้นมีความสำคัญ

x=it.collect{0.toString((int)it,2) as List}; - Coversion จากสตริงไปยังอาร์เรย์ไบนารี

y(x)&&y(x.transpose()) - สำหรับผลรวมสำคัญที่ผ่านการตรวจสอบแล้วทั้งหมดในเมทริกซ์หลักและเมทริกซ์ที่ถูกย้ายตรวจสอบให้แน่ใจว่าพวกเขาคืนค่าจริง


1

Pyth , 37 ไบต์

L.AmP_sdb=sMM.[L\0lh.MlZQ=.BMQ&yZy.TZ

ลองออนไลน์!


                                 Code | Explanation
--------------------------------------+----------------------------------------------------------------
L.AmP_sdb=sMM.[L\0lh.MlZQ=.BMQ&yZy.TZ | Full code
L                                     | Define function y(b):
   m    b                             |   For each d in b:
    P_sd                              |     Is the sum of the elements of the list prime?
 .A                                   |   Return whether all elements of the resulting list are truthy
                         =   Q        | Assign the following to Q:
                          .BMQ        |   The list of binary strings for each character in the input
         =             Z              | Assign the following to Z:
               L             Q        |   For every element in Q:
             .[ \0                    |     Pad with 0 on the left
                  lh.MlZQ             |     To the length of the longest element in Q
            M                         |   For each element in the resulting list:
          sM                          |     Convert each character to an integer
                              &yZ     | Print y(Z) AND
                                 y.TZ |   y( <Transpose of Z> )

1

Brachylogขนาด 14 ไบต์

ạḃᵐB↔ᵐz₁,B+ᵐṗᵐ

ลองออนไลน์!

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

   B              The variable B is
ạ                 the codepoints of the input
 ḃᵐ               converted to lists of binary digits,
    ↔ᵐ            which with each list reversed
      z₁          then zipped without cycling
        ,B        and concatenated with B
          +ᵐ      has elements which all sum to
            ṗᵐ    prime numbers.

1

O5AB1E ขนาด 12 ไบต์

Çžy+bø€SOp¦W

ลองออนไลน์!

นี่คือรหัสกอล์ฟครั้งแรกของฉันไปง่าย ๆ :)

Ç              % Converts the implicit input into ascii values
 žy+           % Adds 128 to each value, inspired by Emigna as a way to pad zeros
    b          % Convert all values into bits
     ø         % Transpose
      €SO      % Sum each string of binary digits created
         p¦    % Check if each element is prime and cut the first element out (adding 128 makes it equal to the number of characters)
           W   % Take the minimum value to effectively "and" all the elements

สิ่งนี้ให้ผลลัพธ์ที่ว่างเปล่าสำหรับการป้อนตัวอักษรเดียว ฉันไม่เชี่ยวชาญใน O5AB1E แต่ถ้านั่นเป็นค่าเท็จมันก็โอเค
Sanchises

1

Python 3 , 209 189 180 171 160 ไบต์

Thanx squid สำหรับ -9 bytes :)

def p(s):n=s.count('1');return(n>1)*all(n%i for i in range(2,n))
def f(s):t=[f'{ord(c):07b}'for c in s];return all(map(p,t+[[u[j]for u in t]for j in range(7)]))

ลองออนไลน์!


ผมชอบวิธีการที่คุณเขียนคำสั่งพิมพ์กรณีทดสอบ :)
movatica

ใช่ฉันเป็นคนขี้เกียจครอบงำเกี่ยวกับ f- สตริง ... นอกจากนี้มันจะไม่เทียบเท่าถ้าคุณลบออกt+ในคำสั่งแผนที่?
Reinstate Monica

ไม่เนื่องจากการตรวจสอบเฉพาะจำเป็นต้องครอบคลุมทั้งแถวและคอลัมน์ในเมทริกซ์บิต tมีแถวทั้งหมดในขณะที่[[t[i][j]..i..]..j..]ถูกย้ายtคือคอลัมน์ ถ้ามีวิธีที่สั้นเพื่อไขว้เมทริกซ์ที่เราสามารถบันทึกไบต์ :)
movatica

มันใช้งานได้เมื่อฉันลองดูคุณรู้จักสตริงที่แตกหรือไม่
Reinstate Monica

ใช่. beezzควรกลับเท็จ แต่ทำไม่ได้ มันเป็นเพราะการตรวจสอบที่สำคัญเสียมันจะส่งกลับTrueสำหรับ 4 บิต ลองprint(p('1111'))ดู แก้ไขทันที กรณีทดสอบทั้งหมดไม่ได้กล่าวถึงเนื่องจากอักขระที่ใช้ทั้งหมดนั้นเป็นอักขระแรกเริ่ม
movatica

1

K (oK) , 40 33 ไบต์

วิธีการแก้:

&/{2=+/d=_d:x%!x}'+/'m,+m:(7#2)\'

ลองออนไลน์!

คำอธิบาย:

ครึ่งหนึ่งกำลังสร้างเมทริกซ์ส่วนอีกครึ่งหนึ่งเป็นการตรวจสอบเบื้องต้น

&/{2=+/d=_d:x%!x}'+/'m,+m:(7#2)\' / the solution
                                ' / apply to each (')
                               \  / decode
                          (   )   / do this together
                           7#2    / 7#2 => 2 2 2 2 2 2 2
                        m:        / save as m
                       +          / transpose
                     m,           / append to m
                  +/'             / sum (+/) each (')
                 '                / apply to each
  {             }                 / lambda taking implicit x
              !x                  / range 0..x
            x%                    / x divided by ...
          d:                      / save as d
         _                        / floor
       d=                         / equal to d?
     +/                           / sum (+/)
   2=                             / equal to 2?
&/                                / minimum


0

JavaScript ขนาด 234 ไบต์

f=z=>(z=[...z].map(v=>v.charCodeAt(0))).map(v=>v.toString(2).replace(/0/g,"").length).every((p=v=>{for(i=2;i<v;i++){if(v%i===0){return 0}};return v>1}))&&[...""+1e6].map((v,i)=>z.reduce((a,e)=>!!(e&Math.pow(2,i))+a,0)).every(v=>p(v))

เราได้ค่าแนวนอนโดยการแปลงตัวเลขเป็นไบนารี่เอาค่าศูนย์โดยใช้การแทนที่สตริงแล้วนับ 1 วินาที ผลรวมแนวตั้งนั้นได้มาจากการวนซ้ำ 1 ถึง 7 และใช้ค่าบิตและกับ 2 ยกกำลัง nth


Math.pow(2,i)สามารถย่อให้สั้นลงเพื่อ(1<<i)สมมติว่าi<32อาจจะประหยัดได้ 7 ไบต์หรืออาจจะไม่ใช่ก็ตาม
Naruyoko

0

Clojure, 180 ไบต์

#(let[S(for[i %](for[j[1 2 4 8 16 32 64]](min(bit-and(int i)j)1)))A apply](not-any?(fn[i](or(= i 1)(seq(for[d(range 2 i):when(=(mod i d)0)]d))))(into(for[s S](A + s))(A map + S))))

อาจมีวิธีที่สั้นกว่าในการสร้างรายการบิตและการทดสอบเบื้องต้น



0

Python 3, 164 ไบต์

import numpy;a=numpy.array([list(f'{ord(_):07b}')for _ in input()]).astype(int);print(all([(v>1)*all(v%i for i in range(2,v))for v in set(a.sum(0))|set(a.sum(1))]))

0

Ruby 2.7 -rprime, 95 ไบต์

->s{a=s.bytes.map{[*@1.digits(2),0][..6]}
(a.map(&:sum)+a.transpose.map(&:sum)).all?(&:prime?)}

ไม่มีลิงก์ TiO เนื่องจาก TiO ยังคงรัน Ruby 2.5.5 😭

คำอธิบาย

ค่อนข้างง่าย บรรทัดแรกได้รับตัวเลขไบนารีของตัวละครแต่ละตัวเป็นอาร์เรย์เบาะออกไปตัวเลขเจ็ดหลักซึ่งจริงๆควรจะง่ายขึ้น:

a = s.bytes.map { [*@1.digits(2), 0][..6] }

ตรวจสอบว่าพารามิเตอร์เลขบล็อก ( @1) และช่วง beginless ( ..6) ความร้อนความร้อน

บรรทัดที่สองจะสรุปจำนวนแถวและคอลัมน์และการทดสอบว่าเป็นจำนวนเฉพาะทั้งหมดหรือไม่:

(a.map(&:sum) + a.transpose.map(&:sum)).all?(&:prime?)

0

JavaScript (Node.js) , 149 146 ... 134 130 129 ไบต์

x=>[...x].map(y=>a=[...a.map(n=>y.charCodeAt()&2**i++?++z&&-~n:n,z=i=0),z],a=[...Array(7)])&&!a.some(n=>(P=r=>n%--r?P(r):~-r)(n))

ลองออนไลน์!

คำอธิบาย

x=>                        // Main function:
 [...x].map(               //  For each y in x:
  y=>
   a=[...a.map(            //   For each i in range(0, len(a)):
    n=>                   
     y.charCodeAt()&2**i++ //    If y AND 2**i is not zero:
     ?++z&&-~n:n,          //     z = z + 1; a[i] = a[i] + 1 (1 if a[i] is undefined)
    z=i=0                  //   Initially z = 0
   ),z],                   //   Then push z at the end of a
  a=[...Array(7)]          //  Initially a = [undefined] * 7
 )&&!a.some(               //  Then for each n in a:
  n=>(
   P=r=>                   //   Composite function:
    n%--r?                 //    If n % (r - 1) == 0 or r == 1:
     P(r)                  //     Return P(r - 1)
    :~-r                   //    Else: Return r - 2
  )(n)                     //   Starting from r = n
 )                         //  Return whether the composite function returns 0 for all n.

มันใช้งานได้ยังไง!

  • y.charCodeAt()&2**i
    • เราต้องการรหัสนี้เพื่อส่งคืนบิตที่สอดคล้องกันy.charCodeAt()หาก0 <= i < 7และ 0 มิฉะนั้น
    • เมื่อ i < 7ใดที่รหัสจะใช้งานได้ตามปกติ
    • เมื่อ7 <= i <= 32ตั้งแต่บิตที่สอดคล้องกันของy.charCodeAt()คือ 0 อย่างไรก็ตามผลลัพธ์จะเป็น 0 ตามที่คาดไว้
    • เมื่อไหร่32 < i < 1024ตั้งแต่int32(2**i) == 0ผลลัพธ์คือ 0 ตามที่คาดไว้
    • เมื่อ1024 <= iใดที่เรามี2**i == Infinityและเนื่องจากint32(Infinity) == 0ผลลัพธ์เป็น 0 ตามที่คาดไว้
  • (P=r=>n%--r?P(r):~-r)(n)
    • เพื่อความง่ายเราปล่อยให้ R = --r = r - 1เพื่อความง่ายเราปล่อยให้
    • ฟังก์ชั่นช่วยนี้สิ้นสุดลงเมื่อหรือ n % R == 0n % R is NaN
      • n % R == 0: เป็นปัจจัยของ Rn
        • ถ้าเป็นR == 1เช่นนั้นก็nเป็นสิ่งสำคัญเพราะทุกคน1 < R < nไม่สามารถแบ่งnได้ ส่งคืน 0 (เท็จ)
        • หากแล้วR == -1 n == 0กลับ -2 (จริง)
        • มิฉะนั้นกลับมาR - 1ที่R - 1 > 0(ความจริง)
      • n % R is NaN: การคำนวณแบบแยกส่วนไม่ถูกต้อง
        • ถ้าR == 0:n == 1. กลับ -1 (จริง)
        • ถ้าn is NaN: R is NaN. กลับ -1 (จริง)
    • เป็นผลให้เฉพาะเมื่อR == 1ฟังก์ชั่นนี้สามารถส่งกลับค่าเท็จแสดงว่าnเป็นนายก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.