En typographie, un compteur est l'aire d'une lettre qui est entièrement ou partiellement entourée d'une forme de lettre ou d'un symbole. Un compteur fermé est un compteur entièrement entouré d'une lettre ou d'un symbole. Vous devez écrire un programme prend une chaîne en entrée et imprime le nombre total de compteurs fermés dans le texte.
Votre contribution:
Il peut s'agir d'une entrée de ligne de commande ou de STDIN, mais vous devez spécifier laquelle.
Comprendra entièrement les caractères ASCII imprimables, c'est-à-dire toutes les valeurs ASCII comprises entre 32 et 126 inclus. Cela inclut les espaces. Plus d'information.
Maintenant, cela varie légèrement entre les polices. Par exemple, la police dans laquelle vous lisez ceci considère que «g» a un compteur fermé, tandis que la police Google a «g» avec deux compteurs fermés. Pour que ce ne soit pas un problème, voici le nombre officiel de compteurs fermés par personnage.
Tous les symboles sans compteurs fermés:
!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~
Notez que cela inclut l'espace.
Voici tous les symboles avec un compteur fermé:
#0469@ADOPQRabdegopq
Et voici tous les symboles avec 2 compteurs fermés:
$%&8B
Enfin, voici quelques exemples d'entrées et de sorties.
Programming Puzzles and Code-Golf
devrait imprimer 13
4 8 15 16 23 42
devrait imprimer 5
All your base are belong to us
devrait imprimer 12
Standard loopholes apply
devrait imprimer 12
Shortest answer in bytes is the winner!
devrait imprimer 8
g
a deux compteurs fermés. Avez-vous déterminé les compteurs en fonction d'une police particulière?g
a 2. Légèrement déroutant à lire, mais je ne pense pas que ce soit différent selon l'emplacement.0
2 compteurs fermés dans certaines polices, en particulier de nombreuses polices monospace?Réponses:
Pyth, 31 octets
Manifestation.
Notez que le code peut ne pas s'afficher correctement en raison de l'utilisation de caractères non ASCII. Le bon code se trouve sur le lien.
J'ai fait une table de recherche de la sortie souhaitée pour chaque caractère d'entrée, l'ai tournée de 32 pour utiliser l'indexation modulaire de Pyth, ai collé un 1 au début et l'ai interprété comme un nombre de base 3, donnant le nombre
2229617581140564569750295263480330834137283757
. J'ai ensuite converti ce nombre en base 256 et l'ai converti en chaîne, qui est la chaîne utilisée dans la réponse.la source
Python 3, 63
Une approche simple. Itère sur chaque personnage avec un compteur fermé, sommant le nombre d'occurrences, le faisant deux fois pour les personnages avec deux compteurs fermés. Ce serait la même longueur pour écrire à la place
Python 3 est nécessaire pour éviter
raw_input
.la source
CJam,
41393734 octetsMerci à @ jimmy23013 pour avoir joué au golf sur 3 octets!
Essayez-le en ligne.
Comment ça fonctionne
la source
"$%&8Badopq#0469@Rbeg"_A<eu+
.eu
etel
, mais je n'ai jamais trouvé ça. Merci!sed, 51
Avec l'aide au golf de @manatwork et @TobySpeight:
Entrée de STDIN. Avec cette méta-question à l'esprit , la sortie est unaire:
la source
Perl, 41
41
caractères +1 pour le-p
drapeau.Cela utilise y /// pour compter les caractères.
la source
GNU APL, 39 octets
Essayez en ligne dans GNU APL.js .
Comment ça fonctionne
la source
JavaScript, 86
E / S via popup. Exécutez l'extrait dans tout
dnavigateur récent de test.la source
K,
54434237 octetsCoupez 5 octets grâce à @JohnE!
Ancienne version:
Original:
la source
#&
intérieur des parens pourrait tout aussi bien être+/
, ce qui signifie que vous pourriez aller plus loin+//"#0469@ADOPQRabdegopq$%&8B$%&8B"=\:
. Enfin, il n'est pas nécessaire de l'avoirf:
car la fonction peut être utilisée sous forme tacite. Cela vous ramènerait à 38!+//(30#"$%&8B#0469@ADOPQRabdegopq")=\:
. C'est peut-être le mieux que nous puissions faire.+//(30#"$%&8B#0469@ADOPQRabdegopq"=)'
C, 127 octets
Assez simple. Version non golfée:
Testez-le ici
Si les arguments de fonction ne sont pas autorisés, la
stdin
version prend jusqu'à 141 octets:Notez que la version ci-dessus suppose que l'entrée comporte au maximum 98 caractères.
Testez-le ici
Version des arguments de ligne de commande (143 octets):
Testez-le ici
la source
Python 2,
96907567 + 2 = 69 octetsJe ne peux pas penser à une autre façon de faire cela ... c'est ce que j'aurais pensé jusqu'à ce que je voie la solution de xnor. Je posterai de toute façon ce que j'avais.
Merci à FryAmTheEggman pour avoir économisé 6 octets
D'accord, maintenant j'en suis satisfait.
Merci à xnor pour la recherche, économisant 4 octets.
Ajout de deux octets car l'entrée doit être placée entre guillemets.
la source
Java, 162
Eh bien , si elle a être un programme complet ... C'est juste une ligne qui correspond aux caractères et les remplace par une chaîne plus longue. Retourne ensuite la différence de longueur par rapport à l'original. Malheureusement, java n'a vraiment rien pour compter le nombre de correspondances.
Le voici avec des sauts de ligne:
la source
Pyth - 35 octets
Utilise la méthode évidente de in first + * 2 in second. Merci @FryTheEggman.
Essayez-le ici en ligne .
la source
Javascript,
11495 octetsMerci à Ismael Miguel de m'avoir aidé à jouer au golf.
la source
alert(prompt().replace(/[#046@ADOPQRabdegopq]/g,9).replace(/[$%&8B]/g,99).match(/9/g).length)
Rubis, 59 octets
Entrée depuis la ligne de commande ou stdin. Jusqu'à présent, le plus court utilise un langage non ésotérique.
Mise à jour: chilemagic m'a battu
la source
Rétine , 44 octets
Donne la sortie en unaire.
Chaque ligne doit aller dans son propre fichier ou vous pouvez utiliser l'
-s
indicateur. Par exemple:Les paires de lignes (motif - paires de substitution) effectuent les étapes de substitution suivantes:
1
les1
11
1
« sla source
J, 43
En tant que fonction:
46 octets (ligne de commande)
En tant que programme de ligne de commande autonome:
Enregistrez la ligne ci-dessus sous
counter2.ijs
et appelez à partir de la ligne de commande:la source
f=:your_function_code
.Julia,
7774 octetsCela lit le texte de STDIN et imprime le résultat dans STDOUT.
Non golfé + explication:
Exemple:
la source
rs , 56 octets
Démo en direct.
la source
GNU APL, 37 caractères
construire un vecteur de caractères contenant deux fois 2 caractères (30⍴)
comparer chaque caractère d'entrée avec chaque caractère du vecteur (∘. =)
résumer les matchs ravelés (+ /,)
la source
Javascript
159, 130 octetsnon minifié:
Avec l'aide de @ edc65:
la source
~ -1 == 0
, vous pouvez écrire à la~x?
place de-1 != x?
. Voir ma réponse pour un exemple d'utilisation.function c(b){return b.split('').reduce(function(t,a){return t+(~"$%&8B".indexOf(a)?2:~"#0469@ADOPQRabdegopq".indexOf(a)?1:0)},0)}
Pas besoin d'avoirmap
alorsreduce
Haskell, 117
c est une fonction
c :: Int -> String -> Int
qui prend un compteur et une chaîne et parcourt la chaîne une lettre à la fois pour vérifier si la lettre actuelle est membre du tableau à 1 point ou du tableau à 2 points et s'appelle pour le reste de la chaîne après incrémentation le compteur le montant approprié.Appel avec compteur = 0 en ghci:
la source
C #, 157
Non golfé:
Convertir la chaîne en un tableau de caractères, puis voir si chaque caractère se trouve dans l'un ou l'autre des compteurs. Si c'est dans le second, je viens de l'incrémenter à nouveau.
la source
Erlang, 103 octets
Il s'agit d'un programme complet qui s'exécute en utilisant escript. La première ligne du fichier doit être vide (en ajoutant 1 octet).
Exemple d'exécution:
la source
C, 99 octets
Explication
J'ai encore joué à la réponse de Cool Guy ; c'est devenu trop long pour être un commentaire. Au lieu de
if
/else
, j'ai profité de la!
conversion d'un pointeur en bool. J'ai également faito
incluret
afin que je puisse ajouter "est danso
" et "est danst
" pour le nombre total de compteurs.Code développé
La sortie est en
num
, qui doit être effacée avant chaque appel.Programme de test et résultats
Le code lui-même contient 37 compteurs par sa propre métrique.
la source