คำถามติดแท็ก sequence

สำหรับความท้าทายที่เกี่ยวข้องกับการเรียงลำดับบางอย่าง

8
ลำดับการเรียงสับเปลี่ยนเกลียว
เราสามารถสะสมจำนวนธรรมชาติในเกลียวเป็นรูปสี่เหลี่ยมผืนผ้า: 17--16--15--14--13 | | 18 5---4---3 12 | | | | 19 6 1---2 11 | | | 20 7---8---9--10 | 21--22--23--24--25 แต่ตอนนี้เรามีพวกมันอยู่บนตะแกรงสี่เหลี่ยมเราสามารถคลายเกลียวในลำดับที่แตกต่างกันเช่นไปตามเข็มนาฬิกาเริ่มทิศเหนือ: 17 16--15--14--13 | | | 18 5 4---3 12 | | | | | 19 6 1 2 11 | | | | 20 7---8---9 10 | …

18
ค้นหาผลรวมไขว้ที่ n
กำหนดอินพุตของจำนวนเต็มบวกเดียวให้เอาต์พุต "ผลรวมข้ามทางเลือก" ที่สอดคล้องกับจำนวนเต็มนั้น n=5นำตัวอย่างของการป้อนข้อมูล หากต้องการหาผลรวมแบบข้ามทางเลือกอันดับแรกให้สร้างตารางสี่เหลี่ยมที่มีความกว้างและความสูงnซึ่งเริ่มจากซ้ายไปขวาและบนลงล่างเริ่มต้นที่1และเพิ่มขึ้นทีละตำแหน่ง: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 จากนั้นนำผลรวมจากกริดที่เป็น "กากบาท" (นั่นคือทั้งเส้นทแยงมุมรวมกัน): 1 5 7 9 13 17 19 21 25 1 5 7 9 13 17 19 21 …

3
คำสั่ง Abelian
พื้นหลังบางส่วน ในวิชาคณิตศาสตร์เป็นกลุ่มเป็น tuple ( G , •) ที่Gเป็นชุดและ•อยู่ในการดำเนินการเกี่ยวกับGดังกล่าวว่าสำหรับการใด ๆ สององค์ประกอบxและy ที่ในG , x • ปียังอยู่ในG สำหรับx , y , zในG , สัจพจน์พื้นฐานของกลุ่มมีดังนี้: Gถูกปิดภายใต้•, คือx • yในG การดำเนินการ•มีความสัมพันธ์เช่นx • ( y • z ) = ( x • y ) • z Gมีองค์ประกอบตัวตนนั่นคือมีeในGเช่นx • e = xสำหรับทุกx การดำเนินการ•เป็นinvertableคือมีอยู่, ขในGดังกล่าวว่า• x = …

9
การนับน้ำพุ
น้ำพุคือการจัดเรียงของเหรียญในแถวเพื่อให้แต่ละเหรียญสัมผัสสองเหรียญในแถวด้านล่างหรืออยู่ในแถวด้านล่างและแถวล่างมีการเชื่อมต่อ นี่คือน้ำพุ 21 เหรียญ: ความท้าทายของคุณคือการนับจำนวนน้ำพุที่แตกต่างกันด้วยจำนวนเหรียญที่กำหนด คุณจะได้รับเป็น input nเป็นจำนวนเต็มบวก คุณต้องส่งออกจำนวนnน้ำพุที่แตกต่างกันที่มีอยู่ กฎ I / O มาตรฐานห้ามช่องโหว่มาตรฐาน คำตอบควรจะสามารถคำนวณได้n = 10ภายในไม่กี่นาที ผลลัพธ์ที่ต้องการสำหรับn = 1 ... 10: 1, 1, 2, 3, 5, 9, 15, 26, 45, 78 ลำดับนี้เป็นOEIS A005169 นี่คือรหัสกอล์ฟ ไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ

8
ออโตเซลลูล่าร์ดิจิตอล
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในจำนวนเต็มบวกคี่และสตริงของเลขทศนิยม ( 0123456789) สตริงหมายถึงสิบรัฐหนึ่งมิติเซลล์หุ่นยนต์ แต่ละหลักครอบครองหนึ่งเซลล์และกฎการอัปเดตจากรุ่นหนึ่งไปยังอีกรุ่นหนึ่งคือทุกเซลล์กลายเป็นตัวเลขที่เกิดจากผลรวมของเซลล์ N ที่มีศูนย์กลางอยู่ที่เซลล์ modulo 10 เซลล์แรกและเซลล์สุดท้ายล้อมรอบราวกับว่าเพื่อนบ้านดังนั้นเซลล์จึงสามารถมีเซลล์ N อยู่กึ่งกลางได้ โปรดทราบว่า N อาจมีขนาดใหญ่กว่าความยาวของสตริงซึ่งหมายความว่ามันสามารถพันได้หลายครั้งและบางหลักจะอยู่ในผลรวมหลายครั้ง ตัวอย่างเช่นถ้า N คือ 7 และสตริงคือ038เพื่อให้เห็นภาพของเซลล์เพื่อหาผลรวมเราสามารถเขียน038ซ้ำแบบไม่สิ้นสุดในทั้งสองทิศทาง ...038038038038038... ดังนั้นตัวเลขที่0จะเปลี่ยนเป็นผลรวมของ 7 หลักอยู่ที่ใด ๆ0โมดูโล 10: ...038038038038038... ^_____^ | sum all these นี่คือซึ่งเป็น(0+3+8+0+3+8+0)%102 ในทำนองเดียวกันตัวเลข3และ8เปลี่ยนเป็นกำหนดโดย(3+8+0+3+8+0+3)%10= 5และ(8+0+3+8+0+3+8)%10= 0ตามลำดับ ดังนั้นรุ่นหลัง038คือ250เมื่อ N คือ 7 โปรแกรมหรือฟังก์ชั่นของคุณจำเป็นต้องพิมพ์หรือคืนค่าสายอักขระหลักของสายป้อนตัวเลข เช่นใช้กฎการอัปเดตหนึ่งครั้งกับแต่ละเซลล์และให้ผลลัพธ์ รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ กรณีทดสอบ [digit string] -> [N = 1], …

9
ลำดับรอบผลรวมของเซเว่น
ดูตารางสูตรคูณ sevens จาก 7 × 0 ถึง 7 × 9: 0, 7, 14, 21, 28, 35, 42, 49, 56, 63 ถ้าเราแค่ดูตัวเลขในตำแหน่งที่เราได้รับการเปลี่ยนแปลงของตัวเลข 0 ถึง 9: 0, 7, 4, 1, 8, 5, 2, 9, 6, 3 ลองพิจารณาจำนวนเต็มเลขทศนิยมบวก N และแทนที่แต่ละหลัก D ใน N ด้วยตัวเลขแทนตำแหน่งที่ 7 × D ยกตัวอย่างเช่น15209กลายเป็น75403เพราะ1แผนที่7, 5แผนที่เพื่อ5, 2แมปไป4, 0แมปไป0และแมปไป93 ตอนนี้ให้ทำซ้ำกระบวนการนี้ด้วยจำนวนเต็มทศนิยมใหม่นี้จนกว่าเราจะเห็นรอบเช่นจนกว่าจำนวนเต็มที่เราได้เห็นมาแล้ว ตัวอย่างเช่นเมื่อ15209เราได้วัฏจักร …

6
การแจกแจง N-Dimensions เวกเตอร์
รับจำนวนเต็มบวกk > 1และไม่ใช่จำนวนเต็มลบiสร้างk-tuple (หรือk-dimensional vector) ของจำนวนเต็มไม่เป็นลบ ทุกkแผนที่จากℕเพื่อℕ k , ต้อง bijective นั่นคือทุกการป้อนข้อมูลiควรผลิต tuple ที่แตกต่างกันและทุก tuple iเป็นไปได้ที่จะต้องมีการผลิตโดยการป้อนข้อมูลบางส่วน คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและส่งผลลัพธ์ผ่าน STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์ คุณสามารถใช้รูปแบบรายการแบบแบนที่สะดวกและไม่คลุมเครือสำหรับเอาท์พุท วิธีการแก้ปัญหาของคุณควรกำหนดไม่มีการ จำกัด เทียมkและiแต่คุณอาจคิดว่าพวกเขาพอดีกับขนาดจำนวนเต็มภาษาพื้นเมือง อย่างน้อยที่สุดคุณต้องสนับสนุนค่าถึง255แม้ว่าขนาดจำนวนเต็มดั้งเดิมของคุณจะเล็กกว่านั้น สำหรับการใด ๆ1 < k < 32, รหัสของคุณควรสร้างผลลัพธ์ในเรื่องของการวินาที (แน่นอนถ้าคำตอบของคุณไม่สนับสนุนว่าเนื่องจากขนาดใหญ่เพื่อการปกครองก่อนหน้านี้ จำกัด การปรับเปลี่ยนตาม) นี้ควรจะไม่มีปัญหา: มันเป็นไปได้ที่จะแก้ปัญหาความท้าทายเช่นนี้ว่ามันทำงานได้ถึง 2 128ในไม่กี่วินาที แต่วงเงินที่จะมีการหลีกเลี่ยงการตอบที่จริงสำทับจากการที่จะหาผลi < 231i0i โปรดระบุคำอธิบายเกี่ยวกับการทำแผนที่ที่คุณเลือกและคำตอบว่าทำไมมันถึงเป็น bijective (ไม่จำเป็นต้องพิสูจน์อย่างเป็นทางการ) นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุด …

11
ลำดับการข้ามกริด
หากคุณนำกระดาษกราฟหนึ่งแผ่นและวาดเส้นที่ลาดเอียงที่ไปmหน่วยขวาและnหน่วยขึ้นคุณจะข้ามเส้นกริดn-1แนวนอนและm-1แนวตั้งในบางลำดับ เขียนรหัสเพื่อส่งออกลำดับที่ ตัวอย่างเช่นm=5และn=3ให้: อาจเกี่ยวข้องกับ: การสร้างจังหวะยูคลิด , การเอียง Fibonacci , FizzBuzz อินพุต:สองจำนวนเต็มบวกm,nที่ค่อนข้างสำคัญ เอาท์พุท:กลับหรือพิมพ์ข้ามเป็นลำดับของสองโทเค็นที่แตกต่างกัน ตัวอย่างเช่นมันอาจเป็นสตริงของHและVรายการTrueและFalseหรือ0ของและ1พิมพ์บนบรรทัดแยก อาจมีตัวคั่นระหว่างโทเค็นตราบใดที่มันยังคงเหมือนเดิมเสมอและไม่ใช่พูดว่าเป็นจำนวนช่องว่างที่แปรผัน กรณีทดสอบ: กรณีทดสอบแรกให้ผลลัพธ์ที่ว่างเปล่าหรือไม่มีผลลัพธ์ 1 1 1 2 H 2 1 V 1 3 HH 3 2 VHV 3 5 HVHHVH 5 3 VHVVHV 10 3 VVVHVVVHVVV 4 11 HHVHHHVHHHVHH 19 17 VHVHVHVHVHVHVHVHVVHVHVHVHVHVHVHVHV 39 100 HHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHHHVHHVHHHVHHVHHHVHHVHHHVHH ในรูปแบบ(m,n,output_as_list_of_0s_and_1s): (1, …

6
ค้นหาหมายเลข semiperfect ดั้งเดิม
หมายเลขเซมิเพอร์เฟค หมายเลข semiperfect / pseudoperfect เป็นจำนวนเต็มเท่ากับผลรวมของส่วนหนึ่งส่วนหรือทั้งหมดของตัวหาร (ยกเว้นตัวเอง) ตัวเลขที่เท่ากับผลรวมของตัวหารทั้งหมดนั้นสมบูรณ์แบบ Divisors of 6 : 1,2,3 6 = 1+2+3 -> semiperfect (perfect) Divisors of 28 : 1,2,4,7,14 28 = 14+7+4+2+1 -> semiperfect (perfect) Divisors of 40 : 1,2,4,5,8,10,20 40 = 1+4+5+10+20 or 2+8+10+20 -> semiperfect ดั้งเดิม หมายเลข semiperfect ดั้งเดิมคือหมายเลข semiperfect ที่ไม่มีตัวหาร semiperfect (ยกเว้นตัวมันเอง …

3
ค้นหารูปแบบในเงื่อนไข
ในความท้าทายนี้งานของคุณคือการหาวัสดุพิมพ์ที่มีโครงสร้างที่กำหนด อินพุต ข้อมูลของคุณจะเป็นสองสายที่เป็นตัวเลขไม่ว่างเปล่าเป็นรูปแบบ pและข้อความ tแนวคิดก็คืออักขระแต่ละตัวจะpแทนซับสตริงที่ไม่ว่างเปล่าที่ต่อเนื่องกันtซึ่งเกิดขึ้นถัดจากกันและกันและpแสดงถึงการต่อกันของมัน อักขระที่เหมือนกันสอดคล้องกับสตริงย่อยที่เหมือนกัน ตัวอย่างเช่นรูปแบบaaหมายถึงสแควร์ที่ไม่ว่างเปล่า (สตริงที่ได้จากการต่อสตริงที่สั้นกว่าเข้ากับตัวเอง) ดังนั้นรูปแบบaaสามารถจับคู่สตริงย่อยbyebyeได้ด้วยการaจับคู่แต่ละbyeครั้ง เอาท์พุต หากข้อความที่tมีสตริงย่อยที่pการแข่งขันแล้วส่งออกของคุณจะเป็นสตริงย่อยที่มีทวิภาคแทรกระหว่างสตริงที่ตรงกับตัวละคร: pตัวอย่างเช่นถ้าเรามีt = byebyenowและp = aaก็bye:byeเป็นผลลัพธ์ที่ยอมรับได้ อาจมีหลายตัวเลือกสำหรับสตริงย่อยที่ตรงกัน แต่คุณจะส่งออกหนึ่งในพวกเขาเท่านั้น ถ้าtไม่ได้มี substring :(จับคู่ของคุณออกจะเป็นหน้าเศร้า กฎและคำชี้แจง ตัวละครที่แตกต่างกันpสามารถสอดคล้องกับสตริงเหมือนกันเพื่อให้สามารถจับคู่สตริงp = aba AAAโปรดทราบว่าตัวละครจะต้องสอดคล้องกับสตริงที่ไม่ว่างเปล่า; โดยเฉพาะอย่างยิ่งถ้าpมีความยาวมากกว่าการส่งออกจะต้องมีt:( คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบและคุณยังสามารถเปลี่ยนลำดับของอินพุตทั้งสองได้ จำนวนไบต์ต่ำสุดที่ชนะและไม่อนุญาตช่องโหว่มาตรฐาน กรณีทดสอบ pattern text -> outputได้รับในรูปแบบ โปรดทราบว่าอาจมีเอาต์พุตอื่นที่ยอมรับได้ a Not -> N aa Not -> :( abcd Not -> :( aaa rerere -> …
17 code-golf  string  code-golf  ascii-art  geometry  code-golf  ascii-art  code-golf  sequence  stack  code-challenge  number  sequence  answer-chaining  code-golf  code-challenge  math  combinatorics  binary-matrix  code-golf  number  code-golf  cryptography  bitwise  code-golf  sudoku  code-golf  brainfuck  metagolf  code-golf  probability-theory  number-theory  primes  fewest-operations  factoring  golf-cpu  code-golf  restricted-source  code-golf  graphical-output  sequence  binary  code-golf  tips  c#  code-golf  geometry  code-golf  graphical-output  fractal  code-golf  number  sequence  code-golf  number  array-manipulation  popularity-contest  game  board-game  code-golf  puzzle-solver  grid  code-golf  ascii-art  geometry  grid  tiling  code-golf  ascii-art  whitespace  balanced-string  code-golf  card-games  king-of-the-hill  javascript  code-golf  whitespace  balanced-string  code-golf  code-golf  math  abstract-algebra  code-golf  java  code-golf  interpreter  stack  code-golf  base-conversion  code-golf  tips  code-golf  ascii-art  geometry  brainfuck  metagolf  code-challenge  math  quine  code-generation  code-golf  number  kolmogorov-complexity  arithmetic  expression-building  code-golf  string  code-golf  quine  popularity-contest  code-golf  base-conversion  code-challenge  image-processing  code-golf  conversion  coding-theory 

22
ระบุจำนวนที่น้อยที่สุดที่มีตัวหาร N
ฟังก์ชั่นของคุณใช้จำนวนธรรมชาติและส่งกลับจำนวนธรรมชาติที่เล็กที่สุดซึ่งมีตัวหารจำนวนนั้นรวมถึงตัวมันเอง ตัวอย่าง: f(1) = 1 [1] f(2) = 2 [1, 2] f(3) = 4 [1, 2, 4] f(4) = 6 [1, 2, 3, 6] f(5) = 16 [1, 2, 4, 8, 16] f(6) = 12 [1, 2, 3, 4, 6, 12] ... ฟังก์ชั่นไม่จำเป็นต้องส่งคืนรายการตัวหาร แต่เป็นเพียงตัวอย่างเท่านั้น

10
เมทริกซ์จากน้อยไปมาก
"เมทริกซ์จากน้อยไปมาก" เป็นเมทริกซ์ที่ไม่มีที่สิ้นสุดของจำนวนเต็ม (รวม 0) ซึ่งองค์ประกอบใด ๆ เป็นองค์ประกอบที่มีขนาดเล็กที่สุดซึ่งไม่เคยใช้ในแถวและคอลัมน์นั้นมาก่อน: | 1 2 3 4 5 6 ... --+---------------- 1 | 0 1 2 3 4 5 ... 2 | 1 0 3 2 5 4 ... 3 | 2 3 0 1 6 7 ... 4 | 3 2 1 0 7 …
17 code-golf  math  matrix  programming-puzzle  code-golf  music  code-challenge  programming-puzzle  code-golf  fastest-code  code-golf  number  game  code-golf  combinatorics  code-golf  math  sequence  restricted-complexity  code-golf  number  random  code-golf  array-manipulation  code-golf  math  matrix  code-golf  number  sequence  counting  code-golf  math  number  sequence  popularity-contest  number  sequence  code-golf  music  code-golf  number  code-golf  ascii-art  arithmetic  code-golf  code-golf  number  code-golf  code-challenge  array-manipulation  code-golf  grammars  code-challenge  polyglot  code-golf  game  math  python  programming-puzzle  code-challenge  king-of-the-hill  code-challenge  fastest-code  primes  number-theory  number-theory  primes  fastest-code  factoring  popularity-contest  compile-time  code-golf  math 

1
Regex กำลังตรวจสอบความถูกต้องของ regex [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Code Golf Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา สร้าง regex ที่จะยอมรับสตริง regex เป็นอินพุตและตรวจสอบว่ามันถูกต้อง โดยทั่วไป regex ของคุณควรจะสามารถตรวจสอบตัวเอง (ไม่ควรตรวจสอบ regex ที่ไม่ถูกต้องดังนั้นคุณจึงไม่สามารถใช้.*;) รสชาติของคุณจะต้องได้รับการสนับสนุนอย่างเต็มที่จากการใช้งานที่รู้จักกันดี (Perl, sed, grep, gawk, ฯลฯ ) และต้องสนับสนุนอย่างเต็มที่ว่าการใช้งานเหล่านั้นรองรับอะไรบ้าง [ไม่ต้องกังวลกับทนายพูด ฉันแค่พยายามลบช่องว่างที่เป็นไปได้สำหรับสมาร์ท ***] ฉันเขียนโค้ดกอล์ฟแต่ฉันกังวลว่ามันจะให้ความรู้แก่ผู้ที่รู้จักและใช้รสชาติที่ไม่มีคุณสมบัติ หรือความกังวลของฉันไม่มีมูลความจริง?
17 code-challenge  code-golf  code-golf  game  sudoku  code-challenge  math  ai-player  code-challenge  sorting  rosetta-stone  code-challenge  code-challenge  programming-puzzle  code-golf  number  code-golf  maze  code-golf  math  regular-expression  code-golf  sequence  code-golf  graph-theory  code-golf  string  word-puzzle  natural-language  brainfuck  metagolf  optimized-output  fastest-algorithm  code-golf  game-of-life  cellular-automata  code-golf  puzzle-solver  grid  code-golf  combinatorics  binary-tree  popularity-contest  code-challenge  code-golf  ascii-art  kolmogorov-complexity  brainfuck  metagolf  code-golf  c  date  code-golf  word-puzzle  crossword  word-search  code-golf  code-golf  quine  code-golf  string  random 

2
จำนวนการเอียงที่แตกต่างของจตุรัส n X n พร้อมโพลิโอโนเมียฟรี
ลำดับ OEIS "nice"ใหม่ล่าสุดA328020เพิ่งเผยแพร่ไม่กี่นาทีที่ผ่านมา จำนวนการเอียงที่แตกต่างของจตุรัส n X n พร้อมโพลิโอโนเมียฟรี ลำดับนี้นับการเอียงขึ้นอยู่กับสมมาตรของจตุรัส ลำดับมีหกคำ แต่ฉันต้องการดูว่าคนที่นี่สามารถขยายได้อีกหรือไม่ ตัวอย่าง เพราะn=4มี 22 กริดดังที่แสดงในภาพนี้จาก OEIS เครดิต: Jeff Bowermaster, ภาพประกอบ A328020 (4) ท้าทาย เช่นเดียวกับความท้าทายที่ผ่านมาเป้าหมายของความท้าทายนี้คือการคำนวณเงื่อนไขให้มากที่สุดเท่าที่จะเป็นไปได้ในลำดับนี้ซึ่งเริ่มต้นขึ้น1, 1, 2, 22, 515, 56734และที่ใดที่คำที่ n-th เป็นจำนวนการเอียงของกริด n x n กับ n-polyominoes เรียกใช้รหัสของคุณตราบเท่าที่คุณต้องการ ผู้ชนะของความท้าทายนี้จะเป็นผู้ใช้ที่โพสต์เงื่อนไขมากที่สุดของลำดับพร้อมกับรหัสของพวกเขาเพื่อสร้างมัน หากผู้ใช้สองคนโพสต์เงื่อนไขจำนวนเดียวกันผู้ใดก็ตามที่โพสต์ข้อความล่าสุดของพวกเขาจะได้รับชัยชนะเร็วที่สุด

3
การลบจุดออกจากอาร์เรย์รูปสามเหลี่ยมโดยไม่สูญเสียรูปสามเหลี่ยม
ฉันมีปัญหาเกี่ยวกับ combinatoricsที่ฉันต้องการนำมาใช้กับOEISปัญหาคือฉันไม่มีเงื่อนไขเพียงพอ ความท้าทายของรหัสนี้คือการช่วยฉันคำนวณเงื่อนไขเพิ่มเติมและผู้ชนะจะเป็นผู้ใช้ที่มีการส่งที่มีจำนวนคำมากที่สุด ปัญหา สมมติว่าผมให้คุณเป็นแถวสามเหลี่ยมของหลอดไฟที่มีความยาวด้าน :nnn o o o o o o o o o o o o o o o o o o o o o 1 2 ... n ฉันจะเปิดหลอดไฟสามหลอดที่สร้างรูปสามเหลี่ยมด้านเท่า "ตั้งตรง" ดังตัวอย่างต่อไปนี้: o o x o o o o o o o o x o o x o …

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