Étant donné une chaîne de caractères ASCII, affichez le caractère qui se trouve au milieu. S'il n'y a pas de caractère central (lorsque la chaîne a une longueur paire), sortez le caractère ASCII dont l'ordinal est la moyenne plancher des deux caractères centraux. Si la chaîne est vide, une chaîne vide doit être sortie.
Cas de test:
12345 => 3
Hello => l
Hiya => q
(empty input) => (empty output)
Le programme le plus court en caractères gagne. (Pas d'octets.)
Classement
L'extrait de pile au bas de cet article génère le classement à partir des réponses a) comme une liste des solutions les plus courtes par langue et b) comme un classement général.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N characters
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 characters
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 characters
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 characters
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 64599; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 47556; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Réponses:
Pyth, 15 octets
Manifestation
En commençant par "Hiya" comme entrée:
Notez que cela se bloque avec une erreur sur une entrée vide et n'imprime rien dans STDOUT, qui est un moyen valide pour sortir une chaîne vide par défaut de code-golf.
la source
B
ifurcate montre à nouveau son utilité.C
fonctionnalité de revêtement de sol: github.com/isaacg1/pyth/commit/0baf23ec Remarquez le jour où il a été ajouté, le jour même où cette question a été posée. C'est parce que cette question m'a inspiré pour ajouter cette fonctionnalité, ce qui la rend inéligible pour une utilisation sur cette question.Brainf ***, 61 octets
Chinois , 16 caractères
Cela nécessite que l'entrée se trouve dans la plage ASCII 1-127 et se termine par null. Il supprime les paires de caractères du début et de la fin de la chaîne jusqu'à ce qu'il ne reste qu'un ou deux caractères. S'il y en a deux, il les additionne, puis divise par 2, en arrondissant. Le caractère restant est imprimé.
Essayez-le sur cet interprète .
Dissection:
* Étant donné que chaque instruction peut être compressée en 3 bits et encodée en UTF-32, l'ensemble du programme peut techniquement être exprimé en 6 caractères.
EDIT: Et merci à Jan Dvorak de m'avoir présenté le chinois , qui le comprime en 16 caractères, à égalité avec la réponse CJam de Dennis .
la source
Given each instruction could be compressed to 3 bits and encoded in UTF64, the whole program could technically be expressed in 3 characters.
Vous gagnez. L'Internet. Et tout le reste.+-<>,.[]
, quel que soit l'encodage, pas leurs représentations binaires. Nous sommes d' accord sur le fait qu'un encodage qui ne peut pas être utilisé par un interpréteur existant n'est pas valide.CJam, 16 octets
Essayez-le en ligne!
Comment ça marche
la source
TeaScript , 23 octets
25 30 31 33Utilise l'idée de @ isaacg d'inverser la chaîne.
Essayez-le en ligne
Testez tous les cas
Ungolfed && Explication
TeaScript est toujours JavaScript, il fonctionne donc beaucoup comme JavaScript.
la source
Matlab,
3937 octetsfloor((end+[1,2])/2)
renvoie les deux indices du milieu de la chaîne si la longueur est paire et renvoie l'indice du milieu deux fois si la longueur est impaire.mean
renvoie simplement la moyenne de ces valeurs etchar
la fixe automatiquement.la source
8086 code machine + DOS, 31 octets
Hexdump:
Code source de l'assemblage (peut être assemblé avec tasm):
Il y a une utilisation délicate du registre FLAGS ici. Après avoir décalé la longueur de la chaîne de 1 bit vers la droite (ce qui équivaut à une division par 2), deux indicateurs stockent des informations supplémentaires:
Normalement, les drapeaux doivent être vérifiés immédiatement, mais ici j'utilise le fait que l'
mov
instruction ne change pas les drapeaux. Ils peuvent donc être examinés après le chargement du caractère central.la source
Python 3,
61595755 octetsJ'essaie de ne pas jouer au golf avec les langues dans lesquelles je travaille, mais ce n'est pas trop mal.
Merci à @xsot pour 2 octets!
Le programme complet est de 59 octets:
Essayez-le ici .
la source
-1-len(x)//2
équivaut à la~len(x)//2
façon dont la division du plancher fonctionne sur des nombres entiers négatifs.Prolog, 111 octets
Code
Expliqué
Exemples
la source
R , 73 octets
Essayez-le en ligne!
Un grand merci à @ngm pour avoir proposé cette idée non récursive - autorisé à jouer au golf 20 octets.
Ancienne solution:
R ,
10195 octetsEssayez-le en ligne!
Solution récursive. Correction d'un problème au prix de 2 octets:
try(expr, silent = TRUE)
pour gérer correctement le cas où l'entrée est vide.merci Giusppe pour 4 octets!
la source
intToUtf8
tronque pas les non entiers?Husk , 11 octets
Essayez-le en ligne!
Explication
Délicieux, délicieux combinateurs tout en bas.
ö
est "composer ces quatre fonctions",¤
est "appliquer le premier argument aux résultats de l'application du deuxième argument à deux arguments supplémentaires séparément",S
est "appliquer cette fonction (qui doit prendre deux arguments) auS
troisième argument de et au résultat dS
' appliquer le deuxième argument d' à son troisième ". Par conséquent,Modifié pour ajouter: à strictement parler, cela échoue légèrement à se conformer à la spécification du problème, qui demande une chaîne dans le cas d'une entrée vide et un caractère dans les autres cas.
En raison du typage strict de Husk, il n'est tout simplement pas possible de définir une fonction / un programme pouvant renvoyer l'un des deux types. J'ai choisi de renvoyer un seul caractère dans tous les cas, et pour Husk, le choix le plus raisonnable pour un seul caractère pour représenter la chaîne vide est
'(space)'
parce que c'est la valeur "par défaut" (et en fait, c'est pourquoi ce programme la renvoie; la valeur par défaut est utilisée lors de la prise du dernier→
élément ( ) d'une liste vide).J'aurais également pu raisonnablement choisir de renvoyer des chaînes de zéro ou un caractère, ce qui ferait échouer la spécification dans l'autre sens, mais je ne l'ai pas fait car cela ajoute quatre octets:
Ṡ&ö;c½S¤+öc→←½↔
avec la;
conversion du caractère en une chaîne à un caractère, une autreö
pour composer explicitement le nécessaire, et unṠ&
raccourci dans le cas d'une entrée falsifiée.la source
C ++ 14, 56 octets
Lambda anonyme prenant la chaîne comme argument et retournant int comme code char. Pour
""
, ça revient0
. Vous ne savez pas exactement à quoi devraient ressembler l'entrée et la sortie (n'est pas spécifié dans la question).Non golfé, avec utilisation
la source
0
pour "".JavaScript (ES6), 83 octets
89 91Enregistré 2 octets grâce à @ Cᴏɴᴏʀ O'Bʀɪᴇɴ
6 octets enregistrés grâce à @ETHproductions
JavaScript n'est pas trop bon du tout ce code de chaîne de caractères.
la source
s=>String.fromCharCode((s[~~(t=s.length/2-.5)][r="charCodeAt"]()+s[Math.ceil(t)][r])/2)
est 5 octets plus court.()
tourcharCodeAt
donc c'est vraiment 3 caractères, mais merci quand même!t
est un entier qui ne fonctionnera pasMath.ceil(t)
peut être changé en0|t+.9
O ,
4434 octetsBarré 44 est toujours régulier 44 :(
Octets gaspillés sur:
la source
Minkolang 0,13 ,
2320 octetsEssayez-le ici.
Explication
la source
hiya
retournei
au lieu deq
Japt ,
4029232120 octets4 octets enregistrés grâce à @ ן nɟuɐɯɹɐ ן oɯ
Maintenant seulement la moitié de la longueur d'origine! J'adore le golf de code. :-RÉ
Fonctionne correctement sur la chaîne vide. Essayez-le en ligne!
Comment ça marche
Comme vous pouvez le voir, il utilise beaucoup de revêtement de sol automatique. (Merci, JavaScript!) Suggestions bienvenues!
la source
V=Ul /2;((UcV +Uw cV )/2 d
?c
tant de fois sans argument que j'ai oublié qu'il en acceptait un. Merci!Allez,
166156153 153 octetsLe go n'est peut-être pas la meilleure langue pour jouer au golf ... mais je l'adore, tellement, et je l'apprends, donc là.
Cette implémentation accepte les
\n
entrées blank ( ) et rompra probablement avec une non ASCII / ASCII étendue.Cependant, OP n'a pas spécifié de codage d'entrée / sortie, donc ASCII est tout ce que j'ai explicitement pris en charge.Modifier : s'avère
if
/else
est plus court queswitch
. Maintenant je sais, je suppose.Golfé:
Non golfé:
la source
𝔼𝕊𝕄𝕚𝕟, 23 caractères
Try it here (Firefox only).
Merci à @ETHProductions pour l'idée!
la source
C #, 77 octets
Il ne retourne pas réellement une chaîne, et vous obtiendrez un caractère espace si la chaîne d'entrée est vide car la fonction doit toujours renvoyer une valeur. 2 octets supplémentaires seraient nécessaires pour renvoyer une chaîne.
Programme complet avec cas de test:
Alternativement, un programme complet qui lit les entrées utilisateur et imprime le centre de la chaîne entrée:
C #, 144 octets
Encore une fois, il utilise la même astuce pour imprimer un caractère espace, que l'utilisateur ne remarquera pas, et pas une chaîne vide, sinon la solution est plus longue de 2 octets.
la source
Vim,
382423 frappesParce que vim a une fonction intégrée pour trouver la moyenne ligne mais pas au milieu omble chevalier , nous avons divisé tous les caractères sur une ligne distincte de la première utilisation
substitute
, trouver la ligne médiane, puis supprimer tout avant et après lui.Si vous voulez l'exécuter, méfiez-vous des
.vimrc
fichiers qui peuvent changer le comportement de.
(regex magique) etg
(gdefault). Notez que cela me fait en fait économiser 3 touches sur ma machine :)Réponse précédente
Prend un tampon d'une ligne en entrée, met à jour le tampon actuel avec le caractère du milieu. Je pensais qu'il y aurait eu un raccourci pour cela dans vim!
Remarque: une solution potentiellement plus courte semble provoquer une boucle infinie ... Si quelqu'un a une idée:
qq^x$x@qq@qp
(12 frappes) - cela fonctionne<c-c>
après la dernière@q
...la source
Mathematica,
11899 caractèresLa manipulation du code de caractère Mma coûte cher ...
la source
%
lequel elle s'appuie.VBA, 130 octets
Je pense que je peux
asc()
jouer au golf avec l'un des appels, mais je n'ai pas pu le faire fonctionner plus rapidement.la source
K, 40 octets
la source
> <>, 24 + 3 (pour -s) = 27 octets
Ancienne solution (ne fonctionne pas pour une entrée vide):
Les deux prennent en compte la pile
-s
. Les deux font 24 octets.Essayez-le en ligne ici.
la source
pb , 83 octets
Bien qu'il y ait au moins 3 caractères dans la chaîne d'entrée, le premier et le dernier sont supprimés. Cela laisse 1 caractère (doit être imprimé sans modification) ou 2 (doit être moyenné et imprimé). Pour gérer cela, les premier et dernier caractères de la chaîne sont additionnés et divisés par deux. S'il n'y avait qu'un seul caractère
(a+a)/2==a
,. S'il y en avait deux,(a+b)/2
c'est le caractère qui doit être imprimé. pb "emprunte" l'évaluation de l'expression de Python (def expression(e): return eval(e, globals())
), ce qui est automatiquement bloqué.La gestion d'une entrée vide me coûte 5 octets. Plus précisément,
<b[1]>
sur la première ligne. Plus tôt, quand j'ai dit "string", c'était un mensonge total. pb n'a pas de chaînes, il a des personnages qui se trouvent être proches les uns des autres. Rechercher le «dernier caractère d'une chaîne» signifie simplement déplacer le pinceau vers la gauche jusqu'à ce qu'il touche un caractère. Lorsqu'aucune entrée n'est fournie, la boucle "tant qu'il y a au moins 3 caractères" est entièrement ignorée et elle commence à rechercher le dernier caractère. Sans cela<b[1]>
, il continuerait à chercher pour toujours. Ce code place un caractère avec une valeur de 1 à (-1, -1) spécifiquement pour être trouvé lorsque l'entrée est vide. Après avoir trouvé le "dernier caractère" de la chaîne, le pinceau suppose que le premier est à (0, -1) et y va directement, trouvant une valeur de 0.(1+0)/2
est 0 en pb,Merci, hypothétique question-poseur. Plus tôt, quand j'ai dit "imprimer", c'était un mensonge total. En pb, vous n'imprimez pas vraiment les valeurs, vous les placez simplement sur le canevas. Plutôt que "un moyen de sortie", il est plus précis d'imaginer le canevas comme un tableau 2D infiniment grand. Il permet des indices négatifs dans l'une ou l'autre dimension, et beaucoup de programmation en pb consiste vraiment à s'assurer que le pinceau arrive à l'emplacement sur le canevas que vous souhaitez. Une fois l'exécution du programme terminée, tout élément du canevas contenant des coordonnées X et Y non négatives est imprimé à l'emplacement approprié sur la console. Lorsque le programme démarre, tout le canevas est rempli de valeurs de 0. Afin de ne pas avoir à imprimer un nombre infini de lignes, chacune avec un nombre infini d'octets nuls, chaque ligne de sortie est imprimée uniquement jusqu'au dernier caractère différent de zéro et les lignes ne sont imprimées que jusqu'à la dernière avec un caractère différent de zéro. Donc, mettre un
0
à (0, 0) est toujours une sortie vide.Non golfé:
la source
Sérieusement ,
2220 octetsMerci @Mego d'être excellent dans votre langue
Essayez-le en ligne ou autre
la source
,;``@(lIƒ
vous laissera la valeur d'entrée sur la pile si ellelen
est> 0, ou terminera le programme autrement. Notez qu'il y a un non imprimable dans les backticks - caractère 127.ƒ
doit faire?CoffeeScript,
104103 octetsla source
Rubis,
434241 octets42 octets
43 octets
Usage:
la source
Java 7, 152 octets
Cas non testés et testés:
Essayez-le ici.
Sortie:
la source
PHP,
14793 octetsRemerciements et remerciements spéciaux à Jörg Hülsermann pour avoir joué ma réponse 54 octets plus bas!
La version précédente:
Code de test:
Testez en ligne
J'ai le sentiment que cela peut être amélioré, mais pas assez de temps pour cela ...la source
<?=($l=strlen($s=$argv[1]))%2?$s[($l-1)/2]:chr(floor((ord($s[$l/2])+ord($s[$l/2-1]))/2));
est ma propositionExcel,
12279 octetsEn fait, la réponse de @Sophia Lechner maintenant:
-5 octets de la solution initiale grâce à @Taylor Scott.
12 octets nécessaires pour la chaîne vide.
la source
Average(...,...)
et utilisez(...+...)/2
pour -5 octets.=IFERROR(IF(ISODD(LEN(A1)),MID(A1,LEN(A1)/2+1,1),CHAR((CODE(MID(A1,LEN(A1)/2,1))+CODE(MID(A1,LEN(A1)/2+1,1)))/2)),"")
=IFERROR(CHAR(CODE(MID(A1,LEN(A1)/2+1,1))/2+CODE(MID(A1,LEN(A1)/2+.5,1))/2),"")
pour 79 octets