รัฐบาลมีกำแพง จำกัด


28

บทนำ

นักกอล์ฟรหัสความรู้เตรียมเราสำหรับน้ำท่วมวันโลกาวินาศ พื้นที่ที่มีความเสี่ยงถูกอพยพออกไปและประชากรย้ายไปอยู่ที่สูง

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

ปัญหา

สถานการณ์วันโลกาวินาศของเราคือการอธิบายโดยตัวเลขสองในบรรทัดเดียวและn mต่อจากบรรทัดนั้นคือnบรรทัดที่มีmค่าต่อบรรทัดคั่นด้วยช่องว่างเดียวเท่านั้น แต่ละค่าจะเป็นหนึ่งในสี่ตัวละคร

  • xที่เป็นทางตัน น้ำไม่สามารถไหลได้ที่นี่ ไม่สามารถสร้างกำแพงได้ที่นี่
  • -ไม่แน่นอน น้ำสามารถไหลผ่านนี่ได้ ไม่สามารถสร้างกำแพงได้ที่นี่
  • .มีเสถียรภาพ น้ำสามารถไหลผ่านที่นี่ สามารถสร้างกำแพงได้ที่นี่
  • oการตั้งแคมป์ น้ำสามารถไหลผ่านที่นี่ ถ้าเป็นเช่นนั้นทุกคนจะตาย ไม่สามารถสร้างกำแพงได้

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

ตัวอย่างการป้อนข้อมูล

 6 7
 x . . x x x x
 x . . x - - x
 x . x x - - x
 x . o o o - .
 x . o o o - .
 x x x x x x x

ตัวอย่างผลลัพธ์

3

สมมติฐาน

  • น้ำไหลแบบตั้งฉากเท่านั้น
  • ที่พักอาศัยมีเพียงหนึ่งบล็อกแบบต่อเนื่องกันแบบ orthonagonally ต่อสถานการณ์
  • วิธีแก้ปัญหาจะมีอยู่เสมอ (แม้ว่าอาจต้องใช้กำแพงจำนวนมาก)
  • ไม่สามารถหาที่พักในขอบได้เนื่องจากสถานการณ์จะไม่มีวิธีแก้ปัญหา
  • 2 n<<16
  • 2 m<<16
  • อาจป้อนข้อมูลจาก stdin อ่านจาก "city.txt" หรือยอมรับว่าเป็นอาร์กิวเมนต์เดียว

รหัสที่สั้นที่สุดชนะ!


2
มันจะเป็นที่ยอมรับสำหรับโปรแกรมที่จะถูกต้อง แต่ใช้เวลานานกว่าจักรวาลที่รู้จักมีอยู่เพื่อให้การแก้ปัญหาสำหรับบางกรณีของปัญหา?
Claudiu

@Claudiu ฉันค่อนข้างใหม่กับ Code Golf ความต้องการของฉันล้มเหลวในการระบุการ จำกัด เวลาดังนั้นจึงไม่มีอยู่ ภาระตกอยู่กับคำตอบเพื่อพิสูจน์ว่าวิธีแก้ไขนั้นถูกต้องสำหรับทุกกรณีของปัญหา หากคุณมีวิธีการแก้ปัญหาบางอย่าง (แต่ไม่ใช่ทั้งหมด) อย่างชาญฉลาด / ยอดเยี่ยมฉันยังคงสนับสนุนให้คุณโพสต์เพื่อความสนุกสนาน
Rainbolt

2
รหัสกอล์ฟโดยทั่วไปไม่จำเป็นต้องมีการ จำกัด เวลา
Hosch250

เย็น! คำถามอื่น: จำเป็นต้องป้อนข้อมูลให้เป็นไปตามที่คุณระบุหรือเราสามารถใส่ไว้ในรูปแบบอื่นได้หรือไม่?
Claudiu

@Claudiu ฉันไม่สามารถยอมรับอะไรนอกเหนือจากข้อกำหนด อย่างไรก็ตามคุณสามารถแนะนำการแก้ไขข้อกำหนดโดยใช้ปุ่มแก้ไข เมื่อเห็นว่ายังไม่มีคำตอบฉันอาจจะยอมรับการแก้ไขทันที
Rainbolt

คำตอบ:


10

Mathematica, 257 253 ตัวอักษร

d="city.txt"~Import~"Table";g=EdgeAdd[#,∞<->Tr@#&/@Position[VertexDegree@#,2|3]]&@GridGraph@d[[1,{2,1}]];{o,x,s}=Tr/@Position[Join@@d[[2;;]],#]&/@{"o","x","."};Catch@Do[If[Min[GraphDistance[VertexDelete[g,x⋃w],∞,#]&/@o]==∞,Throw@Length@w],{w,Subsets@s}]

"city.txt"การป้อนข้อมูลจะถูกอ่านจาก

คำอธิบาย:

Mathematica มีฟังก์ชั่นมากมายในการจัดการกับกราฟ

"city.txt"ครั้งแรกผมอ่านข้อมูลจาก

d="city.txt"~Import~"Table";

จากนั้นฉันสร้างกราฟกริดด้วย 'm' * 'n' vertices ( GridGraph@d[[1,{2,1}]]) และเพิ่ม "จุดยอดที่อนันต์" ซึ่งเชื่อมต่อกับจุดยอดทุกจุดบน "ขอบ" ของกราฟ จุดสุดยอดนี้เป็นที่ที่น้ำไหลจาก

g=EdgeAdd[#,∞<->Tr@#&/@Position[VertexDegree@#,2|3]]&@GridGraph@d[[1,{2,1}]];

และo, xและsแสดงตำแหน่งของ "o" ที่ "x" และ "" ตามลำดับ

{o,x,s}=Tr/@Position[Join@@d[[2;;]],#]&/@{"o","x","."};

จากนั้นสำหรับชุดย่อยใด ๆ wของs(ย่อยจะเรียงตามยาว) ผมลบจุดในxและwจากg( VertexDelete[g,x⋃w]) และพบว่าความยาวของเส้นทางที่สั้นที่สุดจาก "จุดสุดยอดที่อินฟินิตี้" oเพื่อค่าย หากความยาวไม่มีที่สิ้นสุดการตั้งแคมป์จะปลอดภัย ดังนั้นความยาวของสิ่งแรกwคือจำนวนขั้นต่ำของกำแพงที่ต้องใช้ในการป้องกันการตั้งค่าย

Catch@Do[If[Min[GraphDistance[VertexDelete[g,x⋃w],∞,#]&/@o]==∞,Throw@Length@w],{w,Subsets@s}]

ดี! ฉันคิดว่าฉันได้รับ scooped โดยวิธีการที่แตกต่างกันในภาษาที่แตกต่างกัน
Claudiu

1
Upvoting แต่ฉันจะทำอย่างภาคภูมิใจมากขึ้นถ้าคุณจะอธิบายรหัสของคุณสำหรับพวกเราที่เหลือ
Michael Stern

ใครสามารถรับรองว่าคำตอบนี้ถูกต้องหรือให้ผู้บุกรุกทางออนไลน์สำหรับ "Mathematica"? มีปัญหาในการหาหนึ่ง
Rainbolt

1
@Rusher ฉันตรวจสอบแล้วและมันก็เป็นของแข็ง ไม่มีล่ามออนไลน์สำหรับ MM แต่มีรูปแบบเอกสาร CDF ที่สามารถดาวน์โหลดได้ซึ่งฉันและคู่อื่น ๆ เริ่มทดลองใช้เพื่อแชร์โซลูชัน นอกจากนี้คุณยังสามารถรับ Mathematica ได้ฟรีด้วยคอมพิวเตอร์ Raspberry Pi ARM โดยมีข้อแม้ที่คุณถูก จำกัด ด้วยพลังการคำนวณของกล่อง FWIW เราผู้ใช้ MM ทำอย่างดีที่สุดเพื่อรักษาความซื่อสัตย์ซึ่งกันและกันและเรากำลังพยายามทำให้การส่งผลงานของเราเข้าถึงได้ง่ายขึ้น (ปัญหาจาก Matlab, Maple, MS ภาษาที่ไม่ได้ใช้กับโมโน ฯลฯ )
Jonathan Van Matre

4

C, 827 799 522

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

#define N for(
#define F(W,X,Y,Z) N i= W;i X Y;i Z)
#define C(A,B,C) if(c[A][B]==C)
#define S(W,X,Y,Z,A,B) p=1;F(W,X,Y,Z)C(A,B,120)p=0;if(p){F(W,X,Y,Z){C(A,B,46){c[A][B]='x';z++;Q();break;}}}else{F(W,X,Y,Z){C(A,B,120)break;else c[A][B]='o';}}
p,m,z,w,h,o,i,u,l,x,y;char c[16][16];Q(){N u=0;u<h;u++)N l=0;l<w;l++)if(c[u][l]=='o'){x=u;y=l;S(x,>,m,--,i,y)S(y,>,m,--,x,i)S(y,<,w,++,x,i)S(x,<,h,++,i,y)}}main(int a, char **v){h=atoi(v[1]);w=atoi(v[2]);N m=-1;o<h;o++)N i=0;i<w;i++)scanf("%c",&c[o][i]);Q();printf("%d",z);}

อินพุตถูกกำหนดด้วยความสูงและด้วยอาร์กิวเมนต์บรรทัดคำสั่งจากนั้นตารางจะถูกอ่านเป็นสตริงเดี่ยวบน stdin ดังนี้: ./a.out 6 7 < inputโดยอินพุตอยู่ในรูปแบบนี้ (จากซ้ายไปขวาบนลงล่าง):

x..xxxxx..x - xx.xx - xx.ooo-.x.ooo-.xxxxxxx

"อ่าน"

#define F(W,X,Y,Z) for(i= W;i X Y;i Z)
#define C(A,B,C) if(c[A][B]==C)
#define S(W,X,Y,Z,A,B) p=1;F(W,X,Y,Z)C(A,B,120)p=0;if(p){F(W,X,Y,Z){C(A,B,46){c[A][B]='x';z++;Q();break;}}}else{F(W,X,Y,Z){C(A,B,120)break;else c[A][B]='o';}}

/*Example of an expanded "S" macro:
p=1;
for(i=x;i>m;i--) if(c[i][y]==120) p=0;
if(p)
{
    for(i=x;i>m;i--)
    {
        if(c[i][y]==46)
        {
            c[i][y]='x';
            z++;
            Q();
            break;
        }
    }
}
else
{
    for(i= x;i > m;i --)
    {
        if(c[i][y]==120) break;
        else c[i][y]='o';
    }
}
*/

p,m,z,w,h,o,i,u,l,x,y;
char c[16][16];
Q(){
    for(u=0;u<h;u++)
        for(l=0;l<w;l++)
            if(c[u][l]=='o')
            {
        x=u;y=l;
        S(x,>,m,--,i,y)
        S(y,>,m,--,x,i)
        S(y,<,w,++,x,i)
        S(x,<,h,++,i,y)
            }
}

main(int a, char **v)
{
    h=atoi(v[1]);
    w=atoi(v[2]);
    for(m=-1;o<h;o++)
        for(i=0;i<w;i++)
            scanf("%c",&c[o][i]);
    P();
    Q();
    printf("%d\n",z);
    P();
}

//Omitted in golfed version, prints the map.
P()
{
    for(o=0;o<h;o++)
    {
        for (i=0;i<w;i++) printf("%c",c[o][i]);
        printf("\n");
    }   
}

ไม่มีที่ใดที่จะใกล้กับทางออกของ @Claudiu แต่มันก็วิ่งได้อย่างรวดเร็ว แทนที่จะเป็นน้ำท่วมที่เติมจากขอบมันค้นหาการตั้งค่ายและทำงานออกไปด้านนอกจากโทเค็น 'o'

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

ตัวอย่างตำแหน่งผนัง:

x..xxxx                           x..xxxx
x..x--x                           x..xoox
x.xx--x                           x3xxoox
x.ooo-.  <-- results in this -->  xooooo1
x.ooo-.                           xooooo2
xxxxxxx                           xxxxxxx

โอ้วิธีการที่น่าสนใจ! มันให้คำตอบที่สั้นที่สุดเสมอหรือไม่? เช่นว่าคำตอบไม่ได้ให้สำหรับแผนที่นี้ ? มันควรจะเป็น 3 (ทำเครื่องหมายที่ผนังใหม่ไปด้วย@) ฉันพยายามใช้รหัสของตัวเอง แต่มันก็ไม่ได้ดูเหมือนจะทำงาน
Claudiu

โอ๊ะดูเหมือนว่าการเล่นกอล์ฟและเครื่องดื่มแอลกอฮอล์ไม่ค่อยดีนัก ... ฉันเล่นกอล์ฟในพฤติกรรมที่ไม่ได้กำหนด ควรได้รับการแก้ไขแล้วพร้อมกับตัวละครที่ไม่จำเป็น277ตัว
Comintern

2
@Claudiu - ดูความคิดเห็นของฉันข้างต้นผลการค้นหาสำหรับแผนที่ที่คุณโพสต์อยู่ที่pastebin.com/r9fv7tC5 นี่ควรให้คำตอบที่สั้นที่สุดเสมอ แต่ฉันทดสอบกับแผนที่ 10 หรือ 15 แผนที่ที่ฉันคิดว่าอาจมีมุมตัวพิมพ์เล็ก ฉันอยากรู้ว่าใครสามารถระบุแผนที่ที่มันล้มเหลวได้
Comintern

4

Python, 553 525 512 449 414 404 387 368 ตัวอักษร (+4 สำหรับการเรียกใช้)

ฉันสนุกกับการเล่นกอล์ฟมากเกินไป มันใหญ่กว่า 82 ไบต์ถ้าคุณพยายามบีบอัดมัน! ตอนนี้เป็นการวัดความกะทัดรัดและการขาดการทำซ้ำ

R=range;import itertools as I
f=map(str.split,open('city.txt'))[1:]
S=[]
def D(q):
 q=set(q)
 def C(*a):
    r,c=a
    try:p=(f[r][c],'x')[a in q]
    except:p='x'
    q.add(a)
    if'.'==p:S[:0]=[a]
    return p<'/'and C(r+1,c)|C(r-1,c)|C(r,c+1)|C(r,c-1)or'o'==p
 if sum(C(j,0)|C(j,-1)|C(0,j)|C(-1,j)for j in R(16))<1:print n;B
D(S);Z=S[:]
for n in R(len(Z)):map(D,I.combinations(Z,n))

ระดับการเยื้องคือพื้นที่แท็บ

การใช้งาน :

อ่านจากcity.txt:

6 7
x . . x x x x
x . . x - - x
x . x x - - x
x . o o o - .
x . o o o - .
x x x x x x x

เรียกใช้ดังนี้:

$ python floodfill_golf.py 2>X
3

2>Xคือการซ่อน stderr ตั้งแต่ออกจากโปรแกรมโดยการเพิ่มข้อยกเว้น ถ้านี่ถือว่าไม่ยุติธรรมอย่าลังเลที่จะเพิ่ม 4 ตัวอักษรสำหรับการร้องขอ

คำอธิบาย :

แรงเดรัจฉานง่าย ๆ Cเติมน้ำท่วมและส่งกลับค่าจริงถ้ามันตีค่าย ไม่มีช่องว่างภายในเพิ่มเติมเนื่องจากใช้พื้นที่มากเกินไปในการตั้งค่าช่องว่างภายในอย่างถูกต้อง Dรับชุดของผนังที่จะเติมโทรCจากทุกจุดบนขอบที่Cบัญชีสำหรับผนังเหล่านั้นและพิมพ์ความยาวและออกหากไม่มีพวกเขามาถึงค่าย รายชื่อผนังนั้นใช้ในการติดตามการเติมน้ำท่วมด้วยดังนั้นจึงไม่จำเป็นต้องคัดลอกกระดาน! ตลบตะแลง, Cนอกจากนี้ยังผนวกจุดที่ว่างเปล่าที่พบไปยังรายการSเพื่อให้การทำงานDเป็นยังใช้ในการสร้างครั้งแรกที่รายการจุดที่ว่างเปล่า ด้วยเหตุนี้ฉันใช้sumแทนanyเพื่อให้แน่ใจว่า.มีการรวบรวม s ทั้งหมดในการเรียกใช้ครั้งแรก

ฉันเรียกใช้Dหนึ่งครั้งจากนั้นคัดลอกรายการของจุดที่ว่างเปล่าลงไปZเนื่องจากSจะถูกผนวกเข้ากับ (ไม่มีประสิทธิภาพ แต่ราคาถูกลงตามจำนวนตัวอักษร) จากนั้นฉันใช้itertools.combinationsเพื่อเลือกคำสั่งผสมของจุดว่างเปล่าแต่ละจุดตั้งแต่ 0 จุดขึ้นไป ฉันเรียกใช้คำสั่งผสมแต่ละครั้งDและพิมพ์ความยาวของคำสั่งแรกที่ใช้งานได้ยกข้อยกเว้นเพื่อออกจากโปรแกรม หากไม่พบคำตอบก็จะไม่มีการพิมพ์ออกมา

โปรดทราบว่าในปัจจุบันโปรแกรมใช้งานไม่ได้หากไม่จำเป็นต้องใช้วอลล์ มันจะเป็น +3 ตัวอักษรเพื่อดูแลกรณีนี้ ไม่แน่ใจว่าจำเป็นหรือไม่

โปรดทราบว่านี่เป็นO(2^n)อัลกอริทึมโดยที่nจำนวนจุดว่าง ดังนั้นสำหรับกระดานที่ว่างเปล่าขนาด 15x15 โดยมีค่ายเดียวอยู่ตรงกลางสิ่งนี้จะใช้เวลา2^(15*15-1)= 2.6959947e+67การวนซ้ำให้เสร็จสมบูรณ์ซึ่งจะใช้เวลานานมากแน่นอน!


1

Groovy: 841 805 754

i=new File("city.txt").getText()
x=i[2] as int
y=i[0] as int
m=i[4..i.length()-1].replaceAll('\n','').toList()
print r(m,0)
def r(m,n){if(f(m))return n;c=2e9;g(m).each{p=r(it,n+1);if(p<c)c=p;};return c;}
def f(m){u=[];u.addAll(m);for(i in 0..(x*y)){for(l in 0..m.size()-1){n(l,u);s(l,u);e(l,u);w(l,u);}};m.count('o')==u.count('o')}
def n(i,m){q=i-x;if((((q>=0)&(m[q]=='!'))|(q<0))&m[i]!='x'&m[i]!='W'){m[i]='!'}}
def s(i,m){q=i+x;if((((q>=0)&(m[q]=='!'))|(q<0))&m[i]!='x'&m[i]!='W'){m[i]='!'}}
def e(i,m){q=i+1;if((((q%x!=0)&(m[q]=='!'))|(q%x==0))&m[i]!='x'&m[i]!='W'){m[i]='!'}}
def w(i,m){q=i-1;if((((i%x!=0)&(m[q]=='!'))|(i%x==0))&m[i]!='x'&m[i]!='W'){m[i]='!'}}
def g(m){v=[];m.eachWithIndex{t,i->if(t=='.'){n=[];n.addAll(m);n[i]='W';v<<n}};return v}

Ungolfed:

def i = new File("city.txt").getText()
x=i[2].toInteger()
y=i[0].toInteger()
def m=i[4..i.length()-1].replaceAll('\n','').toList()
println r(m, 0)

def r(m, n){
    if(f(m)) return n
    def c = Integer.MAX_VALUE

    getAllMoves(m).each{ it -> 
        def r = r(it, n+1)
        if(r < c) c = r
    }
    return c;
}

def f(m){
    def t = []
    t.addAll(m)
    for(i in 0..(x*y)){
        for(l in 0..m.size()-1){
            n(l,t);s(l,t);e(l,t);w(l,t);
        }
    }
    m.count('o')==t.count('o')
}

def n(i,m){
    def t = i-x;
    if( ( ( (t >= 0) && (m[t]=='!') ) || (t < 0)) && m[i]!='x' && m[i]!='W'){
        m[i]='!'
    }
}

def s(i,m){
    def t = i+x;
    if( ( ( (t >= 0) && (m[t]=='!') ) || (t < 0)) && m[i]!='x' && m[i]!='W'){
        m[i]='!'
    }
}

def e(i,m){
    def t = i+1;
    if( ( ( (t%x!=0) && (m[t]=='!') ) || (t%x==0)) && m[i]!='x' && m[i]!='W'){
        m[i]='!'
    } 
}

def w(i,m){
    def t = i-1;
    if( ( ( (i%x!=0) && (m[t]=='!') ) || (i%x==0)) && m[i]!='x' && m[i]!='W'){
        m[i]='!'
    }
}

def getAllMoves(m){
    def moves = []
    m.eachWithIndex { t, i ->
        if(t=='.'){
            def newList = []
            newList.addAll(m)
            newList[i]='W'
            moves << newList
        }
    }
    return moves
}

มีสนามกอล์ฟอีกมากที่จะมา ...

ส่งคืน 2E9 หากไม่มีวิธีแก้ไข


0

Dyalog APL , 91 ไบต์

⊃∊{1∊a[⍸×{(×d)∧s 3∨/3∨⌿⍵}⍣≡4=d←0@⍵⊢a]:⍬⋄≢⍵}¨c[⍋≢¨c←(,⍳2⊣¨b)/¨⊂b←⍸2=a←(s←(4,4,⍨⍉)⍣2)'xo.'⍳⎕]

ถือว่า⎕IO=0, ใช้คุณสมบัติจาก v16.0 ( @และ), เวลาทำงานเป็นเลขชี้กำลังในจำนวน.-s

ได้รับการประเมินการป้อนข้อมูลจะต้องเป็นเมทริกซ์ของตัวละคร

'xo.'⍳ แทนที่xด้วย 0, o1, .2 และอื่น ๆ ทั้งหมด 3

s←(4,4,⍨⍉)⍣2 ฟังก์ชั่นที่ล้อมรอบเมทริกซ์ด้วย 4s

a← กำหนดเมทริกซ์ตัวเลขที่ล้อมรอบด้วย 4s ให้กับตัวแปร a

b←⍸2= bคือรายการคู่ coord โดยที่ 2s (เช่น the .-s) คือ

(,⍳2⊣¨b)/¨⊂b สร้างองค์ประกอบทั้งหมดของ b

c[⍋≢¨c←...] จัดเรียงตามขนาด

{... :⍬⋄≢⍵}¨ สำหรับชุดค่าผสมแต่ละชุดให้ตรวจสอบบางสิ่งและคืนความยาวหรือรายการว่าง

⊃∊ ผลลัพธ์แรกที่ไม่ว่างเปล่า

d←0@⍵⊢a d คือ aกับองค์ประกอบบางส่วนถูกแทนที่ด้วย 0

4= สร้างบูลีนเมทริกซ์ - 4s อยู่ที่ไหน นั่นคือชายแดนที่เราเพิ่มเข้าไป

{...}⍣≡ ใช้ฟังก์ชัน{}ต่อไปจนกว่าผลลัพธ์จะคงที่

3∨/3∨⌿⍵ "บูลีนหรือ" แต่ละองค์ประกอบกับเพื่อนบ้าน

s ผลลัพธ์จะเล็กลงดังนั้นเราจะสร้างเส้นขอบใหม่อีกครั้ง

(×d)∧ ใช้องค์ประกอบที่ไม่เป็นศูนย์ของd(ที่ไม่ใช่ผนัง) เป็นหน้ากากบูลีน

a[⍸× ...] อะไรที่aสอดคล้องกับ 1s ในเมทริกบูลีนของเรา

1∊ มี 1s ใด ๆ เช่นoค่ายหรือไม่

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