Étant donné une chaîne non vide composée uniquement de caractères alphabétiques minuscules et majuscules et d'espaces ( [a-zA-Z ]
), réduisez-la à un extrait de l'alphabet, en commençant par le premier caractère.
Pour réduire une chaîne, commencez par le premier caractère alphabétique, puis supprimez tous les caractères suivants qui ne sont pas la prochaine lettre de l'alphabet. Continuez ainsi jusqu'à ce que vous atteigniez la fin de la chaîne.
Par exemple codegolf
:
Commencez par c
, supprimez o
car ce n'est pas la prochaine lettre de l'alphabet.
Gardez d
comme il est la prochaine lettre de l'alphabet, et de garder e
comme il est la lettre suivante aussi.
Supprimez g
, o
et l
et conservez f
.
Votre extrait final serait alors cdef
Règles
- La capitalisation doit être maintenue, ce
CodEgolF
qui entraîneraitCdEF
- L'espace n'est pas une lettre de l'alphabet et doit donc toujours être supprimé, même s'il s'agit du début de la chaîne
- En raison de la nature de la réduction, le premier caractère alphabétique de l'entrée sera toujours le premier caractère de la sortie.
zZ
est la dernière lettre de l'alphabet. Il n'y a pas de lettres après, l'alphabet ne boucle pas.
Cas de test
codegolf -> cdef
CodEgolf -> CdEf
codeolfg -> cdefg
ProgrammingPuzzles -> P
Stack Exchange -> St
The quick red fox jumped over the lazy brown dog -> Tuvw
Zebra -> Z
Abcdegfhijkl -> Abcdef
Notation
Il s'agit de code-golf , donc le moins d'octets dans chaque langue gagne!
z
Nous nous arrêtons, non?<space>codegolf
Réponses:
JavaScript (ES6),
66796867 octetsComment?
Test des lettres consécutives
Étant donné que la conversion de deux caractères en leurs codes ASCII serait une opération assez longue dans JS, nous utilisons plutôt la formule suivante:
Pourvu que a et b soient dans
[a-zA-Z ]
, l'expression ci-dessus est égale0
si et seulement si a et b sont des lettres consécutives (c'est-à-dire des chiffres consécutifs en base 36), peu importe le cas des caractères.Par exemple:
Formaté et commenté
Cas de test
Afficher l'extrait de code
la source
Python 2 , 69 octets
Essayez-le en ligne!
Une simple réduction de la chaîne. Nous concaténons simplement le caractère suivant si et seulement si
(ord(y)-ord(x[~0]))%32==1
. Contrôle très moche - je suis sûr qu'il peut être amélioré, mais je ne sais pas comment!la source
from functools import*
.import functools as f
etf.
est beaucoup plus long quefrom functools import*
sûr, même utilisé une fois. Voir ce fil pour plus d'informations.Python 3 ,
75 85 84 91 81 7775 octetsJe pense que c'est aussi court que possible en Python 3 . Il peut être raccourci de quelques octets en Python 2, comme indiqué dans la soumission de Sisyphe .
Essayez-le en ligne!
la source
05AB1E , 13 octets
Essayez-le en ligne!
-1 merci à Adnan
la source
ðK
pará
?Brachylog , 15 octets
Essayez-le en ligne!
Ce serait 10 octets
⊇.ḷ~sẠ&h~h
:, sans la contrainte assez peu intéressante "les chaînes peuvent commencer par des espaces".Explication
Comme c'est assez déclaratif, c'est aussi très lent.
la source
MATL ,
181615 octetsMerci à Mr.Xcoder d' avoir signalé une erreur, maintenant corrigée
Les lettres dans la sortie sont séparées par des retours à la ligne.
Essayez-le en ligne! Ou vérifiez tous les cas de test (le code de pied de page affiche toutes les lettres de sortie sur la même ligne pour plus de clarté).
Explication
la source
Java (OpenJDK 8) ,
10210174 octetsEssayez-le en ligne!
-27 octets grâce à @Olivier Grégoire
la source
s->{char c=0;for(char x:s)if(c<33&x>33|~-x%32==c%32)System.out.print(c=x);}
(avecchar[]
comme entrée).C # (Mono) ,
129107939187 octetsEnregistré 2 octets grâce à @Mr. Xcoder.
4 octets enregistrés grâce à @jkelm.
Essayez-le en ligne!
la source
(c-1)%32
est~-c%32
PHP, 64 + 1 octets
Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne .A part les trucs habituels: Lorsque
$c
atteintZ
,++$c
entraîneAA
,et
&__
maintient que la longueur intacte; donc$n
ne correspondra plus$c
.la source
Pyth ,
23 22 2120 octets-1 octet indirectement grâce à @Erik the Outgolfer's trick (
-Qd
) .-1 octet grâce à @Erik the Outgolfer.
Essayez-le ici.
la source
Haskell,
106 10597 octetsJ'ai essayé d'utiliser l'
fromEnum
arithmétique + char au lieu d'importerData.Char
, mais cela a fini par être plus long ...8 octets enregistrés grâce à H.PWiz!
Essayez-le en ligne.
la source
filter
Data.List
Pyth,
212018 octetsEssayez-le ici.
Version 20 octets bien plus efficace:
Essayez-le ici.
-1 merci à M. Xcoder (indirectement).
la source
.U+b?tlrreb1rZ1kZrz6
(je pense). Mais cette astuce m'a aidé..U+b?tlrreb1rZ1kZr6
maisr <str> 6
signifie malheureusementA.strip()
, ne pas supprimer les espaces non précédés ou en fin de chaîne.32
, alors que toutes les lettres l'ont> 64
, et n'affecte donc pas la fonctionnalité. Je pense que cela s'applique également à votre réponse.Perl 6 , 51 octets
Essaye-le
Étendu:
Notez qu'il
<!before …>
s'agit d'une assertion de largeur nullela source
Gelée , 17 octets
Essayez-le en ligne!
la source
Japt ,
181716 octets1 octet enregistré grâce à @Shaggy
Testez-le en ligne!
Je pensais que ce serait un peu plus court, mais ... Telle est la vie ...
Explication
la source
rS
parx
.C # (.NET Core) ,
7060 + 18 octets-10 octets grâce à TheLethalCoder
Le nombre d'octets comprend également:
Essayez-le en ligne!
1 octet de plus
(actuellement)(pas plus) que TheLethalCoder afin de publier pour le plaisir. Approche différente, avec LINQ.Cela tire parti de deux fonctionnalités de type C en C # - une
char
variable de caractère se comporte implicitement de la même manière qu'un entierint
, et l'opérateur booléen AND&&
n'exécute pas l'opération de droite si left renvoie afalse
. Explication du code:la source
.ToArray()
en revenant en tant queIEnumerable<char>
pour enregistrer les octets.q / kdb +,
4745 octetsSolution:
Exemples:
Explication:
Tirer parti de l'
mod 32
astuce des solutions existantes avec la fonction de convergence . Itérer sur la chaîne, si la différence entre le dernier élément du résultat (par exemple commence parT
pour "Le renard roux rapide ...") et le caractère actuel est 1 (après avoir étémod
'd avec 32), alors nous l'ajoutons à le résultat (d'où la raison pour laquelle nous le prenonslast x
), puis remettez tout en chaîne.la source
Perl 5 , 30 + 1 (-n) = 31 octets
Essayez-le en ligne!
Comment?
la source
Rétine , 76 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Supprimer des espaces.
Tripliquez le premier caractère et insérez un séparateur.
Convertissez les deuxième et troisième caractères en minuscules et incrémentez-les. Convertissez ce dernier en majuscules. Ce sont maintenant les caractères de recherche.
Essayez de faire correspondre l'un des caractères de recherche. S'il est trouvé, tripliquez la correspondance, ce qui redémarre la boucle pour la prochaine recherche. Sinon, supprimez simplement les caractères de recherche et le reste de l'entrée.
la source
8ème , 114 octets
Code
Explication
Exemple
la source
C (gcc) ,
79787570 octetsEssayez-le en ligne!
la source
Proton , 59 octets
Port de la soumission Python 2 .
Essayez-le en ligne!
la source
Pyth, 15 octets
Suite de tests
Contrairement à toutes les autres réponses, cela ne colle pas la sortie, il génère toutes les sous-séquences de l'entrée, puis leur ordonne de mettre la chaîne souhaitée à la fin, et la sort.
la source
J, solution partielle
Je publie ceci pour des commentaires et des idées d'amélioration plus que toute autre chose. Cela fonctionne, mais ne gère pas les cas de majuscules et de bord d'espace, et c'est déjà long pour J.
D'abord un verbe auxiliaire dyadique qui vous indique si les arguments gauche et droit sont alphabétiquement adjacents:
Ensuite un verbe qui supprime le premier élément qui ne fait pas partie d'une séquence alphabétique à partir du premier élément:
Notez que nous utilisons Adverse
::
pour retourner l'intégralité de l'argument s'il n'y a pas d'élément non-séquence trouvé (c'est-à-dire si l'argument entier est une séquence alphabétique valide).Enfin, la solution est donnée en appliquant
f
jusqu'à la convergence:Essayez-le en ligne!
Et voici une version analysée de
f
pour une lecture plus facile:Question secondaire : pourquoi les caractères de la boîte ne s'alignent-ils pas parfaitement lorsqu'ils sont affichés sur SO (ils fonctionnent dans ma console):
la source