Wyszukiwarka pozycji alfabetu

10

Zainspirowany Kata Codewars .

Twoim celem jest pobranie ciągu wejściowego takiego jak ten:

"'Twas a dark and stormy night..."

i zwraca ciąg zawierający pozycję każdego znaku w alfabecie, oddzielony spacjami i ignorujący znaki niealfabetyczne, takie jak to:

"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"

Za dodatkową wyzwanie, można zastąpić żadnych znaków numerycznych w oryginalnym ciąg ze sobą + 27. Na przykład, "25"byłoby stać "29, 32". Jest to całkowicie opcjonalne.

Należy użyć 1-(indeksowanie 'a'==1, 'b'==2itp)

Dodatkowe zasady:

  • Musisz zwrócić ciąg, a nie tablicę.

  • Końcowe białe znaki są OK.

Zwycięzca ma najniższą liczbę bajtów.

Powodzenia!

Theo C.
źródło
5
@TheoC Dlaczego? Ogólny konsensus jest taki, że odpowiedzi powinny być w stanie generować w dowolnym rozsądnym formacie, ponieważ może to powodować nadmierne wzdęcia i powodować, że niesprawiedliwe będą języki, które mogą dołączać się spacjami w krótszy sposób.
Okx,
1
@TheoC Dlaczego po prostu nie pozwalasz na jedno i drugie?
Okx,
3
Witamy w PPCG! Jest to ogólnie przyzwoite wyzwanie, ale przy następnym opublikowaniu wyzwania należy pamiętać o kilku kwestiach. 1) To wyzwanie jest dość proste. Myślę, że byłoby ciekawiej, gdyby część opcjonalna była obowiązkowa (uwaga, nie zmieniaj tej części teraz, jest już za późno). 2) Jesteś dość restrykcyjny wobec niektórych dowolnych części. Dlaczego nie zezwolić na tablicę? To nasze standardy, a tablica znaków to ciąg . Polecam przeczytanie tego wątku w celu uzyskania pomysłów.
James
2
Przyszłe uwagi: indeksowanie 1 i 0 są zwykle takie same i oba są zwykle dozwolone. Ograniczone są również formaty wyjściowe. Jeśli jest to lista wartości, niech język decyduje o formacie. Wyzwanie nie dotyczy formatowania danych wyjściowych ani zmiany indeksów. Dlatego nie powinno być ograniczeniem, kiedy możesz pozwolić, aby języki robiły to, co robiłyby naturalnie i koncentrowały się na zamierzeniu wyzwania.
Magic Octopus Urn

Odpowiedzi:

5

05AB1E , (5?) 7 bajtów

Prawie dwa bajty to formatowanie wyjściowe

áÇ32%ðý

Port mojej odpowiedzi Jelly , ale O5AB1E jest bardziej zwięzły do ​​filtrowania alfabetycznego.

Wypróbuj online!

W jaki sposób?

áÇ32%ðý - take input implicitly
á       - filter keep alphabetical characters
 Ç      - to ordinals
  32    - thirty-two
    %   - modulo (vectorises)
     ð  - push a space character
      ý - join
Jonathan Allan
źródło
Ponieważ OP chce, aby był drukowany w podziale na spacje, ðýmożna dodać końcowe . Ale skoro połowa listy wyjściowej odpowiedzi wydaje się po prostu zostawić na razie.
Kevin Cruijssen
Ach Brakowało mi tego w moich odpowiedziach ...
Jonathan Allan
5

Java 8, 82 78 72 69 62 bajtów

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

-13 bajtów dzięki @ OlivierGrégoire .

Wypróbuj online.

Wyjaśnienie:

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
źródło
1
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})(72 bajty).
Olivier Grégoire
1
@ OlivierGrégoire Thanks! I -3 więcej bajtów, zmieniając go na trójskładnikowy if. :)
Kevin Cruijssen
s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}(62 bajty) przy użyciu char[]jako wejścia zamiast a String.
Olivier Grégoire
4

R , 55 50 bajtów

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

Wypróbuj online!

Odczytuje dane wejściowe ze standardowego wejścia, konwertuje na wielkie litery, usuwa litery nie zawierające wielkich liter, konwertuje na punkty kodowe, odejmuje do 64 modów o 32 i drukuje na standardowe, oddzielone spacjami.

Dzięki Kevin Cruijssen za golfa!

Giuseppe
źródło
50 bajtów
Kevin Cruijssen
@KevinCruijssen * facepalm * duh
Giuseppe
Do pytania dodałem dwa komentarze (pytania) - w zależności od odpowiedzi istnieje możliwość gry w golfa do 46 lub nawet 39 znaków.
JayCe
1
Możesz zrobić 47 za pomocą[^A-z]
MickyT
4

APL (Dyalog Unicode) , 24, 20, 14 13 bajtów

-4 bajty dzięki Zacharý (i Mr. Xcoder)!

-6 bajtów dzięki Adámowi!

-1 bajt dzięki ngn!

A⍳⎕A∩⍨≡819⌶⊢

Wypróbuj online!

Wyjaśnienie:

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

Moje wstępne rozwiązanie:

APL (Dyalog Unicode) , 24 20 bajtów

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

Wypróbuj online!

Wyjaśnienie:

                        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)

Nie śmiej się ze mnie, jestem nowy w APL :)

Galen Iwanow
źródło
1
To naprawdę wyjątkowo dobre dla kogoś nowego w APL! Zakłada się, że nie potrzebujesz nawiasów. Ponadto, {1(819⌶)⍵}może być 1(819⌶)⊢. W przeciwnym razie niesamowita robota! Mam nadzieję, że spodoba ci się APL w przyszłości!
Zacharý
@ Zacharý Thanks! Mam taką nadzieję (mam trochę wiedzy na temat języka J, nie jestem zupełnie nowy w językach tablicowych)
Galen Iwanow
1
Jak zauważył Zachary, nawiasy są zakładane , więc nie trzeba ich włączać do liczby bajtów, co daje 20 bajtów.
Pan Xcoder,
1
@Jonah Dodałem wyjaśnienie. Masz rację, wielkie litery i sam alfabet kosztują znacznie więcej w J.
Galen Iwanow
1
Dobra robota! Można zapisać bajt Dzięki skomponowaniu 1do 819⌶zaoszczędzisz pięciu usuwając 27s bezpośrednio: 27~⍨⎕A⍳819⌶⍨∘1; lub skrzyżuj z alfabetem:⎕A⍳⎕A∩⍨819⌶⍨∘1
Adám
3

Python 2 , (45?) 55 bajtów

Dodano 11 bajtów w celu sformatowania danych wyjściowych, co powoduje, że jest to również niezgodne z Python 3)

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

Kolejny port mojej odpowiedzi na żelki.

Wypróbuj online!


Wersja niesformatowana (zwracająca listę liczb całkowitych):

lambda s:[ord(c)%32for c in s if c.isalpha()]
Jonathan Allan
źródło
1
Wygląda na to, że OP nalega na ciąg znaków oddzielony spacjami, niestety
Sok
1
Tak - tęskniłem za wszystkimi moimi odpowiedziami - człowiek przyzwyczaja się do norm obowiązujących na stronie!
Jonathan Allan
3

JavaScript (Node.js) , 69 55 54 bajtów

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

Wypróbuj online!

Objaśnienie:

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 bajtów zapisanych dzięki @Kevin

Jeszcze 1 bajt dzięki @Neil


Możesz dodać obsługę liczb dla niektórych dodatkowych bajtów (dzięki @neil)

JavaScript (Node.js) , 62 bajty

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

Wypróbuj online!

Muhammad Salman
źródło
-11 bajtów, zmieniając a-zna A-Za-zi i.toLowerCase().charCodeAt()-96nai.charCodeAt()%32
Kevin Cruijssen
1
parseInt(i,36)-9zapisuje kolejny bajt.
Neil
.match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)pozwala na obsługę liczb, nie jestem pewien, czy to najlepszy sposób.
Neil
2

Galaretka , (7?) 8 bajtów

Prawym bajtem jest formatowanie wyjściowe

fØẠO%32K

Pełny program akceptujący ciąg znaków w formacie Python, który wypisuje wynik na STDOUT

Wypróbuj online!

W jaki sposób?

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
źródło
2

Japt v2.0a0 -S, 12 10 bajtów

r\L ¨c uH

Spróbuj


Wyjaśnienie

r              :Remove
 \L            :  Non-letter characters
    ¬          :Split to array
     ®         :Map
      c        :  Character code
        u      :  Modulo
         H     :  32
               :Implicitly join with spaces and output
Kudłaty
źródło
2

kod operacji x86, 35 bajtów

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

Zakładając, że wynik zawiera co najmniej jedną literę i nie {|}~

40 bajtów, dopuszczając wszystkie znaki 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
źródło
Co to jest „kod operacji x86”? Czy to tylko przesłanie kodu maszynowego x86?
Jakob
@Jakob true. Nie mówię tutaj „.COM”, ponieważ jest to funkcja i nie polegam na formacie „.COM”
l4m2
Hmm Tak, myślę, że zakłada się, że rozwiązania kodu maszynowego nie muszą być kompletnymi plikami wykonywalnymi. Być może lepiej byłoby po prostu oznaczyć go jako „kod maszynowy x86”
Jakob
2

Stax , 9 10 9 bajtów

üpÉÿ%}},√

Uruchom i debuguj

-1 bajt dzięki @recursive

Wyjaśnienie:

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 bajtów

É▌Xl»↔"

Uruchom i debuguj

Wyprowadza to rozdzielone znakiem nowej linii. Rozpakowaniu: vmVaI^|c. Podobne, ale z mapą, która domyślnie wyprowadza końcowy znak nowej linii.

pustkowie
źródło
Hm Wydaje się, że występuje problem z pakowaniem programów, które kończą się w kosmosie
rekurencyjny
@recursive Och, nie zauważyłem tego (zwykle próbuję linków, ale najwyraźniej tutaj zapomniałem). Dodałem obejście.
wastl
Nigdy też nie zauważyłem tego błędu. Naprawię to w następnej wersji Stax. Istniejące spakowane programy pozostaną niezmienione.
rekurencyjny
Oto 9 za twoje problemy.
rekurencyjny
2

Biała spacja , 152 117 bajtów

-35 bajtów dzięki @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]

Dodane litery S(spacja), T(tab) i N(nowa linia) tylko jako wyróżnienia.
[..._some_action]dodano tylko jako wyjaśnienie.

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).

Objaśnienie w pseudo-kodzie:

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
źródło
1
Nie mam czasu, aby zapisać go w białe znaki, ale może można napisać coś jak ten
Lynn
1
Wygląda na to, że to 117 bajtów ! (* Zmieniłem 64 na 63 w kodzie, ponieważ jest to odpowiednik, ale krótszy do reprezentowania w spacji) :)
Lynn
@ Lynn Nieźle, -35 bajtów tutaj. Dzięki. :)
Kevin Cruijssen
1

Węgiel drzewny , 21 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

≔⁺β⭆χιβ

Dołącz cyfry do predefiniowanej zmiennej małych liter.

F↧S

Pętla nad małymi literami.

¿№βι«

Jeśli bieżącym znakiem jest litera lub cyfra,

I⊕⌕βι

wydrukuj indeks 1-indeksowany,

i zostaw miejsce na następną wartość.

Neil
źródło
1

Czerwony , 93 bajty

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

Wypróbuj online!

Galen Iwanow
źródło
Nie wiem wystarczająco dużo o kolorze czerwonym, ale można #"a"-#"z"go zmienić zarówno na małe, jak i na wielkie litery; a następnie lowercasemożna usunąć; i -96 + to-char cmoże być modulo-32? Nie jestem jednak pewien, czy to nawet oszczędza bajty na czerwono.
Kevin Cruijssen
@Kevin Cruijssen Dzięki, spróbuję później
Galen Iwanow
parseFunkcja @KevinCruijssen zbiera ciągi, nawet jeśli dopasowanie jest pojedynczym znakiem, dlatego zawsze tego potrzebuję to-char. W przypadku wielkich liter musiałbym dodać do zestawu znaków # „A” - # „Z”, co psuje zysk (jeśli w ogóle) z eliminacji lowercase.
Galen Iwanow
Tak, trochę się obawiałem, #"A"-#"Z"że może nie zyskać dużo w porównaniu do lowercase, ponieważ jest tylko 1 bajt krótszy. I wiedziałem, że będziesz potrzebować to-char, po prostu nie byłem pewien, czy -96 + i modulo-32 będą miały podobny rozmiar.
Kevin Cruijssen
1

Perl 5 , 47 bajtów

Z dodatkowym wyzwaniem polegającym na analizie cyfr:

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

Wypróbuj online!

Zmniejszony do 38 bajtów przez ignorowanie cyfr

print map{ord()%32," "}<>=~/([A-Z])/gi
fockjef
źródło
1

PHP , 70 bajtów

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

Wypróbuj online!

-5 bajtów dzięki Kevinowi

użytkownik2803033
źródło
Fragmenty nie są tutaj dozwolone jako zgłoszenia, ale możesz ustawić je jako funkcję lub pełny program.
Nissa
Niestety, teraz używa pierwszego argumentu jako danych wejściowych
user2803033
Cześć, witamy w PPCG! Jeśli jeszcze tego nie zrobiłeś, wskazówki dotyczące gry w golfa w PHP i wskazówki dotyczące gry w <wszystkie języki> mogą być interesujące do przeczytania. Jeśli chodzi o części, możesz grać w golfa: &&może być &i ord(strtolower($c))-96może być ord($c)%32. Myślę też, że możesz usunąć ~wcześniej $c, ale nie jestem pewien. Nie zaprogramowałem zbyt wiele w PHP i tak naprawdę nie wiem, do czego ~jest używany.
Kevin Cruijssen
Dzięki za wkład. Mod 32 to dobry pomysł. Zapisuje niektóre bajty, ale wymaga dodatkowego sprawdzenia, aby upewnić się, że ord ($ c) jest większy niż 64.
user2803033
1

Perl 5 -p , 35 bajtów

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

Wypróbuj online!

Obejmuje dodatkową część dotyczącą cyfr.

Xcali
źródło
1
/\w/obejmuje_
Brad Gilbert b2gills
Znacznie mniejszy niż to, z czym bawiłem się! Możesz zapisać jeden bajt i naprawić wspomniany błąd @ BradGilbertb2gills, używając -F/[^0-9\pL]|/: Wypróbuj online!
Dom Hastings,
1

Japt 2.0 -S, 9 bajtów

f\l ®c %H

Uruchom to online

Wyjaśnienie:

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
źródło
1

Perl 6 , 32 bajty (alfa), 41 bajtów (alfa + cyfra)

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

Wypróbuj (32 bajty alfa)

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

Wypróbuj (41 bajtów alfa + cyfra)

Rozszerzony:

32 bajty 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 bajtów alfa + cyfra

{  # 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
źródło
To również pasuje do znaków spoza ASCII, takich jak Э, ale poprosiłem OP o wyjaśnienie, czy dane wejściowe są tylko ASCII, czy nie.
Jo King,
1

Tcl , 93 bajty

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

Wypróbuj online!

sergiol
źródło
1

PHP 108 105 bajtów

Wypróbuj online (108 bajtów)

Tri it online (105 bajtów)

-3 Bajty, dzięki @manassehkatz (Zmień poziom strtolower i usuń AZ z wyrażenia regularnego)

Kod, starał się unikać pętli

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

Wyjaśnienie

$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
źródło
Aby uruchomić to bez ostrzeżeń, musiałem (a) zmienić $ argv na $ argv [1] i (b) dodać „wokół ostatniego z. Ale z tymi zmianami lub bez (które mogą być zależne od wersji - I używam 5.6), możesz zaoszczędzić 3 bajty, przesuwając strtolower () o poziom strtolower($argv)i usuwając kapitał A-Zz wyrażenia regularnego
manassehkatz-Moving 2 Codidact
Na php 7 wyświetla ostrzeżenie, teraz zmodyfikuję odpowiedź. Przykro mi, ale nie miałem czasu sprawdzić :-D
Francisco Hahn
1
@manassehkatz Wziął twoją sugestię i zapisał 3 bajty, wielkie dzięki.
Francisco Hahn
Nie powinno to być $argv[1]czy $argnzamiast $argv? joinjest o 3 bajty krótszy niż implode.
Titus
0

Python 2, 110 bajtów 104 bajty , z danymi wejściowymi użytkownika

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

Wypróbuj online!


Python 2, 105 bajtów 104 bajty 96 bajtów , gdzie tjest predefiniowany:

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

Wypróbuj online!

Podzielmy to na bardziej czytelną wersję:

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

Po pierwsze, definiujemy alphabetjako cóż, alfabet.

Następnie używamy rozumienia listy do:

  1. Zrób listę, w której każdy element jest małą literą t
  2. Dla każdej litery, jeśli nie ma jej w alfabecie, odrzuć ją.
  3. Jeśli tak, znajdź jego indeks w alfabecie,
  4. dodaj jeden do niego (bo zaczynamy odliczać od 1)
  5. i zrób z tego ciąg.

Wreszcie łączymy to wszystko razem i drukujemy.


Edycja: Zmieniono na print(i utracono przenośność), aby zapisać bajty i sprawić, że będzie działać poza funkcją

Edycja 2: Dodano wersję z input()predefiniowanymi zmiennymi

Edycja 3: Usunięto 8 bajtów w rozwiązaniach 1 i 2 dzięki Jo Kingowi

Theo C.
źródło
W kodzie masz 6 obcych znaków
Jo King
@JoKing Znalazłem trzy (po średniku, otaczające +), gdzie są pozostałe?
Theo C
Przed if, fori" "
Jo Kinga
Możesz również usunąć []wjoin
Jo King
Ponownie witamy w PPCG! FYI domyślnie (tj. Jeśli nie zostało to wyraźnie zastąpione w pytaniu) odpowiedziami mogą być funkcje lub pełne programy (takie jak Twoja wersja 104-bajtowa), ale nie fragmenty (jak Twoja wersja 96-bajtowa). Tutaj możesz przesłać wersję, która tworzy funkcję, która zwraca ciąg znaków dla 100 bajtów :)
Jonathan Allan
0

PowerShell , 63 bajty

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

Wypróbuj online!

(Wydaje się długi ...)

Pobiera dane wejściowe $args, konwertuje wielkość liter, rzutuje .ToUpperje na chartablicę, przekazuje je do for eachpętli. Wewnątrz pętli odejmiemy samą albo 64 od wartości ASCII (int), na podstawie tego, czy bieżąca wartość jest -inzasięg 65do 90(czyli jest to litera ASCII). Te wartości są pozostawione w potoku, a my używamy -not eQual, aby wyeliminować wartości inne niż litery (ponieważ wszystkie są zerowe). Liczby te są enkapsulowane w łańcuch, ponieważ domyślnym szeregowaniem macierzy jest rozdzielenie spacji, więc otrzymujemy to dość tanio. Ten ciąg jest pozostawiony w potoku, a dane wyjściowe są niejawne.

AdmBorkBork
źródło
0

MS-SQL, 133 bajty

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]'

Zgodnie z naszymi zasadami IO , wejście zostanie podjęta przez istniejący wcześniej tabeli T z pola varchar s .

Wymagany jest SQL 2017 lub nowszy. Musi być również uruchomiony w masterbazie danych, ponieważ korzystam z tabeli systemowej o nazwie spt_values, która (po przefiltrowaniu type='P') zawiera liczby zliczające od 0 do 2047.

Zasadniczo dołączam do tabeli liczb za pomocą ciągu wejściowego SUBSTRING(), który zwraca osobny wiersz dla każdego znaku. Jest to filtrowane tylko przy użyciu liter LIKE'[a-z]', a następnie otrzymujemy ich wartość ASCII i odejmujemy 64. Te liczby są ponownie łączone w ciąg za pomocą funkcji (nowość w SQL 2017) STRING_AGG.

BradC
źródło
0

Pyth , 10 bajtów

jdfTmhxGr0

Jestem prawie pewien, że można to trochę pograć w golfa ... -2 bajty, jeśli mogę wyprowadzić jako listę, niektóre odpowiedzi wydają się, ale nie ma tego w specyfikacji

Wypróbuj online!

Dave
źródło
Możesz usunąć ostatnie d( jdfTmhGr010 bajtów).
Pan Xcoder,
0

C (gcc) , 67 bajtów

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

Wypróbuj online!

Konwertuje każdy znak na małe litery, przesuwa kod o -96, a jeśli mieści się w zakresie 1-indeksowanego alfabetu, drukuje kod przesunięcia

Vazt
źródło
0

jq , 45 bajtów

[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

Wypróbuj online

Naïm Favier
źródło