คำถามติดแท็ก code-golf

Code-golf เป็นการแข่งขันเพื่อแก้ไขปัญหาเฉพาะในส่วนที่น้อยที่สุดของซอร์สโค้ด

3
พิสูจน์ฉันผิด!
บทนำ ภารกิจในชีวิตของคุณนั้นง่าย: พิสูจน์คนผิดทางอินเทอร์เน็ต! ในการทำเช่นนี้คุณมักวิเคราะห์ข้อความของพวกเขาอย่างรอบคอบและชี้ให้เห็นถึงความขัดแย้งในพวกเขา ถึงเวลาที่จะทำสิ่งนี้โดยอัตโนมัติ แต่เมื่อเราขี้เกียจเราต้องการพิสูจน์คนผิดด้วยความพยายามน้อยที่สุด (อ่าน: รหัสที่สั้นที่สุด) ที่เป็นไปได้ สเปค อินพุต การป้อนข้อมูลของคุณจะเป็นสูตรในรูปแบบปกติซึ่งเชื่อมต่อกัน สำหรับรูปแบบคุณสามารถใช้รูปแบบด้านล่างหรือกำหนดรูปแบบของคุณเองตามความต้องการในภาษาของคุณ (คุณไม่สามารถเข้ารหัสในรูปแบบได้มากกว่า CNF ล้วนๆ) อย่างไรก็ตามกรณีทดสอบ (ที่นี่) มีให้ในรูปแบบด้านล่าง (แม้ว่าจะไม่สร้างตัวคุณเองยากเกินไป) ข้อมูลที่คุณป้อนจะเป็นรายการของรายการตัวแปร (คุณอาจอ่านเป็นสตริง / ต้องการสตริง) อินพุตเป็นสูตรในรูปแบบปกติที่เชื่อมต่อกัน (CNF) ที่เขียนเป็นชุดคำสั่งแต่ละรายการเป็นรายการสองรายการ รายการแรกในข้อเข้ารหัสตัวอักษรบวก (ตัวแปร) รายการที่สองเข้ารหัสตัวอักษร (ลบ) ตัวแปร (ตัวแปร) ตัวแปรทั้งหมดในส่วนคำสั่งคือ OR'ed เข้าด้วยกันและส่วนคำสั่งทั้งหมดเป็น AND'ed เข้าด้วยกัน หากต้องการทำให้ชัดเจนยิ่งขึ้น[[[A,B],[C]],[[C,A],[B]],[[B],[A]]]สามารถอ่านได้ที่: (A OR B OR (NOT C)) AND (C OR A OR …
22 code-golf  math  logic 

10
สแควร์นี้สมมาตรหรือไม่
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในกริดข้อความ 4 × 4 ซึ่งประกอบด้วย 4 A, 4 B, 4 Cและ 4 Dเช่น: ACDC BBCA BADD ABCD ABCD's อาจจะอยู่ในการจัดเรียงใด ๆ แต่มีจะเป็น 4 ของแต่ละ คุณสามารถสันนิษฐานได้ว่าอินพุตนั้นถูกต้อง ถ้าต้องการคุณยังสามารถสันนิษฐานได้ว่าจะมีการขึ้นบรรทัดใหม่และ / ACDCBBCABADDABCDหรือว่ามันจะมาเป็นหนึ่งบรรทัดในการอ่านคำสั่งเช่น นอกจากนี้คุณยังสามารถแทนที่อักขระABCDด้วย0123หรือ1234ตามลำดับหากต้องการ (แต่นั่นคือทั้งหมด) ส่งออกค่าความจริงหากตารางข้อความมีรูปแบบของการสะท้อนแสงหรือสมมาตรหมุนใด ๆ โดยเฉพาะ: หากมีเส้นแนวนอนกลางของสมมาตร เช่น BACD BACD BACD \___ bottom mirrors top BACD / หากมีเส้นแนวตั้งกลางของสมมาตร เช่น BCCB DAAD CAAC BDDB \/___ …

14
วันพุธที่สำคัญ
วันพุธที่สำคัญ งานของคุณคือการนับจำนวนวันพุธที่ตรงกับวันสำคัญของเดือนในปีใดปีหนึ่ง ตัวอย่างเช่น7-13-16เป็นวันพุธที่ดี เพื่อความสอดคล้องใช้ปฏิทินเกรโกเรียนสำหรับวันที่ทั้งหมด อินพุต ข้อมูลเข้าสู่โปรแกรม / ฟังก์ชั่นของคุณจะเป็นปี (เช่น2016) และยืดหยุ่นได้ ปีจะเป็นจำนวนเต็มระหว่าง1912และ2233รวม เอาท์พุต ผลผลิตมีความยืดหยุ่นและควรเป็นจำนวนวันพุธที่สำคัญ (เช่น18) เกณฑ์การให้คะแนน นี่คือโค้ดกอล์ฟที่สั้นที่สุดในหน่วยไบต์! กรณีทดสอบ อินพุต -> เอาต์พุต -------------------- 1912 -> 19 1914 -> 16 1984 -> 17 1996 -> 19 2063 -> 19 2150 -> 16 2199 - > 18 2233 -> 18

18
กอล์ฟเพื่อค้นหาหมายเลขที่น่าเบื่อ
หากจำนวนเต็มมีตัวเลข / ลำดับของตัวเลขซึ่งทำซ้ำอย่างต่อเนื่อง (คุณจะเข้าใจว่าทำไมฉันถึงพูดว่า "ต่อเนื่อง") 5 ครั้งขึ้นไปเราเรียกมันว่า "น่าเบื่อ" ตัวอย่างเช่น11111Boring 12345ไม่เป็นเช่นนั้น คำแนะนำ รับจำนวนเต็มเป็นอินพุต ส่งออกค่าความจริงหากจำนวนเต็มน่าเบื่อและค่าเท็จถ้าจำนวนเต็มไม่น่าเบื่อ ตัวอย่าง 11111=> trueหรือ1(1 ซ้ำ 5 ครั้ง) 12345=> falseหรือ0 1112111=> falseหรือ0 4242424242=> trueหรือ1(42 ซ้ำ 5 ครั้ง) -11111=> trueหรือ1 3452514263534543543543543543876514264527473275=> trueหรือ1(543 ซ้ำ 5 ครั้ง) หากคุณใช้ "ความจริง" และ "เท็จ" ประเภทอื่นให้ระบุ กฎระเบียบ บังคับใช้กฎพื้นฐานของการเล่นกอล์ฟ โชคดี!
22 code-golf  number 

26
คำที่ถัก
บทนำ ตามที่โพสต์ของ Rand Al'Thorใน Puzzling SE คำที่ใกล้ชิดคือคำใด ๆ ที่มีตัวอักษรเรียงตามลำดับตัวอักษรสามตัว (เรียงตามลำดับใด ๆ ) คำเช่นการศึกษา , Foghornและคาบาเรต์ถือว่าเป็นคำที่มีความใกล้ชิดกันในขณะที่คำต่าง ๆ เช่นการเรียนรู้ , klaxonและการแสดงนั้นไม่ใช่คำที่ใกล้เคียงกัน ท้าทาย ความท้าทายคือการเขียนโค้ดโปรแกรมที่สามารถใช้คำเดียวเป็นอินพุต (สมมติตัวพิมพ์เล็กสำหรับเจตนาและวัตถุประสงค์ทั้งหมด) และส่งคืนเอาต์พุตที่ (ถ้ามี) แสดงรายการชุดตัวอักษรต่อเนื่องทั้งหมด (เช่นในตัวพิมพ์เล็ก) เป็นคำที่ใกล้เคียงกันและให้ผลลัพธ์ที่ว่างเปล่าหากไม่ใช่คำที่ใกล้เคียงกัน ตัวอย่าง Input: education Output: cde Input: foghorn Output: fgh Input: cabaret Output: abc Input: hijacking Output: ghi, hij, ijk Input: pneumonia Output: mno, …
22 code-golf  string 

19
ช่วย: Aliens โปรแกรมเมอร์เท่านั้นพูด ASCII
จัดฉาก: มันเป็นช่วงบ่ายโดยเฉลี่ยในขณะที่คุณผ่อนคลายหลังจากเหน็ดเหนื่อยมาทั้งวันด้วยการมีส่วนร่วมในงานอดิเรกที่คุณโปรดปราน: ตอบคำถามที่น่าดึงดูดใจใน PPCG มันไม่ได้เป็นวันที่ดีสำหรับคุณ โปรแกรมเมอร์ Pyth ที่ถูกสาปนั้นจะได้รับคำตอบที่ดีที่สุดและมันก็ทำให้คุณรู้สึกแย่ ทันใดนั้นคุณสังเกตเห็นว่ามีการโพสต์คำถามใหม่! คุณตัดสินใจ ไม่ใช่ CJammers ในเวลานี้ คายคุณเริ่มพิมพ์ให้กำเนิดตัวละคร; ทารกในครรภ์ของวง BrainFuck อันรุ่งโรจน์ที่ผลิตภัณฑ์สุดท้ายของคุณจะเป็น คุณพิมพ์และพิมพ์ ได้เร็วขึ้น! เร็วขึ้น! คุณมุ่งเน้นมากจนคุณไม่สังเกตว่าไฟบนหน้าจอเริ่มกะพริบและดับ ทันใดนั้นมอนิเตอร์ก็ส่องเป็นสีเขียวซึ่งเป็นสัญลักษณ์ของมนุษย์ต่างดาวที่ปรากฏบนเดสก์ท็อป ใช้ทักษะไร้ที่ติของคุณคุณcat ~/Desktop/aliensymbolและนำเสนอด้วยตัวเลขจำนวนหนึ่งข้อความ! การเป็นโปรแกรมเมอร์ PPCG ที่ฉลาดหลักแหลมที่คุณเป็นคุณสังเกตเห็นว่ามันดูเหมือน ASCII ไม่ว่าสำหรับคุณคุณprint(chr(i) for i in file)และถอดรหัสข้อความ ความคิดแรกของคุณ: "ฉันต้องการแบ่งปันสิ่งนี้กับชุมชน!" ... ใครจะไปคิดบ้าง ว่าคนแรกที่ติดต่อกับมนุษย์ต่างดาวจะเป็นโปรแกรมเมอร์ที่อ่อนน้อมถ่อมตนของ PPCG ทำไมต้องเป็นเรา อาจเป็นเพราะเราเป็นตัวอย่างที่ดีเลิศของความฉลาดของมนุษย์ หรืออาจเป็นเพราะ BrainFuck นั้นใกล้เคียงกับภาษามนุษย์ต่างดาว อย่างไรก็ตามมนุษย์ต่างดาว - ซึ่งเป็นสิ่งมีชีวิตที่ชาญฉลาดนั้นต้องการที่จะทดสอบว่าพวกเขาควรจะจำแนกเผ่าพันธุ์มนุษย์ว่าเป็นคนฉลาดหรือไม่ เพื่อเป็นการทดสอบความสามารถทางจิตของมนุษย์ต่างดาวเราได้ขอให้เราส่งโปรแกรมคอมพิวเตอร์สองสามรายการเพื่อแสดงให้เห็นว่าเราได้รับการอบรมทางด้านเทคโนโลยี ปัญหาคือภาษามนุษย์เดียวที่พวกเขาเข้าใจคือ ASCII …

15
คำนวณพาร์ติชันของ N
ความท้าทายของคุณเป็นเรื่องง่าย: รับจำนวนเต็มN , ouput รายการของจำนวนเต็มบวกทุกคนที่จำนวนเงินที่จะไม่มี ตัวอย่างเช่นถ้าอินพุตเป็น 5 คุณควรส่งออก [1, 1, 1, 1, 1] [1, 1, 1, 2] [1, 1, 3] [1, 2, 2] [1, 4] [2, 3] [5] รายการเหล่านี้ไม่จำเป็นต้องส่งออกตามลำดับใด ๆ หรือตัวเลขภายในแต่ละรายการ ตัวอย่างเช่นนี่จะเป็นผลลัพธ์ที่ยอมรับได้สำหรับ '5': [1, 1, 1, 2] [5] [3, 1, 1] [2, 1, 2] [4, 1] [1, 1, 1, 1, …

20
ย้อนกลับและลบ
คำอธิบายการท้าทาย ลองใช้จำนวนเต็มบวกnกลับตัวเลขเพื่อรับrev(n)และรับค่าสัมบูรณ์ของผลต่างของตัวเลขสองตัวนี้: |n - rev(n)|(หรือabs(n - rev(n))) ตัวอย่าง: n = 5067 rev(n) = 7605 |n - rev(n)| = |5067 - 7605| = |-2538| = 2538 หลังจากทำซ้ำการดำเนินการนี้หลายครั้งเพียงพอตัวเลขส่วนใหญ่จะกลายเป็น0(ดังนั้นการยกเลิกการวนซ้ำ) ... 5067 -> 2538 -> 5814 -> 1629 -> 7632 -> 5265 -> 360 -> 297 -> 495 -> 99 -> 0 ... แม้ว่าตัวเลข …

5
การแลกเปลี่ยน 27 ฟังก์ชัน
บทนำ ลองกำหนดฟังก์ชั่น ternaryเป็นฟังก์ชั่นจากชุดสามองค์ประกอบS = {0,1,2}กับตัวเองมันจะเชื่อมโยงไปยังองค์ประกอบของแต่ละองค์ประกอบของผู้อื่นS Sตัวอย่างหนึ่งของฟังก์ชั่นประกอบไปด้วยfคือ f(0) = 0; f(1) = 2; f(2) = 0 มีฟังก์ชั่นตรง 27 ternary ที่แตกต่างกันและเราเป็นตัวแทนของพวกเขาด้วยจำนวนเต็ม 0-26: ฟังก์ชั่นจะถูกเข้ารหัสเป็นf f(0) + 3*f(1) + 9*f(2)ฟังก์ชั่นตัวอย่างข้างต้นถูกเข้ารหัสเป็นหมายเลข 6 เราสามารถใช้ฟังก์ชั่นสอง ternary fและgในลำดับและถ้าf(g(k)) == g(f(k))ถือหุ้นทั้งหมดkในSนั้นฟังก์ชั่นการเดินทาง งานของคุณคือการตรวจสอบว่าเป็นกรณีนี้หรือไม่ อินพุต อินพุตของคุณเป็นจำนวนเต็มสองจำนวนในช่วงรวมจาก 0 ถึง 26 พวกเขาเป็นตัวแทนสองฟังก์ชันประกอบไปด้วยfและ gต้องป้อนข้อมูลในรูปแบบทศนิยมฐานสองหรือ1รูปแบบสตริง (สตริง) เอาท์พุต ผลลัพธ์ของคุณเป็นค่าความจริงหากfและการgเดินทางและค่าความผิดพลาดหากพวกเขาไม่ คุณอาจไม่คิดว่าอินพุตจะถูกเรียงลำดับ ตัวอย่าง พิจารณาอินพุต 5 และ 16 ซึ่งเข้ารหัสฟังก์ชันที่ประกอบไปด้วย …

12
Polynomialception
โปรแกรมสองฟังก์ชันf,gของคุณควรประเมินพหุนามแรกในพหุนามที่สอง f(g(x))(aka องค์ประกอบ (fog)(x)ของสองชื่อประกอบด้วยหลายชื่อ) รายละเอียด อนุญาตให้สร้างเครื่องได้ คุณสามารถสมมติว่าการจัดรูปแบบที่เหมาะสมเป็นอินพุต / เอาต์พุต แต่รูปแบบอินพุตและเอาต์พุตควรตรงกัน เช่นการจัดรูปแบบเป็นสตริง x^2+3x+5 หรือเป็นรายการของค่าสัมประสิทธิ์: [1,3,5] or alternatively [5,3,1] นอกจากนี้ชื่อพหุนามสามารถคาดเดาได้ว่าจะขยายอย่างเต็มที่และคาดว่าจะขยายออกอย่างเต็มที่ ตัวอย่าง A(x) = x^2 + 3x + 5, B(y) = y+1 A(B(y)) = (y+1)^2 + 3(y+1) + 5 = y^2 + 5y + 9 A(x) = x^6 + x^2 + 1, B(y) …

2
ค้นหาสมบัติในคุกใต้ดิน 2D
คุณอยู่ในคุกใต้ดินหนึ่งชั้น มีสมบัติที่ได้รับการปกป้องจากประตูที่ถูกล็อค ประตูสามารถเปิดได้โดยการค้นหากุญแจที่เกี่ยวข้อง เป้าหมายของคุณคือค้นหาเส้นทางที่สั้นที่สุดสู่ขุมทรัพย์ อินพุต อินพุตจะเป็นตารางสองมิติที่แสดงเค้าโครงเริ่มต้นของดันเจี้ยน ########### #$ # g# # # #### ###G## # # ####C# #c @ # ########### นี่คือคุณ: @ นี่คือกำแพง: # นี่คือสมบัติ: $ ประตูที่ถูกล็อคเป็นตัวพิมพ์ใหญ่: A... Z แต่ละประตูมีคีย์ตัวพิมพ์เล็กที่ตรงกัน: a...z จะมีหนึ่ง@และหนึ่ง$เสมอ ดันเจี้ยนจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอ ไม่รับประกันว่าขอบด้านนอกของดันเจี้ยนจะเป็นกำแพง นี่คือกรุที่ถูกต้อง: $ A## @ a ไม่รับประกันว่าสมบัติจะเข้าถึงได้ ดันเจี้ยนบางตัวอาจไม่สามารถแก้ไขได้ อาจมีประตูที่ไม่มีกุญแจและอาจมีกุญแจที่ไม่เปิดประตู จะไม่มีประตูหรือกุญแจซ้ำกัน เอาท์พุต โปรแกรมของคุณควรพิมพ์ลำดับของR, L, U, D(หรือ 4 …

24
เรียงชื่อวงดนตรี
คำอธิบายการท้าทาย คุณมีคลังเพลงที่มีหลายแทร็คที่บันทึกโดยหลาย ๆ วงแต่ละที่มีชื่อเช่นQueen, Aerosmith, ,Sunny Day Real Estate The Strokesเมื่อเครื่องเล่นเพลงแสดงไลบรารีของคุณตามลำดับตัวอักษรโดยชื่อแบนด์มันมักจะข้ามTheส่วนที่เป็นชื่อวงดนตรีจำนวนมากเริ่มต้นด้วยTheทำให้ง่ายต่อการนำทางผ่านคอลเลกชันสื่อของคุณ ในความท้าทายนี้เมื่อได้รับรายการ (อาร์เรย์) ของสตริงคุณต้องเรียงลำดับแบบนั้น (นั่นคือไม่ใช้Theคำที่จุดเริ่มต้นของชื่อ) คุณสามารถเขียนวิธีการหรือโปรแกรมทำงานเต็มรูปแบบได้ ตัวอย่างอินพุต / เอาท์พุต [Queen, Aerosmith, Sunny Day Real Estate, The Strokes] -> [Aerosmith, Queen, The Strokes, Sunny Day Real Estate] [The Ramones, The Cure, The Pixies, The Roots, The Animals, Enrique Iglesias] -> [The …

6
ลำดับตัวอักษรภาษาสเปนเก่า
ก่อนปี 1994, พจนานุกรมภาษาสเปนที่ใช้ตามลำดับตัวอักษรที่มีความไม่ชอบมาพากล : digraphs llและchได้รับการพิจารณาหากพวกเขาเป็นตัวอักษรเดียว chตามทันทีcและทันทีตามll lเพิ่มตัวอักษรñซึ่งตามมาnในภาษาสเปนคำสั่งนั้น: a, b, c, ch, d, e, f, g, h, i, j, k, l, ll, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z ตั้งแต่ปี 1994 llและchได้รับการพิจารณาเป็นกลุ่มของตัวอักษรสองตัว ( l, lและc, hตามลำดับ) ñและจึงตามลำดับตัวอักษรเป็นเช่นเดียวกับในภาษาอังกฤษมีข้อยกเว้นของตัวอักษร คำสั่งเดิมแน่นอนมากขึ้นที่น่าสนใจ ความท้าทาย ป้อนรายการคำที่เป็นศูนย์หรือมากกว่าแล้วเอาท์พุทรายการที่เรียงลำดับตามลำดับตัวอักษรภาษาสเปนเก่า การเรียงลำดับอยู่ระหว่างคำ (ไม่ใช่ระหว่างตัวอักษรภายในคำ) …

3
ติดตามจุดต่างๆ
ความท้าทาย รับกริดของอักขระ ABCDE FGHIJ KLMNO PQRST และกริดที่มีขนาดของจุดและช่องว่างเหมือนกัน . . . . . . . . . . . เอาท์พุทสตริงที่สร้างขึ้นโดยทำตามจุดผ่านตารางเริ่มต้นที่มุมซ้ายบน ตัวอย่างนี้จะให้ผลABGLQRSNIJE หมายเหตุ คุณอาจใช้กริดอินพุตเป็นอาร์เรย์สองมิติหรือทางเลือกที่ใกล้เคียงที่สุดในภาษาของคุณแทนที่จะเป็นสตริงหลายบรรทัด คุณสามารถใช้ค่า NULL ของภาษาของคุณแทนช่องว่าง แต่คุณต้องใช้จุดเพื่อทำเครื่องหมายเส้นทาง คุณไม่จำเป็นต้องแยกจุดในบรรทัดเดียวกันด้วยช่องว่าง ฉันเพิ่งเพิ่มพวกเขาเพื่อให้สามารถอ่านได้ กริดที่เล็กที่สุดที่เป็นไปได้มีขนาด 1x1 จุดเริ่มต้นและจุดสิ้นสุดจะมีเพื่อนบ้านเพียงคนเดียว จุดระหว่างพวกเขามักจะมีสองเพื่อนบ้านแนวตั้งหรือแนวนอนที่แน่นอน สิ่งนี้รับประกันได้ว่าเส้นทางนั้นไม่น่าสงสัย เส้นทางจะไม่ไปในแนวทแยง อักขระในตารางจะเป็นอักขระตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กทั้งหมดในช่วงที่[a-z]คุณสะดวกที่สุด เส้นทางจะเริ่มต้นที่มุมซ้ายบนเสมอ กฎระเบียบ อนุญาตให้ใช้ฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ กฎเริ่มต้นสำหรับอินพุต / เอาต์พุต ช่องโหว่มาตรฐานใช้ นี่คือcode-golfดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงชนะ Tiebreaker เป็นการส่งก่อนหน้า กรณีทดสอบ กริด # 1 ABCABCW …
22 code-golf  string  grid 

3
เบอร์โฮเลีย
เมื่อเราเรียนรู้จากหมายเลขศักดิ์สิทธิ์มีตัวเลขศักดิ์สิทธิ์ 5 หลัก ( 0, 4, 6, 8, 9) และจำนวนเต็มบวกซึ่งประกอบด้วยตัวเลขเหล่านั้นล้วนเป็นศักดิ์สิทธิ์ นอกจากนี้ความศักดิ์สิทธิ์ของตัวเลขคือผลรวมของหลุมในจำนวน ( +2สำหรับทุกคน0หรือ8และ+1อื่น ๆ ) ขณะนี้มีทรัพย์สินเพิ่มเติมที่ต้องคำนึงถึงเพื่อแสดงถึงความบริสุทธิ์ของตัวเลขอย่างแท้จริงและถูกต้อง คุณเห็นไม่ใช่แค่จำนวนของรูในหลักที่สำคัญ แต่ยังรวมถึงตำแหน่งที่มันเกิดขึ้นด้วย 88พิจารณาจำนวน 4โดยกฎเดิมของเราก็จะมีความศักดิ์สิทธิ์ของ แต่นั่นไม่ค่อยยุติธรรม! 8ด้านซ้ายจะทำงานมากขึ้นกว่าที่อื่น ๆ8- 10 ครั้งการทำงาน! ควรได้รับรางวัลสำหรับการทำงาน เราจะให้รางวัลกับความบริสุทธิ์พิเศษเท่ากับจำนวนความศักดิ์สิทธิ์ทั้งหมดของตัวเลขทางด้านขวา (รวมถึงคะแนนความบริสุทธิ์พิเศษที่ได้รับจากกฎนี้เป็นตัวเลขทางด้านขวา) ลบ 1 นี่คือตัวอย่างเพิ่มเติมที่ต้องพิจารณา: Number: 8080 Digital holiness: (2 + 7 - 1) + (2 + 3 - 1) + (2 + 1 …

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