จิงโจ้กระโจน


36

backstory

คำเตือน: อาจมีข้อมูลเกี่ยวกับจิงโจ้

จิงโจ้สำรวจหลายขั้นตอนของการพัฒนา เมื่อพวกเขาโตขึ้นและแข็งแรงขึ้นพวกเขาสามารถกระโดดได้สูงขึ้นเรื่อย ๆ และสามารถกระโดดได้มากขึ้นก่อนที่พวกเขาจะหิว

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

o

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

 o o
o o o

หลังจากระยะที่2จิงโจ้ก็จะดีขึ้นอย่างรวดเร็ว ในแต่ละขั้นตอนต่อมาจิงโจ้สามารถกระโดดได้สูงขึ้นเล็กน้อย (1 หน่วยในการแสดงกราฟิก) และเพิ่มขึ้นสองเท่าหลายเท่า ตัวอย่างเช่นรูปแบบกิจกรรมของจิงโจ้ระยะที่3มีลักษณะเช่นนี้

  o   o   o   o
 o o o o o o o o
o   o   o   o   o

สำหรับขั้นตอนnรูปแบบกิจกรรมประกอบด้วย2 n-1กระโดดรูปตัววีของความสูงn

ตัวอย่างเช่นสำหรับขั้นตอนที่4มี8กระโดดของความสูง4

   o     o     o     o     o     o     o     o
  o o   o o   o o   o o   o o   o o   o o   o o
 o   o o   o o   o o   o o   o o   o o   o o   o
o     o     o     o     o     o     o     o     o

งาน

เขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นที่ใช้จำนวนเต็มบวกnเป็นอินพุตและพิมพ์หรือส่งคืนการแทนค่า ASCII art ของรูปแบบกิจกรรมของstage n kangaroo

อนุญาตให้ใช้ช่องว่างรอบข้างและรหัสยกเว้น ANSI ได้ตราบใดที่รูปแบบมีลักษณะเหมือนกับภาพด้านบน

หากคุณเลือกฟังก์ชั่นที่ส่งคืนผลลัพธ์นั้นจะต้องส่งคืนสตริงหรืออาร์เรย์อักขระเดียวที่แสดงผลลัพธ์ที่เหมาะสมเมื่อพิมพ์ ไม่อนุญาตให้ส่งคืนอาร์เรย์ของสตริง

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

นี่คือ ; คำตอบสั้นที่สุดอาจเป็นไบต์ชนะ!


ฉันต้องการความกระจ่าง คุณบอกว่าคุณสามารถใช้ตัวอักษรใด ๆ oที่จะเป็นตัวแทน คุณสามารถใช้อักขระใด ๆ เพื่อแทนช่องว่างได้ (ตราบเท่าที่มันแตกต่างกันได้หรือไม่
Kodos Johnson

1
ช่องว่างต้องว่างเปล่า คุณสามารถใช้ช่องว่างจริงหรือใช้รหัสควบคุมเพื่อเลื่อนเคอร์เซอร์ไปรอบ ๆ แต่คุณไม่สามารถใช้อักขระที่ไม่ใช่ช่องว่างที่พิมพ์ได้
Dennis

1
codegolf.stackexchange.com/questions/96379/… - ที่เกี่ยวข้อง
Magic Octopus Urn

คำตอบ:


8

05AB1E , 12 10 ไบต์

Îj¹FÐvû},À

คำอธิบาย:

Î              # Push zero and input
 j             # Prepend input - 1 spaces
  ¹F           # Input times do..
    Ð          #   Triplicate the string
     v }       #   Length times do..
      û        #     Palindromize
        ,      #   Pop and print with a newline
         À     #   Rotate the string on to the right

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!


1
น่าสนใจกว่าฉลาดกว่า
Magic Octopus Urn

14

MATLAB, 92 90 86 84 ไบต์

n=input('');p=eye(n)+32;A=repmat([fliplr(p),p,''],1,2^n/2);A(:,n+1:n:end)=[];disp(A)

ลองออนไลน์!

eyeสร้างเมทริกซ์เอกลักษณ์ ถ้าเราพลิกมันและต่อกันดั้งเดิมเช่น[fliplr(p),p]เราได้ (สำหรับn=3):

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

ด้วยการที่repmat(...,1,2^n/2)เราทำซ้ำใน2^(n-1)เวลานี้และได้รับ

0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 ...
1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1

จากนี้เราเพียงแค่ลบคอลัมน์ที่ไม่จำเป็นด้วย A(:,n+1:n:end)=[];


8
ขอแสดงความยินดีกับ 20k !!
Luis Mendo

ขอบคุณค่ะ !
flawr

9

ถ่าน 14 ไบต์

NλP^×λoF⁻λ¹‖O→

ลองออนไลน์!

คำอธิบาย

Nλλปัจจัยการผลิตที่เป็นจำนวนเต็มเข้า P^คือการพิมพ์แบบหลายทิศทาง (SE และ SW) ของ×λo(การคูณสตริงλด้วยo) จากนั้นF⁻λ¹เรียกใช้ a สำหรับλ - 1เวลาวนรอบซึ่ง‖O→สะท้อนให้เห็นถึงสิ่งทั้งหมดไปทางขวาด้วยการทับซ้อน


" P^is a multidirectional print (SE and SW) " เจ๋งนั่นคือสิ่งที่คุณไม่เห็นบ่อยในภาษาการเขียนโปรแกรม!
เควิน Cruijssen


7

Python 2 , 87 ไบต์

n=input()
for i in range(n):print''.join(' o'[abs(j%(2*n)-n)==i]for j in range(1,n<<n))

ลองออนไลน์!

ใช้สูตรสำหรับพิกัด(i,j)ที่มีวงกลมแล้วรวมและพิมพ์กริด มีจำนวนมากของกลิ่นกอล์ฟที่นี่ - ''.joinสองช่วงที่ซ้อนกันforมากกว่าexecจึงมีแนวโน้มที่จะมีการปรับปรุง


7

Python 2, 83 81 ไบต์

n=input()
i=0
exec"s=' '*n+'o'+' '*i;i+=1;print(s[i:-1]+s[:i:-1])*2**~-n+s[i];"*n

ลองออนไลน์!


3
ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี!
Rɪᴋᴇʀ

3
นั่นเป็นการพูดที่น้อยมาก outgolfing xnor ใน Python นั้นไม่สามารถทำได้ขนาดเล็ก ฉันเห็นห้องพักสำหรับการปรับปรุง ห่วงในขณะที่ควรบันทึกไบต์และเคล็ดลับสามารถบันทึกอีกไม่กี่ exec
Dennis

5

Befunge, 98 91 ไบต์

สิ่งนี้ใช้การ,แทนที่oเนื่องจากทำให้เราสามารถบันทึกสองสามไบต์

&::1>\1-:v
+\:v^*2\<_$\1-2*::!+00p*1
:-1_@v0\-g01:%g00:-1<:\p01
 ,:^ >0g10g--*!3g,:#^_$\55+

ลองออนไลน์!

คำอธิบาย

กำหนดหมายเลขสเตจnเราเริ่มต้นด้วยการคำนวณพารามิเตอร์ทั้งสามของรูปแบบต่อไปนี้:

jump_count = 2 ^ (n - 1)
jump_len   = (n - 1) * 2
width      = (jump_len * jump_count) + 1

jump_lenเป็นปกติที่จะหลีกเลี่ยงมันจะเป็นศูนย์สำหรับขั้นตอนที่ 1 จิงโจ้ด้วย:

jump_len += !jumplen    

จากนั้นเราสามารถส่งออกรูปแบบการกระโดดโดยวนซ้ำพิกัดxและyของพื้นที่เอาท์พุทและคำนวณ charater ที่เหมาะสมกับเอาต์พุตสำหรับแต่ละตำแหน่ง Yประสานงานนับลงมาจากn - 1-0 และxประสานงานนับลงมาจากความกว้าง - 1 0 เราตรวจสอบว่าจุดความต้องการที่จะแสดงสูตรการคำนวณดังนี้:

jump_off = x % jump_len
show_dot = (jump_off == y) or (jump_off == (jump_len-y))

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


5

J , 28 25 ไบต์

' o'{~]_&(](|.,}.)"1)=@i.

ที่บันทึกไว้ 3 ไบต์ขอบคุณที่ @ เนอร์โอไบรอัน

นี้จะขึ้นอยู่กับเคล็ดลับ palindrome จากของ @ muddyfish วิธีการแก้ปัญหา

ลองออนไลน์!

คำอธิบาย

' o'{~]_&(](|.,}.)"1)=@i.  Input: integer n
                       i.  Form the range [0, 1, ..., n-1]
                     =@    Equality table with itself.
                           Creates an identity matrix of order n
      ]                    Get n
       _&(          )      Repeat n times on x = identity matrix
           (     )"1         For each row
            |.                 Make a reversed copy
               }.              Get a copy with the head removed
              ,                Append them
          ]                  Use that as the new value of x
' o'{~                     Index into the char array

วิธีการสำรองสำหรับ 31 ' o'{~3 :'(}."1,.~|."1)^:y=i.y'ไบต์: ฉันหวังว่าฉันจะสามารถหาวิธีที่จะเอาคำกริยาที่ชัดเจน ... ^:ชุน
Conor O'Brien

@ ConorO'Brien ขอบคุณที่จะช่วยฉันคิดว่ามันจะสั้นลงถ้าเงียบ
ไมล์

@ ConorO'Brien ฉันทำมันโดยปริยายมันสั้นกว่าจริง ๆ !
ไมล์

! น่ากลัว นี่มันสุดยอดมาก ฉันลืมการใช้ dyadic ของu&v- ค่อนข้างดี
Conor O'Brien


4

Haskell , 100 ไบต์

k 1="o"
k n|n<-n-1,m<-n*2=unlines[[last$' ':['o'|mod c m`elem`[m-r,r]]|c<-[0..m*2^n]]|r<-[n,n-1..0]]

ลองออนไลน์! การใช้งาน: k 3.

คำอธิบาย:

ป.ร. ให้ไว้แถวrคอลัมน์cและถูกตั้งค่าถ้าเท่ากับหรือ รายการความเข้าใจด้านนอกสุดกำหนดช่วงของจากถึงหนึ่งถัดไปกำหนดช่วงของจากถึงและภายในสุดทำหน้าที่กลับมาตามเงื่อนไขหากสูตรข้างต้นเป็นจริงและเป็นอย่างอื่น อัตราผลตอบแทนนี้รายการของสตริงซึ่งจะกลายเป็น newline เดียวแยกออกจากกันโดยสตริง สำหรับฟังก์ชั่นนี้จะทำให้เกิดข้อผิดพลาดการหารด้วยศูนย์ดังนั้นกรณีนี้จะถูกจัดการอย่างชัดเจนในบรรทัดแรกm = 2(n-1)oc mod mrm-rrn-10c0m*2^(n-1)'o'' 'unlinesn=1


ฉันชอบ['o'|mod c m`elem`[m-r,r]]ส่วนนี้จริงๆ!
ข้อบกพร่อง

4

C #, 180, 173 171 ไบต์

จะไม่ชนะสิ่งนี้โพสต์สำหรับผู้แข่งขัน C # คนอื่น ๆ เป็นสิ่งที่พวกเขาสามารถเอาชนะได้

n=>{var s=new string[n];for(int a=-1,j=0,i,m=n-1,x=m;j<=m*(Math.Pow(2,n)*n+1);){i=j++%n;s[i]+=x==i?"o":"_";if(i==m&n>1){x+=a;a*=x%m==0?-1:1;}}return string.Join("\n",s);};

โปรแกรมที่สมบูรณ์:

using System;
public class P
{
    public static void Main()
    {
        Func<int, string> _ = n =>
        {
            var s = new string[n];
            for (int a = -1, j = 0, i, m = n - 1, x = m; j <= m * (Math.Pow(2, n) * n + 1);)
            {
                i = j++ % n;
                s[i] += x‌​ == i ? "o" : "_";
                if (i == m & n > 1)
                {
                    x += a;
                    a *= x % m == 0 ? -1 : 1;
                }
            }
            return string.Join("\n", s);
        };

        Console.Write(_(4));
        Console.ReadKey();
    }
}

แก้ไข: -7 ไบต์ขอบคุณ @KevinCruijssen

แก้ไข: -2 ไบต์ทำให้ง่ายขึ้นถ้า


1
+1 สิ่งที่ต้องตีกอล์ฟ: ints สามารถวางไว้ใน for-loop และคุณยังสามารถเพิ่ม,i; คุณสามารถนำมาใช้iแทนn-1หลังจากการตรวจสอบถ้า; ||สามารถ|; j++สามารถถอดออกและสามารถเพิ่มไปยัง++ jดังนั้นโดยรวม: (n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};( 173 ไบต์ )
Kevin Cruijssen

@KevinCruijssen เยี่ยมมาก! ฉันจะอัปเดตเมื่อฉันกลับมาทำงาน
CSharpie

@KevinCruijssen ฉัน allready แข็งแรงเล่นกอล์ฟออก||และ&&แต่เก็บไว้แล้วในโปรแกรมที่สมบูรณ์
CSharpie

3

Pyth , 30 ไบต์

jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^

โปรแกรมที่รับอินพุตของจำนวนเต็มและพิมพ์ผลลัพธ์ การใช้เครื่องหมายคำพูดแทน"o

ลองออนไลน์!

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

jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^    Program. Input: Q
jC.<V*]+*dtQNh*tQ^2Q*+JUQtP_J^QQ  Implicit input fill
      ]                           Yield a one-element list, A
        *dtQ                      cotaining Q-1 spaces
       +    N                     appended with a quote mark.
             h*tQ^2Q              Yield 1+(Q-1)*2^Q
     *                            Repeat A that many times, giving B
                       UQ         Yield [0, 1, 2, ..., Q-1]
                      J           (Store that in J)
                     +   tP_J     Append the reverse of J, discarding the first and last
                                  elements
                    *        ^QQ  Repeat the above Q^Q times, giving C
    V                             Vectorised map. For each pair [a,b] from B and C:
  .<                               Cyclically rotate a left by b characters
 C                                Transpose
j                                 Join on newlines
                                  Implicitly print

3

Python 2 , 115 113 108 98 ไบต์

lambda n:'\n'.join(map(''.join,zip(*[' '*abs(i)+'o'+~-n*' 'for i in range(-n+1,n-1)*2**~-n])))+'o'

ลองออนไลน์!

ใช้range(-n+1,n-1)เพื่อสร้างจำนวนช่องว่างที่แน่นอนระหว่างด้านล่างและoเพื่อสร้าง

  o
 o
o
 o

จากนั้นจึงเพิ่มการคัดลอกเพิ่มเติมหมุนทุกอย่าง90ºและต่อท้ายoที่ด้านล่างขวา


3

J , 58 47 ไบต์

' o'{&:>~[:(,.}."1)&.>/(2^<:)#<@(|.,.}."1)@=@i.

บันทึก 11 ไบต์โดยใช้แนวคิดเมทริกซ์เอกลักษณ์จาก @ flawr's การแก้ปัญหา

ลองออนไลน์!

แอปพลิเคชั่นคำจำกัดความที่ตรงไปตรงมา

คำอธิบาย

สำหรับn = 3, สร้างเมทริกซ์เอกลักษณ์ของการสั่งซื้อn

1 0 0
0 1 0
0 0 1

จากนั้นจึงทำการมิเรอร์

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

ทำซ้ำที่ 2 n -1ครั้งและวางส่วนหัวของแต่ละแถวบนรายการที่ซ้ำกัน

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

ใช้ค่าเหล่านั้นเป็นดัชนีลงในอาร์เรย์ถ่าน[' ', 'o']เพื่อส่งออกอาร์เรย์ถ่าน 2 มิติ

  o   o   o   o  
 o o o o o o o o 
o   o   o   o   o


3

เยลลี่ 11 ไบต์

ŒḄ¡ḶUz1Ṛa⁶Y

TryItOnline!

อย่างไร?

อักขระที่พิมพ์ได้ที่ใช้คือ 0ตัวอักษรที่พิมพ์ได้ใช้

สร้างตามวิธีการของเดนนิสเพื่อตอบคำถามก่อนหน้าของเขาเกี่ยวกับเรื่องจิงโจ้

ŒḄ¡ḶUz1Ṛa⁶Y - Main link: n                      e.g. 3
ŒḄ          - bounce, initial implicit range(n) e.g. [1,2,3,2,1]
  ¡         - repeat n times                    e.g. [1,2,3,2,1,2,3,2,1,2,3,2,1,2,3,2,1]
                  i.e. [1,2,3,2,1] bounced to [1,2,3,2,1,2,3,2,1] bounced to [1,2,3,2,1,2,3,2,1,2,3,2,1,2,3,2,1]
   Ḷ        - lowered range (vectorises)        e.g. [[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0],[0,1],[0,1,2],[0,1],[0]]
    U       - upend (vectorises)                e.g. [[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0],[1,0],[2,1,0],[1,0],[0]]
     z1     - transpose with filler 1
       Ṛ    - ...and reverse                    e.g. [[1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1],
                                                      [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
                                                      [0,1,2,1,0,1,2,1,0,1,2,1,0,1,2,1,0]]
        a⁶  - logical and with space character (all non-zeros become spaces)
          Y - join with line feeds              e.g.    0   0   0   0  
                                                       0 0 0 0 0 0 0 0 
                                                      0   0   0   0   0

2
ดี สิ่งนี้เชื่อมโยงกับโซลูชันอ้างอิงของฉัน, ŒḄ¡Ṭ€z0o⁶ṚY.
Dennis



2

Perl 6 , 104 93 88 ไบต์

->\n{my @a;@a[$_;$++]="o" for [...] |(n-1,0,n-1)xx 2**n/2;say .join for @a».&{$_//" "}}

แทรกoลงในอาร์เรย์ 2D แล้วพิมพ์ออกมา


2

05AB1E , 16 ไบต์

L<¹Fû}ð×'o«.BøR»

ลองออนไลน์!

ทำไมและอย่างไร

                 # Example input of n=2.
L<               # [0,1] (Push [1..a], decrement).
  ¹Fû}           # [0,1,0,1,0] (Palindromize n times).
      ð×'o«      # ['o',' o','o',' o','o'] (Push n spaces, append o's).
           .Bø   # ['o ',' o','o ',' o','o '] (Pad with spaces into 2D array, transpose).
              R» # Reverse, join and print.

1

Java 8, 254 ไบต์

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

n->{if(n==1)return"o";int k,x,y,m=n+n-2;char[][]p=new char[n][m];for(y=0;y<n;++y)for(x=0;x<m;)p[y][x++]=' ';for(k=0;k<m;++k)p[k<n?n-k-1:k-n+1][k]='o';String s="";for(y=0;y<n;++y){for(k=0;k<1<<(n-1);++k)for(x=0;x<m;)s+=p[y][x++];if(y==n-1)s+='o';s+='\n';}

Ungolfed:

import java.util.function.*;

public class LeapingKangaroos {

  public static void main(final String[] args) {
    for (int i = 1; i <= 4; ++i) {
      System.out.println(toString(n -> {
        if (n == 1) {
          return "o";
        }
        int k, x, y, m = (n + n) - 2;
        char[][] p = new char[n][m];
        for (y = 0; y < n; ++y) {
          for (x = 0; x < m;) {
            p[y][x++] = ' ';
          }
        }
        for (k = 0; k < m; ++k) {
          p[k < n ? n - k - 1 : (k - n) + 1][k] = 'o';
        }
        String s = "";
        for (y = 0; y < n; ++y) {
          for (k = 0; k < (1 << (n - 1)); ++k) {
            for (x = 0; x < m;) {
              s += p[y][x++];
            }
          }
          if (y == (n - 1)) {
            s += 'o';
          }
          s += '\n';
        }
        return s;
      } , i));
      System.out.println();
      System.out.println();
    }
  }

  private static String toString(final IntFunction<String> func, final int level) {
    return func.apply(level);
  }

}

ผลลัพธ์ของโปรแกรม:

o

 o o
o o o


  o   o   o   o 
 o o o o o o o o
o   o   o   o   o


   o     o     o     o     o     o     o     o  
  o o   o o   o o   o o   o o   o o   o o   o o 
 o   o o   o o   o o   o o   o o   o o   o o   o
o     o     o     o     o     o     o     o     o

0

PHP, 157 ไบต์

for($i=$n=$argv[1],$r=str_repeat;$i>0;)echo$r($r(' ',$i-1).'o'.$r(' ',2*$n-2*$i-1).($i==$n|$i==1?'':'o').$r(' ',$i-2),2**($n-1)).($i--==1&$n!=1?'o':'')."\n";

Ungolfed:

for($i=$n=$argv[1];$i>0;) {

    // Spacing from beginning of pattern to first 'o'   
    $o  = str_repeat(' ',$i-1); 

    // First 'o' for the ascent
    $o .= 'o'; 

    // Spacing between ascent and descent
    $o .= str_repeat(' ',2*$n-2*$i-1); 

    // Second 'o' for the descent, unless we are at the apex or the bottom
    $o .= ($i==$n|$i==1?'':'o'); 

    // Spacing to the end of the pattern
    $o .= str_repeat(' ',$i-2); 

    // Repeat the pattern 2^(n-1) times
    echo str_repeat($o, 2**($n-1)); 

    // Output final 'o' if we are at the bottom in the last pattern
    echo $i--==1&$n!=1?'o':''; 

    // End of line 
    echo "\n"; 

}

คุณสามารถเปลี่ยนทุก'o'ที่มี1คนและทุกคนด้วย'' 0หวังว่าการทำงานนอกจากนี้ช่องว่างจะถูกแทนที่ด้วยหรือO 9ที่สำคัญคือรูปแบบตามกฎ แต่ตรวจสอบก่อน
Ismael Miguel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.