Inspirado por el Codewars Kata .
Su objetivo es tomar una cadena de entrada como esta:
"'Twas a dark and stormy night..."
y devuelve una cadena que contiene la posición de cada carácter en el alfabeto, separada por espacios e ignorando caracteres no alfabéticos, como este:
"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"
Para un desafío adicional, puede reemplazar cualquier carácter numérico en la cadena original con ellos mismos + 27. Por ejemplo, "25"
sería "29, 32"
. Esto es completamente opcional.
Debe utilizar 1-indexación ( 'a'==1
, 'b'==2
, etc.)
Reglas adicionales:
Debe devolver una cadena, no una matriz.
El espacio en blanco al final está bien.
El ganador tiene el conteo de bytes más bajo.
¡Buena suerte!
Respuestas:
05AB1E , (5?) 7 bytes
Los dos bytes más a la derecha tienen formato de salida
Un puerto de mi respuesta Jelly , pero O5AB1E es más conciso para el filtrado del alfabeto.
Pruébalo en línea!
¿Cómo?
fuente
ðý
se puede agregar un final . Pero desde la mitad de las listas de salida de respuestas, supongo que lo dejo por ahora.Java 8,
8278726962 bytes-13 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72bytes).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 bytes) usando achar[]
como entrada en lugar de aString
.Python 3 ,
626049 bytes-5 bytes gracias a Jo King .
-8 bytes gracias a pLOPeGG .
Después de estas mejoras, esta respuesta ahora es similar a la respuesta de Jonathan Allan .
Pruébalo en línea!
fuente
%32
que también funcionaR ,
5550 bytesPruébalo en línea!
Lee la entrada de stdin,
convierte a mayúsculas,elimina letras alfabéticas nomayúsculas, convierte a puntos de código,resta a 64mods por 32 e imprime a stdout, separados por espacios.¡Gracias a Kevin Cruijssen por el golf!
fuente
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 1413 bytes-4 bytes gracias a Zacharý (y al Sr. Xcoder)!
-6 bytes gracias a Adám!
-1 byte gracias a ngn!
Pruébalo en línea!
Explicación:
Mi solución inicial:
APL (Dyalog Unicode) ,
2420 bytesPruébalo en línea!
Explicación:
No te rías de mí, soy nuevo en APL :)
fuente
{1(819⌶)⍵}
puede ser1(819⌶)⊢
. De lo contrario, ¡trabajo increíble! ¡Espero que disfrutes de APL en el futuro!1
al819⌶
y guardar cinco quitando 27s directamente:27~⍨⎕A⍳819⌶⍨∘1
; o tome la intersección con el alfabeto:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 bytes
11 bytes agregados para formatear la salida, lo que también hace que esto sea incompatible con Python 3)
Otro puerto de mi respuesta Jelly.
Pruébalo en línea!
Versión sin formato (que devuelve una lista de enteros):
fuente
JavaScript (Node.js) ,
695554 bytesPruébalo en línea!
Explicación
11 bytes guardados gracias a @Kevin
1 bytes más gracias a @Neil
Puede agregar soporte para números para algunos bytes adicionales (gracias a @neil)
JavaScript (Node.js) , 62 bytes
Pruébalo en línea!
fuente
a-z
aA-Za-z
yi.toLowerCase().charCodeAt()-96
parai.charCodeAt()%32
parseInt(i,36)-9
guarda otro byte..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
te permite admitir números, aunque no estoy seguro si esa es la mejor manera.Jalea , (7?) 8 bytes
El byte más a la derecha es el formato de salida
Un programa completo que acepta una cadena en formato Python que imprime el resultado en STDOUT
Pruébalo en línea!
¿Cómo?
fuente
Japt v2.0a0
-S
,1210 bytesIntentalo
Explicación
fuente
código de operación x86, 35 bytes
Suponiendo que el resultado contenga al menos una letra, y no
{|}~
40 bytes, permitiendo todos los caracteres ASCII
fuente
Stax ,
9109 bytesEjecutar y depurarlo
-1 byte gracias a @recursive
Explicación:
Stax , 7 bytes
Ejecutar y depurarlo
Este da salida a nueva línea separada. Expandida:
vmVaI^|c
. Similar, pero con el mapa, que sale implícitamente con una nueva línea final.fuente
Espacio en blanco ,
152117 bytes-35 bytes gracias a @Lynn .
Se agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Explicación en pseudocódigo:
fuente
05AB1E , 8 bytes
Pruébalo en línea!
o, si podemos devolver una matriz:
05AB1E , 6 bytes
Explicación:
Pruébalo en línea!
o si quieres que cuente números:
05AB1E , 13 bytes
Pruébalo en línea!
fuente
05AB1E , 14 bytes
Maneja números también
Pruébalo en línea!
fuente
Carbón de leña , 21 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Agregue los dígitos a la variable minúscula predefinida.
Pase sobre la entrada en minúsculas.
Si el carácter actual es una letra o dígito,
imprime su índice indexado 1,
y deja un espacio para el siguiente valor.
fuente
Rojo , 93 bytes
Pruébalo en línea!
fuente
#"a"-#"z"
puede cambiar a letras mayúsculas y minúsculas; y luegolowercase
se puede quitar; y-96 + to-char c
puede ser modulo-32? Sin embargo, no estoy seguro de si eso incluso guarda bytes en rojo.parse
función @KevinCruijssen recolecta cadenas incluso cuando la coincidencia es un solo personaje, por eso siempre necesito elto-char
. Para las letras mayúsculas necesitaría agregar al juego de caracteres # "A" - # "Z", lo que arruina la ganancia (si la hay) de eliminarlowercase
.#"A"-#"Z"
que no ganara mucho en comparación conlowercase
, ya que es solo 1 byte más corto. Y sabía que necesitarías elto-char
, simplemente no estaba seguro de si el-96 +
módulo 32 sería similar en tamaño.Perl 5 , 47 bytes
Con el desafío adicional de analizar dígitos:
Pruébalo en línea!
Reducido a 38 bytes al ignorar dígitos
fuente
PHP , 70 bytes
Pruébalo en línea!
-5 bytes gracias a Kevin
fuente
&&
puede ser&
yord(strtolower($c))-96
puede serord($c)%32
. Además, creo que puedes eliminar el~
antes$c
, pero no estoy seguro. No he programado mucho en PHP, y realmente no sé para qué~
se usa aquí de todos modos.Perl 5
-p
, 35 bytesPruébalo en línea!
Incluye la porción extra sobre los dígitos.
fuente
/\w/
incluye_
-F/[^0-9\pL]|/
: ¡ Pruébelo en línea!Japt 2.0
-S
, 9 bytesEjecútalo en línea
Explicación:
fuente
Perl 6 , 32 bytes (alfa), 41 bytes (alfa + dígito)
Pruébalo (32 bytes alfa)
Pruébelo (41 bytes alfa + dígito)
Expandido:
32 bytes alfa
41 bytes alfa + dígito
fuente
Э
, pero he pedido una aclaración del OP sobre si la entrada es solo ASCII o no.Tcl , 93 bytes
Pruébalo en línea!
fuente
PHP
108105BytesPruébelo en línea (108 bytes)
Tri it en línea (105 Bytes)
-3 Bytes, gracias a @manassehkatz (Cambiar el nivel de strtolower y eliminar AZ de regex)
Código, trató de evitar cualquier bucle
Explicación
fuente
strtolower($argv)
y eliminar el capitalA-Z
de la expresión regular.$argv[1]
o en$argn
lugar de$argv
?join
es 3 bytes más corto queimplode
.Python 3 , 84 bytes
Pruébalo en línea!
fuente
Python 2,
110 bytes104 bytes , con entrada del usuarioPruébalo en línea!
Python 2,
105 bytes 104 bytes96 bytes , dondet
está predefinido:Pruébalo en línea!
Vamos a desglosarlo con una versión más legible:
Primero, definimos
alphabet
como ser, bueno, el alfabeto.A continuación, usamos la comprensión de listas para:
t
Finalmente, lo unimos todo y lo imprimimos.
Editar: cambiado a
print
(y pérdida de portabilidad) para guardar bytes y hacer que funcione fuera de una funciónEdición 2: se agregó una versión con
input()
variables predefinidas en lugar deEdición 3: Eliminado 8 bytes en las Soluciones 1 y 2 gracias a Jo King
fuente
+
), ¿dónde están los otros?if
,for
y" "
[]
en eljoin
PowerShell , 63 bytes
Pruébalo en línea!
(Parece largo ...)
Toma datos
$args
, los convierte en.ToUpper
mayúsculas y minúsculas , los convierte en unachar
matriz y los introduce en unfor each
bucle. Dentro del bucle, restamos por sí mismo o 64 desde el valor (int ASCII), en función de si o no el valor actual es-in
el rango65
de90
(es decir, se trata de una letra mayúscula ASCII). Esos valores se dejan en la tubería, y usamos-n
ote
qual para eliminar los valores que no son letras (porque todos son cero). Esos números están encapsulados en una cadena, ya que la cadena de caracteres predeterminada de una matriz es separarla en el espacio, por lo que lo obtenemos de manera bastante económica. Esa cadena se deja en la tubería y la salida es implícita.fuente
MS-SQL, 133 bytes
Según nuestras reglas de E / S , la entrada se toma a través de una tabla t preexistente con campos varchar s .
Se requiere SQL 2017 o posterior. También se debe ejecutar en la
master
base de datos, porque estoy aprovechando una tabla del sistema llamadaspt_values
, que (cuando se filtra portype='P'
) contiene números de conteo del 0 al 2047.Básicamente, estoy uniendo una tabla de números con la cadena de entrada usando
SUBSTRING()
, que devuelve una fila separada para cada carácter individual. Esto se filtra para usar solo letrasLIKE'[a-z]'
, luego obtenemos su valor ASCII y restamos 64. Estos números se unen nuevamente en una cadena usando la función (nuevo en SQL 2017)STRING_AGG
.fuente
Pyth , 10 bytes
Estoy bastante seguro de que esto se puede jugar un poco ... -2 bytes si puedo generar una lista, algunas respuestas parecen pero no están en la especificación
Pruébalo en línea!
fuente
d
(jdfTmhGr0
, 10 bytes).C (gcc) , 67 bytes
Pruébalo en línea!
Convierte cada carácter en minúsculas, compensa su código en -96 y, si cae en el rango del alfabeto indexado en 1, imprime el código de desplazamiento
fuente
jq , 45 bytes
Pruébalo en línea
fuente