404 - Унікальна сторінка 404 не знайдена


26

Натхненний поліглот на сторінці переповнення стека 404 :

Мета

Ваша мета проста: створити поліглот, який виводить число 404 , а потім припиняє, якомога більше мов.

Обмеження

Ось поворот, є обмеження, щоб зробити його складніше:

Ви повинні написати N програм і вибрати N мов у певному порядку. я го програма повинна друкувати 404на перших я мовах, але не будь-якою мовою після того , як я го. Це потрібно для того, щоб дуже прості рішення не руйнували конкуренцію

Оцінка:

  • Перший критерій для визначення переможця - кількість мов, на яких працює основна програма.
  • Другий критерій - кількість байтів, де програми з більшою кількістю мов мають більше значення для цього критерію.
  • Третій та остаточний критерій - час подання

Роз'яснення:

Вихідні коди програм не повинні мати жодного відношення. Вони виконуються як окремі програми. Будь-яка з програм може вивести трейлінг та / або провідний пробіл. ПРОГРАМИ НЕ МАЮТЬ БУТИ ПІДТРИМКИ ВСІХ ІНШИХ!

Дякуємо @MartinEnder за краще пояснення!


4
Ви думаєте, хтось збирається перейти на 404 мови?
Джо Кінг

1
@JoKing Це було б більше, ніж нинішні виклики "додати мову до поліглоту", тому, ймовірно, ні ...
Esolanging Fruit

1
"Вихідний код підпрограм не повинен мати жодного відношення" - але вони повинні бути послідовністю повного (байтового) програм, який працює на всіх N мовах, правда? Якщо ви не можете, будь ласка, визначте "підпрограма"?
Джонатан Аллан

1
+1 лише тому, що тепер я знаю, що це за ганьба. Я просто ігнорував це раніше. О ні, цього зараз неможливо побачити!
серхіол

1
@ Zacharý чому це? Вони друкуються 404. Якщо пробіл із пробілами добре, я думаю, що це має бути нормально.
MD XF

Відповіді:


27

54 мови, 1331 байт

> <> , Голі> <> , Foo , Befunge-93 , Befunge-98 , Brainfuck , Мозок-Флак , Python 2 , Python 3 , Hexagony , Perl , Рубін , Джулія , Кардинал , Brainbash , Turtlèd , Deadfish ~ , Прогалини , Braille , Rail , Fission , ETA , Trigger , Модифікуючий Brainfuck , Numberwang , Власне , Emoji , Symbolic Brainfuck , TinCan , Alphuck , Shove , Cood , Wise , Width , Whispers , Thue , Surface , Stones , evil , Set , Prelude , Gaot ++ , Cubix , Cubically , PATH , Commercial , Брайан і Чак, Мавпи , Nhohnhehr , Beam, AsciiDots , Alumin , Alice , Whirl

Це стає дуже довгим, тому за пропозицією @ MDXF я переміщую підпрограми та коментарі до суті . Програма тут лише фінальна програма. Дякуємо MDXF знову за тест-драйвер TIO.

54. Вир

##\$"404"#N#S# , ,,#$#?@\404!?@GJlICJlGCC*G^+0%=%=+0%x&fqpqqqiipsoddddoiipsohphhhhyhhhh? 	  ?nnn4$4#!000110000011110000100000100000110000011001100000111100001110011000111000110000
#?\++++:----:++++:H@((((4O0O4O@((((()()()){}){x}x){}x()){}){}()){}){})<[-]>[-]-[<+>-----]<+x%"404"?.⌂----.++++.>11     
#i(N/"404"ooo@ENTHOEONHSSEONTHOEONSETssipceaiiiiiscejiiiijeeeejapmzaeeaeueewzaeeeaeewzaeeaeueewqs??|?)999|997+|++++!999777+++++!999997+++++!   	  
print(404)	
 		
 		
 	
__DATA__=1
# \"404"*CC'[-][ .-$_"404"&]
"""pp
I want 404 of this
How much is it
#  -52, Z, -1                          #
#  -48, Y, -1                          #
#  -52, X, -1                          #
[-][
x::=~404
::=
x
]<<<
> 404
>> Output 1
red up two blue up red up one blue up red up two blue up
baaaaa bleeeeeeeeet bleeeeeeeeet baaaaa bleeeeeeeeet
a now 404 dollar off!
a has been selling out worldwide!
2 LEFT
2 LEFT
2 UP
2 LEFT
2 TEACH
1 LEFT
1 RIGHT
1 BOND
1 BOND
1 TEACH
2 YELL
1 FIGHT
2 YELL
1 TEACH
2 YELL
set ! 52
set ! 48
set ! 52
+------+
|$0011\|
|/000\0|
|0/0@11|
|00  10|
|0\10/0|
|\1100/|
+------+
$'main'
 \-444o000o444omm^

[-][$++++++++++++++++++++++++++++++++++++++++++++++++++++.----.++++.#
<<<<<<```>>>>.>.>.
]
ss"""
#7777777777777777777777777777724091557093543643💬404💬➡77▲▲▲²²▲²²¡▼▼▼▼¡▲▲▲▲¡⠎⡆⡎⡆⢐⠣⠃s&&&&~-<<:<<:<<<:<:>>>>>>>>:^||||G<>

Спробуйте в Інтернеті!

Вир описується як Turning Tarpit [sic], який використовує лише дві інструкції, 1 і 0. 1 обертає поточне колесо інструкцій (або математичне колесо, або колесо управління), 0 змінює обертання колеса і два 0s виконує інструкцію і перемикає колеса. Відповідні інструкції є на першому рядку:

000110000011110000100000100000110000011001100000111100001110011000111000110000

000110000 Switch to math wheel and execute math.not (math.val = 1)
011110000 Execute math.store, (memval = math.val = 1)
10000     Execute math.add, (math.val = math.val+memval = 1+1 = 2)
010000    Execute math.store (memval = math.val = 2)
0110000   Execute math.multiply, (math.val = math.val*memval = 2*2 = 4)
01100     Execute math.store (memval=math.val) and switch to the ops ring
110000    Execute ops.one (ops.val = 1)
011110000 Executes ops.intio, printing memval (4)
11100     Add one to memory pointer (memval=0)
1100      Execute maths.nop to switch back to ops ring
011100    Execute ops.intio, printing memval (0)
01100     Execute maths.store, (memval=maths.val=4)
00        Execute maths.intio, printing memval (4)

Ведучі 01 скасовують один одного, а кінцеві 01 викликають виняток з плаваючою точкою.

Редагувати: виправлено купу зламаних речей

(Команди, про які слід бути обережними в майбутньому: UDLR%"[.]o473psjw :)

Якщо будь-які програми працюють для майбутніх мов або не працюють для поточної чи попередньої мов, будь ласка, прокоментуйте їх.


@ Zacharý RE: мій коментар в рамках ОП - на деяких етапах це є, ...print(0 or 404)але це не є подальшим N-програмою на 97 байт.
Джонатан Аллан

@JonathanAllan Так, мене теж мало хвилює це. Підпрограма дійсно означає , що вони пов'язані з остаточної програми, але я збираюся від питання специфікації тут
Джо Кінг

Ні, ви не знімаєте специфікацій питань. "Подання" означало всю посаду, а не код.
Zacharý

1
@Mego Готово. Трохи важче, ніж пропонувалося, але все вийшло
Jo King

1
Я думаю, ви повинні мати можливість додати TinCan . @MDXF теж. Я не можу, тому що Jelly і M не дозволяють починати жодну лінію #. Я дуже шкодую, включаючи ці дві мови ха-ха.
ділнан

16

53 мови, 2789 байт

Bash, Foo, Implicit, Charcoal, Emoji,> <>, rk, Brain-Flak, C, Set, Cood, Arcyou, TRANSCRIPT, SILOS, Commercial, C ++, Braille, Deadfish ~, Memescript 1.0, ETA, Python 1, Python 3, PARI / GP, Lily, Fission, Decimal, Cubically, bitwise, TinCan, Whispers, Thue, Emotinomicon, що ??!, Ок !, зло, Lennyfuck, Blablafuck, Stones, TacO, COW, Symbolic Brainfuck, Underload, Rail , Ретикуляр, Gaot ++, PATH, axo, Monkeys, Nhohnhehr, xEec, VTFF, K-on Fuck, Churro та Forked. Спробуйте все в Інтернеті у тест-драйвері!

Приєднуйтесь до нас у чаті для цього виклику!


Ця публікація стала занадто великою, тому ось суть, яка містить мій прогрес. Поточна заключна програма:

Роздвоєний

#undef l" 404"p;((((\)0)0)0)0;(😭4😲⏬😭0😲⏬😭4😲⏬«404»[:5*11-1/1]%&)(404)S^/*NNNNTNNEONHSSEONTHOEONiisoddddoiisohOok! Ook! Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. ????!?!!?!??!!!???????????????!?!!!?!????!??????????????!!??!??!??!????!⎚404»💬404💬➡ to for the and of to to to to to is the and  a to to to to a and and and and a ;n4n0n4
#11404D301          \4%0%p%&
""""echo 404|| rk:start int x = 404 print: x rk:end R"404"*
exit;
#;
OUT &52 &1
OUT &48 &1
OUT &52 &1 */
#include<stdio.h>
main(){char aA[]={37,100,0};printf(aA,404);}/*<<<<<mzaeeeaeeaaaawuuuuwaaaa what the frick frack backtrack snick snack tic tac snick snack patty wack diddily dack tic tac diddily dack frick frack quarterback frick frack
x::=~404
::=
x #
set ! 52
#;⠎⡆⡎⡆⢐⠣⠃▲▲▲²²▲²²¡▼▼▼▼¡▲▲▲▲¡(♥ ͜ʖ♥)( ͡°((∩ ͡° ͜ʖ ͡°)⊃━☆゚.*( ͡° ͜ʖ ͡°)ᕦ( ͡°ヮ ͡°)ᕥ(♥ ͜ʖ♥)(♥ ͜ʖ♥)(♥ ͜ʖ♥)(♥ ͜ʖ♥)(♥ ͜ʖ♥)) ͡°)(∩ ͡° ͜ʖ ͡°)⊃━☆゚.*( ͡° ͜ʖ ͡°)(> ͜ʖ<)(♥ ͜ʖ♥)(♥ ͜ʖ♥)(♥ ͜ʖ♥)(♥ ͜ʖ♥)(> ͜ʖ<)( ͡° ͜ʖ ͡°)( ͡° ͜ʖ ͡°)( ͡° ͜ʖ ͡°)( ͡° ͜ʖ ͡°)(> ͜ʖ<)うんうんうんうんたんたんたんたんうんうんうんたんうんたんうんうんうんうんうんたんたんうんたんたんうんたんたんうんたんたんうんたんたんたんたんたんうんうんたんうんたんうんたんうんうんうんたんたんうんたんたんうんたんたんうんたんたんたんうんうんうんたんうんうんたんうんうんたんうんうんたんうんたんうんうん {o}===}{======={o}{o}}{======={o}{o}===}{======={o}
> 404
>> Output 1
I want 404 of this.
How much is it?
Ju is here.
>Ju, 404
>X Ju
b = 404
printInt b ;
set ! 48 MoOMoOMoO
set ! 52 MoOOOMmoO
+--------+
|$00110\ |
|/00001/ |
|\11000\ |
|/11000/ |
|\0100 \ |
|        | baaaaa bleeeeeeeeet
|  404p@ |
|        |
+--------+
$'main': OOMmOoOOM ;
 \-444o000o444o-{<$$^- >}+{-----v}+.----.++++.#
#  bleeeeeeeeet baaaaa ^        < bleeeeeeeeet >
2 LEFT
2 LEFT
2 UP
2 LEFT
2 TEACH
1 LEFT
1 RIGHT
1 BOND
1 BOND
1 TEACH
2 YELL
1 FIGHT
2 YELL
1 TEACH
2 YELL
red up two blue up red up one blue up red up two blue up ;
o now 404 dollars off!
o has been selling out worldwide!
#  -52, Z, -1                          #
#  -48, Y, -1                          #
#  -52, X, -1                          #
⡆⡎⡆⢐⠣⠃((((p 404)((()(((()()()){}){}){}){}){}){}){}) h#4 o# h#0 o# h#4 o# """
print(404)#"*/

Спробуйте в Інтернеті!

Мій новий (реалізований) esolang!


що таке фрік-фрак-фідді (дай собаці кістку) це мова? (congratz про перехід мене)
Jo King

@JoKing чесно кажучи, я не маю уявлення, що мені пройшло через голову, коли я виголосив цю мову .... також дякую за допомогу з Брайлем та Deadfish ~, сподіваюся, ви не заперечуєте, що я використовував ваш код?
MD XF

не хвилюйтесь, товариш
Джо Кінг,

Я бачу, MDXF проти Ділнан.
Zacharý

2
@ Zacharý MD XF v Dylnan v Jo King; кожного разу, коли я тягнусь вперед, я засинаю, а потім мушу йти до школи, і до того часу, коли я повернусь, вони обоє знову випереджають, будуючи мої мови та один одного ... зітхання
MD XF

13

34 мови, 387 символів

Jelly , M , Pyon , Proton, Python 3, Python 2, Python 1, Perl 6, Perl 5, Ruby, bc, Pari / GP, brainfuck, Emoji, Emotin🌗micon, Charcoal, Braingolf, Whitespace, Deadfish ~, Deadfish, самомодіфіцірующіеся Brainfuck, Символічний Brainfuck, Numberwang, кардинал, на самому ділі, Поділ, Прелюдія, Brain-Flak (BrainHack), Alphuck, Deadfish х, Taco, Брайль, гк , зло

Ця відповідь стає дуже довгою, тому ось повну відповідь. Відтепер тут зберігатиметься лише остання програма.

Якщо хтось виявить, що одна з програм зламана для однієї мови або одна програма працює для мови, якої вона не повинна, дайте мені знати.

print(404)   	  
+1#<[-]>--[<+>-----]"404".⌂<+.----.++++.💬404💬➡😒😀😒😨😨😨⎚404»___pppissiiiisiiiio▲▲▲²²▲²²¡▼▼▼▼¡▲▲▲▲¡sipceaiiiiiscejiiiijeeeejaxxcxxxcxxxKddddKcxxxx7777777724091557093543643%R"404";77999++++++++!++++++++6+1+!++++++5++++!> @p404 sp7 rk:start print: "404"77szaeeaeueewzaeeeaeewzaeeaeueew
   	  
+1#((a(()a((()(((()()())a{})a{})a{})a{})a{})a{})a{})	
 		
 		
 	


+1#ṛ“Nạç»⠎⡆⡎⡆⢐⠣⠃

Спробуйте в Інтернеті!


Нічого собі, привіт, щойно ви видували всіх інших з води.
MD XF

@MDXF Дякую! Я планую робити більше, я просто зараз повинен зупинитися.
dylnan

Якби тільки версії Julia були досить різними, я міг би побити вас на 10 байтів цим зітханням
MD XF

@MDXF Хтось опублікував подвійну відповідь Джулії на запитання поліклінічного трюку чи лікування, використовуючи помилку, але її видалили, і я не пам’ятаю, що це було
dylnan

@dynlan добре, я можу побачити видалені повідомлення, тож я піду перевірити це, дякую!
MD XF

11

11 мов, 10 байт

Піон

print(404

Піон, Пітон 2

print 808//2

Pyon, Python 2, Python 1

print None or 404

Pyon, Python 2, Python 1, Python 3

die=0
print(die or 404);

Pyon, Python 2, Python 1, Python 3, Lua

print(None or 404)

Pyon, Python 2, Python 1, Python 3, Lua, Perl 5

print(404 or 0)

Pyon, Python 2, Python 1, Python 3, Lua, Perl 5, Ruby

;print("40"+"4")

Pyon, Python 2, Python 1, Python 3, Lua, Perl 5, Ruby, Swift 4

print("40"+"4")

Pyon, Python 2, Python 1, Python 3, Lua, Perl 5, Ruby, Swift 4, Perl 6

print(404**1)

Pyon, Python 2, Python 1, Python 3, Lua, Perl 5, Ruby, Swift 4, Perl 6, Julia

print(404);

Pyon, Python 2, Python 1, Python 3, Lua, Perl 5, Ruby, Swift 4, Perl 6, Julia, Lily

print(404)

Приємно. Дуже чиста і проста відповідь, і в ній ще багато мов
dylnan

6

4 мови: CJam, Python, Underload,> <>

Наступні роботи в CJam, але не Python, Underload або> <>:

404
  • Для CJam: Це підштовхує буквальне 404до стека. Програма закінчується, і 404вихід виводиться.
  • Для Python: Ця програма складається з одного виразу 404. Вираз оцінюється, а програма припиняється.
  • Для недовантаження: 4і 0є недійсними командами, тому інтерпретатор TIO їх просто ігнорує, а програма припиняється.
  • До> <>: 404штовхає 4, 0і 4до стека. IP обертається до початку, і програма повторюється нескінченно.

У CJam або Underload працює (хоча вона помиляється), але не Python або> <>:

N(404)S;(\
  • Для CJam: Nвисуває рядок (масив символів), що містить новий рядок до стеку. (вискакує окремий символ (новий рядок) з рядка. 404натискає 404на стек, а потім )збільшує його, щоб дати 405. S;просуває пробіли, а потім негайно видаляє його. (декременти знову, щоб отримати 404, а потім \поміняє новий рядок і 404. 404\nвиводиться (порожній масив відображається як нічого).
  • До недооцінки: Nігнорується. (404)просуває рядок 404до стека. Sвиводить його. ;ігнорується. (змушує перекладача намагатися шукати закриття) , але, оскільки жодного не знайдено, програма переходить у налаштування.
  • Для Python: Це неправильний синтаксис (за виразом N(404)йде ідентифікатор S, який неправильно формується), тому програма помиляється.
  • До> <>: Nнедійсна інструкція, тому програма помиляється.

Наступні роботи в CJam (хоча це помилки), Underload або Python, але не> <>

[]
Le=404
+Le#(404)S
(print(404))
  • Для CJam: []виштовхує порожній масив до стеку і Lвисуває порожній масив до стеку. e=підраховує кількість подій []в [], даючи 0. 404штовхає 404до стека. +додає два числа разом, даючи 404. Lзнову натискає порожній масив на стек і e#створює коментар, який триває до кінця рядка. (намагається вивести елемент з масиву, але оскільки верхній елемент стека - це порожній масив [], програма помиляється. 404все ще вихід.
  • Для Python: []це твердження, що складається з неоперативної інструкції. Le=404визначає змінну, Leяка дорівнює 404. +Leприймає одинарний плюс змінної Le(досить марна операція) і результат відкидається. #(404)S- це рядковий коментар. (print(404))відбитки 404.
  • Для недостатнього завантаження: Єдина відповідна частина (404)S, яка натискає 404на стек і видає її. (print(404))натискає print(404)на стек, але з цим нічого не робиться і програма припиняється.
  • До> <>: [намагається вивести число з верхнього стека на метастак, а потім вивести ці елементи з цього стека і перетворити їх у новий стек, який потім висувається до метастака. У стеку немає номера, тому програма помиляється.

Наступні роботи в CJam (хоча це помилки), Python, Underload та> <>

"404nnn;\
"
Le=404
+Le#(404)S
(print(404))
  • К Джем: Більшість того, що я говорив минулого разу, стосується тут. Замість того [], щоб бути , у нас тепер є рядковий буквал, але зміст все ще не важливий.
  • До Python: Більшість того, про що я говорив минулого разу, стосується тут. Замість того, щоб бути[] , , невикористаний перший вираз тепер є рядковим буквеним, але зміст все ще є неважливим.
  • До недостатнього завантаження. Тут стосується всього, про що я говорив востаннє. Усі команди все ще ігноруються.
  • До> <>: "Починається рядовий режим, і IP обертається навколо першого ряду, висуваючи кожен код символів, який він бачить, до стека (це неважливо). IP обертається навколо та "знову натискає , що виходить з рядкового режиму. 404натискає цифри 404до стеку, а потім nnnвиводить кожну з них (технічно це відбувається в зворотному порядку, але оскільки 404 є паліндром, це не має значення). ;завершує програму.

4

6 мов Brain-Hack, Brain-Flak, Brain-Fuck, Foo, Javascript, Alphuck

Більше!

Брейн-Хак

#(((()((()(((()()()){}){}){}){}){}){}){})

Друкує 404 у Brain-Hack

Брейн-Хак, Мозг-Флак

(((()((()(((()()()){}){}){}){}){}){}){})

Мозок-хак, Мозок-Флак, Мозок-ебать

(((()((()(((()()()){}){}){}){}){}){}){})#-[<+>-----]<+.----.++++.>-.++++.

Для друку використовує коментарі в Brain-Flak

Мозок-хак, Мозг-Флак, Мозг-ебать, Фу

"404"
(((()((()(((()()()){}){}){}){}){}){}){})#-[<+>-----]<+.----.++++.>-.++++.

Brain-Hack, Brain-Flak, Brain-Fuck, Foo, Javascript

console.log("404")
//(((()((()(((()()()){}){}){}){}){}){}){})#-[<+>-----]<+.----.++++.>-.++++.

Brain-Hack, Brain-Flak, Brain-Fuck, Foo, Javascript, Alphuck

console.log("404")
//(((()((()(((()()()){}){}){}){}){}){}){})#-[<+>-----]<+.----.++++.>-.++++.iaipiiiiiaecsaejiiiijeeeej

Чи згадував я, що використовую esolangs?
Крістофер

Гм, ваші оригінальні відбитки Brainfuck 4...
MD XF

@MDXF виправив цю лол
Крістофер

Тепер у головного мозку є багато додаткового коду.
MD XF

3

5 мов (87 байт)

Піон

print(404

Спробуйте в Інтернеті!

Пітон 2

print(404)

Спробуйте в Інтернеті!

Мозок-Флак (BrainHack)

print(404)#(((()((()(((()()()){}){}){}){}){}){}){})

Спробуйте в Інтернеті!

епізод

Взятий з відповіді Джо Кінга, тому що я не зміг придумати код, який мав би дужки, щоб дужки були врівноваженими (обмеження на мозок).

print(404)#(((()((()(((()()()){}){}){}){}){}){}){})-[<+>-----]<+.----.++++.>

Спробуйте в Інтернеті!

05AB1E

Зауважте, що це також працює з Омом.

#404q
print(404)#(((()((()(((()()()){}){}){}){}){}){}){})-[<+>-----]<+.----.++++.>

Спробуйте в Інтернеті!

Завдяки Джо Кінгу за -6 байт.


The x%xі [-]не потрібні
Jo King

@JoKing Ой, ой, я забув видалити їх після адаптації вашого коду, що випав> _ <. Відредаговано. Спасибі
містер Xcoder

Ви можете легко додати Python 1: gist.github.com/anonymous/77ed24162c35aae0a10e4e1cada8547a
MD XF

@MDXF Це здається мені недійсним. 1) Версія Python 1 не працює в Pyon 2) Версія Python 1 також працює в Python 2, що заборонено.
Містер Xcoder

@ Mr.Xcoder О, я забув, що синтаксис без дужок працює в Python 2.
MD XF

1

2 мови, 24 байти, Python та Batch

Програма 1: Python 3

print('404')

Програма 2: Python 3 та Batch

print('404')#|echo 404

Після хешу коментується решта коду в python, а | - це заява в bash, щоб зробити це, якщо інша команда не працює.


0

2 мови, 53 байти: C і Python

Почнемо все з чогось простого.

Програма 1: С

int main(){printf("404");}

Програма 2: C і Python

#define print(X)int main(){printf("404");}
print(404)

TIO посилання:

Це лише приклад, і, ймовірно, буде багато разів бити .


0

4 мови, 91 байт

C ++

#ifdef __cplusplus
#include "stdio.h"
int main(){printf("%d",404);}
#endif

C ++, C

#include "stdio.h"
int main(){printf("%d",404);}

Видаляє макрос C ++

C ++, C, Befunge

#define A "404",,,@
#include "stdio.h"
int main(){printf("%d",404);}

Додає макрос, який буде ігноруватися в C ++, але читати як код у Befunge.

C ++, C, Befunge, Python

#define A "404",,,@
#include "stdio.h"//\
print(404);'''
int main(){printf("%d",404);}//'''

Оголошує фрагмент коду, який спричиняє, що наступний рядок буде коментарем на C, але не в Python ( //<backslash>)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.