तरह की एक रानी


30

एक स्ट्रिंग को देखते हुए x, xआपके स्रोत कोड में उपस्थिति के क्रम के अनुसार क्रमबद्ध वर्णों को आउटपुट करें ।

उदाहरण

Source: ThisIs A Test
 Input: Is it a Test?
Output: TissI   etta?

Source: Harry - yer a wizard.
 Input: I'm a what?
Output: aa  wh'?Imt

Source: Mr. H. Potter, The Floor, Hut-on-the-Rock, The Sea
 Input: 
Output:

नियम

  • मानक खामियां और मैं / ओ नियम लागू होते हैं
  • इनपुट और आउटपुट या तो एक स्ट्रिंग, वर्णों की सूची या बाइट्स की सूची हो सकती है।
  • यदि स्रोत में एक चरित्र का कई बार उपयोग किया जाता है, तो पहली घटना का उपयोग करें।
  • यदि एक या अधिक वर्ण स्रोत में प्रकट नहीं होते हैं, तो उन्हें अंत में होना चाहिए; उनके आदेश से कोई फर्क नहीं पड़ता और न ही इसे लगातार करना पड़ता है।
  • स्रोत गैर-रिक्त होना चाहिए
  • न्यूलाइन्स को अन्य पात्रों के समान माना जाता है।
  • जिस क्रम में कोड निष्पादित किया जाता है वह कोई मायने नहीं रखता है; सिर्फ कच्चा तार।
  • इनपुट कोड के समान एन्कोडिंग में है।
  • इनपुट वर्णों द्वारा सॉर्ट किया गया है, बाइट्स द्वारा नहीं।
  • छंटनी मामला संवेदनशील है
  • यह , इसलिए प्रत्येक भाषा की जीत के लिए बाइट्स में सबसे छोटा उत्तर है!


2
@negativeseven स्रोत कोड एन्कोडिंग से किसी भी वर्ण को व्हाट्सएप सहित, के लिए जिम्मेदार होना चाहिए।
त्ज्जफवी


3
आपको संभवतः कल्पना में स्पष्ट उल्लेख करना चाहिए कि मिलान संवेदनशील है।
शैगी

1
xअगर हमारा समाधान यूनिकोड में एन्कोडेड नहीं है, और यूनिकोड के अक्षर, xकोड के पेज में वर्णों का प्रतिनिधित्व करते हैं , तो क्या हम UTF-8 या UTF-16 में इनकोड कर सकते हैं ? उदाहरण के लिए, कुछ गोल्फ भाषाएँ अपनी बाइट की संख्या को कम करने के लिए कस्टम कोड पृष्ठों का उपयोग करती हैं लेकिन फिर भी नग्न आंखों के साथ पढ़ने योग्य होती हैं।
7

1
@tjjfvi मैं यहाँ नो-ऑप्स के बारे में बात नहीं कर रहा हूँ (जो निश्चित रूप से अमान्य होगा); सादे बाइट्स (0x00-0xFF) में इनपुट लेने के बजाय, कम से कम कुछ उत्तर, इनपुट को UTF-8 स्ट्रिंग के रूप में लेते हैं, जो बाइट अनुक्रम का प्रतिनिधित्व करेगा (जैसे जब हम कोई उत्तर पोस्ट करते हैं, तो हम आमतौर पर UTF पोस्ट करते हैं हमारे कोड का -8 संस्करण, हेक्सडंप नहीं), और फिर इनपुट को सॉर्ट करने के लिए स्रोत कोड के UTF-8 प्रतिनिधित्व का उपयोग करें। क्या यह अनुमति है? मुझे ऐसा लगता है कि यह एक विकल्प भी होना चाहिए (सादे बाइट स्ट्रीम के साथ), क्योंकि अन्यथा कस्टम कोडपेज वाली गोल्फ भाषाओं में समाधान में बहुत बाधा होगी।
आउटगोल्फ

जवाबों:


13

पायथन 3.8 (पूर्व-रिलीज़) , 102 100 96 85 79 76 68 61 59 60 बाइट्स

c="print(sorted(x:=input(),key=('c=%r;'%c+x).find))";exec(c)

इसे ऑनलाइन आज़माएं!

-2 का उपयोग करके बाइट्स इस

-4 बाइट्स <0= = का एहसास ==-1करके और अनावश्यक को हटाकर+1

-11 बाइट्स नील को धन्यवाद

-6 बाइट्स dzaima के लिए धन्यवाद

-3 बाइट्स रॉड के लिए धन्यवाद

-8 बाइट्स ने नकारात्मक सात का शुक्रिया अदा किया जो बताता है कि यह कार्यक्रम वर्णों की सूची का उत्पादन कर सकता है

-7 बाइट्स इग्नोरेंस को मूर्त रूप देने के कारण पायथन 3.8 में वापस आ गया और उपयोग कर रहा है :=

जो किंग के लिए -2 बाइट्स c के लिए वैरिएबल नेम को स्विच कर रहा है, इसलिए हम इसे छोड़ सकते हैं ;c

+1 बाइट्स क्योंकि नकारात्मक सात ने बताया कि यह ;सही ढंग से फ़िल्टर नहीं कर रहा था


('s=%r;exec(s)'%s+x).find(x)?
नील

@ नील वर्तमान समाधान अमान्य है, और ('s=%r;exec(s)'%s).find(x)आपके कोड के साथ प्रतिस्थापित करने से यह मान्य होगा?
मिल्कीवेय 90

@ नील ओह, रुको, मैं तुम्हारा गोल्फ देखता हूं
मिल्कीवेय


4
;वर्तमान संस्करण में सही ढंग से सॉर्ट नहीं किया जा रहा है
नकारात्मक सात

7

एपीएल (Dyalog यूनिकोड) , 14 बाइट्स SBCS

बेनामी tacit उपसर्ग समारोह।

'''∘⍋⊃¨⊂'∘⍋⊃¨⊂

 तर्क देना (उस पर पूरी तरह से अमल करना)

⊃¨ उस में से, निम्न सूचकांकों में से प्रत्येक के लिए एक वर्ण चुनें:

∘⍋ निम्नलिखित स्ट्रिंग द्वारा दिए गए आदेश में तर्क को क्रमबद्ध करने वाले सूचकांक (सभी गैर-सदस्य अंत में उपस्थिति के क्रम में जाते हैं):

'''∘⍋⊃¨⊂' किरदार '∘⍋⊃¨⊂

इसे ऑनलाइन आज़माएं!



5

जावास्क्रिप्ट (Node.js) , 60 58 56 बाइट्स

जो किंग से -2 बाइट्स

f=_=>_.sort((a,b)=>(p=g=>`f=${f+g}`.indexOf(g))(a)-p(b))

इसे ऑनलाइन आज़माएं!


स्रोत होने पर ही आपका कोड काम करता है f=...। अगर ऐसा है, तो कृपया उसे अपनी सबमिशन और बाइट काउंट में शामिल करें।
तज्जीवी


3

रूबी , 57 बाइट्स

->s{s.sort_by{|o|%{->s{.ort_by|%}index()9}.index(o)||99}}

इसे ऑनलाइन आज़माएं!

बहुत सीधा, यह मानते हुए कि मैं एक गोल्फ चाल से नहीं चूका हूँ। पात्रों की एक सूची में ले लो और एक स्ट्रिंग में उनके सूचकांक द्वारा क्रमबद्ध करें जिसमें उनकी उपस्थिति के क्रम में कोड में सभी uniq वर्ण शामिल हैं। अक्सर उनकी पहली उपस्थिति उसी तार में होती है, लेकिन यह क्रम नहीं बदलता है।


3

05AB1E , 24 22 21 बाइट्स

Σ"Σ"'"«"'«Rrk}"«Rrk}R

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

Σ                    }               # Sort
 "Σ"                                 # Σ string literal
    '"                               # " string literal
       «                             # Concatenate last two literals
        "'«Rrk}"                     # '«Rrk} another literal
                «                    # Concat again
                 R                   # Reverse literal (so: }krR'«'"Σ)
                  r                  # reverse stack 
                   k                 # find the current sorting index in our code string 
                     R               # reverse our sorted string

पहली बार 05AB1E में सामान की कोशिश करने से शायद बहुत सारी बचत हो सके


क्या आपको यकीन है कि यह सही है? यह अब जिस तरह से स्ट्रिंग है }krR«'«। नोट: 'एक एकल वर्ण है, इसलिए बस '"पर्याप्त है (सी # के विपरीत जहां इसे एक अतिरिक्त अनुगामी की आवश्यकता होती है ')। वर्तमान में अपने कोड पहली स्ट्रिंग धक्का Σ, तो स्ट्रिंग ", तो स्ट्रिंग «, तो स्ट्रिंग '«Rrk}, और फिर इसे संलग्न, रिवर्स, रिवर्स ढेर, सूचकांक करता है। स्ट्रिंग के अंत में और अंत में, हालांकि का स्मार्ट उपयोग! मैं देखूंगा कि क्या मुझे आपके उत्तर के लिए एक ठीक मिल सकता है, और बाद में मुझे हटा देगा।
केविन क्रूज़सेन

@kevincruijssen तो क्या मैं सिर्फ दूसरे से छुटकारा नहीं पा सकता '
डेटा

1
हाँ, आप वास्तव में कर सकते हैं। :) तो यह सही ढंग से पर }krR«'"Σ। पुनश्च: मैं =डिबग उद्देश्यों के लिए कभी-कभी (पॉपिंग के बिना प्रिंट) का उपयोग करता हूं । आप --debug-stackतर्क के रूप में भी जोड़ सकते हैं , लेकिन नए 05AB1E संस्करण imho में यह थोड़ा अजीब है।
केविन क्रूज़सेन

3

जेली , 16 14 बाइट्स (जेली कोड पृष्ठ), 25 बाइट्स (UTF8)

“Ṿv`Ṿ;³³i@Þ”v`

इसे ऑनलाइन आज़माएं!

एक पूर्ण कार्यक्रम जो एकल तर्क लेता है, उसे क्रमबद्ध करने के लिए स्ट्रिंग।

बग को इंगित करने के लिए @JonathanAllan को धन्यवाद!

@EriktheOutgolfer के अनुसार, हालांकि कोड को जेली कोड पृष्ठ का उपयोग करके इनपुट किया जा सकता है, छांटे गए वर्ण स्रोत के बाइट के बजाय बराबर UTF-8 वाले हैं। जैसे, मैंने स्कोर को UTF-8 बाइट्स में भी शामिल किया है। ध्यान दें कि शायद कस्टम कोड पृष्ठों वाली सभी भाषाओं पर लागू होता है।

व्याख्या

“Ṿv`Ṿ;³³i@Þ”   | The string "Ṿv`Ṿ;³³i@Þ", referred to below as S
            v` | Evaluate this string as Jelly code using the string itself as the argument

उपरोक्त स्ट्रिंग इस प्रकार है:

Ṿ          | Uneval the string S (effectively wraps it in “”)
 v`        | Eval it (effectively removes the “”)
   Ṿ       | Uneval it again, adding back in the “”
    ;³     | Concatenate the input to this
      ³i@Þ | Sort the input with respect to the first occurence of each character in the “”-wrapped string S concatenated to the input

Ṿv` प्रभावी ढंग से यहाँ एक नो-ऑप है, लेकिन यह सुनिश्चित करने के लिए मौजूद है कि सभी वर्णों का प्रतिनिधित्व किया जाए।


इसलिए ... मैंने अपना जेली उत्तर पोस्ट किया, और फिर उसने मुझ पर क्लिक किया: दुभाषिया ने इसे निष्पादित करने से पहले बाईटकोड को यूटीएफ -8 में परिवर्तित कर दिया , इसलिए या तो बाईटेकाउंट बढ़ाया जाना चाहिए, या कोडपेज को फिट करने के लिए कोड को बदला जाना चाहिए।
एग्री द आउटगोलर

@EriktheOutgolfer मुझे समझ नहीं आ रहा है कि आप यहाँ क्या कर रहे हैं। इस संबंध में किसी भी अन्य कोडगोल्फ चुनौती के लिए यह कैसे अलग है?
निक कैनेडी

सेल्फ-रेफरेंशियल पहलू अलग है, इसलिए, वास्तव में, कोड UTF-8 वर्णों को छाँटता है, न कि बाइट्स को माना जाता है।
आउटगॉल्फ

3

जेली , 14 बाइट्स

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ

एक पूर्ण कार्यक्रम (जेली कोड-पृष्ठ वर्णों के) पायथन (स्वरूपित) स्ट्रिंग को स्वीकार करता है जो आउटपुट प्रिंट करता है।
(एक राक्षसी लिंक के रूप में यह पात्रों की सूची की एक सूची देता है)

इसे ऑनलाइन आज़माएं!

कैसे?

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ - Main Link: list of characters, S
“;fɓḟṾⱮ”       - list of characters = [';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ']
        Ṿ      - un-evaluate = ['“', ';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ', '”']
         ɓ     - start a new dyadic chain, F(S, T=that):
           Ɱ   - for each character, t, in T:
          f    -   (S) filter keep any of (the single character, t)
             ḟ - (S) filter discard any of (the characters in T)
            ;  - concatenate

इसलिए ... मैंने अपना जेली उत्तर पोस्ट किया, और फिर उसने मुझ पर क्लिक किया: दुभाषिया ने इसे निष्पादित करने से पहले बाईटकोड को यूटीएफ -8 में परिवर्तित कर दिया , इसलिए या तो बाईटेकाउंट बढ़ाया जाना चाहिए, या कोडपेज को फिट करने के लिए कोड को बदला जाना चाहिए।
आउटगोल्फर

@EriktheOutgolfer मुझे लगता है कि यह उस संदर्भ में सुरक्षित है क्योंकि यह विधि किसी भी तरह की छंटाई नहीं करती है और आई / ओ को एक ही एन्कोडिंग (जेली के कोड पृष्ठ) मानदंडों में मिलती है।
जोनाथन एलन

एह ... मुझे लगता है कि fऔर यूनिकोड के पात्रों पर काम करना है, क्योंकि यह वास्तव में अंदर किस प्रकार के अक्षर हैं। उदाहरण के लिए ”ĿOरिटर्न 319अगर जेली में स्थानीय रूप से एन्कोडेड परीक्षण किया जाता है, तो यह Ŀसी 7 को देखता है और नहीं।
आउटगॉल्फ

मुझे लगता है fऔर यूनिकोड पर भी काम करते हैं, लेकिन क्या यहाँ समस्या है? मैं यूनिकोड वर्णों के प्रतिबंधित सेट में गुजरता हूं जो कि जेली के कोड पेज पर दिखाई देता है (जो कि, उस एन्कोडिंग का उपयोग करके एन्कोड किया गया है, "इनपुट कोड के समान एन्कोडिंग में है" को पूरा करते हुए); उन्हें सही तरीके से फ़िल्टर करें (क्योंकि इन इनपुट बाइट्स को यूनिकोड के रूप में एन्कोड किया गया था), और फिर उन्हें सही ढंग से आउटपुट करते हैं। तब मैं जो गिनती करता हूं वह कोड का बाइट्स होता है ("इनपुट को वर्णों द्वारा क्रमबद्ध किया जाता है, न कि बाइट्स द्वारा" और "प्रत्येक भाषा में जीत के लिए बाइट्स में सबसे छोटा उत्तर")।
जोनाथन एलन

1
@JonathanAllan मुझे ऐसा लगता है कि "जेली के कोड-पेज का उपयोग करके कुछ पात्रों को एन्कोड किया गया है" जो मैं अपनी पिछली टिप्पणी में उल्लेख कर रहा हूं। चूंकि कोड की एन्कोडिंग में 0x00 से 0xFF तक सिंगल बाइट्स होते हैं, यही तर्क की एन्कोडिंग भी शामिल होनी चाहिए, इसके बजाय, JELLY से UTF-8 में मैप किए जाने के बाद तर्क पारित किया जाता है, इसलिए इसके प्रत्येक वर्ण को एकल होना चाहिए अब बाइट मूल रूप से, कोड JELLY में है जबकि तर्क UTF-8 में है, भले ही इसे CALY से मैप किया गया हो। जबकि सही UTF-8 आउटपुट लौटाया जाता है, यह सभी के साथ JELLY होना चाहिए।
आउटगॉल्फ

2

चारकोल , 37 बाइट्स

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№ηFηΦθ⁼ικΦθ¬№ηι

इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№η

चारकोल में पात्रों को उद्धृत करने के दो तरीके हैं; ´किसी भी एकल वर्ण को उद्धृत करते हुए ”y... किसी भी वर्ण को छोड़कर, एक अलग स्ट्रिंग के रूप में भी गिना जाता है। यह पता चला है कि ओवरहेड का मतलब है कि यह किसी भी गोल्फ खिलाड़ी को खत्म नहीं करता है।

FηΦθ⁼ικ

बदले में वर्णों पर लूप करें, इनपुट से किसी भी मिलान वाले वर्णों को आउटपुट करें। यह इनपुट को सॉर्ट करता है।

Φθ¬№ηι

इनपुट में किसी भी बेजोड़ अक्षर को आउटपुट करें।


2

जे , 14 बाइट्स

बेनामी tacit उपसर्ग समारोह।

]/:']/:''i'i:]

इसे ऑनलाइन आज़माएं!

] बहस

... i: अंतिम घटना (गैर-सदस्यों को प्रत्येक वर्ण के लुकअप स्ट्रिंग के अंत से परे सूचकांक मिलता है):

']/:''i' किरदार ]/:'i

... /: सॉर्ट करने के लिए इसका उपयोग करें:

] बहस


क्या चार प्रमुख स्थान गूंज या कोड का परिणाम हैं?
तज्जीवी

1
@tjjfvi यह है कि TIO को कैसे कॉन्फ़िगर किया गया है। अब तय हो गया।
अदाम

2

जावा 10, 129 100 बाइट्स

s->{s.sort(java.util.Comparator.comparing(c->("s->{.ort(javuilCmpcng\"\\+)dexOf;}"+c).indexOf(c)));}

-29 बाइट्स @EmbodimentOfIgnorance के C # उत्तर+c से पोर्ट करके ।

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

s->{                 // Method with char-List parameter and no return-type
  s.sort(java.util.Comparator.comparing(c->
    ("s->{.ort(javuilCmpcng\"\\+)dexOf;}"
                     //  Push a String containing the characters in the code
     +c)             //  Append the current character
        .indexOf(c)  //  And get the first index of the current character in the String

नोट: आमतौर पर इसके s.sort((a,b)->Long.compare(a,b))बजाय इसका उपयोग करना सस्ता होता है s.sort(java.util.Comparator.comparing(c->c), लेकिन इस मामले में यह 11 बाइट्स लंबा होगा:

s->{var v="s->{var =\"\\;.ot(,)Lngcmpe+idxOf}";s.sort((a,r)->Long.compare((v+a).indexOf(a),(v+r).indexOf(r)));}

इसे ऑनलाइन आज़माएं।


2

05AB1E , 31 26 19 बाइट्स

Σ'"'ÿs"Σ'ÿÿsìyk"ìyk

-7 बाइट्स अपने सी # में @ EmbodimentOfIgnorance के दृष्टिकोण की प्रेरणा लेते हुए अनुक्रमण से पहले वर्तमान चरित्र को लागू करने का उत्तर #

इसे ऑनलाइन आज़माएँ या इसमें जोड़े गए डीबग-लाइन के साथ कोशिश करें कि जो स्ट्रिंग्स को अनुक्रमित किया जा रहा है उसे देखें

स्पष्टीकरण:

Σ                 # Sort the (implicit) input-string by:
 '"              '#  Push string '"'
   'ÿ            '#  Push string "ÿ"
     s            #  Swap the order of these two strings on the stack
      "Σ'ÿÿsìyk"  #  Push string "Σ'ÿÿsìyk", where the `ÿ` are automatically filled with
                  #  the previous strings we created: `Σ'"ÿsìyk`
                  #  (top to bottom from stack; left to right in string)
       ì          #  Prepend this string in front of the character we're sorting
        yk        #  And then get the index of the character we're sorting in this string
                  # (after the sorting the resulting string is output implicitly)

स्पष्टीकरण में एक टाइपो प्रतीत होता है ("एस" के बजाय "y")
ArBo

@ArBo फिक्स्ड, धन्यवाद
केविन Cruijssen

1
कड़ाई से बोलने पर मुझे 12 घंटे पहले प्रेरणा मिली जब मैंने @ मिल्कीवेय 90 के जवाब के 11 बाइट्स गाए ...
नील

यह अच्छा है! मैंने देखा कि बाइट को बचाते हुए इसे चालू करने का कोई तरीका नहीं देख सका
डेटा

2

पॉवरशेल , 68 बाइट्स

$p=$args
&($t={$p|sort-object{"`$p=`$args
&(`$t={$t})$_"|% i*f $_}})

इसे ऑनलाइन आज़माएं!


2
1) sortइसके बजाय sort-objectभी काम करता है। 2) चर $bआपके दायरे के दायरे से बाहर है। Standard loopholesएक पूर्ण उत्तर की आवश्यकता है । पॉवर्सशेल के लिए इसका मतलब है: कोई भी व्यक्ति एक पॉवरशेल स्क्रिप्ट के रूप में कोड को एक फ़ाइल में मिटा सकता है और इसे एक टर्मिनल में चला सकता है। आपका कोड स्क्रिप्ट फ़ाइल से काम नहीं करता है। माफ़ कीजिये।
माज़ी

1
@ माज़ी, बहुत बहुत धन्यवाद। 1) sortउबास उबंटू 18.04 2 पर pwsh में काम नहीं करता है) हाँ, यह मेरी गलती है, लेकिन मैंने खुद को ठीक किया, और परिणामस्वरूप, कोड लंबा हो गया, ज़ाहिर है :)
आंद्रेई ओडेगो

(ऊ)! मैंने Powershell के लिए सॉर्ट उपनाम बनाया है । code became longer- यह चुनौती है :)
mazzy

1
हाँ आप सही है। $pस्रोत कोड के साथ स्ट्रिंग के अंत में प्रत्येक व्यक्तिगत चरित्र संलग्न है और इसके बराबर एक सूचकांक प्राप्त करता है $src.Length, लेकिन चूंकि "उनका आदेश मायने नहीं रखता है और लगातार नहीं होना चाहिए," यह कोई बात नहीं है। में इस सवाल का जवाब , पूरे इनपुट स्ट्रिंग स्रोत कोड के साथ स्ट्रिंग के अंत में जोड़ा जाता है।
आंद्रेई ओडेगो

1
@ मित्र, मुझे आपका प्रश्न समझ में नहीं आया। माफ़ कीजिये।
माज़ी

2

पायथन 2 , 62 बाइट्स

lambda a:sorted(a,key=('lambd :sorted(,ky=\'\\+).fin'+a).find)

मेरे C # उत्तर के रूप में एक ही अवधारणा।

इसे ऑनलाइन आज़माएं!


\\\'होना चाहिए \'\\। हालांकि अच्छा दृष्टिकोण! मेरे जावा उत्तर में 23 बाइट्स सहेजे गए।
केविन क्रूज़सेन

1
@ केविनक्रूजसेन फिक्स्ड
अज्ञानता का अवतार

2

जाप , 18 बाइट्स

ñÈi"ñÈi\"\\ bX" bX

कोशिश करो

ñÈi"ñÈi\"\\ bX" bX     :Implicit input of string or character array
ñ                      :Sort by
 È                     :Passing each X through the following function
  i                    :  Prepend X with
   "ñÈi\"\\ bX"        :    Literal string (The \s are annoying me!)
                bX     :  First index of X

1

जेली , 26 बाइट्स (UTF-8 *)

“®³nÞṾ©V”Ṿ©VV

इसे ऑनलाइन आज़माएं!

1 कमांड-लाइन तर्क में पायथन-स्वरूपित स्ट्रिंग के रूप में इनपुट लेता है।

अद्वितीय वर्ण :

“®³nÞṾ©V”

* नोट: मुझे पता चला कि यह काम नहीं करता है जब JELLY में एन्कोड किया जाता है, क्योंकि यह अपने बाइट्स के बजाय UTF-8 वर्णों को सॉर्ट करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.