La langue géobitsienne est une nouvelle perversion de l'anglais où un mot est divisé en segments qui doivent commencer par une lettre différente. Ensuite, chaque fois qu'une de ces lettres de départ apparaît dans une autre chaîne, elle est remplacée par tout son segment correspondant, en maintenant la capitalisation.
Ce processus est appelé Geobitsizing .
Par exemple, le mot " Geobits " pourrait être décomposé geo bits
et le poème absurde
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
serait géobitsized avec elle comme
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
parce que chaque g
devient geo
, chaque G
(bien qu'il n'y en ait pas) devient Geo
, chaque b
devient bits
et chaque B
devient Bits
.
Notez que chaque substitution est effectuée par rapport à la chaîne d'origine, et non à une étape intermédiaire. par exemple, si cela geo
avait été le cas gbo
, le b
's créé ne serait pas remplacé parbits
.
Défi
Écrivez un programme ou une fonction qui peut générer une langue géobitsienne.
Prenez une chaîne d'une seule ligne composée de lettres minuscules (az) et d'espaces. Ce sera le mot utilisé comme argument de géobitsizing, les espaces séparant les segments. Vous pouvez supposer:
- Les segments ne seront pas vides. Les espaces ne seront donc pas voisins les uns des autres, ni au début ou à la fin de la chaîne.
- Chaque segment commence par une lettre différente. Il ne peut donc y en avoir plus de 26.
Par exemple, certaines chaînes segmentés valides que vous devez prendre en charge sont geo bits
, butt ner
, alex
, et do o r k nob
(segments d'une seule lettre n'a aucun effet , mais sont valables). Mais geo
, butt ner
, Alex
etdo o r k n ob
ne sont pas valides.
Votre programme ou fonction doit également prendre une autre chaîne arbitraire pour appliquer le géobitsizing et imprimer ou renvoyer la langue géobitsienne résultante.
Vous pouvez supposer que cette chaîne ne contient que des sauts de ligne et des caractères ASCII imprimables.
N'oubliez pas que les majuscules doivent être préservées de l'entrée à la sortie.
Voici d'autres exemples d'utilisation no pro gr am m ing
comme argument de géobitsizing:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(pas de changement)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Notez que les résultats doivent être identiques quelle que soit la disposition de l'argument, par exemple ing pro m no am gr
doivent produire les mêmes résultats que précédemment.
Le code le plus court en octets gagne.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
bien que cela vous coûte 5 octets.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
qui devrait couvrir tous les cas de pointe, et d'entre eux il y a beaucoup si l' on essaie d'utiliser regexes ...Réponses:
Gelée , 18 octets
Essayez-le en ligne!
Version alternative, 15 octets (non concurrent)
La fonction de casse de titre de Jelly avait un bug; il n'a pas mis en majuscule le premier mot. Cela a été corrigé, donc ce qui suit fonctionne maintenant.
Ce code fait la même chose que dans la version concurrente, sauf que
Œt
(casse de titre) remplace la majuscule conditionnelle obtenue parŒu1¦€
.Comment ça fonctionne
la source
Python 3, 71 octets
Testez-le sur Ideone .
Comment ça fonctionne
En Python 3 , la fonction intégrée
str.translate
prend une chaîne et un dictionnaire, et remplace chaque caractère de la chaîne dont le point de code est une clé de ce dictionnaire par la valeur correspondante, qui peut être une chaîne, un entier ou Aucun (équivalent à la chaîne vide).Conversion de la chaîne de mots w en casse de titre (c.-à-d. La mise en majuscule de la première lettre de chaque mot) et son ajout au résultat de
w+' '
crée une chaîne de mots séparés par des espaces avec des versions minuscules et majuscules (première lettre). Sans deuxième argument,str.split
se divise en espace,(w+' '+w.title()).split()
crée ainsi la liste de tous les mots.Enfin, la compréhension du dictionnaire
{ord(t[0]):t for t in...}
transforme chaque mot t en une entrée de dictionnaire avec cléord(t[0])
(point de code de la première lettre) et valeur t , ainsistr.translate
effectuera les substitutions prévues.la source
Python,
126999581 octetsBeaucoup de remerciements à Dennis:
Edit1: pas besoin d'ajouter à un temporaire
Edit2:
S
peut contenir des majuscules ...Edit3: ne pas dupliquer G
Edit4: compressé un peu plus et poussé sur une seule ligne
Edit5: utilisation de lambda sans nom et
j=join' '
la source
Pyth, 19 octets
Essayez-le en ligne!
la source
Vim, 46 frappes
Laid et Hacky.
la source
Rétine , 36 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
la source
Pyth,
1816Essayez-le ici
Définit une fonction
g
qui effectue la géobitsize. En tant que programme, cela serait un peu plus court si la deuxième chaîne est sur une seule ligne, mais l'entrée multiligne n'en vaut pas la peine:L'idée générale ici était de titrer la chaîne géobitsienne et de l'ajouter à la chaîne d'origine. Ensuite, divisez cela sur les espaces et pour chaque chaîne, prenez la première lettre et mappez-la à la chaîne qu'elle représente. De cette façon
X
, la première lettre de chaque mot deviendra le mot complet.la source
Python 2,
8378 octetsTestez-le sur Ideone .
Comment ça fonctionne
Nous parcourons tous les caractères c de la chaîne s .
Nous ajoutons un espace à la chaîne de mots w , puis recherchons une occurrence de c en minuscule , précédée d'un espace.
Si une telle occurrence existe,
find
retournera l'index de l'espace dans la chaîne' '+w
, qui correspond à l'index de c dans w .w[...:]
renvoie donc la queue de w , en commençant par le mot avec la première lettre c .split()
divise la queue aux espaces,[0]
sélectionne le premier morceau (le mot) et[1:]
supprime sa première lettre.Après avoir ajouté c au résultat précédent, nous obtenons le mot correctement placé commençant par c .
Si aucun mot ne commence par c ,
find
renvoie -1 .Ainsi,
w[...:]
renvoie le dernier caractère de w , l'split()
enveloppe dans un tableau,[0]
annule l'habillage et[1:]
supprime le seul caractère de la chaîne.Après le pré-paiement c , nous obtenons la chaîne singleton dont le caractère est c , donc toute l'opération est un no-op.
Enfin,
''.join
concatène toutes les chaînes résultantes, renvoyant la version Geobitsized de s .la source
Julia,
72 ans68 octetsEssayez-le en ligne!
la source
CJam, 19 octets
Testez-le ici.
Explication
la source
JavaScript ES6,
676370 octetsTestez cela sur Firefox. les bugs font cela plus longtemps que je ne le voudrais
Explication
la source
f("abracadabra")("1Dbw")
retourne"1abracadabraDbracadabrababracadabrawbracadabra"
.Rubis,
656058 octetsEssayez-le en ligne!
la source