Bei einigen Terminals wird durch Drücken der Rücktaste der Steuercode ^H
zum Löschen des vorherigen Zeichens generiert . Dies führte zu einer raffinierten Redewendung, in der Änderungen für einen komödiantischen Effekt vorgetäuscht werden :
Sei nett zu diesem Idioten. Er ist zu Besuch vom Hauptquartier des Unternehmens.
Bei einer Zeichenfolge mit einer oder mehreren Zeichenfolgen wird ^H
das Ergebnis des Zurücksetzens für jede Zeichenfolge ausgegeben ^H
. Die Eingabe verwendet nur druckbare Zeichen (ASCII 32-126) und ^
wird nur als angezeigt ^H
. Bei leerem Text treten niemals Leerzeichen auf.
Sie können nicht davon ausgehen, dass die Ausgabeumgebung Steuercodes unterstützt, insbesondere den Backspace-Code \x08
.
>> Horse^H^H^H^H^HCow
Cow
>> Be nice to this fool^H^H^H^Hgentleman, he's visiting from corporate HQ.
Be nice to this gentleman, he's visiting from corporate HQ.
>> 123^H45^H^H^H78^H
17
>> Digital Trauma^H^H^H^H^H^H^H^H^H^H^H^H^H^HMaria Tidal Tug^H^H^H^H^H^H^H^H^H^H^H^H^H^H^HDigital Trauma
Digital Trauma
Bestenliste
Hier ist eine sprachspezifische Rangliste mit freundlicher Genehmigung von Martin Büttner .
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
function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/52946/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){$.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){answers.push.apply(answers,e.items);if(e.has_more)getAnswers();else process()}})}function shouldHaveHeading(e){var t=false;var n=e.body_markdown.split("\n");try{t|=/^#/.test(e.body_markdown);t|=["-","="].indexOf(n[1][0])>-1;t&=LANGUAGE_REG.test(e.body_markdown)}catch(r){}return t}function shouldHaveScore(e){var t=false;try{t|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(n){}return t}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading);answers.sort(function(e,t){var n=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[Infinity])[0],r=+(t.body_markdown.split("\n")[0].match(SIZE_REG)||[Infinity])[0];return n-r});var e={};var t=1;answers.forEach(function(n){var r=n.body_markdown.split("\n")[0];var i=$("#answer-template").html();var s=r.match(NUMBER_REG)[0];var o=(r.match(SIZE_REG)||[0])[0];var u=r.match(LANGUAGE_REG)[1];var a=getAuthorName(n);i=i.replace("{{PLACE}}",t++ +".").replace("{{NAME}}",a).replace("{{LANGUAGE}}",u).replace("{{SIZE}}",o).replace("{{LINK}}",n.share_link);i=$(i);$("#answers").append(i);e[u]=e[u]||{lang:u,user:a,size:o,link:n.share_link}});var n=[];for(var r in e)if(e.hasOwnProperty(r))n.push(e[r]);n.sort(function(e,t){if(e.lang>t.lang)return 1;if(e.lang<t.lang)return-1;return 0});for(var i=0;i<n.length;++i){var s=$("#language-template").html();var r=n[i];s=s.replace("{{LANGUAGE}}",r.lang).replace("{{NAME}}",r.user).replace("{{SIZE}}",r.size).replace("{{LINK}}",r.link);s=$(s);$("#languages").append(s)}}var QUESTION_ID=45497;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/;var NUMBER_REG=/\d+/;var LANGUAGE_REG=/^#*\s*((?:[^,\s]|\s+[^-,\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>Language<td>Size<tbody id=answers></table></div><div id=language-list><h2>Winners by Language</h2><table class=language-list><thead><tr><td>Language<td>User<td>Score<tbody id=languages></table></div><table style=display:none><tbody id=answer-template><tr><td>{{PLACE}}</td><td>{{NAME}}<td>{{LANGUAGE}}<td>{{SIZE}}<td><a href={{LINK}}>Link</a></table><table style=display:none><tbody id=language-template><tr><td>{{LANGUAGE}}<td>{{NAME}}<td>{{SIZE}}<td><a href={{LINK}}>Link</a></table>
AAA^HB^H^H
gültig?A
.Antworten:
GNU sed, 11 Bytes
Testausgang:
quelle
sed -r ':;s/(^|.)\^H//;t'
- Dies funktioniert auf Kosten von zusätzlichen 6 Bytes^H
der Anfang der Zeichenfolge ist ein Backspace für leeren Text.Pyth, 11 Bytes
Demonstration.
quelle
Gema, 6 Bytes
Probelauf:
CW, weil das Beispiel Dummkopf gegen Gentleman viel zu lange dauert. (Nach einem Tag erledigt. Vielleicht ein Fehler im Interpreter? Alle anderen Beispiele hier werden in Bruchteilen von Sekunden verarbeitet.) Gemas rekursives Muster scheint nicht von der Rekursionsstufe betroffen zu sein, aber die Menge an nicht übereinstimmendem Text erhöht die Verarbeitungszeit exponentiell .
quelle
\^H
wiederholt wird und jeweils ein Zeichen mit dem übereinstimmt?
.C, 52 Bytes
Wir definieren eine Funktion
f
, die als Eingabe einen Zeiger auf den String nimmt. Nach dem Funktionsaufruf enthält dieser Zeiger eine geänderte Zeichenfolge.Ein einfacher Test:
Die obigen Drucke:
quelle
j
in Ihrerfor
Schleife nicht initialisieren müssen (natürlich ist es dann einmalig, aber ich sehe nichts darüber in den Regeln :)). Sie können die Zuweisung auch mit der Dekrementierung kombinieren:j;f(char*s){for(;s[j]==94?*s--=s[j],j+=3:s++);}
(47 Bytes)s--, j+=3
und der Vorrangstellung der Operatoren funktioniert es nicht richtig.Haskell, 47 Bytes
Definiert eine Funktion
f :: String -> String
. Wie es funktioniert:quelle
h
undh(x,_)=x
für die leere Zeichenfolge Fall tauschen .CJam,
1413 BytesWie es funktioniert
UPDATE: 1 Byte gespeichert dank jimmy23013
Probieren Sie es hier online aus
quelle
W\ts
.Retina, 13 Bytes
Retina
Die zwei Zeilen sollten in ihre eigenen Dateien gehen, aber Sie können den Code als eine Datei mit dem
-s
Flag ausführen .Bei jedem Schritt löschen wir die erste Übereinstimmung für
.\^H
in der Zeichenfolge. Wir wiederholen dies (mit dem+
Modifikator), bis keine Löschung mehr erfolgt.quelle
(.*)
, wie es scheint, nur unverändert zurückgesetzt?.\^H
in einem Schritt. Sonstabc^H^H^H
würde sichab^
nach dem ersten Schritt ergeben.+1`.\^H
). ;)JavaScript ( ES6 ), 39 Byte
quelle
Perl,
201615 Bytes(14 Zeichen Code + 1 Zeichen Befehlszeilenoption.)
Probelauf:
quelle
1while s/.\^H//
s/.\^H//&&redo
redo
irgendwie nicht in meine Fähigkeiten eingedrungen. Muss das ändern.{ }
Blocks ist. (Der Grund, warum es funktioniert,perl -p
ist, dass der-p
Schalter Ihren Code automatisch in einewhile
Schleife einhüllt .) Kevins Version funktioniert in jeder Einstellung.Julia,
584241 BytesDank Manatwork 16 Byte und dank Glen O 1 Byte eingespart!
Dadurch wird eine rekursive Funktion erstellt, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt.
Dies ersetzt jeweils ein Vorkommen
^H
durch eine leere Zeichenfolge, während die Eingabe enthält^
.Beispiele:
quelle
REGXY, 10 Bytes
Verwendet REGXY , eine auf Regex-Substitution basierende Sprache. Ersetzt ein beliebiges Zeichen gefolgt von ^ H durch nichts. Dann wird die zweite Zeile ausgeführt, die nur ein Zeiger auf die vorherige Zeile ist, und die Ersetzung wiederholt, bis sie nicht mehr übereinstimmt.
Dies wird mit dem Beispiel-Interpreter im obigen Link korrekt kompiliert und ausgeführt, aber die Lösung ist möglicherweise etwas frech, da sie von einer Annahme in der Unbestimmtheit der Sprachspezifikation abhängt. Die Spezifikation gibt an, dass das erste Token in jeder Zeile (vor dem /) als Beschriftung fungiert. Es wird jedoch davon ausgegangen, dass ein Null-Beschriftungszeiger auf den ersten Befehl in der Datei mit einer Null-Beschriftung verweist (oder mit anderen Worten, das 'null' ist ein gültiges Etikett). Eine weniger freche Lösung wäre:
Das sind 13 Bytes.
quelle
Python 3, 53 Bytes
Aber persönlich gefällt mir diese wortreichere Version besser:
Das Interessante ist das
tatsächlich funktioniert und gibt
'Back'
, so dass ich zu kartieren versucht^H -> [:-1]
und andere Zeichenc -> 'c'
danneval
, aber leider kann man keine Saiten hat danach ohne+
, so dass dies fehlschlägt:quelle
+=
arbeitet in der Schleifeo=o[:-1]+x
, nichto=o+x
o[:-2]=x
?str
Haskell,
5247 BytesAnwendungsbeispiel:
Wie es funktioniert:
quelle
Ruby,
272420 Bytes(19 Zeichen Code + 1 Zeichen Befehlszeilenoption.)
Dank an:
Probelauf:
quelle
[]
!loop{$_[/.\^H/]=""}rescue""
Diese ist schöner, da sie Rubys Ausnahmebehandlungskühle demonstriert.$_=$`+$'while~/.\^H/
für 20 (Sie können die Tilde sogar fallen lassen, wenn Sie sich nicht für dieregexp literal in condition
Warnung interessieren ).ruby
einfach noch die Standardeinstellungen 1.8, währendirb
Ruby 2.1.5 verwendet wird.Python 2, 50
Es ist ein bisschen seltsam, eine Sekunde drin zu haben
lambda
, aber es scheint der beste Python zu sein, den es bisher gibt.quelle
Pyth - 19 Bytes
Reduce funktioniert sehr, sehr gut damit, aber es wird immer nur ein Zeichen
^H
angezeigt. Ich musste also fast so viele Zeichen wie das eigentliche Algo ausgeben, um ein Ersetzen durch einen Zeilenumbruch zu erreichen. Suche nach einem besseren Weg, das zu tun.Probieren Sie es hier online aus .
quelle
TeaScript , 7 Bytes [Nicht konkurrierend]
Nachdem diese Herausforderung veröffentlicht wurde, wurde kein Wettbewerb als TeaScript durchgeführt. Dies ist hier als Referenz.
Dies verwendet das neue TeaScript 3 und rekursive Ersetzungen, um die Zeichen zu entfernen
quelle
regerence
? xDK5, 64 Bytes
K ist nicht wirklich für diese Art von Arbeit konzipiert ...
quelle
Golflua, 36 Bytes
Probelauf:
quelle
Javascript, 62 Bytes
Nicht die kürzeste, aber funktioniert gut.
Dies kann wahrscheinlich viel verkürzt werden!
quelle
R,
5452 BytesGleiche Grundidee wie meine Julia-Antwort . Dadurch wird eine rekursive Funktion erstellt, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt. Wenn die Eingabe mit einem Vorkommen von gleich ist
^H
entfernten , geben Sie sie zurück, andernfalls rufen Sie die Funktion erneut auf.Sie können es online ausprobieren !
quelle
ECMAScript 6, 57 Bytes
Das ist
wahrscheinlich golfen, muss mir nur einen Weg überlegen,wahrscheinlich nichtquelle
s=>{while(s!=(s=s.replace(/.\^H/,""));return s}
?while
undreturn
sind zu lang, könnte es rekursiv sein:var f=s=>s==(s=s.replace(/.\^H/))?s:f(s)
~s.indexOf`^H`
werden kann/\^H/.test(s)
Java,
7877 Bytesquelle
(Visual) FoxPro jede Version 80 Bytes
Wiederholen Sie die String-Übersetzung, um sie zu leeren, indem Sie ^ H suchen und ein Zeichen sichern.
quelle
Julia,
4139 BytesWas es tut, ist, ^ H als Begrenzer zu verwenden und dann das letzte Zeichen in jeder Zeichenkette zu entfernen und dann die nächste Zeichenkette zu verketten, bevor das letzte Zeichen wieder entfernt wird. Im Gegensatz zur anderen Julia-Antwort ist dies keine rekursive Funktion.
Hinweis: Ich habe den Funktionsnamen aus der Definition entfernt. Ursprünglich hieß es
f(s)=
eher alss->
, und Sie haben es alsf("AAA^HB^H^H")
... verwendet, aber ich spare zwei Bytes, indem ich es "anonym" sein lasse und es als seinen Namen verwende. Du benutzt es so:(Sie können ihm auch eine Variable zuweisen als
f=s->foldl((t,v)->chop(t)v,split(s,"^H"))
, dannf("AAA^HB^H^H")
wird es funktionieren)quelle
RS, 8 Bytes
Technisch gesehen zählt dies nicht, da es von einer Funktion abhängt, die ich nach dem Posten dieser Frage hinzugefügt habe. Allerdings finde ich es ziemlich ordentlich.
Live-Demo und Testfälle .
quelle
?1
.Python 2, 74 + 2 = 76 Bytes
Ich habe bisher ein paar Ansätze ausprobiert, dies ist das Beste, was ich bisher finden konnte.
quelle
Mumps, 84 Bytes
Dies könnte wahrscheinlich als eine Funktion kürzer gemacht werden (1 Byte konnte ich in schnellen Tests speichern), aber ich mag irgendwie den Einzeiler-Aspekt ... :-)
Die Klammern stammen aus der Intersystems Cache-Variante von Mumps, mit der ich mich am besten auskenne.
quelle
Java - 123 Bytes
Mir persönlich gefällt das
g---1
Teil am besten.erweitert (leicht):
quelle
Batch - 138 Bytes
In der ersten Zeile werden einige Bytes über die Länge gespeichert
@echo off&setLocal enableDelayedExpansion
(wodurch das Echo deaktiviert und die verzögerte Erweiterung von Variablen ermöglicht wird, falls Sie sich fragen). Ich erklärte es in Tipps zum Golfen in Batch .Die zweite Zeile ist ein kleiner Trick, um ein Backspace-Steuerzeichen in einer Variablen zu speichern. Es ist ziemlich abgedreht, und ich kann nicht so tun, als würde ich das würdigen. Es wird hier irgendwie erklärt . Verwendet im Allgemeinen den Eingabeaufforderungsbefehl, um ein Backspace-Zeichen zu generieren und es in einer Variablen zu erfassen - in diesem Fall
!D!
.Die letzte Zeile führt dann die einfache Manipulation von - replace
^H
with durch!D!<SPACE>!D!
.Leider bricht es mit Fällen wie"AAA^HB^H^H"
- wo es produzieren sollte, produziert"A"
es stattdessen"A"B
. Welches ist etwas verwirrend. Ich werde genauer untersuchen, wie die Manipulation von Batch-Strings funktioniert.Dank einiger hilfsbereiter Leute hier - mir ist jetzt klar, dass ich nur das Backspace-Zeichen (0x08) gespeichert habe und daher nur die Zeichen überschrieb. Es funktioniert jetzt mit Beispielen wie dem folgenden:
quelle