var QUESTION_ID=86647,OVERRIDE_USER=48934;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>
Réponses:
V ,
1514 octetsEssayez-le en ligne!
Une solution assez simple. Le défi parfait pour V!
Explication:
Idéalement, en fonction du fonctionnement de la récursivité, cela s'exécutera une fois pour chaque caret.
la source
Cheddar,
777267 octetsAucun regex!
J'adore cette réponse car c'est une merveilleuse démonstration des capacités de Cheddar. Principalement grâce à la fonction de remplacement ajoutée par Conor. Le PR à dev n'a jamais été fait donc la fonction de remplacement n'existe que sur cette branche (mise à jour: j'ai fait le PR et maintenant c'est sur la dernière branche beta avec laquelle vous pouvez installer
npm install -g cheddar-lang
)J'ai trouvé un moyen de jouer au golf, mais malheureusement, une erreur se produit lorsque les longueurs des articles ne sont pas les mêmes:
J'aurais pu économiser beaucoup d'octets en utilisant l'expression régulière, et en fait je viens de faire des expressions régulières pour Cheddar ... le seul problème est qu'il n'y a pas de fonctions d'expression régulière: /
Explication
Pour mieux comprendre. C'est ce qui
.lines
revient pour1^2
le
.turn
avec tourner ceci:dans:
Un autre exemple qui le rendra plus clair:
devient:
Pourquoi formater?
Ce que
%-2s
fait est assez simple.%
spécifie que nous commençons un "format", ou qu'une variable sera insérée dans cette chaîne à ce stade.-
signifie pad droit de la chaîne, et2
est la longueur maximale. Par défaut, il remplit d'espaces.s
spécifie juste que c'est une chaîne. Pour voir ce que ça fait:la source
turn
méthode pour les cordes?Perl, 21 + 1 = 22 octets
Courez avec le
-p
drapeau. Remplacez-le♥
par unESC
octet brut (0x1b
) et↓
par un onglet vertical (0x0b
).L'onglet vertical est l'idée de Martin Ender. Il a sauvé deux octets! Merci.
la source
JavaScript (ES6),
5655 octetsRegexps à la rescousse bien sûr. Le premier remplace tous les caractères par des espaces, sauf s'il trouve un signe d'insertion, auquel cas il supprime le signe d'insertion et conserve le caractère après lui. (Ces caractères sont garantis d'exister.) Le second est le plus évident pour remplacer chaque caret et son caractère suivant par un espace.
Edit: sauvé 1 octet grâce à @Lynn qui a imaginé un moyen de réutiliser la chaîne de remplacement pour le deuxième remplacement permettant au remplacement d'être mappé sur un tableau d'expressions rationnelles.
la source
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
c'est un octet plus court.Python 3,
15710198858374 octetsCette solution conserve la trace du caractère précédent
^
, puis décide de sortir sur la première ou la deuxième ligne en fonction de cela.Sorties sous forme de tableau de
['firstline', 'secondline']
.Enregistré
1315 octets grâce à @LeakyNun!7 octets enregistrés grâce à @Joffan!
la source
a=['','']
et de concaténer' '
etc
directement dansa[l]
eta[~l]
?Python 2, 73 octets
Aucun regex. Se souvient si le caractère précédent était
^
, et place le caractère actuel dans la ligne supérieure ou inférieure en fonction de cela, et un espace dans l'autre.la source
Pyth, 17 octets
Renvoie un tableau de 2 chaînes. (Préparez-vous
j
à les rejoindre avec une nouvelle ligne.)Essayez-le en ligne .
la source
MATL , 18 octets
Essayez-le en ligne!
la source
Rubis, 47 + 1 (
-n
drapeau) = 48 octetsExécutez-le comme ceci:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
la source
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
et-p
au lieu de-n
.+$/
signifie qu'il ne va pas économiser d'octets.puts
lance automatiquement la nouvelle ligne lorsque le,
est présent entre les arguments.ruby -p ... <<< 'input'
mais je suis d'accord, s'il manque la nouvelle ligne ce n'est pas bon! En fait, j'aurais peut-être ajouté une nouvelle ligne dans mes tests plus tôt ... Elle était au travail, donc je ne peux pas vérifier!gets
comprend la nouvelle ligne de fin la plupart du temps, mais si vous canalisez dans un fichier qui ne contient pas la nouvelle ligne de fin, alors il n'apparaîtra pas et la sortie sera erronée . Testez votre code avecruby -p ... inputfile
puisque Ruby redirige legets
fichier vers le fichier s'il s'agit d'un argument de ligne de commande.Python (2),
766867 octets-5 octets grâce à @LeakyNun
-3 octets grâce à @ KevinLau-notKenny
-1 octet grâce à @ValueInk
-0 octets grâce à @DrGreenEggsandIronMan
Cette fonction Lambda anonyme prend la chaîne d'entrée comme seul argument et renvoie les deux lignes de sortie séparées par une nouvelle ligne. Pour l'appeler, donnez-lui un nom en écrivant "f =" devant lui.
Regex assez simple: La première partie remplace le suivant par un espace: un caractère et une
carottecaret ou seulement un char, mais seulement s'il n'y a pas caret devant eux. La deuxième partie remplace tout signe d'insertion dans la chaîne et le caractère suivant par un espace.la source
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
pour -1 octetConvexe, 24 octets
Essayez-le en ligne!
la source
Rétine, 16 octets
Un portage de ma réponse Perl, souligné par Martin Ender. Remplacez
♥
par unESC
octet brut (0x1b
) et↓
par une tabulation verticale (0x0b
).la source
shell + TeX + catdvi,
5143 octetsUtilise
tex
pour composer de belles mathématiques, puis utilisecatdvi
pour créer une représentation textuelle. La commande head supprime les indésirables (numérotation des pages, sauts de ligne) qui sont autrement présents.Edit: Pourquoi faire la chose longue et appropriée et rediriger vers
/dev/null
quand vous pouvez ignorer les effets secondaires et écrire dans un fichier à une seule lettre?Exemple
Contribution:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
Sortie TeX (rognée en équation): Sortie finale:
Hypothèses: commencer dans un répertoire vide (ou spécifiquement un répertoire sans nom se terminant par "i"). L'entrée est un seul argument du script shell. L'entrée n'est pas une chaîne vide.
Quelqu'un me dit si c'est un abus de règle, surtout
catdvi
.la source
Haskell,
745655 octetsRenvoie une paire de chaînes. Exemple d'utilisation:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
crée une liste de paires, où le premier élément est le caractère dans la ligne supérieure et le deuxième élément est le caractère dans la ligne inférieure.unzip
le transforme en une paire de listes.Modifier: @xnor a suggéré d'
unzip
économiser 18 octets. @Laikoni a trouvé un octet de plus à enregistrer. Merci!la source
j=unzip.g
?g[]=[]
parg x=x
pour enregistrer un octet.Perl, 35 octets
Code de 34 octets + 1 pour
-p
Usage
Remarque: C'est exactement la même chose que la réponse de Value Ink que j'ai espionnée par la suite. Supprime si nécessaire car cela n'ajoute pas vraiment à la solution Ruby.
la source
Java 8 lambda,
132128112 112 caractèresLa version non golfée ressemble à ceci:
Les sorties sous forme de tableau, vérifiant simplement s'il y a un signe d'insertion et si c'est le cas, le caractère suivant sera placé dans la ligne supérieure, sinon il y aura un espace.
Mises à jour
Les caractères remplacés avec leurs valeurs ascii pour enregistrer 4 caractères.
Merci à @LeakyLun d'avoir indiqué d'utiliser un tableau de caractères comme entrée à la place.
Grâce aussi à @KevinCruijssen pour passer la
int
àchar
sauver quelques caractères.la source
char[]
et d'utiliserfor(char c:i)
pour voir si le nombre d'octets peut être réduit.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
avec"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
comme entrée. ( Ideone de ces changements. )Noix de coco ,
12211496 octetsEdit:
826 octets vers le bas avec l'aide de Leaky Nun.Donc, comme j'ai appris aujourd'hui, python a un opérateur conditionnel ternaire, ou en fait deux d'entre eux:
<true_expr> if <condition> else <false_expr>
et le<condition> and <true_expr> or <false_expr>
dernier avec un caractère de moins.Une version conforme python peut être idéée .
Premier essai:
Appel avec
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
impressionsQuelqu'un a déjà essayé le golf à la noix de coco? Il enrichit python avec des concepts de programmation plus fonctionnels comme la correspondance de motifs et la concaténation de fonctions (avec
..
) utilisées ci-dessus. Comme c'est mon premier essai de noix de coco, tous les conseils seraient appréciés.Cela pourrait certainement être raccourci car tout code python valide est également une noix de coco valide et des réponses plus courtes en python ont été publiées, mais j'ai essayé de trouver une solution purement fonctionnelle.
la source
x and y or z
) pour remplacer lecase
.s[0]=="^"
au lieu dematch['^',c]+r in l
match['^',c]+r
pars[0]=="^"
, alorsc
etr
ne sont plus liés. Comment cela aiderait-il?s[1]
pour remplacerc
ets[2:]
pour remplacerr
.Dyalog APL, 34 octets
Il renvoie un vecteur à deux éléments avec les deux lignes
Exemple de course (la flèche en haut sert à formater le vecteur à deux éléments pour la consommation humaine):
la source
PowerShell v2 +,
8883 octetsUn peu plus long que les autres, mais présente un peu de magie PowerShell et une logique un peu différente.
Essentiellement le même concept que les réponses Python - nous parcourons le caractère par caractère en entrée, nous rappelons si le précédent était un caret (
$c
), et mettons le caractère actuel à l'endroit approprié. Cependant, la logique et la méthode pour déterminer où produire sont traitées un peu différemment, et sans tuple ni variables distinctes - nous testons si le caractère précédent était un signe d'insertion, et si c'est le cas, sortez le caractère dans le pipeline et concaténez un espace sur$b
. Sinon, nous vérifions si le caractère actuel est un signe d'insertionelseif($_-94)
et tant que ce n'est pas le cas, nous concaténons le caractère actuel$b
et envoyons un espace au pipeline. Enfin, nous définissons si le personnage actuel est un curseur pour le prochain tour.Nous rassemblons ces caractères du pipeline ensemble parens, les encapsulons dans un
-join
qui les transforme en chaîne, et laissons cela$b
sur le pipeline. La sortie à la fin est implicite avec une nouvelle ligne entre les deux.À titre de comparaison, voici un port direct de la réponse Python @ xnor , à 85 octets :
la source
Gema,
4241 caractèresGema traite les entrées sous forme de flux, vous devez donc les résoudre en un seul passage: la première ligne est écrite immédiatement comme traitée, la deuxième ligne est collectée dans la variable $ s, puis sortie à la fin.
Exemple d'exécution:
la source
Gomme de cannelle, 21 octets
Non compétitif. Essayez-le en ligne.
Explication
Je ne suis pas beaucoup un golfeur regex, donc il y a probablement une meilleure façon de le faire.
La chaîne se décompresse pour:
(notez l'espace de fin)
La première
S
étape reçoit une entrée et utilise un regard négatif pour remplacer tous les caractères autres que les carets sans caret précédent par un espace, puis supprime tous les carets. Ensuite, il sort immédiatement la chaîne d'entrée modifiée avec une nouvelle ligne et supprime cetteS
étape. Étant donné que STDIN est maintenant épuisé et que l'étape précédente n'a fourni aucune entrée, la prochaineS
étape reçoit à nouveau la dernière ligne de STDIN, puis remplace tous les carets suivis par n'importe quel caractère avec un espace et les affiche.En Perl pseudo-code:
la source
J ,
2827 octetsEssayez-le en ligne!
Il doit y avoir une meilleure façon ...
la source