var QUESTION_ID=67252,OVERRIDE_USER=3852;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
m
es sich um ein Wörterbuch handelt, können Sie die Testfälle auch als Wörterbücher bereitstellen?for a in G: for b in G: d[(a, b)] = m(a, b)
).AABC
und behandelt sie als Dreifache(A, B, C)
mit paarweiser Addition modulo(9, 3, 3)
.Antworten:
Matlab, 326 Bytes
Mit etwas Gruppentheorie ist die Idee ganz einfach: Hier berechnet die TL; DR alle möglichen Ordnungen von Elementen der Gruppe. Finden Sie dann die größte Untergruppe einer bestimmten Primzahlordnung und "faktorisieren" Sie sie aus der Gruppe heraus, spülen Sie sie aus und wiederholen Sie sie.
Beispieleingaben:
Golfversion:
quelle
GAP ,
159111 BytesMit GAP können wir einfach eine Gruppe anhand einer Multiplikationstabelle erstellen und ihre abelschen Invarianten berechnen:
Die alte Version
Die endlich präsentierte Gruppe mit den Generatoren G und den Beziehungen a * b = m (a, b) (für alle a, b von G) ist die Gruppe (G, m), mit der wir begonnen haben. Wir können es erstellen und seine abelschen Invarianten mit GAP berechnen:
Beispiele
Jetzt können wir tun:
Tatsächlich sind wir nicht darauf beschränkt, Listen von ganzen Zahlen zu verwenden. Mit der richtigen Domain können wir nur das allgemeine Plus verwenden:
Ich kann also im Wesentlichen das zweite Beispiel verwenden, indem ich verwende, dass seine Gruppe isomorph zu der additiven Gruppe des zweidimensionalen Vektorraums über dem Feld mit zwei Elementen ist:
Und die restlichen Beispiele:
Zusätzliche Bemerkungen
In der alten Version musste m keine Gruppenzusammensetzung für G definieren. Wenn m (a, b) = m (a, c), heißt das nur, dass b = c ist. Also konnten wir tun
ai(m1,[0..5])
undai(m3,[5..15])
. Die neue Version wird in diesen Fällen schrecklich fehlschlagen, ebenso wie beide Versionen, wenn m Werte zurückgibt, die nicht in G sind.Wenn (G, m) nicht abelisch ist, erhalten wir eine Beschreibung der abelianisierten Version davon, dh der größten abelschen Faktorgruppe:
Dies ist, was
AbelianInvariants
normalerweise verwendet wird, wir würden normalerweise nur anrufenAbelianInvariants(SymmetricGroup(4))
.Die Golfversion
quelle