เลิกทำการช่วงของตัวเลข


34

มันค่อนข้างง่ายที่จะได้รับจำนวนnสร้างช่วงจากไป0 n-1ในความเป็นจริงหลายภาษาให้การดำเนินการนี้เป็นแบบ builtin

โปรแกรม CJam ต่อไปนี้อ่านจำนวนเต็มแล้วพิมพ์ช่วงดังกล่าวออกมา ( ลองออนไลน์! ):

ri,

โปรดสังเกตว่ามันพิมพ์ตัวเลขโดยไม่มีตัวคั่น

ความท้าทาย

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

ข้อมูลจำเพาะ

  • ตัวเลขจะถูกกำหนดโดยไม่มีตัวคั่นใด ๆ
  • คุณอาจจะถือว่าสตริงเป็นช่วงที่ถูกต้อง
  • คุณอาจใช้การจัดทำดัชนี 0- หรือ 1 ตามช่วงของคุณ
  • คุณอาจคิดว่าเอาต์พุตที่ถูกต้องจะไม่เกิน 32,767 (ดังนั้นอินพุตที่ถูกต้องจะไม่มีความยาวมากกว่า 152,725)
  • คุณอาจคิดว่าผลลัพธ์ที่ถูกต้องจะเป็นค่าบวกเสมอ (ดังนั้นคุณไม่ต้องจัดการกับ 0 หรือลบ)

นี่คือดังนั้นคำตอบที่สั้นที่สุดของการแข่งขัน (วัดเป็นไบต์) ชนะ

กรณีทดสอบ

0 การจัดทำดัชนี:

0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101

1 การจัดทำดัชนี:

1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100

มีช่วงจากมากไปน้อยหรือไม่? จำเป็นต้องใช้กับจำนวนลบหรือไม่
แดเนียล

@ แดเนียลไม่ลืมพูดถึงว่า; ที่เพิ่ม
แยกผลไม้

4
โปรแกรมของเราจำเป็นต้องจัดการกับสตริงว่างหรือไม่? ฉันคิดว่ามันสมเหตุสมผลที่จะให้เราเพิกเฉย บางคำตอบไม่ได้รับประโยชน์จากกฎนั้นเลย
Mr. Xcoder

เอาท์พุทสามารถเป็นตัวแทนสตริงของจำนวนเช่นนำมาเป็นสตริงย่อยจากสตริงเดิม?
user2390246

@ user2390246 ใช่มันไม่เป็นไร
ผลไม้แยกแยะใน

คำตอบ:



11

Husk , 5 ไบต์

LCmLN

ลองออนไลน์!

ตัวอักษรเท่านั้น!

รับอินพุตเป็นสตริงผลลัพธ์จะถูกจัดทำดัชนี 1 รายการ

คำอธิบาย

LCmLN
  mLN    get the list of lengths of all positive naturals
 C       cut the input into slices of those lengths
L        get the length of the resulting list

8

05AB1E , 7 6 ไบต์

1 การจัดทำดัชนี

āηJsk>

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

ā        # push range [1 ... len(input)]
 η       # compute prefixes of the range
  J      # join each prefix to a string
   sk    # get index of the input in the list of prefixes
     >   # increment

ฉันกำลังทำอะไรผิดหรือเปล่า? ดูเหมือนว่าจะส่งคืน0ไม่ว่าอินพุตจะ: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA
Shaggy

@Shaggy: คุณต้องทำอย่างนี้หรือนี่เป็นคำพูดเดียวนับเป็นส่วนหนึ่งของการป้อนข้อมูล
Emigna

อา, ดังนั้นสตริงอินพุทใน 05AB1E จำเป็นต้องยกมาสามเท่า?
Shaggy

@Shaggy: หากคุณต้องการสตริงว่างหรือบรรทัดใหม่ในอินพุตใช่ มิฉะนั้นคุณไม่จำเป็นต้องพูดอะไรเลย
Emigna

[NÝJQ#]Nเป็นความคิดของฉัน ""แต่นี้จะดีกว่าเพราะมันเหมาะกับ
Magic Octopus Urn

7

Java 8, 66 59 ไบต์

s->{int r=0;for(String c="";!c.equals(s);c+=r++);return r;}

0 การจัดทำดัชนี

-7 ไบต์ขอบคุณที่@ PunPun1000

ฉันมีความรู้สึกว่าสิ่งนี้สั้นลงได้เพียงแค่ตรวจสอบความยาวของอินพุตอย่างใดเนื่องจากเราสามารถสมมติว่าอินพุตนั้นถูกต้องเสมอ ยังคงคิดออกนี้ ไม่สามารถคิดได้และอาจมีค่ามากเกินไปที่จะมีประโยชน์ใน Java (เช่นเดียวกับการคืนค่าสตริงย่อยของจุดสิ้นสุดของอินพุต 1 ที่มีการจัดทำดัชนี)

คำอธิบาย:

ลองที่นี่

s->{                 // Method with String parameter and integer return-type
  int r=0;           //  Result-integer
  for(String c="";   //  Check-String
      !c.equals(s);  //  Loop as long as the sum-String doesn't equal the input-String
    c+=r++           //   Append the number to the the Check-String,
                     //   and increase the Result-integer by 1
  );                 //  End of loop
  return r;          //  Return the result-integer
}                    // End of method

1
59 ไบต์: TIO
PunPun1000

อาจมีทางลัดที่ไร้สาระบางอย่างเช่นการนับจำนวนหรือใช้ลอการิทึมของความยาวเพื่อรับความยาวของสตริงย่อยที่ต้องการ ... ฉันดูเหมือนจะมีความคิดที่ไม่ดีสำหรับเรื่องนี้
JollyJoker

6

Brachylogขนาด9 7 ไบต์

⟦kṫᵐc,Ẹ

ลองออนไลน์!

0 การจัดทำดัชนี

คำอธิบาย

ที่นี่เราส่งอินพุตผ่านตัวแปรเอาต์พุตและเข้าถึงผลลัพธ์ผ่านตัวแปรอินพุต

⟦          The result is the input to a range…
 k         …with the last element removed…
  ṫᵐ       …which when all elements are casted to string…
    c      …and are then concatenated results in the input string
     ,Ẹ    (Append the empty string, this is necessary for it to work in the case where the 
             input is the empty string)


5

Japtet , 8 ไบต์

เริ่มต้นเพื่อจับกับวิธีการทำงานใน Japt

0 การจัดทำดัชนี สามารถรับอินพุตเป็นสตริงจำนวนเต็มหรืออาร์เรย์ที่มีองค์ประกอบ 0 หรือ 1

_o ´U}a

ทดสอบมัน


คำอธิบาย

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

_     }a

รับจำนวนเต็มแรก>=0ที่ส่งกลับจริงเมื่อผ่านฟังก์ชั่นที่ ...

o

สร้างอาร์เรย์ของจำนวนเต็มตั้งแต่01 ถึงน้อยกว่าจำนวนเต็มปัจจุบัน ...

¬

เข้าร่วมกับสตริง ...

¥U

Uตรวจสอบว่าสตริงเพื่อความเท่าเทียมกันด้วย

เอาท์พุทโดยนัยของจำนวนเต็มผล


ทางเลือก 8 ไบต์

ÊÇo ¬ÃbU

ทดสอบมัน


4

ถ่าน 13 ไบต์

I⌕E⁺ψθ⪫EκIλωθ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

          λ     Inner map variable (μ inner map index also works)
         I      Cast to string
        κ       Outer map index
       E        Map over implicit range
      ⪫    ω    Join result
     θ          Input string
   ⁺ψ           Plus an extra character
  E             Map over each character
 ⌕          θ   Find the index of the original string
I               Cast from integer to string
                Implicit print

4

Haskell, 40 37 ไบต์

f s=[n|n<-[0..],(show=<<[0..n])>s]!!0

ฟังก์ชั่นที่ย้อนกลับช่วง zero-based

ขอบคุณ Laikoni สำหรับการบันทึก 3 ไบต์!

ลองออนไลน์


1
37 ไบต์พร้อมความเข้าใจในรายการ: f s=[n|n<-[0..],(show=<<[0..n])>s]!!0.
Laikoni

1
|m<-n+1=s!mและเพียงแค่พูดถึงมันคุณสามารถบันทึกไบต์โดยใช้รูปแบบยามสอง:
Laikoni


2

JavaScript (ES6), 32 31 ไบต์

บันทึก 1 ไบต์ขอบคุณ Challenger5

f=(s,r=n='')=>r<s?f(s,r+n++):+n

กรณีทดสอบ


1
อีกครั้งคุณสามารถเปรียบเทียบสตริงพจนานุกรมหรือไม่
แยกผลไม้

ฉันจะแนะนำการแกง แต่ดูเหมือนว่าจะไม่มีฉันทามติอีกต่อไป :(
Shaggy


1
@EriktheOutgolfer มาตรฐาน currying ดี แต่ปุยหมายถึงรูปแบบพิเศษนี้ curryingที่ต้องใช้สายดังกล่าวเป็นหรือแม้กระทั่งf(payload_param)() f(payload_param)(some_constant)(บังเอิญฉันไม่แน่ใจว่าจะทำงานในกรณีนี้เพราะฉันต้องการทั้งสองrและnจะเริ่มต้น)
Arnauld

2

Mathematica ขนาด 46 ไบต์

Array[""<>ToString/@Range@#&,2^15]~Position~#&

1 การจัดทำดัชนี

อินพุต

[ "12345678910"]


2

Ruby , 51 50 46 ไบต์

->n{(0..4e4).map{|x|(1..x).to_a.join}.index n}

(นี่เป็นโปรแกรม Ruby ครั้งแรกของฉันดังนั้นมันจะต้องง่ายต่อการเล่นกอล์ฟเพิ่มเติม)

-4 ไบต์ขอบคุณ @Nnnes


1
คุณไม่จำเป็นต้องชุดสุดท้ายของวงเล็บ: =>.index(gets) .index getsคุณสามารถใช้4e4แทน8**5แม้ว่าจะทำให้มันทำงานช้าลง โดยทั่วไปแล้วมันก็โอเคและมักจะบันทึกไม่กี่ไบต์ในการใช้ lambdas แบบไม่ระบุชื่อสำหรับคำตอบของ Ruby: ลองออนไลน์! (ผมเปลี่ยนวงเงิน 100 เพื่อให้มันไม่ได้หมดเวลา.)
Nnnes

2

Python 2 , 43 ไบต์

f=lambda s,i=1,r='':r<s and-~f(s,i+1,r+`i`)

ลองออนไลน์!


Python 2 , 43 ไบต์

f=lambda s,i=1:s>''and-~f(s[len(`i`):],i+1)

ลองออนไลน์!


Pythonขนาด 46 ไบต์

lambda s:s[-sum(i*'0'in s for i in range(5)):]

ลองออนไลน์!

กลยุทธ์ที่แตกต่าง รับจำนวนอักขระจากท้ายเท่ากับความยาวของการทำงานที่ใหญ่ที่สุดของ0ใน


Pythonขนาด 46 ไบต์

f=lambda s,c=0:c*'0'in s and f(s,c+1)or s[-c:]

ลองออนไลน์!

เวอร์ชั่นแบบเรียกซ้ำข้างต้น


"กลยุทธ์ที่แตกต่าง" ของคุณ (ฉลาดมาก btw) ทำงานสำหรับช่วง 0 ตามที่จำเป็นในคำสั่งของความท้าทายหรือไม่ คุณควรเปลี่ยนบิตภายในเป็น... i*'0'in s[1:] for ...หรืออะไรแบบนั้น?
Luca Citi

@LucaCiti มันใช้งานได้กับช่วงที่ 1 และความท้าทายให้เราเลือก
xnor

แน่นอนว่าคุณพูดถูก ฉันดูเฉพาะคำอธิบายเริ่มต้นและพลาดส่วนที่อนุญาตสำหรับช่วงที่ใช้ 1
Luca Citi

2

R , 47 ไบต์

n=nchar(scan(,""));which(cumsum(nchar(1:n))==n)

ลองออนไลน์!

1 การจัดทำดัชนี


3
ใช้"if"แทนifelse
Giuseppe

จุดดี! แต่ตอนนี้ OP ได้ลบข้อกำหนดที่จะจัดการกับเคส 0 ตัวดังนั้นฉันสามารถกำจัดบิตนั้นได้ทั้งหมด ...
user2390246

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

1
n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
JAD

2

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

-6 ไบต์ขอบคุณที่NGN

{,\⍕¨⍳≢⍵}⍳⊂

ลองออนไลน์!

⍳⊂ ค้นหาɩ ndex ของอาร์กิวเมนต์ทั้งหมดใน

{} ผลลัพธ์ของฟังก์ชั่นนิรนาม:

 ความยาวของการโต้แย้ง

ไม่ทราบจนกว่าจะถึงวันนั้น

⍕¨ รูปแบบ (stringify) แต่ละรายการ

,\ เรียงต่อกันสะสมของผู้


โอ้ฉันลืมไปเลยว่าฉันทำได้ดี
Zacharý

{,\⍕¨⍳≢⍵}⍳⊂(11 ตัวอักษร)
NGN

@ngn Silly me แน่นอน!
อดัม

2

Perl 5 , 19 ไบต์

รหัส 18 ไบต์ + 1 -pสำหรับ

$i++while s/$i\B//

ใช้การจัดทำดัชนีแบบอิง 1 -7 ไบต์ขอบคุณที่ @ nwellnhof 's มากวิธีการที่ดีกว่า!

ลองออนไลน์!

คำอธิบาย

$\เป็นตัวแปรพิเศษที่printed อัตโนมัติหลังจากแต่ละคำสั่งดังนั้นโดยใช้เพื่อเก็บหมายเลขของเราเราไม่จำเป็นต้องอัปเดต$_(ซึ่งพิมพ์โดยอัตโนมัติเป็นส่วนหนึ่งของการทำงานของการ-pตั้งค่าสถานะ) เพื่อให้มีการส่งออกที่ต้องการ จากนั้นในขณะที่อินพุตเริ่มต้นด้วย$\ให้ลบออกและredoโปรแกรมซึ่งเพิ่มขึ้นอีกครั้ง$\และแทนที่มัน เมื่อไม่พบหมายเลขที่จุดเริ่มต้นของสตริงเราจะทำ! ในที่สุดการลดลง$\ดังนั้นเราจึงมีจำนวนสุดท้ายในช่วง


แล้วประมาณ$i++while s/$i\B//18 + 1 ไบต์ล่ะ?
nwellnhof

@nwellnhof ดีกว่ามาก ! ฉันคิดว่าฉันเริ่มต้นเส้นทางที่ซับซ้อนมากขึ้นในขณะที่ฉันตอบ 0 ดัชนีก่อนอื่น ... ขอบคุณ!
Dom Hastings



1

CJam , 13 ไบต์

q:Q,),{,sQ=}#

เครื่องหมายจุลภาคมากมาย ...

ลองออนไลน์!

คำอธิบาย

q:Q            Read the input and store it in Q
   ,           Get its length
    ),         Get the range 0..n
      {,sQ=}#  Find the index of the first number in the range to satisfy this block:
       ,        Get the range 0..(number)-1
        s       Stringify it
         Q=     Check if it equals the input

1

Perl 6 ,  30 28  27 ไบต์

{first :k,*eq$_,[\~] '',0...*}

ทดสอบมัน

{[\~]('',0...*).first($_):k}

ทดสอบมัน

{first :k,$_,[\~] '',0...*}

ทดสอบมัน

ขยาย:

{  # bare block lambda with implicit parameter 「$_」

  first       # find the first one
  :k,         # return the index into the Seq instead of what matched
  $_          # that matches the input

  # from the following

  [\~]        # triangle reduce using &infix:«~» (string concatenation)

              # a Seq
    '',       #   that starts with an empty Str
    0         #   then a 0
    ...       #   generate values
    *         #   indefinitely
}

'',0...*ผลิตลำดับอนันต์ของค่า'', 0, 1, 2, 3...

[\~] '',0...* สร้างลำดับที่ไม่สิ้นสุดของอินพุตที่เป็นไปได้ทั้งหมด

""
"0"
"01"
"012"
"0123"
...

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


1

Pyth , 11 10 ไบต์

1 การจัดทำดัชนี

fqQ|jkSTk0

ลองที่นี่

หากสตริงที่ว่างเปล่าสามารถถูกละเว้นสิ่งนี้สามารถสั้นลงเหลือ6 ไบต์ :

fqQjkS

-1 ไบต์ขอบคุณ@Mnemonic


?QfqQjkUT)1สามารถทำมันได้ใน 11 เช่นกัน แต่ฉันรู้สึกเหมือนว่าบางคำสั่งสามารถเล่นกอล์ฟเป็นไบต์ได้ ความคิดใด ๆ
เดฟ

คุณสามารถบันทึกไบต์โดยใช้jkแทน s`m
ช่วยในการจำ

1

CJam, 14 12 11 bytes

q,_){,s,}%#

ลองออนไลน์

q,   e# Get length of input string
_)   e# Duplicate length, increment by 1
{    e# Generate array by mapping [0,1,2,...,length] using the following function: 
,    e# Generate range [0,x] (x is the int we're mapping)
s    e# Convert range to string (e.g [0,1,2,3] => "0123"
,    e# Get the length of that string
}%   e# Map the int to the length of it's range string
#    e# Return the index of the length of the input string in the generated array

1

Dyvil , 42 38 ไบต์

s=>"".{var r=0;while($0!=s)$0++=r++;r}

อัลกอริทึมเช่นเดียวกับคำตอบของ Java นี้ยกเว้น (ab) ใช้ความเชี่ยวชาญด้านวากยสัมพันธ์ของ Dyvil บางส่วน

คำอธิบาย:

s=>          // starts a lambda expression with one parameter
"".{         // begins a brace access expression, the value before the '.'
             // is available within the braces as a variable named '$0'
var r=0;     // variable with inferred type int
while($0!=s) // while the accumulator $0 does not (structurally) equal s
$0++=r++     // concatenate $0 and the String representation of r,
             // then store the result in $0 and increment r by 1
;            // end of while
r}           // return r as the result of the lambda

  • 4ไบต์ที่บันทึกไว้โดยใช้นิพจน์การเข้าถึงวงเล็บปีกกาแทนที่จะเป็นตัวแปรสำหรับตัวสะสม

ภาษาที่ยอดเยี่ยม !!
Robert Fraser

0

MATL , 14 ไบต์

`@q:VXzGX=~}@q

1 การจัดทำดัชนี

ลองออนไลน์!

คำอธิบาย

`       % Do...while
  @     %   Push iteration index (1-based), k
  q     %   Subtract 1: gives k-1
  :     %   Range: [1 2 ... k-1]. Will be empty for k=1
  V     %   Convert to string
  Xz    %   Remove spaces
  G     %   Push input
  X=    %   Are the two strings equal?
  ~     %   Negate. This is the loop condition. If true: next iteration
}       % Finally (execute at the end of the loop)
  @     %   Push k
  q     %   Subtract 1: gives k-1. This is the solution
        % End (implicit). Display (implicit)

1
เดี๋ยวก่อนถ่านชนะ MATL?
Neil

0

C # , 72 ไบต์


ข้อมูล

  • อินพุตอินเทอร์เรย์ String iที่จะถอดรหัส
  • เอาท์พุท Int32จำนวนที่ใช้ในการสร้างอาร์เรย์

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

(string i)=>{int c,p=c=0;for(;p<i.Length;c++)p+=(c+"").Length;return c;}

Ungolfed

( string i ) => {
    int
        c,
        p = c = 0;

    for( ; p < i.Length; c++ )
        p += ( c + "" ).Length;

    return c;
}

อ่านได้ไม่ดี

// Takes the string with the int array
( string i ) => {
    int
        c,         // Counter, it will count how many ints the array has.
        p = c = 0; // Padding, it will help jumping from int to int on the string.

    // Start counting. If 'i' is empty, the 'c' will be 0.
    for( ; p < i.Length; c++ )

        // Increase the number of digits with the length of 'c'.
        p += ( c + "" ).Length;

    // Return the counter.
    return c;
}

รหัสเต็ม

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestBench {
    public static class Program {
        private static Func<String, Int32> f = ( string i ) => {
            int
                c,
                p = c = 0;

            for( ; p < i.Length; c++ )
                p += ( c + "" ).Length;

            return c;
        };

        static void Main( string[] args ) {
            List<String>
                testCases = new List<String>() {
                    "0123",
                    "0",
                    "",
                    "0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100",
                };

            foreach(String testCase in testCases) {
                Console.WriteLine($" Input: {testCase}\nOutput: {f(testCase)}\n");
            }

            Console.ReadLine();
        }
    }
}

ข่าว

  • v1.0 - 72 bytes- โซลูชั่นเริ่มต้น

หมายเหตุ

  • ไม่มี

1
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}62 bytes
TheLethalCoder

0

SOGL V0.12 , 11 10 9 ไบต์

1 การจัดทำดัชนี

I∫HΔ∑=?f←

ลองที่นี่!

คำอธิบาย:

I∫         repeat input+1 times
  HΔ         create a range from 1 to the 0-indexed iteration, inclusive
    ∑        join it
     =?      if it's equal to the input
       f←      exit, pushing the 0-indexed counter

.. หรือ 7 ไบต์โดยไม่มีกรณีว่างเปล่า

∫Δ∑=?F←

ลองที่นี่!


0

Aceto , 27 25 ไบต์

ดัชนีแบบ 1

;L[¥
`=]z
MLdI<
r!`;   p

เราread อินพุตและMemorize มัน (และLoad โดยตรงอีกครั้ง), จากนั้นเราก็ลบล้างมัน ( !; นำไปสู่คุณค่าที่แท้จริงสำหรับสตริงว่างเท่านั้น) หากค่านี้เป็นจริง ( `) เราจะข้ามไปยังจุดสิ้นสุด ( ;) ซึ่งเราpใช้ค่าศูนย์โดยปริยาย

มิฉะนั้นเราจะเพิ่มค่าสแต็กปัจจุบัน (เริ่มแรกเป็นศูนย์) ทำซ้ำและวางหนึ่งสำเนาบนสแต็กทางด้านขวาขณะเดียวกันก็ย้ายไปที่นั่น ( Id]) จากนั้นเราสร้างช่วงการลดลง ( z) เข้าร่วมสแต็กเป็นสตริง ( ¥) และย้ายค่า (และเรา) บนสแต็กดั้งเดิมอีกครั้ง ( [) เราLใช้ค่าที่เราจดจำไว้ก่อนหน้านี้ (อินพุต) และเปรียบเทียบกับสตริงนี้ หากเท่ากับเราข้ามไปยังจุดสิ้นสุดอีกครั้งโดยพิมพ์ค่า "counter" ปัจจุบัน ( =`;)

มิฉะนั้นพื้นที่ว่างจำนวนมากจะถูกสำรวจจนกว่าเส้นโค้งของฮิลแบร์ตจะกระทบกับ<ที่วาง IP ไว้ด้านบนIอีกครั้งโดยเพิ่มตัวนับและทดสอบอีกครั้ง



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