var QUESTION_ID=69385,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/69385/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>
**Leaderboard:**
"oozing snotter"
imo ~Réponses:
Vim, 18 frappes
L'astuce cruciale est que coller sur quelque chose en mode visuel place en réalité l'ancien contenu de la sélection visuelle dans la mémoire tampon de collage.
la source
v
étant inclusif et en essayant de choisir parmi la voyelle.brainfuck,
238207 octetsNécessite
,
de renvoyer 0 sur EOF, des cellules d'habillage de 8 bits et la possibilité de se déplacer à gauche de la cellule 0. D'après mon expérience, ce sont les paramètres par défaut les plus courants.Je suis assez content de celui-ci. Mon premier essai était de 314 octets et c'est certainement une amélioration. :)
Cela fonctionne en stockant chaque octet de l'entrée dans deux cellules; l'un avec la valeur réelle de l'octet et l'autre avec la sortie du code suivant lorsqu'il est indiqué (la valeur de l'octet - 97):
Si le caractère est une consonne, il en sort avec une valeur non nulle. Si c'est une voyelle, il devient 0. À partir de là, il suffit de trouver où commence le deuxième mot et de tout imprimer dans l'ordre.
La version de 238 octets de ce programme a trouvé le caractère d'espace après avoir collecté toutes les entrées. C'était un casse-tête parce que cela impliquait de créer une cellule contenant 0 exactement là où j'essayais de passer en boucle. La façon dont j'ai résolu le problème avait pour effet de soustraire 30 de chaque caractère du premier mot et 32 de chaque caractère après celui-ci. Une partie assez importante du code était dédiée à la gestion de ce non-sens.
Maintenant, 32 caractères sont soustraits de chaque caractère de la boucle de saisie, ce qui est plus court et a un effet secondaire similaire, mais plus facile à gérer. En prime, cela m'a permis de créer mon propre caractère d'espace plus rapidement: au lieu de soustraire 139 à 171 (171 est ce que vous obtenez lorsque vous passez un espace à travers le détecteur de voyelles ci-dessus), la boucle qui ajoute 32 à chaque personnage se met en quatre pour ajouter également 32 à la cellule 171. Cela coûte quatre octets, mais cela signifie que je peux en soustraire 171 plus tard (au lieu de 139) pour un total net de 3 octets sauvés.
Avec des commentaires:
la source
y
comme une voyelle, mais la question dit que non. (nye cat
->ce nyat
)y
comme une consonne ... Je vais voir pourquoi il le fait.vim, 23
Je me demande si vim est réellement compétitif dans ce défi. Probablement pas avec les langues de golf, mais peut-être avec Ruby / Python / Perl / etc.
la source
Python,
686360 octetsEssayez-le en ligne sur Ideone .
Comment ça fonctionne
La chaîne de motif est répétée trois fois (
*3
), ce qui entraîne le motifToutes les occurrences correspondront soit à une chaîne non vide de non-voyelles, soit à une chaîne non vide suivie d'un caractère d'espacement unique.
La première instance correspondra aux consonnes au début du premier mot. Étant donné qu'il
+
est gourmand, il essaiera de faire correspondre le plus grand nombre possible, c'est-à-dire jusqu'à la première voyelle.Pour cette raison, la deuxième instance commencera par une voyelle, elle correspondra donc au reste du premier mot, jusqu'à l'espace compris entre les mots.
Comme dans le premier cas, le troisième correspondra à toutes les consonnes au début du deuxième mot, ce qui donnera une correspondance réussie pour le motif entier.
La chaîne brute
\3\2\1
(r
empêche Python de remplacer,\3
etc., avec des caractères de contrôle) inverse l'ordre des correspondances des motifs entre parenthèses, c'est-à-dire qu'elle les remplace par les consonnes au début du second mot, puis tous les caractères de la première voyelle du mot. premier mot jusqu'à l'espace, et enfin les consonnes au début du premier mot.L'argument final de
sub
(1
) le fait revenir immédiatement après le premier remplacement réussi, afin d'éviter des remplacements insensés dans le reste du deuxième mot. Cela est nécessaire car le modèle peut correspondre à n’importe quelle chaîne de trois consonnes consécutives ou plus.la source
JavaScript (ES6), 54 octets
Explication
Tester
la source
match
quand je rentrerai à la maison+!i
truc est une bonne solution. +1Python 3,
10810199 octets(Pas d'utilisation de regex)
Cette fonction attend une entrée via 2 arguments, par exemple
f('blushing','crow')
. Renvoie les nouveaux mots dans un tuple.Il y a beaucoup de solutions regex, je voulais donc écrire quelque chose qui n'utilise pas la bibliothèque re de Python.
Comment ça fonctionne
La seule partie compliquée est l'expression lambda
S
(l'abréviation signifie " S plit avant la première voyelle"). Il "récursive" sur le mot donné, en déplaçant un caractère à la fois du début des
(qui commence par le mot entier) à la fin dep
(qui commence vide). À la première voyelle rencontrée, il retourne(p,s)
, c'est-à-dire (préfixe, suffixe). Notez que ce n'est pas le bon ordre par rapport aux paramètres!J'ai pensé qu'il était plus logique que l'ordre renvoyé soit préfixe, puis suffixe (car généralement, un préfixe est placé avant un suffixe). Cette commande peut rendre le
a,b=S(x)
code légèrement plus facile à lire.Mais je n'avais pas le choix de l'ordre dans les paramètres du lambda, donc je ne pouvais pas définir
p
avants
. Le premier paramètre,s
, a dû prendre le mot entier , carp
avait une valeur par défaut, et les paramètres par défaut à la dernière. En faisant cela, je n'avais pas besoin d'appeler la fonctionS
avec une chaîne vide deux fois, et quelques octets pouvaient être sauvegardés. Cependant, il était peut-être simplement une mauvaise décision de renvoyer préfixe / suffixe dans l'ordre inverse de celui utilisé dans l'expression lambda.En ce qui concerne le choix de l'expression lambda sur la fonction, il faut plus d'octets à dire
def S(s,p=""):return
queS=lambda s,p="":
. Je peux faire ce choix car Python a une évaluation de court-circuit et l’opérateur ternaire. Cependant, je ne peux pas expliquer correctement comment j'ai utilisé les courts-circuits; il est difficile de raisonner.Ceci est ma première réponse. J'espère l'avoir fait correctement et qu'il est utile de publier une solution qui ne peut pas gagner.
Modifications: Merci aux commentateurs: le nombre d'octets a été réduit un peu, deux fois et les informations inutiles ont été supprimées. Tenté d'améliorer l'écriture. Si tout va bien fait aucune erreur.
la source
C # 6, 115 octets
C'est juste une douleur l'espace de noms pour regex est si long.
la source
System.Text.RegularExpressions.Regex.Replace
44 caractères! +1 parce que ça doit être une sorte de disque.CJam,
272422 octetsI / O est un mot par ligne. Essayez-le en ligne!
Comment ça fonctionne
la source
Perl, 33 octets
Le code ci-dessus a une longueur de 32 octets et nécessite le
-p
commutateur ( +1 octet ).La substitution est très similaire à celle donnée par @ @ DigitalTrauma dans Retina , mais cette réponse tire parti des sous -modèles récursifs de PCRE .
Essayez-le en ligne sur Ideone .
la source
Rétine , 34 ans
Essayez-le en ligne.
la source
JavaScript ES6,
935852 octetsSauvegardé 6 octets grâce à ETHProductions!
Essaye-le! (ES6 seulement)
Afficher l'extrait de code
la source
$4
tout;)C,
255201199 octetsJe ne vois pas beaucoup de réponses C ici, alors profitez-en; De plus, les golfeurs débutants, suggestions et critiques sont les bienvenus.
Si main () n'est pas requis, nous pouvons économiser 24 octets et atteindre 179 octets.
Ungolfed:
EDIT: Grâce à la suggestion de Feersum, j'ai économisé 54 octets. = D
la source
strpbrk
.Python 2,
364352269251 octetsEDIT: Merci beaucoup à @Cyoce de m'avoir aidé à jouer au golf 83 octets!
S'il vous plaît, aidez-moi à jouer au golf! Quoi qu'il en soit, au moins, je suis le premier répondeur Python. Et j'espère que je peux battre Java, s'il y a une réponse Java!
Essayez-le ici
la source
Japt,
2625 octetsHeureusement, j'ai ajouté une classe de voyelles à la fonctionnalité regex de Japt il y a quelques jours. Malheureusement, je n'ai pas ajouté de classe non-voyelle ni de contournement des doubles barres obliques inverses dans les chaînes regex.
Le
¿
devrait être le caractère brut U + 0093. L'entrée est une chaîne de plusieurs lignes, un mot / ligne. Essayez-le en ligne!EDIT: J'ai maintenant ajouté la classe non-voyelle
\V
et un moyen de contourner\\
(avec%
), donc ce code fonctionne maintenant pour 21 octets : ( Essayez-le en ligne )Comment ça fonctionne
Ancienne version (26 octets):
Essayez-le en ligne!
Comment ça fonctionne
la source
Python 3, 100 (ou 99) octets
Joué avec quelques versions mais ne semble pas pouvoir l'obtenir ci-dessous. On peut obtenir 99 octets en utilisant
def f(g)
plutôt une liste de chaînes plutôt que deux chaînes séparées, mais je préfère les deux arg roue.L'alternative est égale à la longueur:
J'ai essayé de remplacer, comme @TanMath utilise, mais je ne pouvais pas le faire plus court. En outre, TanMath peut obtenir une réponse plus courte d'un octet en utilisant également à la
"[aeiou]"
place de"[aeiou]+"
parce que nous n'avons besoin que de faire correspondre les instances uniques. Enfin, l'implémentation deinput()
semble avoir changé entre py2 et py3 - elle évalue automatiquement stdin en tant que chaîne.la source
s=re.split
dans l'alternative?*
in*g
. 2. La deuxième version peut être jouée jusqu'àlambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
.f=
.s
c'est un argument par défaut, vous n'avez donc pas à le spécifier. Un lambda sans nom est une soumission acceptable;f=
n'est pas requis.sed, 38 personnages
Utilisation de l'expression régulière étendue de la solution Retina .
Ce qui précède est de 37 caractères et nécessite le
-r
changement (+1 caractère).Exemple:
la source
C # 6, 165 octets
Étendu:
la source
"aeiou".ToCharArray()
peut être'a','e','i','o','u'
pour -2 octetsIndexOfAny
cela ne prend pas de paramètres, il faudrait doncnew[]{'a','e','i','o','u'}
IndexOfAny
est une méthode params. Quoi qu'il en soit, excellente réponse, 24 caractères / 42 octets
Try it here (Firefox only).
Si vous avez besoin d’aide pour comprendre cela, cela se traduit en ES6 par
la source
PowerShell, 52 octets
C'est une regex à remplacer par quatre groupes de capture; avec:
('(.*?)([aeiou]\S+) '*2)
à'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
forces du tableau args dans une chaîne, et ajoute un espace de fuite si l'espace de fuite dans le regex ne le casser.la source
JavaScript (ES6),
1201071021019992 octetsCeci prend en compte si les paramètres étaient un objet comme celui-ci et inversement:
var a = {x: "man", y:"plaster"]}
la source
.match(/[aeiou]/).index
peut devenir:.search`[aeiou]`
Python,
129108105109 octetsCe programme prend dans une liste de mots comme celui-ci
["master","plan"]
EDIT : Merci @Volatility
EDIT: utilise maintenant re.split
Cette réponse utilise regex comme le font la plupart d'entre eux.
Essayez-le ici
la source
str.replace
remplace toutes les occurrences d'une sous-chaîne, vous voulez donc la limiter à une substitution en ayant.replace(f,l,1)
. Cependant, vous pouvez enregistrer un groupe en utilisanti,j=input()
, en reliantre.findall
et en utilisant des'[^aeiou]+'
variables à caractère unique.input()
en deux variables. Voulez-vous direi,j=input().split()
(etraw_input()
en Python 2)?"sass","bit" -> "babb", "sit"
.Java 8, 343 octets
Ici vous avez votre première réponse Java. Pas aussi expérimenté avec le golf, chaque suggestion est appréciée!
Ungolfed:
la source
java.util.function.Function
? Je doute fort qu'il soit nécessaire, sauf si vous voulez direimport
, mais supprimez l'importation, car vous n'y faites référence qu'une fois. Changerpublic class C{public static void Main(String[] a)
pourinterface C{void Main(String[]a)
Function<String, Integer>
n'a pas besoin d'espacesfor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
lafor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
est un nom terrible, beaucoup trop long.Function<String, Integer>
àjava.util.function.Function<String,Integer>
et laisser tomber l'importationOctave, 96 octets
Grâce aux attributions en ligne d'Octave et à la fonctionnalité "index-Anywhere", tout cela n'est que la définition d'une seule fonction anonyme. Fondamentalement, nous reconstruisons la chaîne spoonerized tout en stockant les points de coupure dans
a
etb
. Je suis particulièrement satisfait de laf
fonction inline , qui trouve le point de coupure et m'empêche d'utiliser le "tout" àfind(ismember(a,b),1)
deux reprises. En outre, pas de regex :) .la source
TeaScript , 27 octets
\w
est en fait[^aeiou]
.la source
\w
méta de regex par défaut en[^aeiou]
? Pourquoi?\w
c'était déjà utilisé par JavaScript. Je le changerai bientôtElixir ,
143117 octetsFractionner les deux chaînes (a, b) sur la première voyelle et construire de nouvelles chaînes à renvoyer.
EDIT: Quelques octets ont été supprimés en utilisant une correspondance de modèle au lieu d'
elem
appels maladroits pour extraire les valeurs des tuples.la source
Java, 147 octets
Je suppose que juste une fonction est bien aussi.
split(regex)
consomme malheureusement le délimiteur, ce qui signifie que je dois utilisersubstring
pour obtenir les suffixes.la source
Pyth,
3028 octetsPrend une entrée et donne la sortie sous forme de liste des deux mots.
Essayez-le en ligne.
la source
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
assigne une liste de deux éléments à G et H etC
transpose. Il peut y avoir quelque chose d'encore mieux.Python (sans regex), 85 octets
Échantillon échantillon:
t
est une fonction récursive qui calcule l'indice de la voyelle la plus ancienne après le premier caractère de son arguments
. Si le deuxième caractères[1]
est une voyelle, il est évalué àTrue
, ce qui a uneint
valeur1
. Sinon, il effectue un appel récursif avec le premier caractère supprimé et ajoute 1 à l'index résultant en utilisant-~
(complément à deux du complément). Enfin, les résultats det
sont utilisés comme indices pour le découpage de chaînes afin de calculer le spoonérisme.la source
GNU Awk 4.0, 48 caractères
Échantillon échantillon:
la source
PowerShell, 61 octets
Utilise regex pour échanger les premiers caractères non-voyelles de chaque mot
la source