Ziel dieser Herausforderung ist es, die kürzeste Funktion / das kürzeste Programm zu schreiben, um Eingabetext zu erfassen, ihn mit der folgenden Methode zu verschlüsseln und das Ergebnis zurückzugeben.
Als Beispiel verwende ich die Zeichenfolge hello world
.
Holen Sie sich zunächst den Eingabetext.
hello world
Zweitens konvertieren Sie die Zeichenfolge in ternäre (Basis 3). Verwenden Sie diesen Schlüssel:
a = 000
b = 001
c = 002
d = 010
e = 011
f = 012
g = 020
...
w = 211
x = 212
y = 220
z = 221
[space] = 222
Mit dieser Taste hello world
wird 021011102102112222211112122102010
, wie unten zu sehen.
h e l l o w o r l d
021 011 102 102 112 222 211 112 122 102 010
Verschieben Sie drittens die erste Ziffer an das Ende.
021011102102112222211112122102010
becomes
210111021021122222111121221020100
Viertens konvertieren Sie die Zahl mit demselben Schlüssel wieder in eine Zeichenfolge.
210 111 021 021 122 222 111 121 221 020 100
v n h h r n q z g j
Zuletzt geben Sie den verschlüsselten Text zurück.
vnhhr nqzgj
Hier sind einige Beispieltexte und deren Ausgabe:
the turtle ==> dvo fh ego
python ==> uudwqn
code golf ==> hpjoytqgp
Da dies Codegolf ist, gewinnt der kürzeste Eintrag in Bytes . Fehler sind zulässig, wenn einige der Zeichen keine Kleinbuchstaben oder Leerzeichen sind. Dies ist meine erste Herausforderung, daher wären Vorschläge mehr als hilfreich.
Viel Glück!
Bestenliste:
var QUESTION_ID=54643;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 getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
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>
uint64
mit zunehmenden Potenzen von in eine große Ganzzahl ( ) zu packen 27
. Die Verschiebung um eine Ziffer würde dann dem Multiplizieren dieser großen ganzen Zahl mit entsprechen 3
, und die Einführung der ersten Ziffer am anderen Ende wäre einfach eine Addition. Aber es gibt Komplikationen, wie das Verwerfen des letzten "Carry" (möglicherweise über eine mod
Operation), und ich konnte es nicht mit wenigen Bytes zum Laufen bringen