Sur certains terminaux, appuyer sur la touche Retour arrière génère le code de contrôle ^H
pour supprimer le caractère précédent. Cela a donné lieu à un langage sournois où les modifications sont simulées pour un effet comique :
Sois gentil avec cet imbécile ^ H ^ H ^ H ^ Hgentleman, il vient du QG de l'entreprise.
Avec une ou plusieurs chaînes ^H
, affiche le résultat de l'espacement arrière sur chacune ^H
. L'entrée utilisera uniquement des caractères imprimables (ASCII 32-126) et ^
n'apparaîtra que ^H
. Les espaces arrières ne se produiront jamais sur un texte vide.
Vous ne pouvez pas supposer que l’environnement de sortie prend en charge les codes de contrôle, en particulier le code de retour arrière \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
Classement
Voici un classement par langue, gracieuseté de Martin Büttner .
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# 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
valide?A
.Réponses:
GNU sed, 11 octets
Test de sortie:
la source
sed -r ':;s/(^|.)\^H//;t'
- cela fonctionne au détriment de 6 octets supplémentaires^H
le début de la chaîne est un retour arrière sur un texte vide.Pyth, 11 octets
Manifestation.
la source
Gema, 6 octets
Échantillon échantillon:
CW, parce que l'exemple imbécile contre gentleman prend beaucoup trop de temps. (Tué après une journée. Peut-être un petit problème dans l'interprète? Tous les autres exemples ici sont traités en fractions de secondes.) Le motif récursif de Gema ne semble pas être affecté par le niveau de récursivité, mais la quantité de texte non concordant augmente le temps de traitement de manière exponentielle. .
la source
\^H
maches correspondent à un caractère à la fois?
.C, 52 octets
Nous définissons une fonction
f
qui prend un pointeur sur la chaîne en entrée. Après l'appel de la fonction, ce pointeur contiendra une chaîne modifiée.Un test simple:
Les impressions ci-dessus:
la source
j
votrefor
boucle (bien sûr, c'est à usage unique, mais je ne vois rien à ce sujet dans les règles :)). Vous pouvez également combiner la tâche avec le décrément:j;f(char*s){for(;s[j]==94?*s--=s[j],j+=3:s++);}
(47 bytes)s--, j+=3
et de la priorité des opérateurs, cela ne fonctionne pas correctement.Haskell, 47 octets
Définit une fonction
f :: String -> String
. Comment ça fonctionne:la source
h
et en faisanth(x,_)=x
pour le cas de chaîne vide.CJam,
14 à13 octetsComment ça fonctionne
UPDATE: 1 octet enregistré grâce à jimmy23013
Essayez-le en ligne ici
la source
W\ts
.Retina, 13 octets
Rétine
Les deux lignes doivent aller dans leurs propres fichiers, mais vous pouvez exécuter le code sous la forme d'un fichier avec l'
-s
indicateur.A chaque étape, nous supprimons la première correspondance de
.\^H
la chaîne. Nous répétons cela (avec le+
modificateur) jusqu'à ce qu'aucune suppression ne se produise.la source
(.*)
, comme il semble être tout simplement remis en arrière?.\^H
en une étape. Sinon,abc^H^H^H
il en résulteraitab^
après la première étape.+1`.\^H
). ;)JavaScript ( ES6 ), 39 octets
la source
Perl,
201615 octets(Code de 14 caractères + Option de ligne de commande à 1 caractère.)
Échantillon échantillon:
la source
1while s/.\^H//
s/.\^H//&&redo
redo
en quelque sorte pas fait son chemin dans mon ensemble de compétences. Devra changer cela.{ }
bloc. (La raison pour laquelle cela fonctionneperl -p
est que le-p
commutateur enveloppe automatiquement votre code dans unewhile
boucle.) La version de Kevin fonctionne dans n'importe quel paramètre.Julia,
584241 octetsÉconomisé 16 octets grâce à manatwork et 1 grâce à Glen O!
Cela crée une fonction récursive qui accepte une chaîne et renvoie une chaîne.
Ceci remplace une occurrence de
^H
à la fois par une chaîne vide pendant que l'entrée contient^
.Exemples:
la source
REGXY, 10 octets
Utilise REGXY , un langage basé sur la substitution regex. Remplace tout caractère suivi de ^ H par rien. La deuxième ligne est ensuite exécutée, ce qui n’est qu’un pointeur sur la ligne précédente et répète la substitution jusqu’à ce qu’elle ne corresponde pas.
Ceci se compile et s’exécute correctement avec l’exemple d’interprète présenté dans le lien ci-dessus, mais la solution est peut-être un peu effrontée, car elle repose sur une hypothèse concernant le caractère vague de la spécification du langage. La spécification indique que le premier jeton sur chaque ligne (avant le /) agit en tant qu'étiquette, mais l'hypothèse est qu'un pointeur d'étiquette null renverra à la première commande du fichier avec une étiquette nulle (ou, en d'autres termes, que 'null' est une étiquette valide). Une solution moins effrontée serait:
Ce qui équivaut à 13 octets.
la source
Python 3, 53 octets
Mais personnellement, j'aime mieux cette version plus verbeuse:
La chose intéressante est que
fonctionne réellement et donne
'Back'
, alors j’ai essayé de mapper^H -> [:-1]
et tout autre caractèrec -> 'c'
alorseval
, mais malheureusement vous ne pouvez pas avoir de chaînes après sans un+
, donc cela échoue:la source
+=
travaille dans la boucleo=o[:-1]+x
paso=o+x
o[:-2]=x
travail?str
Haskell,
5247 octetsExemple d'utilisation:
Comment ça fonctionne:
la source
Ruby,
272420 octets(19 caractères de code + option de ligne de commande de 1 caractère.)
Grâce à:
Échantillon échantillon:
la source
[]
!loop{$_[/.\^H/]=""}rescue""
Celle-ci est plus jolie car elle démontre la fraîcheur dans la gestion des exceptions de Ruby.$_=$`+$'while~/.\^H/
pour 20 (vous pouvez même laisser tomber le tilde si vous ne vous souciez pas de l'regexp literal in condition
avertissement).ruby
simplement toujours par défaut 1.8, alors que lesirb
utilisations rubis 2.1.5.Python 2, 50
C'est un peu bizarre d'avoir une seconde
lambda
, mais semble être le meilleur Python à ce jour.la source
Pyth - 19 octets
Réduire fonctionne vraiment, très bien avec cela, mais comme il ne fait qu'un seul personnage à la fois, je suis
^H
obligé de dépenser presque autant de personnages que l’algo lui-même pour remplacer le saut de ligne. Vous cherchez un meilleur moyen de le faire.Essayez-le en ligne ici .
la source
TeaScript , 7 bytes [Non en compétition]
Pas en compétition car TeaScript a été créé après la publication de ce défi. Ceci est ici comme référence.
Cela utilise le nouveau TeaScript 3, et remplace récursive pour supprimer les caractères
la source
regerence
? xDK5, 64 octets
K n'est pas vraiment conçu pour ce genre de travail ...
la source
golflua, 36 octets
Échantillon échantillon:
la source
Javascript, 62 octets
Pas le plus court, mais fonctionne bien.
Cela peut probablement être raccourci beaucoup!
la source
R,
5452 octetsMême idée de base que ma réponse Julia . Cela crée une fonction récursive qui accepte une chaîne et renvoie une chaîne. Si l'entrée est égale à elle-même avec une seule occurrence de
^H
remove, retournez-la, sinon appelez à nouveau la fonction.Vous pouvez l' essayer en ligne !
la source
ECMAScript 6, 57 octets
C'est
probablement golfable, il faut juste penser à un moyenprobablement pasla source
s=>{while(s!=(s=s.replace(/.\^H/,""));return s}
vouswhile
etreturn
sont trop longs, il pourrait être récursive:var f=s=>s==(s=s.replace(/.\^H/))?s:f(s)
~s.indexOf`^H`
peut devenir/\^H/.test(s)
Java,
7877 octetsla source
(Visual) FoxPro toute version 80 octets
Répéter la traduction de chaîne pour vider en recherchant ^ H et en sauvegardant un caractère.
la source
Julia,
4139 octetsCela consiste à utiliser ^ H en tant que séparateur, puis à supprimer le dernier caractère de chaque chaîne, puis à concaténer la chaîne suivante avant de supprimer à nouveau le dernier caractère. Contrairement à l'autre réponse de Julia, il ne s'agit pas d'une fonction récursive.
Remarque: j'ai supprimé le nom de la fonction de la définition. À l'origine, elle disait
f(s)=
plutôt ques->
, et vous l'utilisiez commef("AAA^HB^H^H")
... mais je sauve deux octets en le laissant "anonyme" et m'utilise comme nom. Vous l'utilisez comme ceci:(vous pouvez également lui affecter une variable comme
f=s->foldl((t,v)->chop(t)v,split(s,"^H"))
, alorsf("AAA^HB^H^H")
cela fonctionnera)la source
rs, 8 octets
Techniquement, cela ne compte pas, car cela dépend d'une fonctionnalité que j'ai ajoutée après la publication de cette question. Cependant, je pense que c'est assez chouette.
Démo en direct et cas de test .
la source
?1
.Python 2, 74 + 2 = 76 octets
J'ai essayé quelques approches jusqu'à présent, c'est le meilleur que j'ai pu trouver jusqu'à présent.
la source
Oreillons, 84 octets
Cela pourrait probablement être raccourci en fonction (1 octet que j'ai pu économiser lors d'un test rapide) mais j'aime un peu l'aspect one-liner ... :-)
Les accolades viennent de la saveur cache Intersystems de Mumps, ce que je connais le mieux.
la source
Java - 123 octets
Personnellement, j'aime la
g---1
partie la meilleure.élargi (légèrement):
la source
Lot - 138 octets
La première ligne permet d'économiser quelques octets sur une longue période
@echo off&setLocal enableDelayedExpansion
(ce qui désactive l'écho et permet le développement retardé des variables, au cas où vous vous le demanderiez). Je l'ai expliqué dans Conseils pour jouer au golf par lots .La deuxième ligne est une astuce intéressante pour enregistrer le caractère de contrôle de retour arrière dans une variable. C'est assez hacky, et je ne peux pas prétendre en prendre le crédit. C'est en quelque sorte expliqué ici . Utilise essentiellement la commande prompt pour générer un caractère de retour arrière et le capture dans une variable - dans ce cas
!D!
.La dernière ligne exécute ensuite la simple manipulation de chaîne suivante: remplacer
^H
par!D!<SPACE>!D!
.Malheureusement, il rompt avec des cas tels que"AAA^HB^H^H"
- là où il devrait produire"A"
, il produit plutôt"A"B
. Ce qui est un peu déroutant. Je vais devoir examiner comment la manipulation de chaînes par lots fonctionne plus en profondeur.Merci à certaines personnes utiles ici - je réalise maintenant que je ne faisais que sauvegarder le caractère de retour arrière (0x08) et que je ne faisais donc que remplacer les caractères. Cela fonctionne maintenant avec des exemples comme ceux-ci:
la source