Le défi est simple:
Ecrivez une fonction ou un programme qui prend une entrée x
et génère l'alphabet en minuscule s'il x
fait partie de l'alphabet en minuscule, puis en majuscule s'il x
fait partie de l'alphabet en majuscule et uniquement x
s'il ne fait pas partie des deux.
Règles:
- L'entrée peut être un argument de fonction ou de STDIN
- L’entrée sera l’un des caractères ASCII imprimables compris entre 32 et 126 (espace sur tilde).
- Les entrées peuvent être entre guillemets
'x'
ou"x"
, mais rappelez-vous,'
et"
sont des entrées valides et doivent être prises en charge. - L’entrée peut être n’importe laquelle des lettres de l’alphabet, c’est-à-dire que vous ne pouvez pas supposer que ce sera
a
ouA
. - La sortie ne doit contenir qu'un seul des alphabets ou un seul symbole, mais les nouvelles lignes de fin sont correctes.
- Les lettres de l'alphabet ne doivent pas être séparées par des espaces, des virgules ou autre chose.
Quelques exemples:
F
ABCDEFGHIJKLMNOPQRSTUVWXYZ
z
abcdefghijklmnopqrstuvwxyz
"
"
<- Input: Space
<- Output: Space
Le code le plus court en octets gagne.
Facultatif mais apprécié: si votre langue dispose d’un interprète en ligne, veuillez également poster un lien afin que celui-ci soit facilement testé par d’autres personnes.
Classement
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
import Random
puis utiliserRandom.randint
(évidemment pas pour ce défi mais quand même)?import string
sont comptés, il est donc souvent préférable d'effectuer des solutions de contournement. Notez que le package doit exister avant que le défi ne soit publié. De nombreux défis ont quelque chose comme: "Utiliser des paquets qui ne le font pas n'est pas autorisé", mais ce n'est pas le cas dans ce défi.Réponses:
TeaScript , 5 octets
TeaScript a un (presque) intégré pour cela: D
Essayez-le en ligne (note: l'interpréteur en ligne a été mis à jour vers TeaScript v3 et indique le cas échéant
N0
).Essayez tous les cas de test
TeaScript 3 , 2 octets [sans concurrence]
En utilisant TeaScript 3, cela peut devenir 2 octets. Ceci n’est pas concurrentiel car TeaScript 3 a été créé après ce défi
1 octet alternatif
Si nous pouvions générer
0123456789
des chiffres, cela pourrait être:la source
Pyth, 10 octets
Suite de tests
Nous commençons par construire une liste avec 3 éléments: l'alphabet en minuscule, l'alphabet en majuscule et l'entrée. (
[GrG1z
) Ensuite, nous filtrons cette liste en fonction du nombre d'apparences de l'entrée dans les éléments non nuls. (/#z
) Enfin, prenons le premier élément de la liste filtrée.la source
LabVIEW, 23 primitives LabVIEW
Le sélecteur (la structure sur la structure cse) est connecté à un vi appelé classe lexicale. Il délivre des nombres de 1 à 6 en fonction de l’entrée, 5 en minuscule et 4 en majuscule.
La boucle for passe 26 fois pour créer un alphabet ou une fois pour faire passer le symbole.
la source
Haskell, 48 octets
Exemple d'utilisation:
Prenez toutes les listes de ['a' .. 'z'], ['A' .. 'Z'] et de la liste des singleton avec le caractère d'entrée
c
wherec
is element of. Pour les lettres, nous avons toujours deux correspondances, nous choisissons donc la première.la source
JavaScript (ES6), 79 octets
Explication
JavaScript compare le code de chaque caractère alphabétiquement lors de la comparaison de chaînes, de sorte que les codes des caractères utilisés dans les comparaisons sont 1 inférieur et supérieur à la plage de caractères requise.
Tester
Afficher l'extrait de code
la source
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
est très peu approprié au golf, mais parfois c'est le seul moyen!String.fromCharCode
et.toUpperCase
(Dumb and Dumber) maistoUpperCase
est le gagnantx=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")
fait, mais est un octet plus long. Changer[A-Z]
pour\w
fonctionner pour tout sauf_
. Votre solution semble être la plus courte possible.ABC...abc...?
sans véritablefor
boucle: (un peu de rembourrage)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R,
9075 octetsMerci à Giuseppe .
Ancienne version (90 octets):
Semble moche, mais ces
cat
s ne peuvent pas être externalisés à des fonctions, à mon humble avis.la source
scan
peut être n'importe quel objet de type caractère, vous pouvez donc leletters
remplacer''
.Python 3,
92848274 octetsVersion actuelle: 74, grâce à isaacg et wnnmaw!
Ungolfed: (pour une définition des non-golfés
Première version: 92
Deuxième version: 82, grâce à isaacg! :)
la source
lambda c:
) à la place d'une définition explicite (def f(c):print(
) et sauvegarder quelques octets. En outre, vous n'avez pas besoin d'espace avant lefor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
. Merci!"
dans la fonction, vous avez\"
plutôt besoin .Python 3,
118105989783 octetsSolution simple. EDIT: Joué au golf grâce à la suggestion de Erik le golfeur.
Ungolfed:
la source
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682octetsPHP se porte bien maintenant:
Prend une entrée en ligne de commande, comme:
Édite
91>ord($x)
parZ<$x
. Pensé comme compliqué. Merci à manatwork .strtoupper
et en construisant directement la plage demandée.la source
ord()
semble mauvais là-bas. EssayezZ<$x?$a:strtoupper($a)
.' '&$x^A
de faire les lettres a et z majuscules et minuscules. C'est-à-dire que votre code devient<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Perl,
463433 octetscomprend +2 pour
-nE
Courir comme
for
et en utilisant des mots nus, grâce à @Dom Hastings .-E
etsay
au lieu deprint
.la source
for
: - /. Essayé un tas d'approches, (-p
avec$"='';$_="@_"
, même$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
mais tout est plus long ...$_=
plutôt que d'print
utiliser et d'utiliser le-p
drapeau,-n
vous pouvez en sauver deux autres ... Je ne peux toujours pas penser à d'autres moyens d'en économiser plus jusqu'à présent ...$_
de liste (à ma connaissance). Il faudrait que ce soit interpolé ($_="@_"
), mais comme l’espace est utilisé comme séparateur, il faut aussi que je le fasse$"=''
(ou un ajoin'',
) qui le rend plus long. Pas beaucoup de marge de manœuvre sur celui-ci!say
placeprint
!Rubis, 41 + 1 = 42
Avec interrupteur
-p
, courirCela génère la chaîne
et vérifie chaque bloc contigu de "caractères de mot", qui se trouvent juste être les alphabets minuscules et majuscules et le caractère de soulignement. S'il y avait plusieurs caractères consécutifs entre Z et a, cette astuce ne fonctionnerait pas.
Édité pour ajouter une explication, sur demande:
Le
-p
drapeau fait essentiellement[*?A..?z]
est le tableau de caractères compris entre A majuscule et Z minuscule, dans l'ordre ASCII. Il s’agit de l’alphabet majuscule, de certains caractères autres que des lettres et de l’alphabet minuscule.*''
joint le tableau en une chaîne, afin que nous puissions l'appeler.scan
.scan
trouvera chaque correspondance de l'expression régulière/\w+/
, peuplera la variable magique$&
et appellera le bloc. Chaque fois que le bloc est itéré, il vérifie si la chaîne correspondante contient$_
et définit la sortie sur cette chaîne si tel est le cas. Donc, si $ _ est contenu dans les alphabets majuscules ou minuscules, il est modifié en conséquence, sinon il est inchangé.La version non-lue ressemblerait à quelque chose comme
la source
CJam, 18 octets
'[,65>
pousse l'alphabet majuscule,_el
l'alphabet minuscule etr:R
une chaîne à un caractère qui est lue à partir de STDIN et affectée à variableR
. Celles-ci sont encapsulées dans un tableau (]
) et le premier qui a des caractères communsR
est sélectionné avec{R&}=
.la source
_el
l'alphabet est en minuscule?el
veut dire "convertir en minuscules". Je viens de pousser l'alphabet majuscule, alors maintenant je le duplique avec_
, puis appelleel
la copie résultante.Retina, 62 octets
Les deux lignes courtes sont la regex à correspondre. Si l'entrée est en minuscule (dans la plage
[a-z]
), il remplace ce caractère (dans ce cas, il s'agit de l'entrée entière) par l'alphabet en minuscule. Le processus est similaire pour les majuscules. S'il ne s'agit pas d'une lettre, aucun remplacement n'est effectué et la sortie est intacte.Essayez-le en ligne.
la source
Python 2.7.10,
959379 octetsC’est la première fois que je tente de jouer au golf, alors n’importe quelle aide ou conseil est extrêmement apprécié!
Merci à Morgan Thrapp pour l'aide!
la source
False == 0
etTrue == 1
pour indexer en tuples. Donc, il vérifie d’abord si c’est une lettre avecisalpha
, si c’est le cas, il revient1
, puis vérifie si c’est en minuscule et fait de même.Rubis,
4643 caractères(Code de 42 caractères + option de ligne de commande de 1 caractère)
Grâce à:
===
magie (-3 caractères)Échantillon échantillon:
la source
MATL , 22 octets
Ceci utilise la version actuelle (3.1.0) du langage.
EDIT (15 sept. 2017): Essayez-le sur MATL Online! (avec une version plus récente du langage).
Exemples
Explication
la source
Java, 165 caractères
Génère la sortie requise sur stdout (plutôt que de la renvoyer). L'entrée se fait via les arguments d'exécution.
Comment ça fonctionne.
1) Configurer des variables entières
c = la valeur ASCII du premier caractère du premier paramètre des arguments d'exécution.
d = c converti en valeur ASCII minuscule (en effectuant la commande OR avec 32)
b = calcul pour voir si d est une lettre. Sera <0 si une lettre.
e = Le caractère de départ pour la sortie. Si la valeur ASCII dans d est une lettre (voir b), elle est définie sur «A» (ou «a» en ajoutant c AND 32 à la valeur ASCII «A»), sinon elle est définie sur la valeur d'origine de c.
f = le nombre de caractères à sortir. S'il ne s'agit pas d'une lettre (voir b), celle-ci est définie sur 1, sinon sur 26
2) Boucle de e à e + f pour afficher chaque caractère sur la sortie standard.
la source
void f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}
.Perl, 23 octets
Comprend +2 pour
-nE
(au lieu de +1) pour être juste avec l'autre solution perlExécuter avec l'entrée sur STDIN sans fin de nouvelle ligne:
Juste le code:
la source
Lua,
9897 octetsMalheureusement, je n'ai trouvé aucune solution plus courte que 26 octets à définir
a
avec l'alphabet. En fait, je n'ai pas trouvé moins de 32 ans.Edit: save 1 Byte grâce à @ATaco, faisait beaucoup cette erreur au démarrage avec Lua: p
Vous pouvez le tester en ligne sur le site officiel ou sur ideone . Si vous utilisez l'ancien, l'entrée ne fonctionnera pas (désactivée), utilisez donc la source suivante, où elle est encapsulée dans une fonction.
la source
c=io.read()a="abcdefghijklmnopqrstuvwyz"
au lieu d'un, c = ...Mathematica, 75 octets
Assez bon score pour une langue autre que le golf ... Toute solution utilisant le traitement de code de caractère prendrait plus d'octets, en raison des coûts de
ToCharacterCode
etFromCharacterCode
.la source
C (fonction), 71 octets
la source
f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}
enregistre un octet.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
pour 62 octetsPython, 81 octets
Ceci est essentiellement une traduction de la réponse Pyth. Il définit une fonction
f
qui prend en argument le caractère et renvoie le résultat.la source
if z in k
, non? En outre,f=
est facultatif par défaut.f=
, rendre la fonction anonyme. -2Jolf , 17 octets
Essayez-le ici.
la source
MATLAB:
7168 octets(merci à OP d'avoir économisé 3 octets)
Tester:
Explication: L'alphabet majuscule occupe
65:90
des caractères ASCII. L'alphabet en minuscule est en97:122
ASCII. Donc,b=i<65|i>122|(i>90&i<97)
vérifie si le caractère saisii
n'est PAS alphabétique. Si c'est le cas, l'entrée est renvoyée. L'alphabet majuscule est renvoyé sib==1
eti<97
(caractère majuscule). Sib==1
eti>96
, 32 est ajouté à65:90
cela correspond à97:122
- l'alphabet en minuscule.la source
i=input('')
si la soumission est un script, soit comme argument de fonction s'il s'agit d'une fonction@(i)i^2
.i='a'
est en général pas accepté. En outre, vous pouvez enregistrer 3 octets en faisant[1,2,3,'']
au lieu dechar([1,2,3])
.SpecBAS, 111 octets
Je suis passé par plusieurs versions de cela, 111 semble être le meilleur que je peux gérer.
La ligne 2 utilise le
?
raccourci pourPRINT
et imbriqué en ligneIF
instructionsExplication de pseudo-code
la source
["a" TO "z","A" TO "Z"]
ressembler davantage à un pseudo-code qu’il ne le fait déjà."a".."z","A".."Z"
ressemble plus à un "code réel", du moins à mes yeux ... Les deux sont très faciles à comprendre si =)Swift 2, 142 octets
Ungolfed
la source
05AB1E ,
1916 octets-3 octets grâce à
else
Comment ça fonctionne
Essayez-le en ligne!
la source
¹
(la première entrée) existait déjà lorsque vous avez posté votre réponse, mais vous pouvez jouer au golf avec 2 octets:A¹åiAëAu¹åiAuë
( Essayez-le en ligne ou testez la suite ).Java SE 8,
7169 octetsGolfé:
Ungolfed:
J'avais initialement mis en œuvre ce qui suit
C'est plus élégant mais malheureusement c'est un octet plus grand. Cela suppose que le comportement des caractères non alpha n'est pas défini et que la chaîne s est initialisée à "" avant l'exécution. Sois gentil c'est mon premier post.
edit: 2 octets enregistrés par Stewie Griffin en changeant
la source
a<91
devrait fonctionner, ou ...?Scala, 91 caractères
Non-golfé
Avoir un résultat initial modifiable plutôt que de renvoyer une valeur immuable de 3, si différente, des blocs me permettait de gagner 2 caractères, même si je les déteste.
Méthode scala-thonique
Une meilleure méthode pour le scala serait quelque chose comme ceci:
la source
Japt, 9 octets
Courez en ligne
la source