Défi
Écrivez un programme qui, étant donné une chaîne de x
10 caractères et un caractère y
, renvoie le nombre de fois où le caractère y
apparaît dans la chaîne x
.
Le programme le plus court en octets pour ce faire gagne.
Exemple
Input: tttggloyoi, t
Output: 3
Input: onomatopoe, o
Output: 4
Réponses:
Pyth, 3 octets
Exemple d'exécution:
Bien sûr, l'utilisateur peut entrer plus ou moins de 10 lettres sur la première entrée, mais nous n'avons pas à nous soucier de ce qui se passe lorsque l'utilisateur viole la spécification.
la source
/
compte simplement le nombre d'occurrences dans la première chaîne d'entrée de la deuxième chaîne d'entrée.w
prend une ligne d'entrée.Pyth - 3 octets
Une réponse Pyth différente, moins évidente, de la même taille. Il se replie en comptant sur l'entrée.
Suite de tests .
la source
JavaScript, 32
la source
Bash, 24 caractères
Exemple d'exécution:
la source
Rétine , 12 octets
Simplement une expression régulière qui correspond à un caractère qui est égal au dernier caractère de l'entrée (sauf lui-même). Lorsqu'une seule expression régulière est donnée, Retina renvoie simplement le nombre de correspondances.
la source
Labyrinthe ,
32292724 octetsCela lit d'abord le caractère unique, suivi de la chaîne dans laquelle compter, et suppose qu'il n'y a pas d'octets nuls dans la chaîne.
Explication
Le code commence par
),}
, qui définit le bas de la pile sur1
, lit le premier caractère et le déplace vers la pile auxiliaire pour une utilisation future. Le1
sera notre compteur (le décalage de 1 sera annulé plus tard et est nécessaire pour que l'IP prenne les tours nécessaires).L'IP va maintenant descendre pour lire le premier caractère de la chaîne de recherche avec
,
. La valeur est annulée avec`
, encore une fois pour obtenir le comportement de braquage correct. Pendant que nous lisons des caractères de STDIN, l'IP suivra maintenant cette boucle:{:}
crée une copie du code de caractère stocké et l'+
ajoute à la valeur actuelle. Si le résultat est0
(c'est-à-dire que le caractère actuel est celui que nous recherchons), l'IP se déplace tout droit:-
se débarrasse simplement du0
,)
incrémente le compteur,{}
est un no-op.Cependant, si le résultat après
+
est différent de zéro, nous ne voulons pas compter le caractère actuel. L'IP prend donc un virage à droite à la place. C'est une impasse, de sorte que le code y est exécuté deux fois, une fois en avant et une en arrière. Autrement dit, le code réel dans ce cas devient);___;)+-){}
.);
se débarrasse simplement de cette différence non nulle,___
pousse 3 zéros, mais;
supprime l'un d'eux.)
incrémente l'un des deux zéros restants, les+
ajoute en un seul1
, le-
soustrait du compteur et)
incrémente le compteur. En d'autres termes, nous avons créé un no-op très élaboré.Lorsque nous frappons EOF,
,
pousse-1
, qui`
se transforme en1
et l'IP prend un virage à droite.-
soustrait le1
du compteur (annulation du décalage initial).!
imprime le compteur et@
termine le programme.la source
Python 3, 29 octets
Meh, c'était facile. Suppose que l'entrée est une chaîne de dix lettres.
la source
f=lambda x,y:x.count(y)
plus court? (Désolé si cela ne fonctionne pas, je suis sur mobile et je ne peux pas vérifier)print input().count(input())
oua,b=input();print a.count(b)
avec le même montantSnowman 1.0.2 , 16 caractères
Étonnamment court. Explication:
la source
C ++ Template-Métaprogrammation,
160154116 octetsJuste pour les rires.
Merci à ex-bart de l'avoir joué au golf!
Utilisation: Le premier caractère de l'instanciation du modèle est le caractère à rechercher.
Compléter avec clang -std = c ++ 11 -c -> le résultat est au début du message d'erreur.
Complétez avec gcc -std = c ++ 11 -c -> le résultat est au bas du message d'erreur.
Recherchez A < 3 , 't', '\ 000'> et A < 3 , 't', '\ x00'>
Version 154 octets
Version 160 octets:
la source
((x==y)?1:0)
juste(x==y)
pour économiser environ 6 octets (je pense).bool
de laint
conversion.enum
au lieu destatic const
. Utilisez0
au lieu de'\0'
pour terminer. Utilisezint
au lieu dechar
. Utilisez une déclaration légèrement différente pour instancier. Supprimez la nouvelle ligne de superflouos.template<int w,int x,int y,int...s>class A{enum{a=A<w+(x==y),x,s...>::a};};A<0,'t','t','t','t','g','g','l','o','y','o','i',0>a;
. Vérifié avec g ++ et clang.Bash + grep, 26 octets
la source
Javascript (ES6), 26 octets
Cette solution quick'n'easy définit une fonction anonyme. Pour l'utiliser, ajoutez une déclaration de variable au début. Essaye le:
Afficher l'extrait de code
EDIT: Oh, je vois qu'il y a déjà une solution très similaire. J'espère que ça va.
la source
Haskell, 21 octets
la source
C ++, 78 octets
Appelez comme ceci:
la source
Élément , 23 octets
La nouvelle ligne fait partie du programme. Je l'utilise en fait comme nom de variable .
Ce programme fonctionne essentiellement en stockant le caractère cible dans une variable, en gardant la chaîne actuelle en haut de la pile, puis en bouclant le processus "hacher, comparer et déplacer le résultat en dessous", en additionnant les résultats à la fin.
La nouvelle ligne en tant que nom de variable provient de l'utilisation de la nouvelle ligne à la fin de l'entrée en la coupant et en la stockant. La nouvelle ligne du code est l'endroit où je l'ai lu.
L'entrée est comme ceci:
La sortie est comme ça
la source
Julia,
2625 octetsle
findin
fonction renvoie les indices du premier argument auxquels le deuxième argument est trouvé comme vecteur. La longueur du vecteur est le nombre d'occurrences.Un octet enregistré grâce à Glen O.
la source
endof
vous fera économiser un octet à la place delength
.APL,
73 octetsCela crée un train de fonctions. Il fonctionne en créant un vecteur de zéros et de uns correspondant aux indices auxquels le caractère apparaît dans la chaîne (
⍷
). Le vecteur est ensuite additionné (+/
).4 octets enregistrés grâce à kirbyfan64sos et NBZ!
la source
+/⍷
(je ne connais pas APL, donc je peux me tromper).Perl,
2116 caractères(Code de 13 caractères + option de ligne de commande à 3 caractères.)
Exemple d'exécution:
la source
<>
!-l
et en vous assurant que votre entrée n'a pas de nouvelle ligne de fin:echo -en 'onomatopoe\no' | perl -pe '$_=eval"y/".<>."//"'
perl -pe '$_+=s/${\<>}//g'
+=
nécessaire?=
semble fonctionner aussi bien (et devrait toujours fonctionner lorsque l'entrée commence par quelques chiffres).PHP,
3635 octetsUtilisation:
appelez le script avec deux arguments.
php script.php qwertzqwertz q
PHP, 23 octets
Si vous enregistrez des variables globales (uniquement possible en PHP 5.3 et inférieur), vous pouvez économiser 12 octets (grâce à Martijn )
Usage:
appeler le script et déclarer des variables globales
php script.php?a=qwertzqwertz&b=q
la source
script.php?a=qwertzqwertz&b=q
, et faire<?=substr_count($a,$b);
, 23 caractèresDyalog APL , 3 octets
C'est-à-dire "La somme des octets égaux". Par exemple:
ou juste
K ne bat pas APL cette fois.
Essayez-le en ligne.
la source
T-SQL,
9940 octetsFait simplement une différence entre la chaîne d'entrée et la chaîne avec le caractère supprimé. Prend l'entrée du tableau t
Modifier a été modifié pour supprimer un problème de comptage des espaces et pour prendre en compte les entrées acceptables actuelles pour SQL. Merci @BradC pour tous les changements et économies
la source
SELECT LEN(s)-LEN(REPLACE(s,c,''))FROM t
, oùt
est une table d'entrée pré-remplie avec les champss
etc
.A B C D
celle-ci se terminant par des espaces (si vous êtes invité à compter les espaces), carLEN
ignore les espaces de fin.space
SELECT 11-LEN(REPLACE(s,c,'')+'x')FROM t
Octave / Matlab, 33 octets
la source
J, 5 octets
Je pense que J aurait un intégré pour cela, mais je n'ai pas pu en trouver un - peut-être qu'un des utilisateurs actifs de J peut m'éclairer. Au lieu de cela, cela s'applique d'abord
=
aux entrées, transformant chaque caractère en1
s'il est égal à celui demandé ou0
autrement.+/
Calcule ensuite la somme de cette liste.la source
Fichier de commandes, 121 octets
Parce que je suis masochiste ...
Avertissement: suppose que
_
cela ne se produit pas dans la chaîne d'entrée. Si c'est le cas, la variablee
doit être ajustée de manière appropriée.Ceci configure notre variable de compteur
c
, et notre démarcation de fin de chaîne comme_
, avant d'ajouter cela à notre chaîne d'entrée%1
et de définir la chaîne concaténée surt
. Ensuite, nous entrons dans la boucle:l
, nous définissons une variable de caractère temporairea
pour être le premier caractère det
, vérifions si elle correspond à notre deuxième chaîne d'entrée%2
et incrémentonsc
si vrai, puis coupons le premier caractère det
. Notre condition de fin de boucle vérifiet
notre démarcation de fin de chaîne et reboucle sinon. Nous sortons ensuiteecho
la valeur de notre compteur.It would probably be possible to use a
FOR
loop instead, but that would necessitate enabling DelayedExpansion, which I think will actually be longer byte-wise than this. Verification of that is left as an exercise to the reader.la source
CJam, 5 bytes
Explanation
la source
PowerShell, 32 Bytes
A four-for-one! And they're all the same length! :)
or
Alternatively,
or
The first two styles use the inline operator
-split
, while the second two implicitly casts the first argument as a String and uses the.Split()
string-based operator. In all instances an array is returned, where we must decrement Count by one, since we're getting back one more array item than occurrences of the second argument.This one was kinda fun...
la source
Julia, 21 bytes
Note that it requires that
c
be a char, not a single-character string. So you use it asf("test me",'e')
(which returns 2) and notf("test me","e")
(which returns 0, because'e'!="e"
).la source
><> (Fish), 30 bytes
Takes the string, then character to count. Input isn't separated (at least in the online interpreter). Try it on the online interpreter: http://fishlanguage.com I counted the bytes by hand, so let me know if I'm wrong.
Explanation
First off, ><> is 2 dimensional and and loops through a line or column until it hits a
;
or error. This means that if it's proceeding left to right (like it does at the beginning of a program), it will wrap around the line if it reaches the end and is not moved or told to stop the program. Some characters per line will be repeated because they have different functions depending on the direction of the pointer, and the fourth line will have characters in reverse order because the pointer moves right to left.A summary of the program is provided below. Look at the instructions listed for ><> on esolangs to see what each individual character does.
Line 1:
0&v
Line 2:
=?\ilb
(starting where line 1 moves the pointer to, i.e. the third character)
line 3:
=?\:@=&+&l1
(starting at the third character)
Line 4:
n&/;
(starting at the third character)
la source
Ruby,
2220 bytesDemo: http://ideone.com/MEeTd2
The
-1
is due to the fact thatgets
retrieves the input, plus a newline character. Ruby'sString#count
counts the number of times any character from the argument occurs in the string.For example, for the input [
test\n
,t\n
], thet
occurs twice and the\n
occurs once, and needs to be subtracted.la source
$><<
and reduce 4 bytes.p gets.count(gets)-1
Ruby, 18 bytes
Usage:
la source
Japt, 2 bytes
Try it online!
la source