Objectif
Votre objectif est de créer un programme qui convertit une entrée en son acronyme. Votre saisie est garantie d'avoir uniquement des lettres et des espaces. L'entrée aura exactement un espace entre les mots. Vous devez sortir l'acronyme de l'entrée.
Règles
- Votre code ne peut pas être sensible à la casse (par exemple
foo
etFoo
sont les mêmes) - Votre code doit ignorer les mots suivants et ne pas les mettre dans l'acronyme:
and or by of
- Vous ne pouvez pas supposer que les mots sont tous en minuscules.
- La sortie doit être entièrement en majuscule, sans séparation entre les caractères.
- Une nouvelle ligne de fin est acceptée mais pas nécessaire.
- Si votre langue a une fonction d'acronyme intégrée, vous ne pouvez pas l' utiliser.
Exemples
(entrées / sorties regroupées)
United States of America
USA
Light Amplification by Stimulation of Emitted Radiation
LASER
united states of america
USA
Jordan Of the World
JTW
Notation
Il s'agit d'un défi de code-golf , donc le code le plus court l'emporte.
Classement
var QUESTION_ID=75448,OVERRIDE_USER=8478;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>
T` l
)Réponses:
Pyth,
252120 octetsEssayez-le ici!
Merci à @Jakube d'avoir enregistré un octet!
Explication
La chaîne emballée devient
ANDBYOROF
la source
."@YK½¼
économise un octet de plus"ANDORBYOF
. C'est essentiellement@ANDBYOROF
emballé.@ANDBYOROF
et voyez ce que vous obtenez.Gelée ,
2120 octetsEssayez-le en ligne!
(-1 grâce à @Dennis.)
Le dictionnaire de Jelly est un peu bizarre en ce qu'il a
AND
en majuscule maisby
en minuscule ...la source
Rétine, 29
3136octetsNouvelle ligne prévue à la fin.
Merci à Martin Büttner pour avoir économisé 5 octets
Essayez-le en ligne
la source
T`l`L
-il?JavaScript (ES6), 56 octets
Enregistré un octet grâce à @ edc65.
Explication
Le code est explicite, je vais juste expliquer l'expression régulière:
Il a supprimé tous ces caractères assortis et majuscule le mot
la source
i
drapeauJavaScript,
61646663 octetsIl utilise une expression régulière pour rechercher des mots qui ne sont pas dans la liste:
and, or, of, by
et capture la première lettre. Il met ensuite en majuscule la chaîne de lettres résultante.EDIT: 64 octets - corrigé pour les mots commençant par
of,or,by,and
EDIT: 66 octets - Correction pour vérifier tous les mots, y compris le dernier mot.
EDIT: 63 octets - 3 octets enregistrés grâce à @ edc65 et @Cyoce !
la source
Foo Offline Bar
i
drapeauvim, 46
J'aime particulièrement ce dernier morceau. Le premier
.
de l'expression régulière correspond au premier caractère de la ligne. Ensuite, nous utilisons\zs
pour démarrer la partie "en cours de remplacement", sans remplacer le caractère initial..*
correspond au reste de la ligne et\n
correspond à la nouvelle ligne de fin. Puisque nous ne spécifions pas de chaîne de remplacement, vim supprime simplement tout ce qui se trouve dans la correspondance, ne laissant que les initiales.la source
vim
est un langage de programmationCJam,
282422 octetsEssayez-le en ligne . Merci à Sp3000 d'avoir signalé un bug et suggéré un correctif, et à Dennis d'avoir économisé
46 (!) Octets.Explication
Dennis a suggéré cette astuce pour raccourcir la liste de mots: en se divisant
AOBONRYFD
en morceaux de quatre, nous obtenonsEn transposant les colonnes en lignes avec l'
z
opérateur, on obtient les bons mots!la source
Julia,
72636155 octetsIl s'agit d'une fonction anonyme qui accepte une chaîne et renvoie une chaîne. Pour l'appeler, affectez-le à une variable.
Nous convertissons la chaîne en
uppercase
, sélectionnons chaque correspondance de l'expression régulière\b(?!AND|OR|OF|BY)\S
sous forme de tableau et lajoin
transformons en chaîne.8 octets enregistrés grâce à Dennis!
la source
Perl, 32 octets
+1 octet pour le
-n
drapeau.Algorithme volé dans la réponse Julia d'Alexa .
la source
Rubis,
4543 octetsIl s'agit d'une fonction lambda qui accepte une chaîne et renvoie une chaîne. Pour l'appeler, affectez-le à une variable et faites
f.call(input)
.Il utilise la même approche que ma réponse Julia , à savoir convertir en majuscules, obtenir des correspondances de l'expression régulière
\b(?!AND|OR|OF|BY)\S
et se joindre à une chaîne.Essayez-le ici
Enregistré 2 octets grâce à la manœuvre!
la source
.join
→*''
. Au fait, pas besoin de l'affecter à quoi que ce soit pour l'appeler.->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
PHP, 92 octets
Première tentative de code golf.
La variable
$s
est l'expression à convertir:$s = "United States of America"
.Nécessite PHP 5.4 ou supérieur pour que la syntaxe du tableau court fonctionne.
la source
bytes
sauf indication contraire, et vous pouvez utiliser juste un#
au début de la ligne pour créer un en-tête.$s
requireregister_globals
, mais qui a été supprimée de PHP depuis 5.4, donc votre réponse ne peut pas fonctionner car vous avez besoin de 5.4 pour une syntaxe de tableau courte. Vous devez obtenir la chaîne d'entrée comme argument ($argv
, un argument de fonction ou similaire).Bash + GNU coreutils,
10376 octetsCourir avec
soit avec un seul argument cité ou avec plusieurs arguments.
(J'ai déformé le dernier mot à contenir de ).
60 octets
Merci à @manatwork.
la source
awk
appel a l'air horrible. Et si on le remplaçait${@^^}
?grep
appel par[[ $i = @(AND|OR|BY|OF) ]]
. ;) Et avec cela, vous pouvez également supprimer la partie "+ GNU coreutils" de l'en-tête du post.echo
parprintf
. En outre , vous pouvez appliquer Trauma numérique de pointe de corset trop. (Plus dans Conseils pour jouer au golf à Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
\b
mais couldnot trouver ... Et je ne savais pas quedo...done
peut être remplacé par des accolades.JavaScript,
10485 octets19 octets enregistrés grâce à @ Aplet123 .
Fractionne la chaîne par des espaces puis vérifie s'il s'agit des mots de, ou, et, ou de. S'il l'est, il l'ignore, sinon il en prend la première lettre. Il rejoint ensuite le tableau et rend la chaîne en majuscules.
Non golfé:
la source
var
. Nous ne nous inquiétons pas de polluer la portée mondiale du code golf: P_.map(v=>/o(f|r)|and|by/.test(v)?"":v[0])
lieu de""
. Vous pouvez supprimer votre_.forEach(p=>Z+=p[0].toUpperCase());
ligne et remplacer votrereturn Z
ligne parreturn Z.join("").toUpperCase()
MATL ,
3427 octets1 octet de moins grâce à @AandN
Essayez-le en ligne!
la source
XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
05AB1E ,
333228 octetsCode:
Utilise l' encodage CP-1252 .
la source
Python, 81 octets
la source
Haskell,
10099988275 octetsJe suis sûr que cela peut être raccourci beaucoup plus car je continue à utiliser$
,.
etc. donc je continue à utiliser()
insted =)Merci @nimi pour votre aide magique!
Exemple:
la source
.
opérateur de composition semble assez intuitif. Je ne suis jamais sûr de ce qui est évalué dans quel ordre.$
et à la composition avec.
.a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]
.Python,
10396 octetsCeci est ma première tentative de golf de code, et cela pourrait probablement être joué beaucoup plus. Merci à DenkerAffe d'avoir enregistré sept caractères.
Il prend l'entrée, la transforme en une liste de mots et prend sa première lettre si ce n'est pas l'un des mots interdits, puis transforme tout en majuscules.
la source
input
vsraw_input
, +2 pourprint("".join..)
vsprint"".join..
). Pas d'espace non plus entre un symbole et un mot clé.x[0]for ...
est complètement valide en Python.JavaScript,
80725553 octetsCode
Je viens de lire sur les fonctions des flèches et j'ai réalisé que je pouvais raccourcir encore plus.Selon cela , vous ne comptez pas l'affectation dans la longueur, donc -2 octets.C'est mon premier golf, donc ce n'est pas très bon.
la source
PHP,
686158 octetsUtilise le codage ISO-8859-1.
Courez comme ceci (
-d
ajouté pour l'esthétique uniquement):Non golfé:
ucwords
.ß
(binaire11011111
) pour binaireAND
au lieu d'un espace annulé (binaire00100000
).la source
Mathematica,
132117 octets15 octets enregistrés grâce à @CatsAreFluffy.
la source
StringSplit
défaut, 1arg est divisé en espaces blancs (-5 octets)"of"|"and"|"or"|"by"
. Aussi{"a","b","c"}<>""==StringJoin[{"a","b","c"}]
. Une dernière chose:Characters
mappe automatiquement les listes.PowerShell, 81 octets
Explication
Séparez les espaces en créant un tableau. Supprimez les membres incriminés. Tirez le premier caractère et réunissez-vous. Utiliser
ToUpper()
sur la chaîne résultante.la source
Lua, 122 octets
J'aurais adoré utiliser un modèle pour se débarrasser des mots interdits, mais malheureusement, lua n'est pas fait pour correspondre à des groupes de caractères ... J'ai donc dû utiliser une boucle for à la place, ce qui est beaucoup plus cher.
Non golfé
la source
Facteur, 175 octets
J'ai beaucoup appris en écrivant ceci.
En un mot:
Tests unitaires:
Passer!
la source
Lua,
11311293 bytesla source
%w
! C'est génial!%a
;%a
correspond aux lettres et%w
correspond aux lettres et aux chiffres. L'essentiel est d'utiliser une fonction personnalisée dansgsub
.AND OR BY OF
lors de la sélection des mots ... Je n'ai pas utilisé de fonction personnalisée car ils coûtent cher, donc je pensaisgsub("(%a)%a+",string.upper)
qu'après les avoir supprimés aurait été mieuxC #, 134 octets
Golfé
Lisible
Exécuter à partir de la ligne de commande
75448.exe Amplification de la lumière par stimulation du rayonnement émis
75448.exe États-Unis d'Amérique
la source
IPOS - non concurrent, 27 octets
Cela fonctionne dans la version actuelle (v0.2) de l'interpréteur .
Exemple d'exécution
Les barres obliques inverses ne servent qu'à échapper les guillemets et ne sont pas nécessaires pour le programme.
Explication
la source
bash / GNU coreutils, 60 octets
sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'
la source
Pylongolf2 , 14 octets (UTF-8)
Pylongolf2 possède de nombreux caractères non ASCII qui comptent pour 2 octets.
la source
05AB1E , 19 octets (non concurrent ...?)
Essayez-le en ligne!
Une version sûrement concurrente (21 octets):
Essayez-le en ligne!
la source