Muestra el alfabeto, el ALFABETO o simplemente un personaje


49

El desafío es simple:

Escriba una función o programa que tome una entrada xy genere el alfabeto en minúsculas si xes parte del alfabeto en minúsculas, emite el alfabeto en mayúsculas si xes parte del alfabeto en mayúsculas y emite solo xsi no es parte de ninguno.

Reglas:

  • La entrada puede ser argumento de función o de STDIN
  • La entrada será cualquiera de los caracteres ASCII imprimibles de 32 a 126 (espacio para tilde).
  • La entrada puede ser dentro de las comillas, 'x'o "x", pero recuerda que 'y "son de entrada válida y debe ser apoyada.
  • La entrada puede ser cualquiera de las letras del alfabeto, es decir, no puede suponer que será ao A.
  • La salida debe ser solo uno de los alfabetos o el símbolo único, pero las nuevas líneas finales están bien.
  • Las letras del alfabeto no deben estar separadas por espacios, comas o cualquier otra cosa.

Algunos ejemplos:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

El código más corto en bytes gana.


Opcional pero apreciado: si su idioma tiene un intérprete en línea, publique también un enlace para que otros puedan probarlo fácilmente.


Tabla de clasificación

El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

## Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

## Perl, 43 + 2 (-p flag) = 45 bytes

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


¿Se nos permite importar paquetes como, por ejemplo, en Python: import Randomy luego usarlos Random.randint(obviamente no para este desafío pero aún así)?
Daniel

Sí, puedes importar paquetes. pero los bytes para escribir, por ejemplo, import stringse cuentan, por lo que a menudo es mejor hacer soluciones alternativas. Tenga en cuenta que el paquete debe existir antes de publicar el desafío. Muchos desafíos tienen algo como: "Usar paquetes que hacen esto no está permitido", pero ese no es el caso en este desafío.
Stewie Griffin

Supongo que por "las citas son entradas válidas y deben ser compatibles" quiere decir que si su método de entrada requiere citas, las citas como entrada se escaparían
Cyoce

¿Podemos asumir un entorno REPL?
gato

Respuestas:


22

TeaScript , 5 bytes

xN(0)

TeaScript tiene un (casi) incorporado para esto: D

Pruébelo en línea (nota: el intérprete en línea se ha actualizado a TeaScript v3, en este caso N0)

Prueba todos los casos de prueba


TeaScript 3 , 2 bytes [no competidor]

Con TeaScript 3, esto puede convertirse en 2 bytes. Esto no es competitivo porque TeaScript 3 se creó después de este desafío

N0

Alternativa de 1 byte

Si pudiéramos generar 0123456789dígitos, entonces esto podría ser:

°

TeaScript 3 es válido. Entonces, ¡puedes usarlo!
user75200

27

Pyth, 10 bytes

h/#z[GrG1z

Banco de pruebas

Comenzamos construyendo una lista con 3 elementos: el alfabeto en minúsculas, el alfabeto en mayúsculas y la entrada. ( [GrG1z) Luego, filtramos esta lista en el número de apariciones de la entrada en los elementos que no son cero. ( /#z) Finalmente, tomamos el primer elemento de la lista filtrada.


66
En serio, ¿hay algo que no puedas resolver con unos pocos bytes de Pyth? Realmente necesito aprender este idioma ..
Hexaholic

25
¿Aprender qué idioma? ... mencionaste dos por nombre. : P
quintopia

2
@quintopia Bueno, ¿por qué no ambos? :)
Hexaholic

15

LabVIEW, 23 primitivas de LabVIEW

El selector (el? En la estructura cse) está conectado a un vi que se llama Lexical Class. Supera los números del 1 al 6 dependiendo de la entrada, 5 es minúscula 4 es mayúscula.

El bucle for va 26 veces para crear un alfabeto o una vez para pasar el símbolo.


44
Como alguien que tuvo (¿privilegio? ¿Desgracia? Usted decide) trabajar en LabVIEW hace muchos años, sus respuestas me traen una sonrisa. =)
corsiKa

12

Haskell, 48 bytes

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

Ejemplo de uso:

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

Tome todas las listas de ['a' .. 'z'], ['A' .. 'Z'] y la lista de singleton con la entrada char cdonde ces elemento de. Para las letras siempre tenemos dos coincidencias, así que elegimos la primera.


11

JavaScript (ES6), 79 bytes

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

Explicación

JavaScript compara el código de cada carácter alfabéticamente al comparar cadenas, por lo que los códigos de los caracteres utilizados en las comparaciones son 1 por debajo y por encima del rango requerido de caracteres.

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
)

Prueba


¿Es esa la forma más corta de producir una cadena con todo el alfabeto en Javascript? Si quisieras todo el rango ASCII imprimible, ¿tendrías que escribir cada carácter?
Stewie Griffin

1
@StewieGriffin Lamentablemente lo es. La única otra forma sería algo así como: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodees muy inadecuado para jugar al golf, ¡pero a veces es la única forma!
user81655

44
En este caso, el equilibrio es entre String.fromCharCodey .toUpperCase(Dumb and Dumber) pero toUpperCasees el ganador
edc65

¡Agradable! He intentado algunas formas diferentes de jugar al golf aún más, pero no he encontrado una que funcione. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")lo hace, pero es un byte más largo. Cambiar [A-Z]a \wtrabajos para todo excepto _. Su solución parece ser la más corta posible.
ETHproductions

Esta es una de las formas más cortas de generar ABC...abc...?sin un forbucle real : (algo de relleno)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R, 90 75 bytes

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

Gracias a Giuseppe .

Versión anterior (90 bytes):

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

Parece feo, pero esos cats no se pueden subcontratar a funciones, en mi humilde opinión.



73 bytes : el segundo parámetro de scanpuede ser cualquier objeto de tipo carácter, por lo que puede en letterslugar de ''.
Robin Ryder

7

Python 3, 92 84 82 74 bytes

Versión actual: 74, gracias a isaacg y wnnmaw!

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

Ungolfed: (para alguna definición de ungolfed

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

Primera versión: 92

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

Segunda versión: 82, gracias a Isaac! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c

Hola y bienvenidos a PPCG! Buena respuesta. Aquí hay una sugerencia de golf: puede usar una expresión lambda ( lambda c:) en lugar de una definición explícita ( def f(c):print() y guardar algunos bytes. Además, no necesita el espacio antes del for.
isaacg

Ah, asumí "salida" para imprimir media, y no sólo regrese :) aseado, si ese es el caso, hay que bajar a 84, lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. ¡Gracias!
Koneke

Sí, la definición estándar de salida en el sitio permite regresar de las funciones, por lo que puede editar la nueva versión en su respuesta. Otro golf es que los corchetes no son necesarios: la función funciona exactamente igual sin ellos, como un generador de comprensión en lugar de una lista de comprensión.
isaacg

¡Ah, en realidad no he usado las comprensiones de generador antes, aprendiendo cosas nuevas! Gracias de nuevo :)
Koneke

Tenga en cuenta que al ingresar "a la función, necesita en su \"lugar.
Daniel

6

Python 3, 118 105 98 97 83 bytes

Solución simple. EDITAR: Golfed gracias a la sugerencia de Erik the Golfer.

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

Sin golf:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

1
¿Podría usar un operador ternario para guardar algunos bytes? Algo así como return a.lower() if s.islower() else a.
David Robertson

@DavidRobertson No estoy seguro si está leyendo mi solución, que es la línea superior de código, correctamente, pero eso es exactamente lo que estoy haciendo.
Sherlock9

Ah! Estaba leyendo la versión sin golf. ¡Lo siento por eso!
David Robertson

@DavidRobertson No es un problema
Sherlock9

Golfed:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik the Outgolfer

5

PHP, 62 76 82 bytes

PHP está bien ahora:

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

Toma una entrada de la línea de comando, como:

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

Ediciones

  • Guardado 6 bytes reemplazando 91>ord($x)con Z<$x. Pensamiento demasiado complicado. Gracias a manatwork .
  • Ahorró 14 bytes eliminando strtouppery construyendo el rango exigido directamente.

Eso se ord()ve mal allí. Tratar Z<$x?$a:strtoupper($a).
manatwork

@manatwork Jaja, pensé que era complicado en esa segunda parte. Gracias por señalarlo.
insertusernamehere

Intenta ' '&$x^Ahacer mayúsculas y minúsculas a y z. Es decir, el código se convierte en<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel

@IsmaelMiguel Esto tendrá exactamente el mismo número de bytes.
insertusernamehere

1
No se preocupe, y sigue siendo una buena manera de ofuscar. ;)
insertusernamehere

5

Perl, 46 34 33 bytes

incluye +2 para -nE

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

Correr como

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

  • la actualización 34 ahorra 12 bytes al omitir fory usar palabras vacías, gracias a @Dom Hastings .
  • actualizar 33 guardar 1 byte usando -Ey en saylugar de print.

@DomHastings Gracias! Debería haber conocido las palabras vacías permitidas allí, y debería haber visto eso for: - /. Intenté un montón de enfoques, ( -pcon $"='';$_="@_", incluso, $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'pero todo es más largo ...
Kenney

Pensé en esto, si configura en $_=lugar de printusar y usar la -pbandera en su lugar -n, puede guardar otros dos ... Todavía no puedo pensar en otras formas de ahorrar más hasta ahora ...
Dom Hastings,

@DomHastings Lo intenté, pero no puedo establecerlo $_en una lista (que yo sepa). Tendría que ser interpolado ( $_="@_") pero eso usa el espacio como un separador, por lo que tendría que hacerlo $"=''también (o usar a join'',), lo que lo hace más largo. ¡No hay mucho margen de maniobra en este caso!
Kenney

Ja, por supuesto! Incluso dijiste que (cuando vuelva a leer el comentario después de no estar en el pub ...) ¡Seguiré pensando en ello, pero podrías ser el más corto que puedas obtener sin usar en saylugar de print!
Dom Hastings

5

Rubí, 41 + 1 = 42

Con el interruptor -p, corre

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

Esto genera la cadena

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

y comprueba cada bloque contiguo de "caracteres de palabras", que resultan ser solo los alfabetos en minúsculas y mayúsculas y el carácter de subrayado. Si hubiera varios caracteres de palabras consecutivas entre Z y a, este truco no funcionaría.

Editado para agregar explicación, por solicitud:

La -pbandera hace esencialmente

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

[*?A..?z]es la matriz de caracteres entre A mayúscula y Z minúscula, en orden ASCII. Ese es el alfabeto en mayúsculas, algunos caracteres que no son letras y el alfabeto en minúsculas. *''une la matriz en una cadena, por lo que podemos invocarla .scan. scanencontrará cada coincidencia de la expresión regular /\w+/, completará la variable mágica $&con ella y llamará al bloque. Cada vez que se itera el bloque, comprueba si la cadena coincidente contiene $_y establece el resultado en esa cadena si es así. Entonces, si $ _ está en mayúsculas o minúsculas, se modifica en consecuencia, de lo contrario no se modifica.

La versión sin golf se vería algo así

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end

¿Puedes publicar una versión sin golf? Todavía no entiendo completamente cómo funciona esto.
Shelvacu

Claro, publicado uno.
histocrat

4

CJam, 18 bytes

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

'[,65>empuja el alfabeto en mayúsculas, _elel alfabeto en minúsculas y r:Runa cadena de un solo carácter que se lee desde STDIN y se asigna a la variable R. Estos están envueltos en una matriz ( ]) y el primero que tiene caracteres en común Rse selecciona usando {R&}=.


Estoy tratando de entender cómo CJam, pero estoy perdido entre el documento oficial y lo que estoy leyendo aquí. ¿Puede alguien darme, por ejemplo, una página donde pueda entender por qué está _elel alfabeto en minúsculas?
Erdal G.

Ah, elsignifica "convertir a minúsculas". Acabo de presionar el alfabeto en mayúscula, así que ahora lo duplico con _, luego invoco ella copia resultante.
Lynn

1
Hice un bonito pdf que contenía (casi) todos los comandos de CJam.
Lynn

4

Retina, 62 bytes

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

Las dos líneas cortas son la expresión regular para que coincida. Si la entrada es minúscula (en el rango [a-z]), reemplaza ese carácter (en este caso, es la entrada completa) con el alfabeto en minúscula. El proceso es similar para mayúsculas. Si no es una letra, no se realizan reemplazos y se emite sin tocar.

Pruébalo en línea.


4

Python 2.7.10, 95 93 79 bytes

Esta es la primera vez que intento jugar golf, así que, por favor, cualquier ayuda o consejo es muy apreciado.

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

¡Gracias a Morgan Thrapp por la ayuda!


1
@MorganThrapp, eso no parece funcionar. ¿Estás seguro de que funciona en Python 2.7.10?
Daniel

Funciona en 2.7.8. ¿Qué no funciona?
Morgan Thrapp

@MorganThrapp, en realidad, ¿podría explicar primero exactamente cómo funciona? Tal vez es solo que no entiendo, así que estoy haciendo algo mal.
Daniel

Claro, utiliza el hecho de que False == 0y True == 1para indexar en tuplas. Entonces, primero verifica si es una letra con isalpha, si es así, regresa 1y luego verifica si está en minúscula y hace lo mismo.
Morgan Thrapp

1
¡No hay problema! Me encanta el golf, ¡así que siempre estoy feliz de ayudar a alguien nuevo!
Morgan Thrapp

4

Ruby, 46 43 caracteres

(Código de 42 caracteres + opción de línea de comando de 1 carácter)

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

Gracias a:

  • Jordan para la ===magia (-3 personajes)

Ejecución de muestra:

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]*""}'
@

4

MATL , 22 bytes

jtt1Y2XIm~Iw?km?Ik]]1$

Esto usa la versión actual (3.1.0) del lenguaje.

EDITAR (15 de septiembre de 2017): ¡Pruébelo en MATL Online! (con una versión más nueva del idioma).

Ejemplos

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

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

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

Explicación

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

3

Java, 165 caracteres

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);}}}

Genera el resultado requerido para stdout (en lugar de devolverlo). La entrada es a través de los argumentos de tiempo de ejecución.

Cómo funciona.

1) Configure algunas variables enteras
c = el valor ASCII del primer carácter del primer parámetro de los argumentos de tiempo de ejecución.
d = c convertido a un valor ASCII en minúsculas (orándolo con 32)
b = cálculo para ver si d es una letra. Será <0 si una letra.
e = El carácter inicial para la salida. Si el valor ASCII en d es una letra (ver b), entonces se establece en 'A' (o 'a' agregando c AND 32 al valor ASCII 'A') de lo contrario, se establece en el valor original de c.
f = el número de caracteres a emitir. Si no es una letra (ver b), entonces se establece en 1 más, se establece en 26
2) Bucle de e a e + f que genera cada carácter en stdout.


2
¿Sabe que para la mayoría de los desafíos la solución se puede proporcionar como un programa completo o como una función? Dada la enorme cantidad de código repetitivo en Java, una función puede ser más corta.
manatwork

1
La aplicación de un par de pequeños trucos, sin cambiar la lógica, tengo esto: 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 bytes

Incluye +2 para -nE(en lugar del normal +1) para ser justo con la otra solución perl

Ejecute con la entrada en STDIN sin seguir la nueva línea:

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

Solo el código:

say/\pL/?a&$_|A..Z:$_

Buen uso del hecho de que la entrada está limitada a caracteres de 7 bits.
msh210

3

Lua, 98 97 bytes

Lamentablemente, no encontré una solución de menos de 26 bytes para establecer acon el alfabeto. De hecho, no encontré menos de 32.

Editar: guardar 1 Byte gracias a @ATaco, estaba haciendo mucho este error cuando comencé con Lua: p

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

Puede probarlo en línea en el sitio oficial o en ideone . Si usa el primero, la entrada no funcionará (deshabilitada), así que use la siguiente fuente, donde está envuelta en una función.

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"))

No eres el único que no encontró una forma más corta de generar el alfabeto en Lua. :(
manatwork

@manatwork jaja, exactamente lo mismo, excepto que no tuve que imprimirlo, sino concatenarlo ^^. Al menos, eso significa que no hay un truco oculto que no sabía hacer ^^ '.
Katenkyo

Puede guardar un byte con en c=io.read()a="abcdefghijklmnopqrstuvwyz"lugar de a, c = ...
ATaco

2

Mathematica, 75 bytes

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

Puntaje bastante bueno para un lenguaje que no es de golf ... Cualquier solución que use el procesamiento del código de caracteres tomaría más bytes, debido a los costos de ToCharacterCodey FromCharacterCode.


2

C (función), 71 bytes

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}

f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}Guarda un byte.
Kenney

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}para 62 bytes
gastropner

2

Python, 81 bytes

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

Esto es básicamente una traducción de la respuesta Pyth. Define una función fque toma como argumento el carácter y devuelve el resultado.


1
¿Quieres decir if z in kverdad? Además, f=es opcional por defecto.
xnor

@xnor Sí. Aparentemente me perdí un Ctrl-C.
PurkkaKoodari

2
Retire f=, realizar la función anónima. -2
Erik the Outgolfer

2

Jolf , 17 bytes

Pruébalo aquí.

? 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

2

MATLAB: 71 68 bytes

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

(gracias a OP por guardar 3 bytes)

Prueba:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Explicación: el alfabeto en mayúscula ocupa 65:90caracteres ASCII. El alfabeto en minúscula está en 97:122ASCII. Entonces, b=i<65|i>122|(i>90&i<97)verifica si el carácter de entrada iNO es alfabético. Si es así, se devuelve la entrada. El alfabeto en mayúscula se devuelve si b==1y i<97(carácter en mayúscula). Si b==1y i>96, 32 se agrega a 65:90eso corresponde a 97:122- el alfabeto en minúsculas.


Buena presentación. Dos comentarios: es común usarlo i=input('')si el envío es un script o como argumento de una función si es una función @(i)i^2. i='a'En general no se acepta. Además, puede guardar 3 bytes haciendo en [1,2,3,'']lugar de char([1,2,3]).
Stewie Griffin

Ok, editado. Gracias por la sugerencia!
brainkz

2

SpecBAS, 111 bytes

He pasado por varias versiones de esto, 111 parece ser lo mejor que puedo manejar.

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

La línea 2 usa el ?acceso directo para PRINTlas IFinstrucciones en línea anidadas

Explicación del pseudocódigo

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

Es difícil hacer que se ["a" TO "z","A" TO "Z"]parezca más a un pseudocódigo que ya. "a".."z","A".."Z"se parece más a un "código real", al menos a mis ojos ... Sin embargo, ambos son muy fáciles de entender =)
Stewie Griffin

2
Spec lo que ????
Bassdrop Cumberwubwubwub

2

Swift 2, 142 bytes

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}

Sin golf

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
}

2

05AB1E , 19 16 bytes

-3 bytes gracias a else

DAsåiAëDAusåiAuë

Cómo funciona

                   # 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

Pruébalo en línea!


No estoy seguro si ¹(la primera entrada) ya existía cuando publicaste tu respuesta, pero puedes jugar 2 bytes con ella: A¹åiAëAu¹åiAuë( Pruébalo en línea o prueba suite ).
Kevin Cruijssen

2

Java SE 8, 71 69 bytes

Golfizado:

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

Sin golf:

(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

Originalmente había implementado lo siguiente

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

Es más elegante pero lamentablemente es un byte más grande. Esto supone que el comportamiento de los caracteres no alfa no está definido y que la cadena s se inicializa a "" antes de la ejecución. Sé amable, es mi primer post.

editar: 2 bytes guardados por Stewie Griffin cambiando

a - 91 < 0 to a < 91

2
Bienvenido al sitio! :)
DJMcMayhem

1
¡Gracias! Estado acechando durante unos años ahora y realmente interesado en ver si puedo hacer competir Java / C ++ respuestas :)
JFH

1
a<91debería funcionar, o ...?
Stewie Griffin

2

Scala, 91 caracteres

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

Sin 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
}

Tener un resultado mutable inicial en lugar de devolver un valor inmutable de 3 bloques distintos, si no, me ahorró 2 caracteres, aunque lo odio.

Método escalatónico

Un mejor método para scala sería algo como esto:

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
    }
}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.