Hier ist eine relativ einfache Herausforderung für Sie.
Bei einer gegebenen Zeichenfolge der Länge N geben Sie die Zeichenfolge N Mal vorwärts, dann rückwärts, dann vorwärts, dann rückwärts usw. aus . Zum Beispiel, wenn Ihre Eingabe war
Hello!
Sie sollten Folgendes ausgeben:
Hello!!olleHHello!!olleHHello!!olleH
Optional können Sie auch eine nachgestellte Newline ausgeben.
Ihre Einreichung kann entweder ein vollständiges Programm oder eine Funktion sein, und Sie können Eingaben und Ausgaben in jedem vernünftigen Format vornehmen . Beispielsweise können Sie E / A von STDIN / STDOUT, Funktionsargumenten und Rückgabewert aus einer Datei usw. übernehmen. Sie können davon ausgehen, dass die Eingabezeichenfolge nicht leer ist und nur druckbares ASCII enthält. Sie müssen die neue Zeichenfolge in einer einzelnen Zeile ausgeben. So zum Beispiel, wenn die Ausgabe zum letzten Beispiel war
Hello!
!olleH
Hello!
!olleH
Hello!
!olleH
Dies wäre keine gültige Lösung!
Hier sind einige weitere Testfälle:
Input:
a
Output:
a
Input:
abcd
Output:
abcddcbaabcddcba
Input:
OK!
Output:
OK!!KOOK!
Input:
4815162342
Output:
4815162342243261518448151623422432615184481516234224326151844815162342243261518448151623422432615184
Input:
PPCG
Output:
PPCGGCPPPPCGGCPP
Input:
42
Output:
4224
Bestenlisten
Da dies eine Code-Golf- Herausforderung ist, sind Standard-Lücken verboten und die kürzeste Antwort in Bytes gewinnt! Dies ist jedoch auch ein Wettbewerb um die kürzeste Antwort in einer bestimmten Sprache. Obwohl es unwahrscheinlich ist, dass eine Java-Antwort eine Perl-Antwort oder eine Golfsprache übertrifft, ist es dennoch sehr beeindruckend, die kürzeste Java-Antwort zu haben. Sie können also diese Rangliste verwenden, um beide zu sehen
Die kürzeste Antwort aller Sprachen und
Die kürzeste Antwort in jeder einzelnen Sprache.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Nummern in Ihrem Header enthalten sein sollen (zB weil Ihre Punktzahl ist die Summe von zwei Dateien oder Sie wollen Liste Dolmetscher Flagge Strafen separat), stellen Sie sicher , dass die tatsächliche Punktzahl der ist letzte Nummer in der Kopfzeile:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=93261,OVERRIDE_USER=31716;function answersUrl(e){return"https://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"https://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>
olleH
, nichtelloH
?Antworten:
Vim,
39, 34 Tastenanschläge5 Bytes gespart dank @Lynn!
Hier ist ein GIF, das live passiert: (Beachten Sie, dass dieses GIF von einer früheren Version ist, da ich noch keine Zeit hatte, es neu aufzunehmen).
Und hier ist eine Erklärung, wie es funktioniert:
Y
Nebenbei bemerkt, ergreift eine zusätzliche Newline, die in der Regel ein unangenehmes Merkmal ist. Dies ist wahrscheinlich das erste Mal, dass tatsächlich mehrere Bytes eingespart wurden!quelle
:%s/\n<cr>
können Siev{gJ
drei Bytes speichern.@q
zu Beginn leer ist, oder? oder die@q
vor dem Beenden der Aufnahme würde etwas beliebiges tun. (Dies führt mich zu meinem Lieblings-Vim-Trivium, das ich mir ausgedacht habe: Jeder weiß, dass das Beenden von Vim so einfach ist wie:q<CR>
, aber wie können Sie alle Ihre Dateien schließen und speichern? Einfach: nurqqqqqZZ@qq@q
!)@q
leer sein. Warum nicht einfach:wqa
stattdessen? Wollen Sie auch wissen, wie man in vim ein Fraktal erzeugt?qqqqq<C-w>v<C-w>n@qq@q
: DPython, 40 Bytes
Eine rekursive Funktion. Stellt die Eingabezeichenfolge
s
der Umkehrfunktion voran, bis der Zähleri
die Länge von überschreitets
.quelle
lambda s:(len(s)*(s+s[::-1]))[:len(s)**2]
um ein Byte.f = lambda s : ''.join([s[((-1)**(i//len(s)) <= 0)*(len(s)-1)+(-1)**(i//len(s))*(i%len(s))] for i in range(len(s)*len(s))])
aber es ist 136 Bytes nachsys.sizeof
, interessanterweise ist es die gleiche Größe wief = lambda s : ''.join([s[::1] if i%2 else s for i in range(len(s))])
Brain-Flak ,
418378228 BytesDies ist mein Brain-Flak-Meisterwerk. Es mag nicht gut golfen sein, aber die Herausforderung ist die schwierigste, der ich je begegnet bin.
Probieren Sie es online!
Erläuterung
Diese Erklärung ist jetzt ein bisschen veraltet, aber sie erklärt das Programm immer noch recht gut.
Diese Erklärung wird sich ein wenig von meinem regulären Erklärungsprozess unterscheiden. Ich werde erklären, wie ich zu diesem Ergebnis gekommen bin, anstatt das Ergebnis in der richtigen Reihenfolge zu erklären. Hier kommt's:
Walze
Nachdem ich ein bisschen an dem Problem gearbeitet hatte, kam ich auf diesen Code:
Dieser Code (wobei n das Literal für eine Zahl ist, z. B.
()()
) nimmt das Element oben auf dem Stapel und bewegt es n Schritte nach unten. Mit n als Stapelhöhe wird ein Stapel "roll" ausgeführt. dh bewegen Sie den oberen Gegenstand zum Boden des Stapels. So funktioniert das:Wir setzen den Ort, an den wir den Gegenstand verschieben möchten, auf minus eins auf dem Stapel. Warum minus eins? Ich weiß nicht, dass es einfach so funktioniert.
Wir schleifen dann, bis diese Zahl Null erreicht und verfolgen die Schleife mit a
()
.Bei jeder Schleife nehmen wir den obersten Gegenstand und verschieben ihn auf den anderen Stapel. Dies setzt die Zahl an ihre Stelle.
Jetzt müssen wir nur noch die Zahlen eintragen, die wir zurückgezogen haben. Wir wechseln zum Off-Stack und geben die Anzahl der durchgeführten Läufe an.
Wir dekrementieren die neu geschobene Zahl in einer Schleife, bis sie Null erreicht. Jedes Mal verschieben wir eine Nummer zurück.
Umkehren
Als nächstes habe ich die Rolle modifiziert, um einen vollständigen Stapel umzukehren:
N steht wieder für die Tiefe der Umkehrung. Das heißt, die obersten n Elemente auf dem Stapel werden umgekehrt. Wie es funktioniert:
Die Rückseite ist nur eine phantasievoll gewickelte Walze. Wir rollen einfach n-mal die Oberseite des Stapels und verringern die Rollentiefe jedes Mal um eins.
Duplikat
An Ort und Stelle ist die Vervielfältigung schwierig. Sehr hart. Nachdem ich herausgefunden hatte, wie man den Stapel umkehrt, war es immer noch sehr mühsam, den Duplizierungsalgorithmus zu entwickeln.
Hier ist es:
Es ist ein bisschen zu groß, aber so funktioniert es:
Beginnen Sie mit n. n ist die Tiefe des Duplikats. Wir öffnen auch zwei Klammern. Dadurch können wir den Wert von n im Gültigkeitsbereich speichern, bis er erneut benötigt wird.
Als nächstes durchlaufen wir jedes Mal eine n-fache Schleife, indem wir den obersten Wert des Stapels zweimal in den Off-Stack verschieben. Dadurch werden die ersten Duplikate für jede Nummer auf dem Stapel erstellt.
Jetzt haben wir zwei Exemplare jeder Nummer auf dem Stapel. Wir müssen diese in zwei Gruppen unterteilen.
Also wechseln wir in den Offstack und rufen eines der ns auf, die wir zu Beginn gespeichert haben.
Wir schleifen n mal.
Jedes Mal, wenn wir eine Kopie in den Hauptstapel verschieben.
Rollen Sie eine Kopie bis zum Ende des Stapels. (Dies setzt voraus, dass der Offstack zu Beginn leer war und dieses Duplikat nicht sauber gestapelt wurde.)
Sobald dies erledigt ist, haben wir das Original in zwei Gruppen aufgeteilt, das "Original" und eine Kopie im Offstack (die Kopie ist tatsächlich umgekehrt). Wir verschieben die Kopie einfach in den Hauptstapel und können damit fertig werden.
Skeleton-Programm
Nachdem ich alle Teile des Programms erstellt habe, muss ich sie nur noch in einen Frame einfügen.
Der Rahmen verdoppelt den Text einmal weniger als die Höhe des Stapels.
Und kehrt dann den Stapel in abnehmenden Schritten der anfänglichen Stapelhöhe von n ^ 2-n auf 0 um.
quelle
Gelee ,
43 BytesProbieren Sie es online! oder Überprüfen Sie alle Testfälle.
Ein Byte dank @ Maltysen gespeichert .
Erläuterung
quelle
L
PHP,
5452 Bytes(49 Bytes, funktionieren aber nicht, wenn der String '0' enthält)
(52 Bytes)
(54 Bytes)
quelle
str_pad
. Schön!2sable , 3 Bytes
Code:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Ruby, 39 Bytes
Ich sauge Ruby an. Hilfe beim Golfen ist erwünscht.
Ruby ist dafür eine sehr schöne Sprache
.reverse!
Erläuterung
Ich hatte gehofft, dass es so einfach sein würde:
aber wegen der Boilerplate / Challenge-Einschränkung ist es länger.
Was
s.reverse!
ist sehr nützlich.s.reverse!
ist im Grundes = s.reverse!
, das heißt, es mutiert auchs
.Was jeder Abschnitt des Programms tut, wird unten beschrieben:
Das
s.reverse!
Tolle daran ist, dass der String jedes Mal umgedreht wird, wenn er ausgewertet wird. So wie es die Zeichenfolge ersetzt.s
ist modifiziert!quelle
-p
Flagge können Sie 4 Bytes speichern:$_.reverse!;gsub(/./){$_.reverse!}
.chomp
obwohl auf dem brauchen$_
? es scheint im Moment die neue Zeile zu enthaltenruby -pe '$_.reverse!;gsub(/./){$_.reverse!}' < file.txt
wofile.txt
eine Zeile ohne die nachfolgende Zeile ist: V Wie auch immer, wenn Sie sich dazu entschließen, brauchen Sie keine Parens auf dem Lambda, so->s
funktioniert ess.gsub(/./){s.reverse!.reverse}
Perl, 24 Bytes
Beinhaltet +2 für
-lp
Geben Sie Input auf STDIN:
rev.pl
:Überraschenderweise wird der eingebaute
reverse
Operator nicht verwendet . Dieser Name ist einfach soooo lang, alle Lösungen, an die ich denken könnte,reverse
sind mindestens 1 Byte länger.quelle
J,
138 Bytes5 Bytes gespart dank Meilen!
Dies ist ein 5-Zug mit folgenden Verben:
Die innere Gabel besteht aus
]
(Identität),;
(Verbindung) und|.
(Rückseite). Beobachten:Die beiden äußeren Verben bilden den Rest des Zuges.
#
ist in diesem Fall die Größe des Arguments, dh die Länge. Das Verb, das diese verknüpft, ist;@$
oderravel
darüberreshape
. Beobachten:Alte Lösung.
Einfach genug.
|.
ist umgekehrt und^:
ist eine Machtkonjunktion, die ihr linkes Verb (rechte Hand) mehrmals wiederholt. Wenn das richtige Argument ein Verb ist, wird dieses Verb für das Argument aufgerufen. Das richtige Verb reicht in diesem Fall von null (i.
) bis zur Länge (#
). Wenn sie zu einem Array angehoben werden, bleiben die Zwischenergebnisse erhalten. Alles, was getan werden muss, ist das Array mit zu reduzieren,
.Zwischenergebnisse
quelle
<@#
#;@$];|.
die den Anfangs- und den Umkehrstring umrahmt, die Strings umformt und sie zusammennimmtJavaScript (ES 6),
5950 Bytes9 Bytes danke an Hedi und Huntro.
rekursive Funktion.
Das Umkehren des Strings nimmt fast die Hälfte der Größe in Anspruch (
25 -22 Byte!) ...Warum gibt es dafür keinen nativen Weg?
quelle
s[n]?...
intead ofn<s.length?...
[...s]
anstelle vons.split``
f=(s,n=1)=>n==1?s:s+s.reverse(),n-1)
f=(s,n=1)=>Array.from({length:n},(_,i)=>i%2?s.reverse():s).join``)
, die auch besser mit etwas besserer Funktion für die Reichweite wäreSyntaxError: Unexpected token )
JS hat keine native String-Umkehrung.SyntaxError: Invalid or unexpected token
für deinen zweiten vorschlag. In welchem Browser funktioniert das?Minkolang , 17 Bytes:
Probieren Sie es hier aus!
Erläuterung
quelle
8088 Assembly, IBM PC DOS,
2928 BytesZusammengebaut,
xxd
entsorgen:Zerlegte Auflistung:
Eigenständiges ausführbares PC-DOS-Programm. Eingabezeichenfolge über die Befehlszeile, Ausgabe ist Konsole.
quelle
Pip ,
11-10BytesProbieren Sie es online!
Erläuterung:
quelle
Haskell,
403632 BytesBeispiel:
Noch kürzer (Dank an Damien):
s >> [s, reverse s] Zyklen ["abc", "cba", ...], die auf die richtige Größe gezippt und mit fst kartiert werden
quelle
q s=zip(s>>[s,reverse s])s>>=fst
(>>=fst).(iterate reverse>>=zip)
Perl 6 ,
3130 BytesSpeichern Sie ein Byte durch Missbrauch
.ords
, wodurch eine Liste von Ordnungszahlen zurückgegeben wird, und wandeln Sie diese implizit in eine Zahl um, um einen Bereich mit zu erstellen.Erläuterung:
Verwendungszweck:
quelle
Vim + Coreutils, 32 Tastenanschläge
Sie können nie zu viele Vim-Antworten haben.
Erläuterung
quelle
MATL,
13128 BytesSchiebt alle Elemente, kombiniert am Ende.
Probieren Sie es online!
Alte Versionen:
Ganz andere Herangehensweise, basierend auf
fprintf
:Version, die auf dem Umkehren einer Vorlagenzeichenfolge basiert
quelle
td
!tnq:"
ersten, abertn:"
ist ein bisschen ein Code-Geruch (siehe diesen Matlab-Golftipp), so dass ich dachte, dasstnq:
das auch kompakter sein könnte.Scala,
737271 BytesDies ist mein erster Versuch, Code Golf zu spielen. Ich bin mir sicher, dass es unzählige Verbesserungen gibt.
Aktualisieren:
1 Byte durch Entfernen von Klammern entfernt.
Dank Destructible Watermelon für den Vorschlag, ein Byte abgeschabt.
quelle
i%2==1
zui%2>0
?Cubix , 52 Bytes
Auf einem Würfel:
Dieser hat Spaß gemacht; Es gibt immer noch Bytes, die aus diesem heraus golfen werden müssen, aber dies wird definitiv funktionieren.
Probieren Sie es online!
Erläuterung:
Eingabe von
ABC
/A
: nach Norden gehen und alle Eingaben als Zeichen einlesen;-1
wird am unteren Rand seinp\;.
: Entfernen Sie die-1
aus dem Stapelu#
: Länge der Zeichenfolge (Anzahl der Elemente auf dem Stapel)\:\:qq
: Die Saitenlänge zweimal verdoppeln, zwei Kopien bis zum Ende des Stapels schiebenSchleife:
soq(?/<u
: Stapeloberseite vertauschen, Stapeloberseite als ASCII ausgeben, Oberseite (Buchstabe) nach unten drücken, Stapeloberseite verkleinern, nach rechts drehen, wenn nicht erledigt, dann IP an die richtige Stelle verschieben.C B A 3 3 0
;u
: Pop oben auf dem StapelC B A 3 3
B
: Stapel umkehren3 3 A B C
p(
: von unten nach oben bewegen und dekrementieren3 A B C 2
?
Wenn top Null ist, gehe direkt zu@
und beendepsq:uq
: bewegen Sie sich von unten nach oben, tauschen Sie oben und bewegen Sie sich von oben nach unten, und bewegen Sie sich von oben nach unten3 2 A B C 3
$u
: überspringenu
<
bringt uns zurück in die Schleife.Dolmetscher
quelle
C (GCC) ,
888785836866838278 Bytes-1 dank ceilingcat
Alte Version
Probieren Sie es online!
Kürzere Version (leicht gebrochen)
Riffing auf dem 76-Byte-Ansatz von ASCII-only in den Kommentaren und -1 Byte von seiner Optimierung meiner Optimierung.
Bearbeiten: Diese Version ist leicht fehlerhaft, da davon ausgegangen wird, dass vor jeder Zeichenfolge ein NULL-Byte steht, was nicht immer der Fall ist. (Siehe letzter Testfall im Link). Zur 83-Byte-Version zurückkehren.
Probieren Sie es online!
quelle
Java,
12711188 BytesUngolfed Testprogramm
quelle
(s,r)->{for(int i=0;i++<s.length();)r+=i%2<1?s:new StringBuffer(s).reverse();return r;};
( 88 Bytes ). Außerdem würde ich angeben, dass dies Java 8 ist.R, 53 Bytes
Es wird davon ausgegangen, dass die Eingabe für jedes Zeichen durch Leerzeichen oder Zeilenumbrüche getrennt ist.
Einige Testfälle:
quelle
PowerShell v2 +, 57 Byte
Es gibt keine wirklich saubere Möglichkeit, Stringlängen zu erhalten oder sie umzukehren, daher ist dies ziemlich langwierig.
Übernimmt Eingaben
$a
, durchläuft Schleifen von1
bis$a.length
($x
zur späteren Verwendung gespeichert ). Bei jeder Iteration wird ein Pseudoternär verwendet, um ein Array von entweder$a
oder$a[$x..0]
(dh umgekehrt) zu indizieren , je nachdem, ob unsere Eingabenummer ungerade / gerade ist[$_%2]
. Diese sind alle in Parens eingekapselt und-join
zu einer einzigen Zeichenfolge zusammengefasst. Das bleibt in der Pipeline und die Ausgabe ist implizit.quelle
Java, 151 Bytes
}
Ungolfed:
quelle
public static
vor Ihrer Methode entfernen . Sie können die Leerzeichen zwischen entfernent=new StringBuffer
. Sie können die unnötigen Klammern und Klammern entfernen. Und Sie können die Modulprüfung von==1
auf vertauschen<1
(was==0
für nicht negative Zahlen gleichbedeutend ist ). Sie können auchi++
die letzte Verwendung innerhalb der for-Schleife verschieben.void r(String s){for(int i=0;i<s.length();)System.out.print(i++%2<1?s:new StringBuffer(s).reverse()+"");}
( 105 Bytes )94 Bytes
76 Bytes für die Methode + 18 Bytes für den LINQ-Import.
Wie es funktioniert:
quelle
CJam , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Oktave,
39-35BytesErläuterung:
4 Bytes gespart dank Luis.
~x
Anstatt0*x
ein Byte zu speichern (funktioniert, weil alle Elemente von x nicht Null sind.flip
Anstattflipud
zwei weitere Bytes zu speichern (ich wusste nicht, dass esflip
existiert).quelle
Bash + Util-Linux,
685853 BytesErläuterung
Zwei Dinge mit der
for
Schleife:for
Loops zu schreiben , bei denen man die Schlüsselwörterdo
unddone
durch geschweifte Klammern{
und ersetzt}
. Der Abstand nach der ersten Klammer ist erforderlich, und das Semikolon am Ende ist ebenfalls erforderlich.for
-Schleifen nur mit initialisieren können,i;
anstatt sie zu verwendeni=0;
.${#1}
Teil der Bedingungi < ${#1}
bezieht sich auf die Länge unserer Eingabe (der erste Parameter$1
). Im Allgemeinen können Sie${#foo}
zum Abrufen der Größe der Zeichenfolge verwenden$foo
.Zusätzlich:
rev
ist das Werkzeug in util-linux, das einen String umkehrt.-n
Flagge passierenecho
, um die Zeilenumbrüche loszuwerden.rev<<<$y
wird als Here-String bezeichnet (siehe diese relevante tldp.org-Seite ), der die Variable$y
an die Standardeingabe von übergibtrev
.quelle
do
unddone
in einerfor
Schleife weglassen , benötigen Sie tatsächlich diesen Platz!y=$1;for((;i<${#1};i++)){ printf $y;y=`rev<<<$y`;}
... ein paar BytesJapt , 11 Bytes
Probieren Sie es online!
quelle
î
wieder, oder ?!05AB1E , 7 Bytes
Probieren Sie es online!
Wird weiter daran arbeiten. Ich mag den Teil "v" nicht wirklich, kann dort wahrscheinlich ein Byte speichern.
Erläuterung
quelle
vÂ}\J
5 Bytes sind das Gleiche wie Ihr Code, jedoch mit den von Ihnen gesuchten Builtins. :)Â
ist Bifurcate (kurz für Duplicate & Reverse, was genau das ist, was Sie tun).\
löscht das oberste Element auf dem Stapel.