คำนวณ superset


18

งานของคุณที่นี่เป็นเรื่องง่าย:

รับรายการชุดเลขจำนวนเต็มค้นหาชุดยูเนี่ยน ในคำอื่น ๆ ค้นหารายการสั้นที่สุดของชุดจำนวนเต็มที่มีองค์ประกอบทั้งหมดในรายการชุดเดิม (แต่ไม่มีองค์ประกอบอื่น ๆ ) ตัวอย่างเช่น:

[1,5] and [3,9] becomes [1,9] as it contains all of the elements in both [1,5] and [3,9]
[1,3] and [5,9] stays as [1,3] and [5,9], because you don't want to include 4

ชุดจะ notated โดยใช้สัญกรณ์ช่วง: หมายถึงจำนวนเต็ม[1,4] 1,2,3,4ชุดนี้ยังสามารถมากมาย: [3,]วิธีการทั้งหมดของจำนวนเต็ม>= 3และวิธีการทั้งหมดของจำนวนเต็ม[,-1] <= -1มีการรับประกันว่าองค์ประกอบแรกของช่วงจะไม่เกินกว่าที่สอง

คุณสามารถเลือกที่จะตั้งค่าในรูปแบบสตริงหรือคุณสามารถใช้ทูเปิล 2 องค์ประกอบโดยใช้ค่าคงที่ไม่ใช่จำนวนเต็มเป็นค่า "อนันต์" คุณสามารถใช้ค่าคงที่สองค่าเพื่อแทนขอบเขตบนและขอบเขตล่างอนันต์ ตัวอย่างเช่นใน Javascript คุณสามารถใช้[3,{}]เพื่อระบุจำนวนเต็มทั้งหมด>= 3ตราบใดที่คุณใช้{}ในกรณีทดสอบทั้งหมดอย่างสม่ำเสมอ

กรณีทดสอบ:

[1,3]                     => [1,3]
[1,]                      => [1,]
[,9]                      => [,9]
[,]                       => [,]
[1,3],[4,9]               => [1,9]
[1,5],[8,9]               => [1,5],[8,9]
[1,5],[1,5]               => [1,5]
[1,5],[3,7]               => [1,7]
[-10,7],[1,5]             => [-10,7]
[1,1],[2,2],[3,3]         => [1,3]
[3,7],[1,5]               => [1,7]
[1,4],[8,]                => [1,4],[8,]
[1,4],[-1,]               => [-1,]
[1,4],[,5]                => [,5]
[1,4],[,-10]              => [1,4],[,-10]
[1,4],[,]                 => [,]
[1,4],[3,7],[8,9],[11,20] => [1,9],[11,20]

นี่คือดังนั้นจงตอบให้สั้นที่สุด!



1
ฉันสามารถใช้Infinityแทนได้{}หรือไม่
Luis felipe De jesus Munoz

เราสามารถนำเข้าเป็นค่าลอยเช่น[1.0, 3.0]แทน[1, 3]?
AdmBorkBork

ตราบใดที่คุณถือว่ามันเป็นจำนวนเต็ม ในคำอื่น ๆ[1.0, 3.0], [4.0, 5.0]ควรจะยังคงเป็น[1.0, 5.0]
นาธานเมอร์ริ

หากภาษาของคุณไม่สามารถใช้Infinityและ-Infinityเป็นอินพุตได้จะอนุญาตให้ใช้-999999และ999999(หรือมากกว่า / เล็กกว่า) แทนได้หรือไม่
Kevin Cruijssen

คำตอบ:


7

R + intervals, 90 87 81 ไบต์

function(...)t(reduce(Intervals(rbind(...),type="Z")))+c(1,-1)
library(intervals)

ลองออนไลน์!

อินพุตเป็นรายการช่วงเวลา -InfและInfเป็นบิวด์อิน R สำหรับลบ / บวกอนันต์ เอาต์พุตเป็นเมทริกซ์ของคอลัมน์ของช่วงเวลา

มักจะไม่ใช่แฟนของการใช้ห้องสมุดที่ไม่ได้มาตรฐาน แต่อันนี้สนุก TIO ไม่ได้intervalsติดตั้ง คุณสามารถลองใช้กับการติดตั้งของคุณเองหรือที่https://rdrr.io/snippets/

intervalsแพคเกจสนับสนุนจริงและจำนวนเต็ม ( type = "Z") ช่วงเวลาและreduceฟังก์ชั่นในตัวสำหรับสิ่งที่ท้าทายต้องการ แต่การส่งออกที่ดูเหมือนว่าจะเริ่มต้นกับช่วงเวลาที่เปิดเพื่อให้เป็นสิ่งจำเป็นเพื่อให้ได้ผลลัพธ์ที่ต้องการclose_intervals +c(1,-1)

เวอร์ชันเก่ามีตัวอย่างในรายการซึ่งอาจสะดวกดังนั้นฉันจึงทิ้งลิงค์ไว้ที่นี่


ฉันคิดว่าคุณสามารถบันทึกได้สองสามไบต์: function(...)close_intervals(reduce(Intervals(rbind(...),type="Z"))). หรือดียิ่งกว่านั้นคุณสามารถตรวจสอบกับ op ได้หากพวกเขายอมให้เมทริกซ์เป็นอินพุต
JayCe

1
เมื่อคืนที่ผ่านมาฉันกำลังนอนหลับอยู่บนเตียงโดยคิดว่า "ต้องมีวิธีที่ดีกว่าในการสร้างเมทริกซ์จากเวกเตอร์อินพุต" ฉันคิดว่าความท้าทายนั้นดีกว่าที่จะปล่อยอินพุตตามที่ควรจะเป็น แต่มันสนุกที่ได้มีreduceและReduceอยู่ข้างใน
ngm

ฉันชอบสิ่งที่ "ลดคู่"! ก็ไม่ golfy พอ;) สิ่งที่เกี่ยวกับการปรับเปลี่ยนช่วงเวลาเปิดเช่นนี้f=function(...)t(reduce(Intervals(rbind(...),type="Z")))+c(1,-1)?
JayCe

6

JavaScript (ES6), 103 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @Shaggy
บันทึกแล้ว 1 ไบต์ขอบคุณ @KevinCruijssen

คาด+/-Infinityหวังสำหรับค่าอนันต์

a=>(a.sort(([p],[P])=>p-P).map(m=M=([p,q])=>p<M+2?M=q>M?q:M:(b.push([m,M]),m=p,M=q),b=[]),b[0]=[m,M],b)

ลองออนไลน์!

อย่างไร?

เราจัดเรียงช่วงเวลาตามขอบเขตล่างของพวกเขาจากต่ำสุดไปสูงสุด ขอบเขตบนจะถูกละเว้น

จากนั้นเราจะวนซ้ำตามช่วงเวลาที่จัดเรียงในขณะที่ติดตามขอบเขตล่างและบนปัจจุบันและเริ่มต้นเป็นและตามลำดับ[pn,qn]mMp1q1

สำหรับแต่ละช่วงเวลา :[pn,qn]

  • หาก : ช่วงเวลานี้สามารถรวมกับช่วงก่อนหน้า แต่เราอาจจะมีความผูกพันใหม่บนเพื่อให้เราปรับปรุงเพื่อq_n)pnM+1Mmax(M,qn)
  • มิฉะนั้นจะมีช่องว่างระหว่างช่วงเวลาก่อนหน้ากับช่วงนี้ เราสร้างช่วงเวลาใหม่และอัปเดตและเป็นและตามลำดับ[m,M]mMpnqn

ในตอนท้ายของกระบวนการที่เราจะสร้างช่วงเวลาที่ผ่านมากับขอบเขตปัจจุบันM][m,M]

แสดงความคิดเห็น

a => (                  // a[] = input array
  a.sort(([p], [P]) =>  // sort the intervals by their lower bound; we do not care about
    p - P)              // the upper bounds for now
  .map(m = M =          // initialize m and M to non-numeric values
    ([p, q]) =>         // for each interval [p, q] in a[]:
    p < M + 2 ?         //   if M is a number and p is less than or equal to M + 1:
      M = q > M ? q : M //     update the maximum M to max(M, q)
    : (                 //   else (we've found a gap, or this is the 1st iteration):
      b.push([m, M]),   //     push the interval [m, M] in b[]
      m = p,            //     update the minimum m to p
      M = q             //     update the maximum M to q
    ),                  //
    b = []              //   start with b[] = empty array
  ),                    // end of map()
  b[0] = [m, M], b      // overwrite the 1st entry of b[] with the last interval [m, M]
)                       // and return the final result

p<=M+1สามารถเป็นp<M+2อย่างไร
Kevin Cruijssen

@KevinCruijssen ฉันพลาดไปทั้งหมดนั่น ... ขอบคุณ!
Arnauld

4

Python 2 , 118 113 112 111 106 105 104 101 101 ไบต์

x=input()
x.sort();a=[];b,c=x[0]
for l,r in x:
 if l>c+1:a+=(b,c),;b,c=l,r
 c=max(c,r)
print[(b,c)]+a

ขอบคุณไบต์ Mr.Coder หนึ่งขอบคุณหนึ่งขอบคุณ Jonathan Frech และสามขอบคุณ Dead Possum
ลองออนไลน์!


(b,c),บันทึกเป็นไบต์
Mr. Xcoder

หือฉันคิดว่าฉันลองแล้ว

ไม่ได้gหมายความว่าฟังก์ชั่นของคุณfไม่สามารถใช้ซ้ำได้และดังนั้นจึงไม่ถูกต้อง?
Neil

@ Neil อาจเป็นไปได้ แต่นั่นก็เป็นเพียงความหลงไหลจากความพยายามครั้งก่อน

1
คุณสามารถทำสิ่งนั้นให้returnเป็นprintไบต์อื่นได้เช่นกัน
Jonathan Frech

2

Ruby , 89 76 ไบต์

->a{[*a.sort.reduce{|s,y|s+=y;y[0]-s[-3]<2&&s[-3,3]=s.max;s}.each_slice(2)]}

ลองออนไลน์!

เรียงลำดับอาร์เรย์จากนั้นปรับให้แบนโดยต่อท้ายช่วงทั้งหมดไปที่ช่วงแรก: หากช่วงหนึ่งคาบเกี่ยวกับช่วงก่อนหน้าให้ละทิ้งองค์ประกอบ 2 องค์ประกอบจาก 3 ช่วงสุดท้าย (เก็บเฉพาะค่าสูงสุด)

เลิกทำทุกอย่างในตอนท้าย


1

Pascal (FPC) , 367 362 357 ไบต์

uses math;type r=record a,b:real end;procedure d(a:array of r);var i,j:word;t:r;begin for i:=0to length(a)-1do for j:=0to i do if a[i].a<a[j].a then begin t:=a[i];a[i]:=a[j];a[j]:=t;end;j:=0;for i:=1to length(a)-1do if a[j].b>=a[i].a-1then begin a[j].a:=min(a[i].a,a[j].a);a[j].b:=max(a[i].b,a[j].b)end else j:=j+1;for i:=0to j do writeln(a[i].a,a[i].b)end;

ลองออนไลน์!

โพรซีเดอร์ที่ใช้เร็กคอร์ดอาร์เรย์แบบไดนามิกที่ประกอบด้วยขอบเขต 2 ช่วงปรับเปลี่ยนอาร์เรย์ในตำแหน่งจากนั้นเขียนลงบนเอาต์พุตมาตรฐานหนึ่งช่วงต่อบรรทัด (ขออภัยสำหรับประโยคที่บิดเบี้ยวนั้น) ใช้1/0สำหรับ ubounded up และ-1/0unbounded down

เวอร์ชันที่อ่านได้

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

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


1

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

List@@(#-{0,1}&/@IntervalUnion@@(Interval[#+{0,1}]&/@#))&

ลองออนไลน์!

รับอินพุตเป็นรายการของรายการที่{a,b}แสดงช่วงเวลา[a,b]ซึ่งaสามารถเป็น-Infinityและbสามารถเป็นInfinityได้

ใช้บิวท์อินIntervalUnionแต่แน่นอนว่าเราต้องนวดเป็นช่วง ๆ ก่อน ในการทำเป็นว่าช่วงเวลาเป็นจำนวนเต็มเราบวก 1 เข้ากับขอบเขตสูงสุด (ตรวจสอบให้แน่ใจว่าการรวมกันของ[1,3]และ[4,9]เป็น[1,9]) ในตอนท้ายเราเลิกทำการดำเนินการนี้และเปลี่ยนผลลัพธ์กลับเป็นรายการ

นอกจากนี้ยังมีวิธีการที่แตกต่างอย่างสิ้นเชิงซึ่งนาฬิกาที่73 ไบต์ :

NumericalSort@#//.{x___,{a_,b_},{c_,d_},y___}/;b+1>=c:>{x,{a,b~Max~d},y}&

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


1

05AB1E (ดั้งเดิม) , 88 79 78 ไบต์

g≠i˜AKïDW<UZ>VIøεAXY‚Nè:}ïø{©˜¦2ôíÆ1›.œʒíεćsO_*}P}н€g®£εø©θàDYQiA}V®нßDXQiA}Y‚

อินฟินิตี้เป็นอินพุตเป็นตัวอักษรตัวพิมพ์เล็ก ( 'abcdefghijklmnopqrstuvwxyz')

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

หมายเหตุสำคัญ:หากมีจริงInfinityและ-Infinityจะเป็น43 42 ไบต์แทน ดังนั้นน้อยกว่า 50%ประมาณ 30% เป็นงานสำหรับการขาดInfinity..

{©Dg≠i˜¦2ôíÆ1›.œʒíεćsO_*}P}н€g®£εø©θàV®нßY‚

ลองออนไลน์ ( Infinityแทนที่ด้วย9999999999และ-Infinityแทนที่ด้วย-9999999999)

สามารถเล่นกอล์ฟได้อย่างแน่นอน ในท้ายที่สุดมันกลับกลายเป็นว่าเต็มไปด้วยวิธีแก้ปัญหาที่น่าเกลียดมาก แต่ตอนนี้ฉันแค่ดีใจที่มันทำงานได้

คำอธิบาย:

Dgi          # If the length of the implicit input is NOT 1:
              #   i.e. [[1,3]] → length 1 → 0 (falsey)
              #   i.e. [[1,4],["a..z",-5],[3,7],[38,40],[8,9],[11,20],[25,"a..z"],[15,23]]
              #    → length 8 → 1 (truthy)
    ˜         #  Take the input implicit again, and flatten it
              #   i.e. [[1,4],["a..z",-5],[3,7],[38,40],[8,9],[11,20],[25,"a..z"],[15,23]]
              #    → [1,4,"a..z",-5,3,7,38,40,8,9,11,20,25,"a..z",15,23]
     AK       #  Remove the alphabet
              #   i.e. [1,4,"a..z",-5,3,7,38,40,8,9,11,20,25,"a..z",15,23]
              #    → ['1','4','-5','3','7','38','40','8','9','11','20','25','15','23']
       ï      #  Cast everything to an integer, because `K` turns them into strings..
              #   i.e. ['1','4','-5','3','7','38','40','8','9','11','20','25','15','23']
              #    → [1,4,-5,3,7,38,40,8,9,11,20,25,15,23]
        D     #  Duplicate it
         W<   #  Determine the min - 1
              #   i.e. [1,4,-5,3,7,38,40,8,9,11,20,25,15,23] → -5
           U  #  Pop and store it in variable `X`
         Z>   #  Determine the max + 1
              #   i.e. [1,4,-5,3,7,38,40,8,9,11,20,25,15,23] → 40
           V  #  Pop and store it in variable `Y`
Iø            #  Take the input again, and transpose/zip it (swapping rows and columns)
              #   i.e. [[1,4],["a..z",-5],[3,7],[38,40],[8,9],[11,20],[25,"a..z"],[15,23]]
              #    → [[1,'a..z',3,38,8,11,25,15],[4,-5,7,40,9,20,'a..z',23]]
  ε       }   #  Map both to:
   A          #   Push the lowercase alphabet
    XY       #   Push variables `X` and `Y`, and pair them into a list
       Nè     #   Index into this list, based on the index of the mapping
         :    #   Replace every alphabet with this min-1 or max+1
              #   i.e. [[1,'a..z',3,38,8,11,25,15],[4,-5,7,40,9,20,'a..z',23]]
              #    → [['1','-6','3','38','8','11','25','15'],['4','-5','7','40','9','20','41','23']]
ï             #  Cast everything to integers again, because `:` turns them into strings..
              #   i.e. [['1','-6','3','38','8','11','25','15'],['4','-5','7','40','9','20','41','23']]
              #    → [[1,-6,3,38,8,11,25,15],[4,-5,7,40,9,20,41,23]]
 ø            #  Now zip/transpose back again
              #   i.e. [[1,-6,3,38,8,11,25,15],[4,-5,7,40,9,20,41,23]]
              #    → [[1,4],[-6,-5],[3,7],[38,40],[8,9],[11,20],[25,41],[15,23]]
  {           #  Sort the pairs based on their lower range (the first number)
              #   i.e. [[1,4],[-6,-5],[3,7],[38,40],[8,9],[11,20],[25,41],[15,23]]
              #    → [[-6,-5],[1,4],[3,7],[8,9],[11,20],[15,23],[25,41],[38,40]]
   ©          #  Store it in the register (without popping)
˜             #  Flatten the list
              #   i.e. [[-6,-5],[1,4],[3,7],[8,9],[11,20],[15,23],[25,41],[38,40]]
              #    → [-6,-5,1,4,3,7,8,9,11,20,15,23,25,41,38,40]
 ¦            #  And remove the first item
              #   i.e. [-6,-5,1,4,3,7,8,9,11,20,15,23,25,41,38,40]
              #    → [-5,1,4,3,7,8,9,11,20,15,23,25,41,38,40]
  2ô          #  Then pair every two elements together
              #   i.e. [-5,1,4,3,7,8,9,11,20,15,23,25,41,38,40]
              #    → [[-5,1],[4,3],[7,8],[9,11],[20,15],[23,25],[41,38],[40]]
    í         #  Reverse each pair
              #   i.e. [[-5,1],[4,3],[7,8],[9,11],[20,15],[23,25],[41,38],[40]]
              #    → [[1,-5],[3,4],[8,7],[11,9],[15,20],[25,23],[38,41],[40]]
     Æ        #  Take the difference of each pair (by subtracting)
              #   i.e. [[1,-5],[3,4],[8,7],[11,9],[15,20],[25,23],[38,41],[40]]
              #    → [6,-1,1,2,-5,2,-3,40]
      1      #  Determine for each if they're larger than 1
              #   i.e. [6,-1,1,2,-5,2,-3,40] → [1,0,0,1,0,1,0,1]
            #  Create every possible partition of these values
              #   i.e. [1,0,0,1,0,1,0,1] → [[[1],[0],[0],[1],[0],[1],[0],[1]],
              #                             [[1],[0],[0],[1],[0],[1],[0,1]],
              #                             ...,
              #                             [[1,0,0,1,0,1,0],[1]],
              #                             [[1,0,0,1,0,1,0,1]]]
  ʒ         } #  Filter the partitions by:
   í          #   Reverse each inner partition
              #    i.e. [[1],[0,0,1],[0,1],[0,1]] → [[1],[1,0,0],[1,0],[1,0]]
    ε     }   #   Map each partition to:
     ć        #    Head extracted
              #     i.e. [1,0,0] → [0,0] and 1
              #     i.e. [1] → [] and 1
              #     i.e. [1,0,1] → [1,0] and 1
      s       #    Swap so the rest of the list is at the top of the stack again
       O      #    Take its sum
              #     i.e. [0,0] → 0
              #     i.e. [] → 0
              #     i.e. [1,0] → 1
        _     #    And check if it's exactly 0
              #     i.e. 0 → 1 (truthy)
              #     i.e. 1 → 0 (falsey)
         *    #    And multiply it with the extracted head
              #    (is only 1 when the partition has a single trailing 1 and everything else a 0)
              #     i.e. 1 and 1 → 1 (truthy)
              #     i.e. 1 and 0 → 0 (falsey)
           P  #   And check if all mapped partitions are 1
н             #  Take the head (there should only be one valid partition left)
              #   i.e. [[[1],[0,0,1],[0,1],[0,1]]] → [[1],[0,0,1],[0,1],[0,1]]
 g           #  Take the length of each inner list
              #   i.e. [[1],[0,0,1],[0,1],[0,1]] → [1,3,2,2]
   ®          #  Push the sorted pairs we've saved in the register earlier
    £         #  Split the pairs into sizes equal to the partition-lengths
              #   i.e. [1,3,2,2] and [[-6,-5],[1,4],[3,7],[8,9],[11,20],[15,23],[25,41],[38,40]]
              #    → [[[-6,-5]],[[1,4],[3,7],[8,9]],[[11,20],[15,23]],[[25,41],[38,40]]]
ε             #  Map each list of pairs to:
 ø            #   Zip/transpose (swapping rows and columns)
              #    i.e. [[1,4],[3,7],[8,9]] → [[1,3,8],[4,7,9]]
              #    i.e. [[25,41],[38,40]] → [[25,38],[41,40]]
  ©           #   Store it in the register
   θ          #   Take the last list (the ending ranges)
              #    i.e. [[25,38],[41,40]] → [41,40]
    à         #   And determine the max
              #    i.e. [41,40] → 41
     DYQi }   #   If this max is equal to variable `Y`
              #     i.e. 41 (`Y` = 41) → 1 (truthy)
         A    #    Replace it back to the lowercase alphabet
           V  #   Store this max in variable `Y`
  ®           #   Take the zipped list from the register again
   н          #   This time take the first list (the starting ranges)
              #    i.e. [[25,38],[41,40]] → [25,38]
    ß         #   And determine the min
              #    i.e. [25,38] → 25
     DXQi }   #   If this min is equal to variable `X`
              #     i.e. 25 (`X` = -6) → 0 (falsey)
         A    #    Replace it back to the lowercase alphabet
           Y #   And pair it up with variable `Y` (the max) to complete the mapping
              #    i.e. 25 and 'a..z' → [25,'a..z']
              #  Implicitly close the mapping (and output the result)
              #   i.e. [[[-6,-5]],[[1,4],[3,7],[8,9]],[[11,20],[15,23]],[[25,41],[38,40]]]
              #    → [['a..z',-5],[1,9],[11,23],[25,'a..z']]
              # Implicit else (only one pair in the input):
              #  Output the (implicit) input as is
              #   i.e. [[1,3]]

1

C (เสียงดังกราว) , 346 342 ไบต์

ธงคอมไพเลอร์-DP=printf("(%d,%d)\n", -DB=a[i+1]และ-DA=a[i]

typedef struct{int a,b;}t;s(t**x,t**y){if((*x)->a>(*y)->a)return 1;else if((*x)->a<(*y)->a)return -1;}i;f(t**a){for(i=0;A;)i++;qsort(a,i,sizeof(t*),s);for(i=0;B;i++){if(B->a<=A->b+1){A->b=B->b;if(B->a<A->a)A->a=B->a;else B->a=A->a;}}for(i=0;A;i++){if(!B)break;if(A->a!=B->a)P,A->a,A->b);}P,A->a,A->b);}

ลองออนไลน์!


ฉันคิดว่าคุณต้องพึ่งพาiคุณค่าระดับโลก
Jonathan Frech

@JonathanFrech หมายถึงอะไรที่while(A)i++;ควรfor(i=0;A;)i++;ตั้งค่าไว้อย่างชัดเจนi=0ก่อนที่จะใช้ใน while-loop แทนที่จะใช้ค่าเริ่มต้น0ในระดับโลก ไม่แน่ใจอีกต่อไปว่าทำไม แต่ต้องเป็นไปตามกฎเมตา สาเหตุหลักมาจากวิธีการที่ควรจะอยู่ในตัวเอง / ใช้งานได้อีกครั้งโดยไม่ต้องตั้งค่าทั่วโลกในระหว่างการเรียกวิธีการ IIRC
Kevin Cruijssen

ความเชื่อมั่นคงในโลกiมูลค่า
Logern



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