El desafío es simple:
Escriba una función o programa que tome una entrada x
y genere el alfabeto en minúsculas si x
es parte del alfabeto en minúsculas, emite el alfabeto en mayúsculas si x
es parte del alfabeto en mayúsculas y emite solo x
si 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á
a
oA
. - 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 N
está 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
import Random
y luego usarlosRandom.randint
(obviamente no para este desafío pero aún así)?import string
se 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.Respuestas:
TeaScript , 5 bytes
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
Alternativa de 1 byte
Si pudiéramos generar
0123456789
dígitos, entonces esto podría ser:fuente
Pyth, 10 bytes
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.fuente
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.
fuente
Haskell, 48 bytes
Ejemplo de uso:
Tome todas las listas de ['a' .. 'z'], ['A' .. 'Z'] y la lista de singleton con la entrada char
c
dondec
es elemento de. Para las letras siempre tenemos dos coincidencias, así que elegimos la primera.fuente
JavaScript (ES6), 79 bytes
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.
Prueba
Mostrar fragmento de código
fuente
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
es muy inadecuado para jugar al golf, ¡pero a veces es la única forma!String.fromCharCode
y.toUpperCase
(Dumb and Dumber) perotoUpperCase
es el ganadorx=>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\w
trabajos para todo excepto_
. Su solución parece ser la más corta posible.ABC...abc...?
sin unfor
bucle real : (algo de relleno)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R,
9075 bytesGracias a Giuseppe .
Versión anterior (90 bytes):
Parece feo, pero esos
cat
s no se pueden subcontratar a funciones, en mi humilde opinión.fuente
scan
puede ser cualquier objeto de tipo carácter, por lo que puede enletters
lugar de''
.Python 3,
92848274 bytesVersión actual: 74, gracias a isaacg y wnnmaw!
Ungolfed: (para alguna definición de ungolfed
Primera versión: 92
Segunda versión: 82, gracias a Isaac! :)
fuente
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 delfor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
. ¡Gracias!"
a la función, necesita en su\"
lugar.Python 3,
118105989783 bytesSolución simple. EDITAR: Golfed gracias a la sugerencia de Erik the Golfer.
Sin golf:
fuente
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682bytesPHP está bien ahora:
Toma una entrada de la línea de comando, como:
Ediciones
91>ord($x)
conZ<$x
. Pensamiento demasiado complicado. Gracias a manatwork .strtoupper
y construyendo el rango exigido directamente.fuente
ord()
ve mal allí. TratarZ<$x?$a:strtoupper($a)
.' '&$x^A
hacer 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;
Perl,
463433 bytesincluye +2 para
-nE
Correr como
for
y usar palabras vacías, gracias a @Dom Hastings .-E
y ensay
lugar deprint
.fuente
for
: - /. Intenté un montón de enfoques, (-p
con$"='';$_="@_"
, incluso,$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
pero todo es más largo ...$_=
lugar deprint
usar y usar la-p
bandera en su lugar-n
, puede guardar otros dos ... Todavía no puedo pensar en otras formas de ahorrar más hasta ahora ...$_
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 ajoin'',
), lo que lo hace más largo. ¡No hay mucho margen de maniobra en este caso!say
lugar deprint
!Rubí, 41 + 1 = 42
Con el interruptor
-p
, correEsto genera la cadena
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
-p
bandera hace esencialmente[*?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
.scan
encontrará 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í
fuente
CJam, 18 bytes
'[,65>
empuja el alfabeto en mayúsculas,_el
el alfabeto en minúsculas yr:R
una cadena de un solo carácter que se lee desde STDIN y se asigna a la variableR
. Estos están envueltos en una matriz (]
) y el primero que tiene caracteres en comúnR
se selecciona usando{R&}=
.fuente
_el
el alfabeto en minúsculas?el
significa "convertir a minúsculas". Acabo de presionar el alfabeto en mayúscula, así que ahora lo duplico con_
, luego invocoel
la copia resultante.Retina, 62 bytes
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.
fuente
Python 2.7.10,
959379 bytesEsta es la primera vez que intento jugar golf, así que, por favor, cualquier ayuda o consejo es muy apreciado.
¡Gracias a Morgan Thrapp por la ayuda!
fuente
False == 0
yTrue == 1
para indexar en tuplas. Entonces, primero verifica si es una letra conisalpha
, si es así, regresa1
y luego verifica si está en minúscula y hace lo mismo.Ruby,
4643 caracteres(Código de 42 caracteres + opción de línea de comando de 1 carácter)
Gracias a:
===
magia (-3 personajes)Ejecución de muestra:
fuente
MATL , 22 bytes
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
Explicación
fuente
Java, 165 caracteres
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.
fuente
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 bytes
Incluye +2 para
-nE
(en lugar del normal +1) para ser justo con la otra solución perlEjecute con la entrada en STDIN sin seguir la nueva línea:
Solo el código:
fuente
Lua,
9897 bytesLamentablemente, no encontré una solución de menos de 26 bytes para establecer
a
con 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
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.
fuente
c=io.read()a="abcdefghijklmnopqrstuvwyz"
lugar de a, c = ...Mathematica, 75 bytes
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
ToCharacterCode
yFromCharacterCode
.fuente
C (función), 71 bytes
fuente
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.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
para 62 bytesPython, 81 bytes
Esto es básicamente una traducción de la respuesta Pyth. Define una función
f
que toma como argumento el carácter y devuelve el resultado.fuente
if z in k
verdad? Además,f=
es opcional por defecto.f=
, realizar la función anónima. -2Jolf , 17 bytes
Pruébalo aquí.
fuente
MATLAB:
7168 bytes(gracias a OP por guardar 3 bytes)
Prueba:
Explicación: el alfabeto en mayúscula ocupa
65:90
caracteres ASCII. El alfabeto en minúscula está en97:122
ASCII. Entonces,b=i<65|i>122|(i>90&i<97)
verifica si el carácter de entradai
NO es alfabético. Si es así, se devuelve la entrada. El alfabeto en mayúscula se devuelve sib==1
yi<97
(carácter en mayúscula). Sib==1
yi>96
, 32 se agrega a65:90
eso corresponde a97:122
- el alfabeto en minúsculas.fuente
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 dechar([1,2,3])
.SpecBAS, 111 bytes
He pasado por varias versiones de esto, 111 parece ser lo mejor que puedo manejar.
La línea 2 usa el
?
acceso directo paraPRINT
lasIF
instrucciones en línea anidadasExplicación del pseudocódigo
fuente
["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 =)Swift 2, 142 bytes
Sin golf
fuente
05AB1E ,
1916 bytes-3 bytes gracias a
else
Cómo funciona
Pruébalo en línea!
fuente
¹
(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 ).Java SE 8,
7169 bytesGolfizado:
Sin golf:
Originalmente había implementado lo siguiente
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
fuente
a<91
debería funcionar, o ...?Scala, 91 caracteres
Sin golf
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:
fuente
Japt, 9 bytes
Ejecútalo en línea
fuente