การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ

คำถาม & คำตอบสำหรับผู้ชื่นชอบการเขียนโปรแกรมปริศนา

6
คุณสามารถเข้าถึงหมายเลขนี้โดยเพิ่มและจัดเรียงใหม่ได้หรือไม่?
แรงบันดาลใจจากคำถามนี้ใน Math.SE เริ่มต้นด้วย1คุณสามารถดำเนินการหนึ่งในสองอย่างต่อไปนี้ซ้ำ ๆ เพิ่มจำนวนเป็นสองเท่า หรือ จัดเรียงตัวเลขใหม่ตามที่คุณต้องการยกเว้นว่าจะไม่มีศูนย์นำหน้า รับตัวอย่างจากโพสต์ Math.SE ที่เชื่อมโยงเราสามารถเข้าถึง1000ผ่านขั้นตอนต่อไปนี้: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 125, 250, 500, 1000 คุณสามารถเข้าถึงหมายเลขใดในกระบวนการนี้และทางออกที่สั้นที่สุดคืออะไร ความท้าทาย กำหนดจำนวนเต็มบวกNกำหนดลำดับที่สั้นที่สุดที่เป็นไปได้ของจำนวนเต็มถึงNกระบวนการข้างต้นถ้าเป็นไปได้ หากมีวิธีการแก้ปัญหาที่ดีที่สุดหลายอย่างให้ส่งออกหนึ่งในนั้น หากไม่มีลำดับดังกล่าวคุณควรส่งรายการว่าง ลำดับอาจอยู่ในรูปแบบของสตริงหรือรายการที่สะดวกไม่คลุมเครือ คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและส่งผลลัพธ์ผ่าน STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์ นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ กรณีทดสอบ นี่คือรายการของตัวเลขที่เข้าถึงได้ทั้งหมดและรวมถึง 256 คอลัมน์แรกคือหมายเลข (อินพุตของคุณ) คอลัมน์ที่สองคือจำนวนขั้นตอนที่เหมาะสมที่สุด (ซึ่งคุณสามารถใช้เพื่อตรวจสอบความถูกต้องของโซลูชันของคุณ) และที่สาม คอลัมน์เป็นลำดับที่เหมาะสมที่สุดในการเดินทาง: …

30
ไมโครเวฟของฉันจะทำงานได้นานแค่ไหน?
ฉันหิว. ลองทำอะไรซักอย่างที่ไมโครเวฟกันเถอะ กำหนดอินพุตตัวเลขระหว่าง 1 ถึง 4 หลักส่งออกจำนวนวินาทีที่ไมโครเวฟควรทำงาน รายละเอียด เคล็ดลับคือการหาว่าผู้ใช้ป้อนวินาทีหรือรวมของวินาทีและนาที สถานที่และสถานที่นับสิบควรตีความว่าเป็นวินาทีและสถานที่นับแสนควรเป็นนาที ตัวอย่างเช่นค่า1234ควรถูกตีความเป็น 12 นาที, 34 วินาทีและ9876ควรเป็น 98 นาที, 76 วินาที การพิมพ์130และ90ควรส่งผลให้เวลาทำอาหาร 90 วินาที ต่อไปนี้เป็นอินพุตและเอาต์พุตอื่นสองสามรายการ: 1 = 1 11 = 11 111 = 71 1111 = 671 9 = 9 99 = 99 999 = 639 9999 = 6039 กฎระเบียบ นี่คือโค้ดกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ ไม่อนุญาตช่องโหว่มาตรฐาน …
33 code-golf  number 

5
ความแตกต่างทางประวัติศาสตร์ระหว่าง `/` และ `÷ 'ในนิพจน์ทางคณิตศาสตร์
บทนำ: แรงบันดาลใจจากการอภิปรายที่มีอยู่แล้วที่เกิดขึ้นมานานหลายปีเกี่ยวกับการแสดงออก2)6 ÷ 2 ( 1 + 2 )6÷2(1+2)6÷2(1+2) ด้วยการแสดงออกที่คณิตศาสตร์ได้อย่างรวดเร็วจะเห็นว่าคำตอบที่ถูกต้องคือในขณะที่คนที่มีพื้นหลังเป็นคณิตศาสตร์ที่เรียบง่ายจากโรงเรียนอย่างรวดเร็วจะเห็นว่าคำตอบที่ถูกต้องคือ9ดังนั้นข้อโต้แย้งนี้และคำตอบที่ต่างกันมาจากไหน? มีสองกฎระเบียบที่ขัดแย้งกันในวิธีการที่เป็นลายลักษณ์อักษร หนึ่งเนื่องจากเป็นส่วนหนึ่งและเป็นหนึ่งเนื่องจากสัญลักษณ์การหาร6 ÷ 2 ( 1 + 2 )6÷2(1+2)6÷2(1+2)1119996 ÷ 2 ( 1 + 2 )6÷2(1+2)6÷2(1+2)2(÷ แม้ว่าทั้งนักคณิตศาสตร์และ 'คนธรรมดา' จะใช้PEMDAS (วงเล็บ - เลขชี้กำลัง - การหาร / การคูณ - การบวก / การลบ) สำหรับนักคณิตศาสตร์การแสดงออกจะได้รับการประเมินเช่นนี้ด้านล่างเพราะเป็นตัวอย่างเช่น monomial อาคา " คำเดียวเนื่องจากการคูณโดยนัยโดยการตีข่าว " (และดังนั้นส่วนหนึ่งของใน) ซึ่งจะได้รับการประเมินที่แตกต่างจาก (ทวินามอาคาสองคำ):2 ( …

9
อัลกอริทึมการเรียงลำดับ
มี "อัลกอริทึมการเรียงลำดับ" บางครั้งเรียกว่าการเรียงลำดับสตาลินเพื่อเรียงลำดับรายการคุณเพียงแค่ลบองค์ประกอบออกจากรายการจนกว่าจะเรียงลำดับตามลำดับที่เพิ่มขึ้น ตัวอย่างเช่นรายการ [1, 2, 4, 5, 3, 6, 6] เมื่อ "เรียง" โดยใช้การเรียงลำดับสตาลินจะกลายเป็น [1, 2, 4, 5, 6, 6] ทั้งสามถูกลบเพราะมันไม่เป็นระเบียบ ตอนนี้เห็นได้ชัดว่ามีหลายวิธีในการลบองค์ประกอบเพื่อจัดเรียงรายการ ตัวอย่างเช่นรายการใด ๆ ที่มีองค์ประกอบน้อยกว่าสองรายการจะต้องเรียงลำดับดังนั้นเพียงแค่ลบองค์ประกอบมากพอที่สุ่มสี่สุ่มห้าเราสามารถเรียงลำดับรายการได้เสมอ เนื่องจากเป็นกรณีนี้เราจึงสนใจเฉพาะผลลัพธ์ที่ยาวที่สุดเท่าที่เป็นไปได้จากการเรียงลำดับของสตาลิน งานของคุณจะใช้รายการของจำนวนเต็มบวกและส่งออกความยาวของรายการเรียงลำดับ (เพิ่มขึ้น) ที่ยาวที่สุดที่สามารถมาถึงได้โดยการเอาองค์ประกอบออกจากรายการต้นฉบับ นั่นคือความยาวของรายการย่อยที่เรียงลำดับยาวที่สุด (อาจไม่ต่อเนื่องกัน) รายการที่เรียงลำดับสามารถมีองค์ประกอบเดียวกันมากกว่าหนึ่งครั้งในแถว คุณไม่จำเป็นต้องสนับสนุนรายการว่างเปล่าเว้นแต่ว่าโปรแกรมของคุณจะว่างเปล่า เกณฑ์การให้คะแนน คำตอบของคุณจะได้รับคะแนนตามความยาวของการเรียงลำดับสตาลินที่ยาวที่สุดเท่าที่จะเป็นไปได้ โปรแกรมจะถูกตีความเป็นลำดับของไบต์แทนที่จะเป็นตัวอักษรและลำดับของโปรแกรมจะเป็นแบบธรรมชาติที่เกิดขึ้นโดยการตีความจำนวนไบต์เป็นตัวเลข คะแนนต่ำกว่าดีกว่า นี่ไม่ใช่รหัสกอล์ฟ ต่อไปนี้เป็นเครื่องมือที่ไม่ซับซ้อนเพื่อช่วยให้คุณได้คะแนนคำตอบของคุณ กรณีทดสอบ [1, 2, 4, 5, 3, 6, 6] -> 6 [19, …

5
ขับไล่ใบหน้าของคิวบ์แบบสมมาตรตามแนว XYZ
Sandbox สำหรับวัตถุประสงค์ของงานปัจจุบันคิวบ์ความยาวของหน่วยจะแสดงในรูปแบบเอียงด้วยสัญลักษณ์ ASCII ดังต่อไปนี้: +-----+ / /| +-----+ | | | + | |/ +-----+ + สำหรับจุดยอด -สำหรับขอบ X ความยาวหน่วยตามแนว X แสดงด้วยห้า-ระหว่างสองจุดยอด |สำหรับขอบ Y ความยาวของหน่วยตาม Y จะถูกแทนด้วยสอง|ระหว่างจุดยอดสองจุด /สำหรับขอบ Z ความยาวหน่วยตามแนว Z จะถูกแทนด้วยหนึ่ง/ระหว่างสองจุดยอด จุดยอดจะวาดเฉพาะเมื่อระนาบทั้งสามตัดกัน ขอบจะวาดเฉพาะเมื่อระนาบสองจุดตัดกัน เมื่อหน้าหน่วยถูกอัดออกมาใบหน้าจะถูกชดเชยด้วยความยาวหน่วยจากตำแหน่งเดิมและสร้างขอบใหม่สี่อันสำหรับแต่ละทิศทาง (บวกและลบ) คุณสามารถนึกถึงการอัดขึ้นรูปเมื่อวาดแกนของระบบพิกัดคาร์ทีเซียน 3D ที่แต่ละแกนถูกแสดงเป็นลูกบาศก์ที่มีส่วนตัดขวาง 1x1 และความยาวnห่างจาก (0,0,0) อัดโดย 1 ตาม X: +-----------------+ / /| +-----------------+ …

19
โบสถ์ Booleans
โบสถ์บูลีน โบสถ์บูลเป็นฟังก์ชันที่ผลตอบแทนxสำหรับความจริงและyเท็จที่xเป็นอาร์กิวเมนต์แรกฟังก์ชั่นและyเป็นอาร์กิวเมนต์ที่สองให้กับฟังก์ชั่น ฟังก์ชั่นเพิ่มเติมสามารถประกอบได้จากฟังก์ชั่นเหล่านี้ซึ่งเป็นตัวแทนของการดำเนินงานand not or xorและimpliesตรรกะ ท้าทาย สร้าง booleans ริสตจักรและand not or xorและimpliesประตูโบสถ์ในภาษาที่คุณเลือก and orและxorควรใช้สองฟังก์ชั่น (แทนบูลีนของโบสถ์) และส่งคืนฟังก์ชัน (แทนบูลีนของโบสถ์อื่น) ในทำนองเดียวกันnotควรกลับฟังก์ชั่นที่ใช้และimpliesประตูควรดำเนินการบูลีนหมายถึงตรรกะที่อาร์กิวเมนต์แรกimpliesที่สอง เกณฑ์การให้คะแนน ความยาวรวมของรหัสทั้งหมดที่จำเป็นในการสร้างคริสตจักรtrueและfalseในภาษาของคุณand not or xorและimpliesประตูคริสตจักรและไม่รวมชื่อฟังก์ชั่น (ตัวอย่างเช่นfalse=lambda x,y:yใน Python จะเป็น 13 ไบต์) คุณสามารถใช้ชื่อเหล่านี้ในภายหลังในรหัสของคุณโดยนับ 1 ไบต์ไปยังผลรวมไบต์ของเกตนั้น ตัวอย่างโค้ดหลอก: ฟังก์ชั่นที่คุณสร้างควรจะสามารถเรียกได้ในภายหลังในรหัสของคุณเช่นนั้น true(x, y) -> x false(x, y) -> y and(true, true)(x, y) -> x and(true, false)(x, …

15
มาเล่นMölkkyกันเถอะ!
Mölkky Mölkkyเป็นเกมการขว้างปาแบบฟินแลนด์ ผู้เล่นใช้ไม้พิน (เรียกอีกอย่างว่า "mölkky") เพื่อพยายามเคาะหมุดไม้ที่มีขนาดใกล้เคียงกับการโยนพินซึ่งมีตัวเลขตั้งแต่ 1 ถึง 12 ตำแหน่งเริ่มต้นของพินมีดังนี้: (07)(09)(08) (05)(11)(12)(06) (03)(10)(04) (01)(02) คำอธิบายนี้และกฎระเบียบดังต่อไปนี้จะขึ้นอยู่กับวิกิพีเดีย กฎMölkkyประยุกต์ การเคาะมากกว่าหนึ่งพินจะทำคะแนนให้ได้ตามจำนวนที่กำหนดไว้บนพิน การเคาะ2 พินขึ้นไปทำคะแนนจำนวนพินที่กระแทก (เช่นการกระแทก 3 พินทำคะแนน 3 คะแนน) เป้าหมายของเกมคือการเข้าถึง50คะแนน การให้คะแนนมากกว่า 50 จะถูกลงโทษโดยกำหนดคะแนนกลับเป็น25คะแนน สำหรับวัตถุประสงค์ของการท้าทายนี้เราจะทำให้สมมติฐานที่ว่าหมุดอยู่เสมอในลำดับที่แน่นอนอธิบายไว้ข้างต้น (ในเกมจริงหมุดจะยืนขึ้นอีกครั้งหลังจากโยนแต่ละครั้งในตำแหน่งที่พวกเขาลงจอด) กฎของMölkkyอื่น ๆ ทั้งหมดจะถูกละเว้นและพิจารณาผู้เล่นเพียงคนเดียวเท่านั้น อินพุต รายการที่ไม่ว่างเปล่าของ 12 บูลีน แต่ละรายการของบูลีนอธิบายผลของการโยน: 1ถ้าพินนั้นล้มลงและ0 เป็นอย่างอื่น booleans จะได้รับในการสั่งซื้อที่แน่นอนของหมุดจากบนซ้ายไปขวาด้านล่าง: 7 , 9 , 8 , 5 , …
33 code-golf  game  binary 

24
จำนวนสามารถแบ่งออกเป็นพลังของ 2?
เมื่อวานขณะที่เล่นกับลูกของฉันฉันสังเกตเห็นตัวเลขในรถไฟของเล่นของเขา: เรามีที่สามารถแบ่งออกเป็นหรือ4281428142814−2−8−14−2−8−14-2-8-122-21-23-2022-21-23-202^2-2^1-2^3-2^0 ความท้าทายง่ายๆ: ให้ค่าที่ไม่ใช่ค่าลบเป็นอินพุตคืนค่าความจริงที่สอดคล้องกันและค่าเท็จที่แสดงว่าสตริงแทนตัวเลขหรือไม่ (ในฐาน 10 และไม่มีเลขศูนย์นำหน้า) สามารถแบ่งออกเป็นตัวเลขที่เป็นพลังของ 2 . ตัวอย่าง: 4281 truthy (4-2-8-1) 164 truthy (16-4 or 1-64) 8192 truthy (the number itself is a power of 2) 81024 truthy (8-1024 or 8-1-02-4) 101 truthy (1-01) 0 falsey (0 cannot be represented as 2^x for any x) 1 truthy …

21
หมายเลขโทรศัพท์เป็นคำพูด
เป้าหมาย เขียนโปรแกรมหรือฟังก์ชั่นที่แปลหมายเลขโทรศัพท์ที่เป็นตัวเลขเป็นข้อความที่ทำให้พูดง่าย เมื่อตัวเลขซ้ำกันพวกเขาควรจะอ่านว่า "double n" หรือ "triple n" ความต้องการ อินพุต สตริงของตัวเลข สมมติว่าตัวละครทุกตัวเป็นตัวเลขตั้งแต่ 0 ถึง 9 สมมติว่าสตริงมีอักขระอย่างน้อยหนึ่งตัว เอาท์พุต คำที่คั่นด้วยช่องว่างทำให้สามารถอ่านตัวเลขเหล่านี้ได้อย่างชัดเจน แปลตัวเลขเป็นคำ: 0 "โอ้" 1 "หนึ่ง" 2 "สอง" 3 "สาม" 4 "สี่" 5 "ห้า" 6 "หก" 7 "เจ็ด" 8 "แปด" 9 "เก้า" เก้า " เมื่อตัวเลขเดิมซ้ำกันสองครั้งติดต่อกันเขียน "double number " เมื่อตัวเลขเดิมซ้ำกันสามครั้งติดต่อกันเขียน " จำนวนสาม" เมื่อตัวเลขเดิมซ้ำกันสี่ครั้งขึ้นไปให้เขียน "double …

30
ส่งคืนหมายเลขนายกรัฐมนตรีที่ใกล้ที่สุด
ท้าทาย นี่คือค่าง่ายๆ: กำหนดจำนวนเต็มบวกได้สูงสุด 1,000,000 ส่งคืนจำนวนเฉพาะที่ใกล้เคียงที่สุด หากตัวเลขนั้นเป็นจำนวนเฉพาะคุณควรส่งคืนหมายเลขนั้น หากมีสองช่วงเวลาใกล้เคียงกับจำนวนที่ระบุให้กลับด้านล่างของทั้งสอง อินพุตอยู่ในรูปแบบของจำนวนเต็มเดียวและเอาต์พุตควรอยู่ในรูปของจำนวนเต็มเช่นกัน ฉันไม่สนใจว่าคุณจะใช้อินพุท (ฟังก์ชั่น, STDIN, ฯลฯ ) หรือแสดงเอาท์พุท (ฟังก์ชั่น, STDOUT, ฯลฯ ) ตราบใดที่มันใช้งานได้ นี่คือรหัสกอล์ฟดังนั้นจึงใช้กฎมาตรฐาน - โปรแกรมที่มีจำนวนไบต์น้อยที่สุดชนะ! กรณีทดสอบ Input => Output ------ ------- 80 => 79 100 => 101 5 => 5 9 => 7 532 => 523 1 => 2
33 code-golf  primes 

30
ครั้งแรกที่ผ่านมาและทุกอย่างระหว่าง
กำหนดจำนวนเต็มสองตัวเอาท์พุทสองจำนวนเต็มแล้วช่วงระหว่างพวกเขา (ไม่รวมทั้งสอง) ลำดับของช่วงจะต้องเหมือนกับอินพุต ตัวอย่าง: Input Output 0, 5 -> [0, 5, 1, 2, 3, 4] -3, 8 -> [-3, 8, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7] 4, 4 -> [4, 4] 4, 5 -> [4, 5] 8, 2 -> [8, 2, 7, 6, 5, 4, 3] …
33 code-golf 

30
ครึ่งครึ่งครึ่งและครึ่ง
พิจารณาลำดับหมายเลขต่อไปนี้: 0 ,12,14,34,18,38,58,78,116,316,516,716,916,1116,1316,1516,132,332,532, ...0,12,14,34,18,38,58,78,116,316,516,716,916,1116,1316,1516,132,332,532,... 0, \frac{1}{2}, \frac{1}{4}, \frac{3}{4}, \frac{1}{8}, \frac{3}{8}, \frac{5}{8}, \frac{7}{8}, \frac{1}{16}, \frac{3}{16}, \frac{5}{16}, \frac{7}{16}, \frac{9}{16}, \frac{11}{16}, \frac{13}{16}, \frac{15}{16}, \frac{1}{32}, \frac{3}{32}, \frac{5}{32}, \dots มันระบุเศษส่วนไบนารีทั้งหมดในช่วงเวลาที่หน่วย1)[ 0 , 1 )[0,1) [0, 1) (เพื่อให้การท้าทายนี้ง่ายขึ้นองค์ประกอบแรกเป็นทางเลือก: คุณอาจข้ามไปและพิจารณาลำดับที่เริ่มต้นด้วย 1/2) งาน เขียนโปรแกรม (โปรแกรมสมบูรณ์หรือฟังก์ชั่น) ซึ่ง ... เลือกหนึ่งในพฤติกรรมเหล่านี้: อินพุต n, องค์ประกอบที่ n เอาท์พุทของลำดับ (ดัชนี 0 หรือดัชนี 1) อินพุต …

21
ฮิสโตแกรมตัวอักษร
ให้ประโยคอินพุตประกอบด้วยหนึ่งคำขึ้นไป[a-z]+และเว้นศูนย์หรือมากกว่านั้นให้ส่งเอาต์พุตฮิสโตแกรม ASCII-art (กราฟแท่ง) ของการกระจายตัวอักษรของประโยคอินพุต ฮิสโตแกรมจะต้องวางในแนวนอนเช่นใช้ปุ่มตัวอักษรที่อยู่ด้านล่างตามลำดับตัวอักษรจากซ้ายไปขวาพร้อมป้าย Y แกน1-และทุก 5 หน่วย แกน Y จะต้องเป็นตัวคูณที่เล็กที่สุดในห้าที่สูงอย่างน้อยเท่ากับแถบที่สูงที่สุดและจะต้องจัดชิดขวา แกน X มีป้ายกำกับพร้อมตัวอักษรอินพุตโดยไม่มีช่องว่างระหว่าง ยกตัวอย่างเช่นการป้อนข้อมูลa bb ddควรจะมีป้ายชื่อabdและไม่ข้ามab d cตัวแท่งเองนั้นสามารถสร้างด้วยตัวอักษร ASCII ที่สอดคล้องกัน - ฉันจะใช้Xที่นี่ในตัวอย่างของฉัน test example 5- X X X 1-XXXXXXXX aelmpstx เนื่องจากมีสามeสองtและหนึ่งในalmsxนั้น ตัวอย่างเพิ่มเติม: the quick brown fox jumped over the lazy dogs 5- X X X X XX X …

8
สามารถสร้างวงต้นไม้แบบสี่เหลี่ยมจากช่วงเวลาได้หรือไม่?
เห็นได้ชัดว่าใช่! ในสามขั้นตอนง่าย ๆ ขั้นตอนที่ 1 ให้f ( n ) แสดงถึงฟังก์ชั่นการนับจำนวนเฉพาะ (จำนวนของจำนวนเฉพาะน้อยกว่าหรือเท่ากับn ) กำหนดลำดับ จำนวนเต็มs ( n ) ดังต่อไปนี้ สำหรับแต่ละจำนวนเต็มบวกn , Initiallize เสื้อเพื่อn ตราบใดที่tไม่ใช่ไพร์มหรือ 1 ให้แทนที่tด้วยf ( t ) และวนซ้ำ จำนวนการวนซ้ำคือs ( n ) กระบวนการซ้ำรับประกันได้ว่าจะสิ้นสุดเพราะฉ ( n ) < nสำหรับทุกn ลองพิจารณาตัวอย่างn = 25 เรา initiallize T = 25 ตั้งแต่นี้ไม่ได้เป็นนายกมิได้ 1 เราคำนวณฉ …

24
ผลรวมของห้าลูกบาศก์
ได้รับจำนวนเต็มส่งออกห้าก้อนที่สมบูรณ์แบบซึ่งผลรวมคือจำนวนเต็มนั้น โปรดทราบว่าคิวบ์อาจเป็นค่าบวกลบหรือศูนย์ ตัวอย่างเช่น, -10 == -64 - 64 + 64 + 27 + 27 ดังนั้นสำหรับอินพุต-10คุณสามารถเอาต์พุต[-64, -64, 64, 27, 27]ได้แม้ว่าจะมีวิธีแก้ไขปัญหาอื่น ๆ โปรดทราบว่าคุณควรส่งออกก้อนไม่ใช่ตัวเลขที่ถูกลูกบาศก์ มีวิธีแก้ไขอยู่เสมอ - คุณอาจสนุกกับมันด้วยตัวเอง มันเพิ่มเติมคาดเดาว่าสี่ก้อนพอเพียง

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