Sortir l'alphabet, l'ALPHABET ou juste un caractère

49

Le défi est simple:

Ecrivez une fonction ou un programme qui prend une entrée xet génère l'alphabet en minuscule s'il xfait partie de l'alphabet en minuscule, puis en majuscule s'il xfait partie de l'alphabet en majuscule et uniquement xs'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 aou A.
  • 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

Nest 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

Stewie Griffin
la source
Sommes-nous autorisés à importer des packages tels que, en Python par exemple: import Randompuis utiliser Random.randint(évidemment pas pour ce défi mais quand même)?
Daniel
Oui, vous pouvez importer des packages. mais les octets pour l'écriture, par exemple, import stringsont 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.
Stewie Griffin
Je suppose que par "les citations sont des entrées valides et doivent être prises en charge", cela signifie que si votre méthode de saisie nécessite des guillemets, les guillemets sont
automatiquement supprimés
Peut-on supposer un environnement REPL?
Chat

Réponses:

22

TeaScript , 5 octets

xN(0)

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

N0

1 octet alternatif

Si nous pouvions générer 0123456789des chiffres, cela pourrait être:

°
Downgoat
la source
TeaScript 3 est valide. Donc, vous pouvez l'utiliser!
user75200
27

Pyth, 10 octets

h/#z[GrG1z

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.

isaacg
la source
6
Sérieusement, y a-t-il quelque chose que vous ne pourriez pas résoudre avec quelques octets de Pyth? J'ai vraiment besoin d'apprendre cette langue ..
Hexaholic
25
Apprenez quelle langue? ... vous en avez nommé deux. : P
quintopia
2
@quintopia Eh bien, pourquoi pas les deux? :)
Hexaholic
15

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.

Eumel
la source
4
En tant que personne qui a eu le privilège de travailler avec LabVIEW il y a de nombreuses années, vos réponses me font sourire. =)
corsiKa
12

Haskell, 48 octets

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

Exemple d'utilisation:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

Prenez toutes les listes de ['a' .. 'z'], ['A' .. 'Z'] et de la liste des singleton avec le caractère d'entrée cwhere cis element of. Pour les lettres, nous avons toujours deux correspondances, nous choisissons donc la première.

nimi
la source
11

JavaScript (ES6), 79 octets

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

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.

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

Tester

utilisateur81655
la source
Est-ce réellement le moyen le plus rapide de produire une chaîne avec l'alphabet entier en Javascript? Si vous voulez la totalité de la plage imprimable ASCII, devez-vous taper chaque caractère?
Stewie Griffin
1
@ StepieGriffin Malheureusement, c'est le cas. Serait quelque chose comme la seule autre façon: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodeest très peu approprié au golf, mais parfois c'est le seul moyen!
user81655
4
Dans ce cas, le solde est compris entre String.fromCharCodeet .toUpperCase(Dumb and Dumber) mais toUpperCaseest le gagnant
edc65
Agréable! J'ai essayé différentes manières de jouer au golf, mais je n'en ai trouvé aucune qui fonctionne. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")fait, mais est un octet plus long. Changer [A-Z]pour \wfonctionner pour tout sauf _. Votre solution semble être la plus courte possible.
ETHproductions
Voici l'un des moyens les plus courts de générer ABC...abc...?sans véritable forboucle: (un peu de rembourrage)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions
8

R, 90 75 octets

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

Merci à Giuseppe .

Ancienne version (90 octets):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

Semble moche, mais ces cats ne peuvent pas être externalisés à des fonctions, à mon humble avis.

Andreï Kostyrka
la source
75 octets
Giuseppe
73 octets : le deuxième paramètre de scanpeut être n'importe quel objet de type caractère, vous pouvez donc le lettersremplacer ''.
Robin Ryder le
7

Python 3, 92 84 82 74 octets

Version actuelle: 74, grâce à isaacg et wnnmaw!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed: (pour une définition des non-golfés

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

Première version: 92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

Deuxième version: 82, grâce à isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c
Koneke
la source
Bonjour et bienvenue sur PPCG! Bonne réponse. Voici une suggestion de golf: Vous pouvez utiliser une expression lambda ( 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 le for.
isaacg
Ah, je suppose « sortie » à imprimer moyenne, et pas seulement retourner :) Neat, si tel est le cas , il est jusqu'à 84, lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Merci!
Koneke
Oui, la définition standard de la sortie sur le site autorise le retour de fonctions, vous pouvez donc modifier la nouvelle version dans votre réponse. Un autre problème est que les crochets ne sont pas nécessaires - la fonction fonctionne exactement de la même manière sans eux, en tant que compréhension du générateur au lieu de la compréhension par liste.
isaacg
Ah, je n'avais jamais utilisé de compréhension de générateur auparavant, apprendre de nouvelles choses! Merci encore :)
Koneke
Notez que lorsque vous entrez "dans la fonction, vous avez \"plutôt besoin .
Daniel
6

Python 3, 118 105 98 97 83 octets

Solution simple. EDIT: Joué au golf grâce à la suggestion de Erik le golfeur.

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

Ungolfed:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s
Sherlock9
la source
1
Pourriez-vous utiliser un opérateur ternaire pour économiser quelques octets? Quelque chose comme return a.lower() if s.islower() else a.
David Robertson
@ DavidRobertson Je ne sais pas si vous lisez correctement ma solution, qui est la première ligne de code, mais c'est exactement ce que je fais.
Sherlock9
Ah! Je lisais la version non-golfée. Désolé pour ça!
David Robertson
@DavidRobertson Pas de problème
Sherlock9
Golfé:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik the Outgolfer
5

PHP, 62 76 82 octets

PHP se porte bien maintenant:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

Prend une entrée en ligne de commande, comme:

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

Édite

  • Sauvegardé 6 octets en remplaçant 91>ord($x)par Z<$x. Pensé comme compliqué. Merci à manatwork .
  • Vous avez enregistré 14 octets en supprimant strtoupperet en construisant directement la plage demandée.
insertusernamehere
la source
Cela ord()semble mauvais là-bas. Essayez Z<$x?$a:strtoupper($a).
manatwork
@manatwork Haha, j'ai pensé faire compliqué dans cette deuxième partie. Merci de le signaler.
insertusernamehere
Essayez ' '&$x^Ade 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;
Ismael Miguel
@IsmaelMiguel Cela aura exactement le même nombre d'octets.
insertusernamehere
1
Ne vous inquiétez pas - et c'est toujours une bonne façon de faire de la confusion. ;)
insertusernamehere
5

Perl, 46 34 33 octets

comprend +2 pour -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

Courir comme

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • update 34 économisez 12 octets en omettant foret en utilisant des mots nus, grâce à @Dom Hastings .
  • mettre à jour 33 économiser 1 octet en utilisant -Eetsay au lieu de print.
Kenney
la source
@DomHastings Merci! Aurais dû savoir que des mots nus étaient autorisés là-bas - et j'aurais dû voir cela for: - /. Essayé un tas d'approches, ( -pavec $"='';$_="@_", même $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'mais tout est plus long ...
Kenney
Si vous aviez réfléchi à cette question, si vous définissez $_=plutôt que d' printutiliser et d'utiliser le -pdrapeau, -nvous pouvez en sauver deux autres ... Je ne peux toujours pas penser à d'autres moyens d'en économiser plus jusqu'à présent ...
Dom Hastings
@DomHastings J'ai essayé cela, mais je ne peux pas définir $_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 a join'',) qui le rend plus long. Pas beaucoup de marge de manœuvre sur celui-ci!
Kenney
Hah, bien sûr! Vous avez même dit que (quand je relirai le commentaire après ne pas être au pub ...) je continuerai à y penser, mais vous serez peut-être le plus court que vous obtiendrez sans utiliser à la sayplace print!
Dom Hastings
5

Rubis, 41 + 1 = 42

Avec interrupteur -p, courir

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

Cela génère la chaîne

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

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 -pdrapeau fait essentiellement

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?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. scantrouvera 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

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end
histocrate
la source
Pouvez-vous poster une version non-golfée? Je ne comprends toujours pas complètement comment cela fonctionne.
Shelvacu
Bien sûr, posté un.
histocrat
4

CJam, 18 octets

'[,65>_elr:R]{R&}=

'[,65>pousse l'alphabet majuscule, _ell'alphabet minuscule et r:Rune chaîne à un caractère qui est lue à partir de STDIN et affectée à variable R. Celles-ci sont encapsulées dans un tableau ( ]) et le premier qui a des caractères communs Rest sélectionné avec {R&}=.

Lynn
la source
J'essaie de comprendre comment utiliser CJam, mais je suis perdu entre le document officiel et ce que je lis ici. Est-ce que quelqu'un peut me donner par exemple une page où je peux comprendre pourquoi _ell'alphabet est en minuscule?
Erdal G.
Ah, ça elveut dire "convertir en minuscules". Je viens de pousser l'alphabet majuscule, alors maintenant je le duplique avec _, puis appelle ella copie résultante.
Lynn
1
J'ai fait un bon pdf contenant (presque) toutes les commandes de CJam.
Lynn
4

Retina, 62 octets

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

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.

NinjaBearMonkey
la source
4

Python 2.7.10, 95 93 79 octets

C’est la première fois que je tente de jouer au golf, alors n’importe quelle aide ou conseil est extrêmement apprécié!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

Merci à Morgan Thrapp pour l'aide!

Daniel
la source
1
@ MorganThrapp, cela ne semble pas fonctionner. Êtes-vous sûr que cela fonctionne dans Python 2.7.10?
Daniel
Cela fonctionne dans 2.7.8. Qu'est-ce qui ne marche pas?
Morgan Thrapp
@ MorganThrapp, pourriez-vous expliquer en premier lieu comment cela fonctionne? Peut-être que c'est juste que je ne comprends pas alors je fais quelque chose de mal.
Daniel
Bien sûr, il utilise le fait que False == 0et True == 1pour indexer en tuples. Donc, il vérifie d’abord si c’est une lettre avec isalpha, si c’est le cas, il revient 1, puis vérifie si c’est en minuscule et fait de même.
Morgan Thrapp
1
Aucun problème! J'adore jouer au golf, donc je suis toujours heureux d'aider quelqu'un de nouveau!
Morgan Thrapp
4

Rubis, 46 43 caractères

(Code de 42 caractères + option de ligne de commande de 1 caractère)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

Grâce à:

  • Jordan pour la ===magie (-3 caractères)

Échantillon échantillon:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@
homme au travail
la source
4

MATL , 22 octets

jtt1Y2XIm~Iw?km?Ik]]1$

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

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

Explication

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing
Luis Mendo
la source
3

Java, 165 caractères

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

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.

Minimal
la source
2
Vous savez que pour la plupart des défis, la solution peut être fournie sous forme de programme complet ou de fonction? Étant donné l’énorme quantité de code standard utilisé en Java, une fonction peut être plus courte.
manatwork
1
L' application d' un couple de petits trucs, sans changer la logique, je suis arrivé ceci: 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++);}.
Manatwork
3

Perl, 23 octets

Comprend +2 pour -nE (au lieu de +1) pour être juste avec l'autre solution perl

Exécuter avec l'entrée sur STDIN sans fin de nouvelle ligne:

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

Juste le code:

say/\pL/?a&$_|A..Z:$_
Ton Hospel
la source
Belle utilisation du fait que l'entrée est limitée aux caractères 7 bits.
msh210
3

Lua, 98 97 octets

Malheureusement, je n'ai trouvé aucune solution plus courte que 26 octets à définir aavec 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

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

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.

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))
Katenkyo
la source
Vous n'êtes pas le seul à ne pas avoir trouvé de moyen plus court de générer l'alphabet en Lua. :(
manatwork
@manatwork haha, c'est exactement la même chose, sauf que je n'ai pas eu à l'imprimer, mais à le concaténer ^^. Au moins, cela signifie qu'il n'y a pas de solution cachée que je ne savais pas faire. ^^ '.
Katenkyo
Vous pouvez enregistrer un octet avec c=io.read()a="abcdefghijklmnopqrstuvwyz"au lieu d'un, c = ...
ATaco
2

Mathematica, 75 octets

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

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 ToCharacterCodeet FromCharacterCode.

LegionMammal978
la source
2

C (fonction), 71 octets

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}
Trauma numérique
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.
Kenney
1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}pour 62 octets
gastropner
2

Python, 81 octets

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

Ceci est essentiellement une traduction de la réponse Pyth. Il définit une fonction fqui prend en argument le caractère et renvoie le résultat.

PurkkaKoodari
la source
1
Tu veux dire if z in k, non? En outre, f=est facultatif par défaut.
xnor
@xnor Oui. Apparemment, j'ai raté un Ctrl-C.
PurkkaKoodari
2
Supprimer f=, rendre la fonction anonyme. -2
Erik the Outgolfer
2

Jolf , 17 octets

Essayez-le ici.

? hpLipl? hpUipui
?                  if
  hpL               the lowercase alphabet (array) contains
     i               the input
      pl            return the lowercase alphabet (string)
        ?          else if
          hpU       the uppercase alphabet (array) contains
             i       the input
              pu    return the uppercase alphabet (string)
                i  otherwise, return the input
                   implicit: print the result
Conor O'Brien
la source
2

MATLAB: 71 68 octets

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(merci à OP d'avoir économisé 3 octets)

Tester:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Explication: L'alphabet majuscule occupe 65:90des caractères ASCII. L'alphabet en minuscule est en 97:122ASCII. Donc, b=i<65|i>122|(i>90&i<97)vérifie si le caractère saisi in'est PAS alphabétique. Si c'est le cas, l'entrée est renvoyée. L'alphabet majuscule est renvoyé si b==1et i<97(caractère majuscule). Si b==1et i>96, 32 est ajouté à 65:90cela correspond à 97:122- l'alphabet en minuscule.

Brainkz
la source
Belle soumission. Deux commentaires: Il est courant d'utiliser soit 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 de char([1,2,3]).
Stewie Griffin
Ok, édité. Merci pour la suggestion!
Brainkz
2

SpecBAS, 111 octets

Je suis passé par plusieurs versions de cela, 111 semble être le meilleur que je peux gérer.

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

La ligne 2 utilise le ?raccourci pour PRINTet imbriqué en ligneIF instructions

Explication de pseudo-code

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF
Brian
la source
Il est difficile de faire ["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 =)
Stewie Griffin
2
Spec quoi ????
Bassdrop Cumberwubwubwub
2

Swift 2, 142 octets

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

Ungolfed

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}
Jojodmo
la source
2

05AB1E , 19 16 octets

-3 octets grâce à else

DAsåiAëDAusåiAuë

Comment ça fonctionne

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

Essayez-le en ligne!

Neil A.
la source
Vous ne savez pas si ¹(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 ).
Kevin Cruijssen
2

Java SE 8, 71 69 octets

Golfé:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

Ungolfed:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

J'avais initialement mis en œuvre ce qui suit

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

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

a - 91 < 0 to a < 91
jfh
la source
2
Bienvenue sur le site! :)
DJMcMayhem
1
Merci! Cela fait quelques années que je
guette et
1
a<91devrait fonctionner, ou ...?
Stewie Griffin
2

Scala, 91 caractères

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

Non-golfé

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

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:

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}
sprague44
la source