Vous fournissez un support technique à la Bruce Dickenson comme il produit une session d'enregistrement Blue Öyster Cult. Quand il demande plus de cloche , vous pouvez le lui donner.
Ta tâche
Ecrivez un programme ou une fonction prenant une chaîne (ou son équivalent dans votre langue) en entrée et générant une chaîne associée contenant une cloche supplémentaire.
Combien de clochettes une corde contient-elle?
Le nombre de clochettes qu'une chaîne contient contient le nombre maximal de copies distinctes de "clochette" pouvant être obtenues en permutant les caractères de la chaîne. Par exemple, "bbbccceeellllllooowwwwwwwww"
contient 3 clochettes, tandis "bbccceeellllllooowwwwwwwww"
que "bbbccceeelllllooowwwwwwwww"
chacune contient 2 clochettes et "cowbel"
0 clochettes.
Comment la sortie devrait-elle être liée à l'entrée?
La sortie doit consister en la concaténation, dans cet ordre, de la chaîne d'entrée et du préfixe le plus court de la chaîne d'entrée nécessaire pour augmenter le nombre de clochettes.
Par exemple, un "bbbccceeelllllooowwwwwwwww"
seul élément supplémentaire suffit "l"
pour contenir 3 clochettes au lieu de 2; le préfixe le plus court qui contient "l"
c'est "bbbccceeel"
. Par conséquent, si l'entrée est "bbbccceeelllllooowwwwwwwww"
, la sortie doit l'être "bbbccceeelllllooowwwwwwwwwbbbccceeel"
.
Les aspects techniques
- Vous pouvez supposer que l'entrée ne contient que des caractères ASCII imprimables. Si un ou deux caractères sont gênants pour le traitement des chaînes de votre langue (tels que les nouvelles lignes ou
\
), vous pouvez supposer que l'entrée ne les contient pas - il suffit de mentionner cette restriction. - Vous pouvez en outre supposer que les caractères alphabétiques de l'entrée sont tous en minuscules ou en majuscules. Si vous choisissez de ne pas en assumer l’une, comptez les cloches sans distinction de casse.
- Vous pouvez en outre supposer que l'entrée contient au moins une copie de chacun des caractères
b
,c
,e
,l
,o
, etw
. Cela revient à supposer que certains préfixes de la chaîne peuvent lui être concaténés pour produire une chaîne contenant plus de sonnailles. (Notez que la chaîne d'entrée elle-même n'a pas besoin de contenir une cloche.) - Si votre langue a un langage intégré qui résout ce problème ... alors utilisez-le totalement, sérieusement, comme c'est génial.
Couches plaquées or
Comme le temps d’enregistrement en studio est coûteux, votre code doit être aussi court que possible. L'entrée avec le moins d'octets est le gagnant!
Cas de test
( lien pastebin pour un copier / coller plus facile)
Test d'entrée n ° 1: "christopher walken begs for more cowbell!"
Test de sortie n ° 1: "christopher walken begs for more cowbell!christopher wal"
Test d'entrée n ° 2: "the quick brown fox jumps over the lazy dog"
Test de sortie n ° 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"
Test d'entrée n ° 3: "cowbell"
Test de sortie n ° 3: "cowbellcowbell"
Test d'entrée n ° 4: "cowbell cowbell cowbell"
Test de sortie n ° 4: "cowbell cowbell cowbellcowbell"
Test d'entrée n ° 5: "cowbell cowbell cowbel"
Test de sortie n ° 5: "cowbell cowbell cowbelcowbel"
Entrée de test n ° 6: "bcelow"
Test de sortie n ° 6: "bcelowbcel"
Test d'entrée n ° 7: "abcdefghijklmnopqrstuvwxyz"
Test de sortie n ° 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"
Entrée de test n ° 8: "cccowwwwbbeeeeelllll"
Test de sortie n ° 8: "cccowwwwbbeeeeelllllccco"
Entrée de test n ° 9: "be well, programming puzzles & code golf"
Test de sortie n ° 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"
Test d'entrée n ° 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"
Test de sortie n ° 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab"
Entrée de test n ° 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
"
Test de sortie n ° 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
c-c-b-c
i have a cow, i have a bell"
test case -> result
un grand bloc de code préformaté. C'est beaucoup plus esthétique et plus facile à copier-coller.L
mots dans le mot, ce n'est pas ce que le défi demande.Réponses:
Pip ,
504238 octetsPassez la chaîne en tant qu’argument de ligne de commande, entre guillemets si nécessaire. Essayez-le en ligne!
Explication
Je vais expliquer cela en deux parties: la fonction cloche et le programme complet. Premièrement, voici la fonction qui calcule la quantité de cloche dans une chaîne:
{...}
définit une fonction. De nombreux opérateurs de pip, lorsqu'ils sont appliqués à une fonction, renvoient une autre fonction. par exemple,-{a+1}
est le même que{-(a+1)}
. Donc, ce qui précède est équivalent àqui fonctionne comme suit:
Maintenant que nous avons cela, voici le programme complet:
la source
cowbell cowbell cowbee
et la sortie était,cowbellcowbelcowbel
mais j'utilise peut-être mal l'IDE (nouveauté du PIP)cowbell cowbell cowbeecowbell
( essayez-le en ligne ). Utilisez-vous TIO ou une copie locale?C,
511488474470463454Essayez-le en ligne
Format lisible + explication:
Quelques astuces amusantes utilisées:
• Lors de la vérification des caractères que je tape
'w'
pour le caractère w qui est de 3 octets, mais pour les caractères'c'
et'b'
je peux saisir leurs valeurs ASCII 99 et 98 respectivement pour sauvegarder un octet à chaque fois. (Edit: Merci à @Titus, je sais le faire avec toutes les lettres COWBELL en utilisant uniquement des majuscules qui sont toutes des valeurs ascii numériques de 2 octets)•
r=~-l/2
estr=(l-1)/2
utilise bitshifts•
a[++i]
Je reçois le caractère à l’index (i) et je le répète en même temps. Je commence juste pari
aui=-1
lieu dei=0
(je fais la même chose avecz
et le lance commez=i
pour sauvegarder un autre octet)la source
c
) est toujours défini sur 1 [...]". Nous serions heureux d’avoir votre déclaration quant à la raison pour laquelle vous le pensez parce que cela semble étrange à certains d’entre nous.c,o,w,b,e
d'être initialisé avec la même valeur, au lieu de 1? Parce que votre indice # 2 semble ne pas être vrai, pas pour le CI au moins. Pouvez-vous clarifier? SO questionPython 2,
125113112 octetsn
compte le nombre de clochettes-12 octets grâce à @Rod
-1 octet grâce à @Titus
la source
[]
de la compréhension de liste quand c'est le seul paramètre, vous pouvez aussi laisser tomberenumerate
:min(s.count(c)/-~(c=='l')for c in"cowbel")
où-~(n=='l')
est une façon plus courte d'écrire1+(n=='l')
>>
serait pas plus court que/-~
?return
dans la boucle while alors?Perl 6 , 91 octets
Suppose une entrée en minuscule.
Comment ça marche
À l'intérieur du lambda, un autre lambda servant à compter le nombre de clochettes dans une chaîne est défini comme tel:
Le reste du code utilise ce lambda interne
&c
pour trouver le résultat, comme ceci:la source
MATL ,
3837 octets1 byte off grâce à l'idée de @ DLosc d'utiliser le modèle de chaîne
lcowbe
au lieu decowbel
Les caractères d'entrée sont tous en minuscules. Si l'entrée contient des sauts de ligne, le caractère de nouvelle ligne doit être saisi en tant que code ASCII concaténé avec les caractères normaux (voir la dernière entrée dans le lien avec tous les scénarios de test).
Essayez-le en ligne! Ou vérifiez tous les cas de test .
la source
JavaScript (ES6), 106
107 113 126 141Un portage en javascript de la réponse du Pip par @DLosc. Il me fallait un peu de temps pour bien le comprendre et c'est un génie.
Éditez -15 octets en suivant l'indice de @Titus, en ajoutant directement des caractères à la chaîne d'entrée
a
et en évitant un retour rapide (donc nonfor/if
)Edit 2 en énumérant la valeur 6 pour la fonction Min enregistre 13 octets supplémentaires
Edit 3 a de nouveau changé de fonction. Je pensais que le verbeux
length
etsplit
serait trop long. J'avais tort.En supposant que les minuscules soient saisies
Moins golfé
Tester
la source
k[x]++
cela échouerait à cause deundefined
. Mais je suis à peu près certain que çafor(i=0;c(a)==c(a+=a[i++]);),a
marche.>>!i
enregistre 3 octets. Pourquoi n'utilisez-vous pasc(a+=z)
?c(a+=z)
. Pas dans la version moins golfée , telle qu'elle est, voyez-vous, moins golfée. Utiliser>>!i
enregistre 1 octet (dans la version golfée). Merci encoreUtilitaires Bash + Unix, 184 octets
Essayez-le en ligne!
Merci à @AlbertRenshaw pour avoir joué au golf 2 octets.
la source
!=
JavaScript (ES6),
124114 octetsMerci à Neil pour avoir économisé quelques octets
Étant donné que cette réponse est très différente de la réponse JavaScript existante et que j'y ai mis du temps, j'ai décidé de créer une réponse moi-même.
Usage
Sortie
la source
.sort()[0]
est une idée merveilleuse.eval
est le mal. : DMath.min()
, mais cela coûtait beaucoup de caractères et je pensais qu'il y aurait un moyen plus court. Et oui,eval
c'est vraiment bien pour jouer au golf..sort()[0]
fonctionnait bien, cela ne coûterait que 10 octets, mais ce n'est pas le cas et cela.sort((a,b)=>a-b)[0]
coûte 20 octets maisMath.min(...)
ne coûte que 13.Octave,
808797 octetsEssayez-le en ligne!
la source
l
secondes pour terminer la cloche supplémentaire. Par exemple, lors de la saisiecowbell
, il renvoie incorrectementcowbellcowbel
plutôt quecowbellcowbell
. (J'espère que vous pourrez y remédier, j'aime bien l'algorithme atypique!)CJam, 37
Essayez-le en ligne
Si je peux exclure les caractères
"
et\
, alors…35 octets
Essayez-le en ligne
Explication
Le code ajoute successivement chaque caractère de la chaîne à la chaîne initiale (en passant de l’original à doublé), détermine le nombre de cloches pour chaque chaîne (en comptant le nombre d’occurrences de chaque caractère dans "cowbel" et en divisant le nombre par "l"). par 2, puis en prenant le minimum), trouve la position de la première chaîne où le nombre de clochettes augmente de 1, puis prend le préfixe correspondant à l'entrée et le met après la chaîne d'entrée.
Afin d'inclure également la chaîne d'origine (sans aucun caractère ajouté), le code ajoute un caractère neutre à la chaîne qui est itérée. La première version ajoute un espace et la seconde utilise la représentation sous forme de chaîne, c'est-à-dire la chaîne entre guillemets.
la source
PHP, 133 octets
un port PHP du port JavaScript @ edc65 de la réponse de DLosc´s Pip.
prend les minuscules de l'argument de la ligne de commande. Courez avec
-nr
.panne
la source