Alphabet Position Finder

10

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!

La o.c
fuente
55
@TheoC ¿Por qué? El consenso general es que las respuestas deberían poder emitirse en cualquier formato razonable, ya que puede agregar demasiada hinchazón y hacer que sea injusto para los idiomas que pueden unirse por espacios de una manera más corta.
Okx
1
@TheoC ¿Por qué no permites ambos?
Okx
3
Bienvenido a PPCG! Este es un desafío decente en general, pero para la próxima vez que publique un desafío, aquí hay algunas cosas a tener en cuenta. 1) Este desafío es bastante simple. Creo que sería más interesante si la parte opcional fuera obligatoria (nota, no cambies esa parte ahora, es demasiado tarde). 2) Eres bastante restrictivo sobre algunas partes arbitrarias. ¿Por qué no permitir una matriz? Es nuestro estándar que una serie de caracteres es una cadena . Recomendaría leer este hilo para obtener ideas.
James
2
Notas futuras: la indexación 1 y 0 suele ser la misma y ambas están permitidas. Además, restringir los formatos de salida está mal visto. Si es una lista de valores, deje que el idioma decida el formato. El desafío no se trata de formatear la salida ni de cambiar índices. Por lo tanto, no debería ser una restricción cuando se podría permitir que los idiomas hagan lo que harían de forma natural y centrarse en la intención del desafío.
Urna de pulpo mágico

Respuestas:

5

05AB1E , (5?) 7 bytes

Los dos bytes más a la derecha tienen formato de salida

áÇ32%ðý

Un puerto de mi respuesta Jelly , pero O5AB1E es más conciso para el filtrado del alfabeto.

Pruébalo en línea!

¿Cómo?

áÇ32%ðý - take input implicitly
á       - filter keep alphabetical characters
 Ç      - to ordinals
  32    - thirty-two
    %   - modulo (vectorises)
     ð  - push a space character
      ý - join
Jonathan Allan
fuente
Dado que OP quiere que se imprima dividido por espacios, ðýse puede agregar un final . Pero desde la mitad de las listas de salida de respuestas, supongo que lo dejo por ahora.
Kevin Cruijssen
Ah Lo he extrañado en mis respuestas ...
Jonathan Allan
5

Java 8, 82 78 72 69 62 bytes

s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}

-13 bytes gracias a @ OlivierGrégoire .

Pruébalo en línea.

Explicación:

s->                    // Method with character-array parameter and no return-type
  for(int c:s)         //  Loop over its characters as integers
    System.out.print(  //   Print:
     c>64&~-c%32<26?   //    If the current character is a letter:
      c%32+" "         //     Print the position in the alphabet with a trailing space
     :                 //    Else:
      "");}            //     Print nothing
Kevin Cruijssen
fuente
1
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})(72bytes).
Olivier Grégoire
1
@ OlivierGrégoire Gracias! Y -3 bytes más cambiándolo a un ternario if. :)
Kevin Cruijssen
s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}(62 bytes) usando a char[]como entrada en lugar de a String.
Olivier Grégoire
4

R , 55 50 bytes

cat(utf8ToInt(gsub("[^A-Za-z]","",scan(,"")))%%32)

Pruébalo en línea!

Lee la entrada de stdin, convierte a mayúsculas, elimina letras alfabéticas no mayúsculas , convierte a puntos de código, resta a 64 mods por 32 e imprime a stdout, separados por espacios.

¡Gracias a Kevin Cruijssen por el golf!

Giuseppe
fuente
50 bytes
Kevin Cruijssen
@KevinCruijssen * facepalm * duh
Giuseppe
He agregado dos comentarios (preguntas) a la pregunta: dependiendo de la respuesta, existe la oportunidad de reducir esto a 46 o incluso 39 caracteres.
JayCe
1
Usted puede hacer mediante el uso de 47[^A-z]
MickyT
4

APL (Dyalog Unicode) , 24, 20, 14 13 bytes

-4 bytes gracias a Zacharý (y al Sr. Xcoder)!

-6 bytes gracias a Adám!

-1 byte gracias a ngn!

A⍳⎕A∩⍨≡819⌶⊢

Pruébalo en línea!

Explicación:

        819⌶⊢  - to uppercase
   A∩⍨         - intersect with the letters A-Z (args swapped to preserve the order)
                 - index in
A               - the A-Z letters list

Mi solución inicial:

APL (Dyalog Unicode) , 24 20 bytes

{⍵/⍨27>⍵}⎕A1(819⌶)⊢

Pruébalo en línea!

Explicación:

                        indices of     
              1(819⌶)⊢  the right argument (⊢) changed to uppercase
          A            in the list of uppercase letters
{⍵/⍨     }              copy (filter) those items from the list of indeces
     27>⍵               which are smaller than 27 (all non A-Z chars will have index 27)

No te rías de mí, soy nuevo en APL :)

Galen Ivanov
fuente
1
¡Eso es realmente bueno para alguien nuevo en APL! No necesitas los paréntesis, se supone. Además, {1(819⌶)⍵}puede ser 1(819⌶)⊢. De lo contrario, ¡trabajo increíble! ¡Espero que disfrutes de APL en el futuro!
Zacharý
@ Zacharý Gracias! Espero que sí (tengo algo de conocimiento en J, no soy totalmente nuevo en los idiomas de la matriz)
Galen Ivanov
1
Como señaló Zachary, se asumen los paréntesis , por lo que no es necesario incluirlos en el recuento de bytes, lo que resulta en 20 bytes.
Sr. Xcoder
1
@ Jonás agregué una explicación. Tienes razón, capitalizando y el alfabeto en sí cuesta mucho más en J.
Galen Ivanov
1
¡Buen trabajo! Puede guardar un byte mediante la composición de la 1al 819⌶y guardar cinco quitando 27s directamente: 27~⍨⎕A⍳819⌶⍨∘1; o tome la intersección con el alfabeto:⎕A⍳⎕A∩⍨819⌶⍨∘1
Adám
3

Python 2 , (45?) 55 bytes

11 bytes agregados para formatear la salida, lo que también hace que esto sea incompatible con Python 3)

lambda s:' '.join(`ord(c)%32`for c in s if c.isalpha())

Otro puerto de mi respuesta Jelly.

Pruébalo en línea!


Versión sin formato (que devuelve una lista de enteros):

lambda s:[ord(c)%32for c in s if c.isalpha()]
Jonathan Allan
fuente
1
Parece que OP insiste en la salida de cadena separada por espacios, desafortunadamente
Sok
1
Sí, lo perdí en todas mis respuestas, ¡uno se acostumbra tanto a las normas del sitio!
Jonathan Allan
3

JavaScript (Node.js) , 69 55 54 bytes

t=>t.match(/[a-z]/gi).map(i=>parseInt(i,36)-9).join` `

Pruébalo en línea!

Explicación

t =>                       // lambda function accepting a string as input
    t.match(/a-z/gi).      // returns all parts of string that match as an array 
        map(i=>            // map over that array with argument i 
            parseInt(i,36) // convert to base 36 
                - 9        // and subtract 9 from it
        ).                 // end map
        join` `            // convert to space separated string

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

t=>t.match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1).join` `

Pruébalo en línea!

Muhammad Salman
fuente
-11 bytes cambiando a-za A-Za-zy i.toLowerCase().charCodeAt()-96parai.charCodeAt()%32
Kevin Cruijssen
1
parseInt(i,36)-9guarda otro byte.
Neil
.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.
Neil
2

Jalea , (7?) 8 bytes

El byte más a la derecha es el formato de salida

fØẠO%32K

Un programa completo que acepta una cadena en formato Python que imprime el resultado en STDOUT

Pruébalo en línea!

¿Cómo?

fØẠO%32K - Main Link: list of characters (created from the string input)
 ØẠ      - yield the alphabet = ['A','B',...,'Z','a','b',...,'z']
f        - filter keep (discard non alphabet characters)
   O     - ordinals          ('A':65, 'Z':90, 'a':97, 'z':122, etc.)
     32  - literal thirty-two
    %    - modulo            (65:1,   90':26,  97:1,  122:26,  etc.)
       K - join with spaces (makes a list of characters and integers)
         - implicit print
Jonathan Allan
fuente
2

Japt v2.0a0 -S, 12 10 bytes

r\L ¨c uH

Intentalo


Explicación

r              :Remove
 \L            :  Non-letter characters
    ¬          :Split to array
     ®         :Map
      c        :  Character code
        u      :  Modulo
         H     :  32
               :Implicitly join with spaces and output
Lanudo
fuente
2

código de operación x86, 35 bytes

0080h: AC 3C 24 75 04 88 45 FF C3 0C 20 2C 60 76 F1 D4
0090h: 0A 0D 30 30 86 E0 3C 30 74 01 AA 86 E0 AA B0 20
00a0h: AA EB DD                                       

f:  lodsb
    cmp al, '$'
    jnz @f
        mov [di-1], al
        ret
    @@:
    or al, 32
    sub al, 96
    jbe f
    aam
    or ax, 3030H
    xchg ah, al
    cmp al, 48
    jz @f
        stosb
    @@:
    xchg ah, al
    stosb
    mov al, 32
    stosb
    jmp f

Suponiendo que el resultado contenga al menos una letra, y no {|}~

40 bytes, permitiendo todos los caracteres ASCII

0080h: AC 3C 24 75 04 88 45 FF C3 0C 20 2C 60 76 F1 3C
0090h: 1A 77 ED D4 0A 0D 30 30 86 E0 3C 30 74 01 AA 86
00a0h: E0 AA B0 20 AA EB D9                           
l4m2
fuente
¿Qué es "x86 opcode"? ¿Es solo un envío de código de máquina x86?
Jakob
@Jakob cierto. Aquí no digo ".COM" porque es una función y no
confío en el
Hmm Sí, creo que se supone que las soluciones de código de máquina no tienen que ser ejecutables completos. Podría ser mejor simplemente etiquetarlo como "código de máquina x86"
Jakob
2

Stax , 9 10 9 bytes

üpÉÿ%}},√

Ejecutar y depurarlo

-1 byte gracias a @recursive

Explicación:

v{VaIvm0-J Full program, unpacked, implicit input
v          Lowercase
 {    m    Map:
  VaI        Index in lowercase alphabet (0-based, -1 for not found)
     ^       Increment
       0-  Remove zeroes
         J Join by space
           Implicit output

Stax , 7 bytes

É▌Xl»↔"

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.

wastl
fuente
Hm. Parece que hay un problema al empacar los programas que terminan en el espacio
recursivo el
@recursive Oh, no me di cuenta de eso (generalmente pruebo los enlaces, pero aparentemente lo olvidé aquí). Agregué una solución alternativa.
wastl
Nunca noté este error tampoco. Lo arreglaré en la próxima versión de Stax. Los programas empaquetados existentes permanecerán sin cambios.
recursivo el
Aquí hay un 9 para tu problema.
recursivo el
2

Espacio en blanco , 152 117 bytes

-35 bytes gracias a @Lynn .

[N
S S N
_Create_Label_LOOP][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve][S N
S _Duplicate_input][S S S T S S S S S N
_Push_32][T S T T   _Modulo][S N
T   _Swap_top_two][S S S T  T   T   T   T   T   N
_Push_63][T S T S _Integer_divide][T    S S N
_Multiply][S N
S _Duplicate][S S S T   T   S T T   N
_Push_27][S T   S S T   N
_Copy_1st][S S S T  N
_Push_1][T  S S S _Add][T   S T S _Integer_divide][T    S S N
_Mulitply][N
T   S N
_If_0_Jump_to_Label_LOOP][T N
S T _Print_as_number][S S S T   S S S S S N
_Push_32_space][T   N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

Se agregaron letras S(espacio), T(tabulación) y N(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:

Start LOOP:
  Character c = STDIN as character
  Integer n = (c modulo-32) * (c integer-divided by 63)
  Integer m = 27 integer-divided by (n + 1) * n;
  If(m == 0):
    Go to next iteration of LOOP
  Else:
    Print n as integer to STDOUT
    Print a space to STDOUT
    Go to next iteration of LOOP
Kevin Cruijssen
fuente
1
No tengo tiempo para escribirlo en Whitespace, pero tal vez podrías escribir algo como esto
Lynn
1
¡Parece que son 117 bytes ! (* Cambié 64 a 63 en el código, ya que es equivalente pero más corto para representar en espacios en blanco) :)
Lynn
@ Lynn No está mal, -35 bytes allí mismo. Gracias. :)
Kevin Cruijssen
1

Carbón de leña , 21 bytes

≔⁺β⭆χιβF↧S¿№βι«I⊕⌕βι→

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.

F↧S

Pase sobre la entrada en minúsculas.

¿№βι«

Si el carácter actual es una letra o dígito,

I⊕⌕βι

imprime su índice indexado 1,

y deja un espacio para el siguiente valor.

Neil
fuente
1

Rojo , 93 bytes

func[s][a: charset[#"a"-#"z"]parse lowercase s[any[copy c a(prin[-96 + to-char c""])| skip]]]

Pruébalo en línea!

Galen Ivanov
fuente
No sé lo suficiente sobre Rojo, pero se #"a"-#"z"puede cambiar a letras mayúsculas y minúsculas; y luego lowercasese puede quitar; y -96 + to-char cpuede ser modulo-32? Sin embargo, no estoy seguro de si eso incluso guarda bytes en rojo.
Kevin Cruijssen
@Kevin Cruijssen Gracias, lo intentaré más tarde
Galen Ivanov
La parsefunción @KevinCruijssen recolecta cadenas incluso cuando la coincidencia es un solo personaje, por eso siempre necesito el to-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 .
Galen Ivanov
Sí, tenía un poco de miedo #"A"-#"Z" que no ganara mucho en comparación con lowercase, ya que es solo 1 byte más corto. Y sabía que necesitarías el to-char, simplemente no estaba seguro de si el -96 + módulo 32 sería similar en tamaño.
Kevin Cruijssen
1

Perl 5 , 47 bytes

Con el desafío adicional de analizar dígitos:

print map{(ord(uc)-64)%43," "}<>=~/([A-Z\d])/gi

Pruébalo en línea!

Reducido a 38 bytes al ignorar dígitos

print map{ord()%32," "}<>=~/([A-Z])/gi
fockjef
fuente
1

PHP , 70 bytes

for(;$c=$argv[1][$i++];)if(($c=ord($c))>64&($c%=32)>0&$c<27)echo"$c ";

Pruébalo en línea!

-5 bytes gracias a Kevin

user2803033
fuente
Los fragmentos no están permitidos como presentaciones aquí, pero puede convertirlo en una función o un programa completo.
Nissa
Lo sentimos, ahora usa el primer argumento como entrada
usuario2803033
Hola, bienvenido a PPCG! Si aún no lo ha hecho, los consejos para jugar golf en PHP y los consejos para jugar golf en <todos los idiomas> pueden ser interesantes de leer. En cuanto a las partes, puede jugar al golf: &&puede ser &y ord(strtolower($c))-96puede ser ord($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.
Kevin Cruijssen
Gracias por tu contribución. Mod 32 es una buena idea. Ahorra algunos bytes pero requiere una verificación adicional para asegurarse de que ord ($ c) sea mayor que 64.
user2803033
1

Perl 5 -p , 35 bytes

$_="@{[map{(-64+ord uc)%43}/\w/g]}"

Pruébalo en línea!

Incluye la porción extra sobre los dígitos.

Xcali
fuente
1
/\w/ incluye _
Brad Gilbert b2gills
¡Mucho más pequeño de lo que había estado jugando! Puede guardar un byte y corregir el error @ BradGilbertb2gills mencionado, usando -F/[^0-9\pL]|/: ¡ Pruébelo en línea!
Dom Hastings
1

Japt 2.0 -S, 9 bytes

f\l ®c %H

Ejecútalo en línea

Explicación:

f\l ®c %H                                    Input: "Hello..."
f            Match:
 \l             [A-Za-z]                     ["H","e","l","l","o"]
    ®        Map Z over the results:
     c         char-code of Z                [72,101,108,108,111]
       %H      mod 32                        [8,5,12,12,15]
-S           Join the chars with a space     8 5 12 12 15
Oliver
fuente
1

Perl 6 , 32 bytes (alfa), 41 bytes (alfa + dígito)

{~(.uc.comb(/<:L>/)».ord X-64)}

Pruébalo (32 bytes alfa)

{~((.uc.comb(/<:L+:N>/)».ord X-64)X%43)}

Pruébelo (41 bytes alfa + dígito)

Expandido:

32 bytes alfa

{  # bare block lambda with implicit parameter $_

  ~( # coerce to string (space separated)

      .uc                      # uppercase
      .comb( / <:L > / )\      # get letters as a sequence
      ».ord                    # get the ordinal of each
      X- 64                    # subtract 64 from each
  )
}

41 bytes alfa + dígito

{  # bare block lambda with implicit parameter $_

  ~( # coerce to string (space separated)
    (
      .uc                      # uppercase
      .comb( / <:L + :N > / )\ # get letters and numbers as a sequence
      ».ord                    # get the ordinal of each
      X- 64                    # subtract 64 from each
    ) X% 43                    # modulus 43 for each
  )
}
Brad Gilbert b2gills
fuente
Esto también coincide con caracteres que no son ASCII Э, pero he pedido una aclaración del OP sobre si la entrada es solo ASCII o no.
Jo King
1

Tcl , 93 bytes

puts [lmap c [split $argv ""] {if [string is alp $c] {expr ([scan $c %c]-64)%32} {continue}}]

Pruébalo en línea!

sergiol
fuente
1

PHP 108105 Bytes

Prué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

<?=strtr(implode(" ",str_split(preg_replace(
"/[^a-z]/",'',strtolower($argv)))),array_flip(range("`",z)));

Explicación

$string = preg_replace("/[^a-z]/",'',strtolower($argv))  
//the string only contains letters

$string = implode(" ",str_split($string)); 
//the string has a space after every letter

$string = strtr($string, array_flip(range("`",z)));  
//replace every letter   acording to the array

$replacementArray = array_flip(range("`",z));
//this array contains the ansi characters from "`" to the "z"
//array_flip to change the keys with the values
//final array ["`"=>0,"a"=>1, "b"=>2...."z"=>26]
Francisco Hahn
fuente
Para que esto se ejecute sin advertencias, tuve que (a) cambiar $ argv a $ argv [1] y (b) agregar "alrededor de la última z. Pero con o sin esos cambios (que pueden depender de la versión - I estoy usando 5.6), puede guardar 3 bytes moviendo strtolower () en un nivel strtolower($argv)y eliminar el capital A-Zde la expresión regular.
manassehkatz-Moving 2 Codidact
En php 7 aparece una advertencia, voy a modificar la respuesta ahora. Lo siento, pero no tuve tiempo de comprobar :-D
Francisco Hahn
1
@manassehkatz Tomó su sugerencia y guardó 3 Bytes, muchas gracias.
Francisco Hahn
¿No debería ser eso $argv[1]o en $argnlugar de $argv? joines 3 bytes más corto que implode.
Titus
0

Python 2, 110 bytes 104 bytes , con entrada del usuario

a="abcdefghijklmnopqrstuvwxyz";print" ".join(str(a.index(l)+1)for l in list(input().lower())if l in a)

Pruébalo en línea!


Python 2, 105 bytes 104 bytes 96 bytes , donde testá predefinido:

a="abcdefghijklmnopqrstuvwxyz";print" ".join(str(a.index(l)+1)for l in list(t.lower())if l in a)

Pruébalo en línea!

Vamos a desglosarlo con una versión más legible:

alphabet = "abcdefghijklmnopqrstuvwxyz"
foo = [str(alphabet.index(letter) + 1) for letter in list(t.lower()) if letter in alphabet]
print " ".join(foo)

Primero, definimos alphabetcomo ser, bueno, el alfabeto.

A continuación, usamos la comprensión de listas para:

  1. Haga una lista donde cada elemento es un carácter en minúscula de t
  2. Para cada letra, si no está en el alfabeto, deséchela.
  3. Si es así, encuentre su índice en el alfabeto,
  4. agregue uno (porque comenzamos a contar en 1)
  5. y hazlo una cuerda.

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ón

Edición 2: se agregó una versión con input()variables predefinidas en lugar de

Edición 3: Eliminado 8 bytes en las Soluciones 1 y 2 gracias a Jo King

Theo C
fuente
Tienes 6 espacios extraños en tu código
Jo King
@JoKing Encontré tres (después del punto y coma, alrededor +), ¿dónde están los otros?
Theo C
Antes if, fory" "
Jo King
También puede eliminar el []en eljoin
Jo King
De nuevo, ¡bienvenido a PPCG! Para su información por defecto (es decir, si no se anula explícitamente en la pregunta), los envíos de respuestas pueden ser funciones o programas completos (como su versión de 104 bytes) pero no fragmentos (como su versión de 96 bytes). Aquí puede enviar una versión que cree una función que devuelva la cadena de 100 bytes :)
Jonathan Allan
0

PowerShell , 63 bytes

"$(([char[]]"$args".ToUpper()|%{$_-($_,64)[$_-in65..90]})-ne0)"

Pruébalo en línea!

(Parece largo ...)

Toma datos $args, los convierte en .ToUppermayúsculas y minúsculas , los convierte en una charmatriz y los introduce en un for eachbucle. 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 -inel rango 65de 90(es decir, se trata de una letra mayúscula ASCII). Esos valores se dejan en la tubería, y usamos -not equal 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.

AdmBorkBork
fuente
0

MS-SQL, 133 bytes

SELECT STRING_AGG(ASCII(substring(upper(s),number+1,1))-64,' ')FROM
spt_values,t WHERE type='P'AND substring(s,number+1,1)LIKE'[a-z]'

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 masterbase de datos, porque estoy aprovechando una tabla del sistema llamada spt_values, que (cuando se filtra por type='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 letras LIKE'[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.

BradC
fuente
0

Pyth , 10 bytes

jdfTmhxGr0

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!

Dave
fuente
Puede eliminar el último d( jdfTmhGr0, 10 bytes).
Sr. Xcoder
0

C (gcc) , 67 bytes

c;f(char*s){for(;*s;)(c=tolower(*s++)-96)>0&c<27&&printf("%d ",c);}

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

vazt
fuente
0

jq , 45 bytes

[gsub("\\W";"")|explode[]%32|@text]|join(" ")

 gsub("\\W";"")                                # remove non-alpha characters
               |explode[]                      # get decimal values of characters
                         %32                   # get positions in alphabet
                            |@text             # convert back to string
[                                 ]|join(" ")  # join with a space

Pruébalo en línea

Naïm Favier
fuente