คำถามติดแท็ก array-manipulation

การแข่งขันเพื่อแก้ปัญหาเฉพาะผ่านการใช้งานและการจัดการของอาร์เรย์

18
สร้างบันได
บทนำ ฉันต้องการสร้างบันได สำหรับเรื่องนี้ฉันได้ไปจากที่เก็บขยะสองแผ่นยาวที่มีรูอยู่ในนั้นและฉันต้องการที่จะวางขั้นตอนลงในหลุมเหล่านี้ อย่างไรก็ตามหลุมไม่ได้ถูกวางอย่างเท่าเทียมกันดังนั้นขั้นตอนจะค่อนข้างสั่นคลอนเล็กน้อยและฉันพบว่ามันยากที่จะประเมินจำนวนก้านที่ฉันต้องการสำหรับพวกเขา งานของคุณคือการคำนวณสำหรับฉัน อินพุต อินพุตของคุณคือเวกเตอร์สองบิตที่กำหนดเป็นอาร์เรย์ของจำนวนเต็มซึ่งเป็นตัวแทนของสองบอร์ด A 0หมายถึงส่วนของหนึ่ง aud ( หน่วยระยะทางโดยพลการ ) โดยไม่มีรูและ a 1หมายถึงเซ็กเมนต์ของหนึ่ง aud ด้วยหนึ่งหลุม อาร์เรย์อาจมีความยาวแตกต่างกันและมีจำนวน1s แตกต่างกันแต่จะไม่ว่างเปล่า ฉันจะสร้างบันไดของฉันดังนี้ ครั้งแรกฉันวางบอร์ดสองแผ่นแยกกันหนึ่งเสียงและจัดวางที่ปลายด้านซ้าย สำหรับแต่ละดัชนีiฉันวัดระยะทางระหว่างiรูที่สองของบอร์ดแรกกับiรูที่สองของบอร์ดที่สองตัดท่อนไม้หนึ่งท่อนแล้วติดไว้ระหว่างรูทั้งสอง ฉันหยุดเมื่อฉันวิ่งออกจากหลุมในกระดานใดกระดานหนึ่ง เอาท์พุต ผลลัพธ์ของคุณคือจำนวนก้านทั้งหมดที่ฉันต้องการสำหรับขั้นตอนซึ่งวัดเป็นหน่วย ผลลัพธ์ควรถูกต้องเป็นเลขนัยสำคัญอย่างน้อยหกหลัก ตัวอย่าง พิจารณาปัจจัยการผลิตและ[0,1,1,0,1,1,1,1,0,0] [1,0,0,1,1,1,0,0,1]บันไดที่เกิดขึ้นมีลักษณะเช่นนี้: ความยาวรวมของก้านในบันไดนี้คือการ7.06449510224598ตรวจสอบ กฎระเบียบ คุณสามารถเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต กรณีทดสอบ [0] [0] -> 0.0 [0] [1,0] -> 0.0 [1,0,0] [1,1,1,1,1] -> 1.0 [0,1,0,1] [1,0,0,1] -> …

25
หน้าแรกในช่วงของรายการ
ความท้าทายนี้เป็นเพียงการส่งคืนรายการของรายการจำนวนเต็มคล้ายกับฟังก์ชันช่วง Python ยกเว้นว่าแต่ละหมายเลขที่ต่อเนื่องจะต้องลึกเข้าไปในรายการ กฎ : สร้างโปรแกรมหรือฟังก์ชั่นที่ไม่ระบุชื่อ ควรส่งคืนหรือพิมพ์ผลลัพธ์ ผลลัพธ์ควรส่งคืนในรายการ (ของรายการ) หรืออาร์เรย์ (ของอาร์เรย์) หากพารามิเตอร์เป็นศูนย์ให้ส่งคืนรายการว่าง สิ่งนี้ควรจะสามารถจัดการกับพารามิเตอร์จำนวนเต็ม 0 <= n <70 (โซลูชันแบบเรียกซ้ำจะระเบิดเร็วขึ้น) ฟังก์ชั่นควรจะ callable โดยมีเพียงหนึ่งพารามิเตอร์ พฤติกรรมอื่น ๆ ไม่ได้กำหนด นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดจึงชนะ ตัวอย่างการโทร: rangeList(6) > [0, [1, [2, [3, [4, [5]]]]]] กรณีทดสอบ: 0 => [] 1 => [0] 2 => [0, [1]] 6 => [0, [1, [2, …

30
โหมด (องค์ประกอบที่พบบ่อยที่สุด) ของรายการ
เขียนตัวอย่างเพื่อคำนวณโหมด (หมายเลขที่พบบ่อยที่สุด) ของรายการจำนวนเต็มบวก ตัวอย่างเช่นโหมดของ d = [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8] คือ1เพราะมันเกิดขึ้นสูงสุด 5 ครั้ง คุณอาจคิดว่ารายการนั้นถูกเก็บไว้ในตัวแปรเช่นdและมีโหมดที่ไม่ซ้ำ เช่น Python, 49 max(((i,d.count(i))for i in set(d)), key=lambda x:x[1]) นี่คือรหัสกอล์ฟดังนั้นทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ

16
ผลรวมเมทริกซ์ที่ไม่ทับซ้อนกัน
ผลรวมเมทริกซ์ที่ไม่ทับซ้อนกัน กำหนดkอาร์เรย์ที่มีความยาวnส่งออกผลรวมสูงสุดที่เป็นไปได้โดยใช้หนึ่งองค์ประกอบจากแต่ละอาร์เรย์โดยที่ไม่มีสององค์ประกอบมาจากดัชนีเดียวกัน รับประกันได้ว่า k <= n อินพุต รายการที่ไม่ว่างของอาร์เรย์ที่ไม่ว่างของจำนวนเต็ม เอาท์พุต จำนวนเต็มที่แทนยอดรวมสูงสุด ตัวอย่าง Input -> Output [[1]] -> 1 [[1, 3], [1, 3]] -> 4 [[1, 4, 2], [5, 6, 1]] -> 9 [[-2, -21],[18, 2]] -> 0 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> 15 [[1, 2, 3, …

29
แทนที่ฉันด้วยผลรวมของผู้สืบทอดของฉัน!
คราวนี้ฉันมีความท้าทายที่ง่ายสำหรับคุณ กำหนดอาร์เรย์ของจำนวนเต็มบวกA (หรือเทียบเท่าในภาษาของคุณ), แทนที่แต่ละรายการA iด้วยผลรวมขององค์ประกอบA iถัดไปของA , การวนกลับจากจุดเริ่มต้นหากมีรายการไม่เพียงพอ ตามปกติคุณสามารถแข่งขันในภาษาการเขียนโปรแกรมใด ๆและสามารถรับอินพุตและให้ผลลัพธ์ผ่านวิธีมาตรฐานใด ๆและในรูปแบบที่เหมาะสมในขณะที่การทราบว่าช่องโหว่เหล่านี้ถูกห้ามโดยค่าเริ่มต้น คุณสามารถเลือกใช้ขนาดของAเป็นอินพุตได้เช่นกัน นี่คือรหัสกอล์ฟดังนั้นการส่งสั้นที่สุด (เป็นไบต์) สำหรับทุกภาษาที่ชนะ ตัวอย่าง / กรณีทดสอบ ได้รับ[1,3,4,5]รหัสของคุณควรส่งออก[3,10,13,14]เพราะ1ถูกแทนที่ด้วย3, 3จะถูกแทนที่ด้วย4+5+1=10(แจ้งให้ทราบวิธีการที่จะห่อกลับมาจากจุดเริ่มต้น) 4โดย5+1+3+4=13และโดย51+3+4+5+1=14 ได้รับ[3,2,1,9]โปรแกรมของคุณควรผลิต[12,10,9,33]เพราะเราแทน3ด้วย2+1+9=12, 2กับ1+9=10, 1ด้วย9และ9ด้วย3+2+1+9+3+2+1+9+3=33(แจ้งให้ทราบวิธีการที่เราห่อกลับมาจากการเริ่มต้นมากกว่าหนึ่งครั้ง) กรณีทดสอบเพิ่มเติมให้คุณเลือกจาก: [4,3,2,1] -> [10,7,5,4] [3,2,1,9] -> [12,10,9,33] [1,3,4,5] -> [3,10,13,14] [4,4,3,2,2] -> [11,11,8,6,8] [3,5,3,2,1] -> [10,14,6,4,3] [3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3] [7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30] [28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34] [1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] …

24
เพิ่มหมายเลขเดียว
บทนำ สมมติว่าคุณต้องการคำนวณส่วนท้ายสูงสุดของรายการตัวเลขนั่นคือจำนวนสูงสุดของคำต่อท้ายที่ไม่ใช่ข้อยกเว้นแต่ละอัน วิธีหนึ่งในการทำเช่นนี้คือการเลือกหมายเลขหนึ่งซ้ำแล้วแทนที่ด้วยจำนวนที่สูงกว่าที่เกิดขึ้นหลังจากนั้นจนกว่าจะไม่สามารถทำได้อีกต่อไป ในการท้าทายนี้งานของคุณคือดำเนินการหนึ่งขั้นตอนของอัลกอริทึมนี้ งาน ข้อมูลที่คุณป้อนเป็นรายการจำนวนเต็มLซึ่งอาจว่างเปล่า ส่งออกของคุณจะเป็นรายการLที่ว่าจำนวนหนึ่งL ฉันได้รับการแทนที่ด้วยอีกL Jที่L ฉัน <L เจและฉัน <J กล่าวอีกนัยหนึ่งคุณจะแทนที่หนึ่งหมายเลขด้วยตัวเลขที่สูงกว่าที่เกิดขึ้นหลังจากนั้น คุณสามารถเลือกiและjได้อย่างอิสระในทุกคู่ที่ถูกต้องและตัวเลือกสามารถเป็นแบบไม่ระบุชื่อได้ หากiและjดังกล่าวไม่มีอยู่ (เช่นLไม่เพิ่มขึ้น) เอาต์พุตของคุณจะไม่เปลี่ยนแปลงL ตัวอย่าง พิจารณาการป้อนข้อมูลL = [3, 1, 4, -1, 2] การดำเนินงานที่เป็นไปได้ที่จะมาแทนที่3จาก4แทนที่1จาก4แทนที่1จาก2หรือเปลี่ยน-1โดย2 ดังนั้นผลลัพธ์ที่เป็นไปได้คือ: [ 3 , 1 , 4 , -1 , 2 ] ------------------------------ [( 4), 1 ,( 4), -1 , 2 ] [ …

7
ลำดับที่ถอดออกได้ไม่ซ้ำกัน
บทนำ พิจารณาลำดับของจำนวนเต็มและเป็นหนึ่งใน subsequences มันบอกว่าA = [4 2 2 4 4 6 5]และB = [2 4 5] เราต้องการลบองค์ประกอบของBจากAตามลำดับและมีหลายวิธีในการทำเช่นนี้: A = 4 2 2 4 4 6 5 B = 2 4 5 -> 4 2 4 6 A = 4 2 2 4 4 6 5 B = 2 4 5 …

24
คำนวณลำดับของจิงโจ้
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 การกระโดดทั้งหมดนั้นต้องใช้พลังงานดังนั้นจิงโจ้จึงต้องการการบำรุงหลังจากทำกิจกรรมแต่ละแบบเสร็จสิ้น จำนวนที่แน่นอนสามารถคำนวณได้ดังนี้ กำหนดแต่ละoในรูปแบบกิจกรรมของสเตจnจิงโจ้ซึ่งความสูงของมันคือตัวเลขจาก1ถึงnโดยที่1สอดคล้องกับพื้นดินและnไปยังตำแหน่งสูงสุด คำนวณผลรวมของความสูงทั้งหมดในรูปแบบกิจกรรม ตัวอย่างเช่นรูปแบบกิจกรรมของจิงโจ้ระยะที่3มีความสูงดังต่อไปนี้ 3 3 3 …

10
ตีกลับในอาร์เรย์
บทนำ อาร์เรย์ยังสามารถมองเห็นเป็นสนามสำหรับลูกบอลกระดอน แน่นอนว่ามันฟังดูคลุมเครือดังนั้นนี่คือตัวอย่างของอินพุต: [1, 2, 3, 4, 5, 6, 7, 8, 9] [9, 8, 7, 6, 5, 4, 3, 2, 1] [1, 2, 3, 4, 5, 6, 7, 8, 9] ความท้าทายคือการส่งออกอาร์เรย์เด้ง สิ่งเหล่านี้ทำจากลวดลายเส้นทแยงมุมที่กระดอนที่ขอบสนาม เส้นทางนี้เป็นแหลมขึ้น เส้นทางสำหรับอาร์เรย์ที่เด้งแรก (ซึ่งเส้นทางนั้นถูกเด้งออกโดยตรงจาก egde) คือ: [1, -, -, -, 5, -, -, -, 9] [-, 8, -, 6, …

27
เดือนละกี่วัน
รับการแสดงข้อความ (ชื่อเต็มตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่หรือตัวย่อ 3 ตัว) ของเดือนส่งคืนจำนวนวันในเดือน ตัวอย่างเช่นdecember, DECและdecทุกคนควรจะกลับมาวันที่ 31 กุมภาพันธ์สามารถมีได้ทั้ง 28 หรือ 29 วัน สมมติว่าอินพุตเป็นเดือนในหนึ่งในรูปแบบที่ถูกต้อง

15
แปดทั้งหมดเดียว
ได้รับไม่ว่างเปล่าอาร์เรย์สี่เหลี่ยมของจำนวนเต็มจาก0การ9ส่งออกจำนวนของเซลล์ที่เป็นและไม่ได้มีเพื่อนบ้านที่เป็น8 8การทำความเข้าใจเพื่อนบ้านที่นี่ในความหมายของมัวร์นั่นคือรวมถึงเส้นทแยงมุม ดังนั้นแต่ละเซลล์มี8เพื่อนบ้านยกเว้นเซลล์ที่ขอบของอาร์เรย์ ตัวอย่างเช่นกำหนดอินพุต 8 4 5 6 5 9 3 8 4 8 0 8 6 1 5 6 7 9 8 2 8 8 7 4 2 3การส่งออกที่ควรจะเป็น เซลล์ที่มีคุณสมบัติสามเซลล์ต่อไปนี้จะถูกทำเครื่องหมายด้วยเครื่องหมายดอกจัน (แต่ควรมีเฉพาะจำนวนของรายการดังกล่าว): * 4 5 6 5 9 3 8 4 * 0 8 6 1 5 6 7 9 …

15
การออกอากาศแบบแยกส่วน
ความท้าทายนี้จะเกี่ยวข้องกับบางส่วนของคุณสมบัติภาษา MATL ที่เป็นส่วนหนึ่งของพฤษภาคม 2018 ภาษาของเดือนเหตุการณ์ บทนำ ใน MATL ฟังก์ชั่นสองอินพุตหลายทำงานองค์ประกอบที่ชาญฉลาดด้วยการออกอากาศ นี่หมายความว่า: Element-wise (หรือvectorized ): ฟังก์ชันใช้เป็นอินพุตสองอาร์เรย์พร้อมขนาดที่ตรงกัน การดำเนินการที่กำหนดโดยฟังก์ชั่นจะใช้กับรายการที่เกี่ยวข้องแต่ละคู่ ตัวอย่างเช่นการใช้สัญลักษณ์หลังการแก้ไข: [2 4 6] [10 20 30] + ให้ ouput [12 24 36] นอกจากนี้ยังทำงานร่วมกับอาร์เรย์หลายมิติ สัญกรณ์[1 2 3; 4 5 6]แสดงถึงอาร์เรย์2× 3(เมทริกซ์) 1 2 3 4 5 6 ซึ่งมีขนาด2ตามมิติแรก (แนวตั้ง) และ3ตามขนาดที่สอง (แนวนอน) ตัวอย่างเช่น [2 4 6; …

22
การทำงานสูงสุดระหว่างองค์ประกอบที่เหมือนกัน
นี่คือการยกเครื่องคำถามลบตอนนี้โดยเท่ง หาก OP ของคำถามนั้นต้องการกู้คืนคำถามนี้หรือมีปัญหากับฉันที่โพสต์สิ่งนี้ฉันยินดีที่จะรองรับ รับรายการจำนวนเต็มเป็นอินพุตค้นหาผลรวมสูงสุดที่เป็นไปได้ของรายการย่อยต่อเนื่องที่เริ่มต้นและสิ้นสุดด้วยค่าเดียวกัน รายการย่อยจะต้องมีความยาวอย่างน้อย 2 ตัวอย่างสำหรับรายการ [1, 2, -2, 4, 1, 4] มีรายการย่อยอย่างต่อเนื่อง 2 รายการที่ต่างกันเริ่มต้นและสิ้นสุดด้วยค่าเดียวกัน [1,2,-2,4,1] -> 6 [4,1,4] -> 9 ผลรวมที่ใหญ่กว่าคือ 9 ดังนั้นคุณจึงเอาต์พุต 9 คุณอาจสันนิษฐานว่าทุกอินพุตมีซ้ำอย่างน้อย 1 รายการ นี่คือcode-golfดังนั้นคำตอบจะได้คะแนนเป็นไบต์ด้วยจำนวนไบต์น้อยกว่าจะดีกว่า กรณีทดสอบ [1,2,-2,4,1,4] -> 9 [1,2,1,2] -> 5 [-1,-2,-1,-2] -> -4 [1,1,1,8,-1,8] -> 15 [1,1,1,-1,6,-1] -> 4 [2,8,2,-3,2] -> 12 …

3
ใช้การจัดช่องไฟแบบง่าย
บทนำ การจัดช่องไฟหมายถึงการปรับระยะห่างระหว่างตัวอักษรของข้อความ ยกตัวอย่างพิจารณาคำที่Topเขียนด้วยร่ายมนตร์ต่อไปนี้สามอัน: ##### ..... ..... ..#.. ..... ..... ..#.. ..##. .###. ..#.. .#..# .#..# ..#.. .#..# .#..# ..#.. ..##. .###. ..... ..... .#... ..... ..... .#... เราสามารถเติมช่องว่างระหว่างร่ายมนตร์ด้วยจุดแล้วเติมลงไปได้ แต่ช่องว่างก็ดูกว้างเกินไป แต่เราเลื่อนร่ายมนตร์ไปทางซ้ายเพื่อให้พวกมันสัมผัสเกือบ: #####........ ..#.......... ..#..##..###. ..#.#..#.#..# ..#.#..#.#..# ..#..##..###. .........#... .........#... มันดูดีขึ้นมาก! หมายเหตุวิธีบาร์ของด้านบนของเส้นขอบด้านซ้ายของT oในการท้าทายนี้งานของคุณคือการใช้โปรแกรมการจัดช่องไฟอย่างง่ายสำหรับร่ายมนตร์รูปสี่เหลี่ยมผืนผ้าดังกล่าว กระบวนการจัดช่องไฟ พิจารณาสองสี่เหลี่ยม 2D อาร์เรย์ของตัวอักษร.และ#รูปทรงเดียวกัน ในขั้นตอนการจัดช่องไฟอย่างง่ายของเราอันดับแรกเราวางอาร์เรย์แบบเรียงต่อกันโดยมีคอลัมน์หนึ่งคอลัมน์.อยู่ระหว่างกัน จากนั้นเราย้ายแต่ละรายการ#ในอาเรย์ขวาหนึ่งก้าวไปทางซ้ายจนกระทั่ง#อาเรย์ซ้ายและขวาบางอันอยู่ติดกันแบบมุมฉากหรือแนวทแยงมุม ผลลัพธ์ของการจัดช่องไฟเป็นขั้นตอนก่อนที่เราจะแนะนำ#s ที่อยู่ติดกัน งานของคุณคือการใช้กระบวนการนี้ …
24 code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

30
ค้นหาคำที่ยาวที่สุดในอาเรย์
ความท้าทายของคุณคือการใช้อาร์เรย์ของสตริงและส่งออกสตริงที่ยาวที่สุดในอาร์เรย์ ดังนั้นสำหรับ ["tiny", "small", "bigger", "biggest"] biggestการส่งออกจะเป็น หากสององค์ประกอบของอาร์เรย์มีความยาวเท่ากันคุณควรเลือกองค์ประกอบที่ปรากฏขึ้นเป็นลำดับแรกในอาร์เรย์ นั่นหมายความว่าถ้าอาร์เรย์มีลักษณะดังนี้: ["one", "two", "no"] ผลลัพธ์คือoneแต่ถ้าอาร์เรย์มีลักษณะเช่นนี้: ["two", "one", "no"] twoผลลัพธ์คือ เช่นนี้คือcode-golfรหัสที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ

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