알파벳 위치 측정기


10

Codewars Kata에서 영감을 얻었습니다 .

목표는 다음과 같은 입력 문자열을 얻는 것입니다.

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

알파벳으로 된 각 문자의 위치를 ​​공백으로 구분하고 알파벳이 아닌 문자를 무시하는 문자열을 반환하십시오.

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

추가 과제를 들어, 자신 + 27 예를 들어 원래 문자열의 모든 숫자 문자를 대체 할 수있는, "25"될 것입니다 "29, 32". 이것은 완전히 선택 사항입니다.

당신은 1 인덱싱을 사용해야합니다 ( 'a'==1, 'b'==2, 등)

추가 규칙 :

  • 배열이 아닌 문자열을 반환해야합니다.

  • 후행 공백은 정상입니다.

승자가 가장 적은 바이트 수를 갖습니다.

행운을 빕니다!



5
@TheoC 왜? 일반적인 합의는 응답이 너무 많은 부풀림을 추가하고 공백으로 더 짧은 방법으로 참여할 수있는 언어에 불공평하게 만들 수 있으므로 합리적인 형식으로 출력 할 수 있어야한다는 것입니다.
Okx

1
@TheoC 왜 둘 다 허용하지 않습니까?
Okx

3
PPCG에 오신 것을 환영합니다! 이것은 전반적으로 괜찮은 도전이지만 다음에 도전을 게시 할 때 명심해야 할 몇 가지 사항이 있습니다. 1)이 과제는 매우 간단합니다. 선택적 부분이 필수 인 경우 더 흥미로울 것입니다 (지금은 해당 부분을 변경하지 마십시오. 너무 늦습니다). 2) 임의의 부분에 대해서는 상당히 제한적입니다. 왜 배열을 허용하지 않습니까? 보다 그것은 우리의 표준의 문자의 배열 입니다 문자열 . 아이디어를 얻으 려면 이 스레드 를 읽는 것이 좋습니다 .
James

2
향후 참고 사항 : 1 및 0 인덱싱은 일반적으로 하나이며 동일하며 둘 다 일반적으로 허용됩니다. 또한 출력 형식 제한이 눈에 f니다. 값 목록 인 경우 언어가 형식을 결정하도록합니다. 문제는 출력 형식을 지정하는 것이 아니라 인덱스를 이동하는 것이 아닙니다. 따라서 언어가 자연스럽게하는 일을 수행하고 도전 의도에 집중할 수있을 때 제약이되어서는 안됩니다.
Magic Octopus Urn

답변:


5

05AB1E , (5?) 7 바이트

가장 오른쪽에있는 2 바이트는 출력 형식입니다.

áÇ32%ðý

내 젤리 답변 포트 이지만 O5AB1E는 알파벳 필터링에 더 간결합니다.

온라인으로 사용해보십시오!

어떻게?

áÇ32%ðý - take input implicitly
á       - filter keep alphabetical characters
 Ç      - to ordinals
  32    - thirty-two
    %   - modulo (vectorises)
     ð  - push a space character
      ý - join

OP는 공백으로 분할 인쇄되기를 원하므로 후행 ðý을 추가 할 수 있습니다. 그러나 답변 출력 목록의 절반이 나오기 때문에 지금은 그대로 둡니다.
케빈 크루이 센

아 나는 내 대답에서 그것을 놓쳤다 ...
Jonathan Allan

5

자바 8, 82 78 72 69 62 바이트

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

@ OlivierGrégoire 덕분에 -13 바이트 .

온라인으로 사용해보십시오.

설명:

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

1
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})(72 바이트).
Olivier Grégoire

1
@ OlivierGrégoire 감사합니다! 그리고 삼항으로 변경하면 -3 바이트 더 증가합니다. :)
Kevin Cruijssen

s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}(62 바이트) char[]대신을 입력으로 사용합니다 String.
Olivier Grégoire


4

R , 55 50 바이트

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

온라인으로 사용해보십시오!

표준 입력에서 입력을 읽고, 변환은 대문자 들을 제거 일 비 대문자 , 코드 포인트에 영문자, 변환을 64를 뺀다 (32)에 의해 개조, 및 스페이스로 구분 표준 출력으로 인쇄.

골프를 해준 Kevin Cruijssen에게 감사합니다!



@KevinCruijssen * facepalm * duh
주세페

나는 질문에 두 가지 의견 (질문)을 추가했습니다-답변에 따라 이것을 46 자 또는 39 자까지 골프를 칠 수있는 기회가 있습니다.
JayCe

1
당신은 사용하여 47을 수행 할 수 있습니다[^A-z]
MickyT을

4

APL (Dyalog Unicode) , 24, 20, 14 13 바이트

Zacharý (및 Mr. Xcoder) 덕분에 -4 바이트!

Adám 덕분에 -6 바이트!

ngn 덕분에 -1 바이트!

A⍳⎕A∩⍨≡819⌶⊢

온라인으로 사용해보십시오!

설명:

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

내 초기 솔루션 :

APL (Dyalog Unicode) , 24 20 바이트

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

온라인으로 사용해보십시오!

설명:

                        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)

나를 비웃지 마라, 나는 APL을 처음 접한다 :)


1
실제로 APL을 처음 접하는 사람에게는 정말 좋습니다! 괄호가 필요하지 않은 것으로 가정합니다. 또한 일 {1(819⌶)⍵}수 있습니다 1(819⌶)⊢. 그렇지 않으면, 놀라운 직업! 앞으로 APL을 즐기시기 바랍니다!
Zacharý

@ Zacharý 감사합니다! 나는 그렇게 희망한다 (J에 대한 지식이 있고, 배열 언어에 전혀 익숙하지 않다)
Galen Ivanov

1
Zachary가 지적했듯이 괄호는 가정 되므로 바이트 수에 포함시킬 필요가 없으므로 20 바이트가됩니다.
Mr. Xcoder

1
@Jonah 나는 설명을 추가했다. 당신은 옳고, 대문자로, 알파벳 자체는 J에서 훨씬 더
Galen Ivanov

1
좋은 작업! 당신은 구성하여 바이트를 저장할 수 있습니다 1받는 819⌶직접 27 초를 제거하여 다섯 저장 : 27~⍨⎕A⍳819⌶⍨∘1; 또는 알파벳과 교차로를 따라 :⎕A⍳⎕A∩⍨819⌶⍨∘1
Adám

3

파이썬 2 , (45?) 55 바이트

출력을 형식화하기 위해 11 바이트가 추가되어 파이썬 3과 호환되지 않습니다.)

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

내 젤리 답변의 또 다른 항구.

온라인으로 사용해보십시오!


포맷되지 않은 버전 (정수 목록을 반환) :

lambda s:[ord(c)%32for c in s if c.isalpha()]

1
그것은 불행하게도, 영업 이익은 문자열 출력 주장처럼이 공백으로 구분 보이는

1
그렇습니다-나는 모든 대답에서 그것을 놓쳤습니다. 하나는 사이트의 규범에 너무 익숙해졌습니다!
Jonathan Allan

3

자바 스크립트 (Node.js) , 69 55 54 바이트

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

온라인으로 사용해보십시오!

설명 :

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

@Kevin 덕분에 11 바이트 절약

@Neil 덕분에 1 바이트 더


일부 추가 바이트에 대한 숫자 지원을 추가 할 수 있습니다 (@neil 덕분에)

자바 스크립트 (Node.js) , 62 바이트

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

온라인으로 사용해보십시오!


변경하여 -11 바이트 a-zA-Za-zi.toLowerCase().charCodeAt()-96i.charCodeAt()%32
케빈 Cruijssen

1
parseInt(i,36)-9다른 바이트를 저장합니다.
Neil

.match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)그것이 최선의 방법인지 확실하지 않은 숫자를 지원할 수 있습니다.
Neil

2

젤리 , (7?) 8 바이트

가장 오른쪽 바이트는 출력 형식입니다

fØẠO%32K

결과를 STDOUT에 출력하는 파이썬 형식의 문자열을 받아들이는 전체 프로그램

온라인으로 사용해보십시오!

어떻게?

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

2

Japt v2.0a0 -S, 12 10 바이트

r\L ¨c uH

시도 해봐


설명

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

2

x86 opcode, 35 바이트

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

결과에 하나 이상의 문자가 포함되어 있다고 가정하면 {|}~

모든 ASCII 문자를 허용하는 40 바이트

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                           

"x86 opcode"는 무엇입니까? 이것은 x86 머신 코드 제출입니까?
Jakob

@Jakob 사실. 나는 여기서 ".COM"이라고 말하지 않는다. 그것은 함수이고 ".COM"형식에 의존하지 않는다
l4m2

흠. 예, 머신 코드 솔루션이 완전한 실행 파일 일 필요는 없다고 가정합니다. 실제로 "x86 기계 코드"라고 레이블을 지정하는 것이 좋습니다.
Jakob

2

Stax , 9 10 9 바이트

üpÉÿ%}},√

실행 및 디버깅

@recursive 덕분에 -1 바이트

설명:

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 바이트

É▌Xl»↔"

실행 및 디버깅

이 줄 바꿈으로 출력합니다. 포장 풀기 : vmVaI^|c. 비슷하지만 map을 사용하여 후행 줄 바꿈으로 암시 적으로 출력합니다.


흠. 공간에서 끝나는 프로그램을 포장하는 데 문제가있는 것 같습니다
재귀적인

@ 재귀 아, 그것을 알아 차리지 못했습니다 (보통 링크를 시도하지만 분명히 잊어 버렸습니다). 해결 방법을 추가했습니다.
wastl

이 버그도 눈치 채지 못했습니다. 다음 Stax 릴리스에서 수정하겠습니다. 기존의 압축 프로그램은 변경되지 않습니다.
재귀

다음 은 문제를 해결하기위한 9 가지 입니다.
재귀

2

공백 , 152 117 바이트

@Lynn 덕분에 -35 바이트 .

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

문자 S(공백), T(탭) 및 N(줄 바꾸기)가 강조 표시로만 추가되었습니다.
[..._some_action]설명으로 만 추가되었습니다.

온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).

의사 코드의 설명 :

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

1
나는 공백에 쓸 시간이 없어,하지만 어쩌면 당신은 같은 것을 쓸 수

1
그런 외모의 117 바이트 ! (* 코드에서 64에서 63으로 변경되었지만 공백으로 표현하기에는 짧았습니다.) :)
Lynn

@Lynn 나쁘지 않습니다 -35 바이트 바로 거기에 있습니다. 감사. :)
Kevin Cruijssen 2016 년



1

, 21 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

≔⁺β⭆χιβ

사전 정의 된 소문자 변수에 숫자를 추가하십시오.

F↧S

소문자 입력을 반복합니다.

¿№βι«

현재 문자가 문자 나 숫자이면

I⊕⌕βι

1 인덱스 색인을 인쇄하고

다음 값을위한 공간을 남겨 두십시오.


1

빨강 , 93 바이트

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

온라인으로 사용해보십시오!


나는 레드에 대해 충분히 알지 못하지만 #"a"-#"z"소문자와 대문자로 바꿀 수 있습니다. 그런 다음 lowercase제거 할 수 있습니다. 및 -96 + to-char c모듈-32이 될 수 있습니까? 그래도 바이트를 빨간색으로 저장하는지 확실하지 않습니다.
Kevin Cruijssen

@Kevin Cruijssen 감사합니다, 나중에 다시 시도하겠습니다
Galen Ivanov

@KevinCruijssen parse함수는 일치하는 문자가 하나 인 경우에도 문자열을 수집 하므로 항상가 필요합니다 to-char. 대문자의 경우 문자 세트 # "A"-# "Z"를 추가해야합니다 lowercase.
Galen Ivanov

그래, 나는 1 바이트 더 짧기 때문에 #"A"-#"Z"와 비교할 때 약간의 두려움을 느꼈다 lowercase. 그리고 나는 당신이 필요하다는 것을 알았고 , modulo-32의 크기가 비슷한 to-char지 확실하지 않았습니다 -96 + .
Kevin Cruijssen


1

PHP , 70 바이트

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

온라인으로 사용해보십시오!

Kevin 덕분에 -5 바이트


스 니펫은 여기에서 제출할 수 없지만 기능 또는 전체 프로그램으로 만들 수 있습니다.
Nissa

죄송합니다, 지금은 입력으로 첫 번째 인수 사용
user2803033

안녕하세요, PPCG에 오신 것을 환영합니다! 아직 배우지 않았다면 PHP 로 골프를 치기위한 팁<모든 언어>로 골프를 치기위한 팁 을 읽는 것이 흥미로울 수 있습니다. 부품로서 당신은 골프 할 수 있습니다 &&할 수 있습니다 &, 그리고 ord(strtolower($c))-96할 수 있습니다 ord($c)%32. 또한 ~before를 제거 할 수 있다고 생각 $c하지만 확실하지 않습니다. PHP에서 많이 프로그래밍하지 않았으며 실제로 ~여기서 무엇을 사용 하는지 알지 못합니다 .
Kevin Cruijssen

입력 해 주셔서 감사합니다. 모드 32는 좋은 생각입니다. 약간의 바이트를 절약하지만 ord ($ c)가 64보다 큰지 확인하기 위해 추가 점검이 필요합니다.
user2803033


1

JAPT 2.0 -S, 9 바이트

f\l ®c %H

온라인으로 실행

설명:

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

1

Perl 6 , 32 바이트 (알파), 41 바이트 (알파 + 숫자)

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

시도해보십시오 (알파 32 바이트)

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

사용해보십시오 (41 바이트 알파 + 숫자)

넓히는:

32 바이트 알파

{  # 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 바이트 알파 + 숫자

{  # 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
  )
}

이것은와 같은 비 ASCII 문자와도 일치 Э하지만 입력이 ASCII 전용인지 아닌지에 대한 OP의 설명을 요청했습니다.
Jo King


1

PHP 108 105 바이트

온라인으로 사용해보십시오 (108 바이트)

온라인 트라이 (105 바이트)

@manassehkatz 덕분에 -3 바이트 (strtolower 레벨 변경 및 정규식에서 AZ 제거)

코드, 루프를 피하려고

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

설명

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

이것을 경고없이 실행하려면 (a) $ argv를 $ argv [1]로 변경하고 (b) 마지막 z 주위에 "를 추가해야합니다. 그러나 이러한 변경 유무에 관계없이 (버전에 따라 다를 수 있음-I ) 5.6을 사용하고, 당신은 수준에하여 strtolower ()를 이동하여 3 바이트를 저장할 수 있습니다 strtolower($argv)및 제거 자본 A-Z정규식에서.
manassehkatz-이동이 Codidact

PHP 7에서는 경고를 표시합니다. 지금 대답을 수정하려고합니다. 죄송합니다 wi 점검 시간이 없었습니다 :-D
Francisco Hahn

1
@manassehkatz 제안을 받아 3 바이트를 절약했습니다. 감사합니다.
Francisco Hahn

야해 그 수 $argv[1]또는 $argn대신 $argv?. join보다 3 바이트 짧습니다 implode.
Titus


0

Python 2, 110 바이트 104 바이트 , 사용자 입력

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

온라인으로 사용해보십시오!


파이썬 2, 105 바이트 104 바이트의 96 바이트 , t미리 정의된다 :

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

온라인으로 사용해보십시오!

더 읽기 쉬운 버전으로 분류 해 봅시다 :

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

먼저, 우리 alphabet는 알파벳으로 정의 합니다.

다음으로 목록 이해를 사용하여 다음을 수행합니다.

  1. 각 항목이 소문자 인 목록을 작성하십시오. t
  2. 각 문자마다 알파벳이 아닌 경우 폐기하십시오.
  3. 그렇다면 알파벳으로 된 색인을 찾으십시오.
  4. 그것에 1을 더하십시오 (1부터 계산하기 때문에)
  5. 그것을 문자열로 만드십시오.

마지막으로 우리는 모두 함께 결합하여 인쇄합니다.


편집 :print 바이트를 저장하고 함수 외부에서 작동하도록 변경 (및 이식성 손실)

편집 2 :input() 사전 정의 된 변수 대신 버전 추가

편집 3 : Jo King 덕분에 솔루션 1 및 2에서 8 바이트 제거


코드에 6 개의 외부 공간이 있습니다.
Jo King

@ JoKing 세 개 (세미콜론 후)를 찾았 +습니다. 다른 곳은 어디입니까?
Theo C

전에 if, for그리고" "
조 왕

또한 제거 할 수 있습니다 []join
조 왕

PPCG에 다시 오신 것을 환영합니다! 기본적으로 (질문에서 명시 적으로 재정의되지 않은 경우) 답변 제출은 함수 또는 전체 프로그램 (104 바이트 버전과 같은)이지만 스 니펫 (96 바이트 버전과 같은)은 아닐 수 있습니다. 여기 에 100 바이트 의 문자열반환하는 함수생성 하는 버전을 제출할 수 있습니다. :
Jonathan Allan

0

PowerShell , 63 바이트

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

온라인으로 사용해보십시오!

(길게 보인다 ...)

input을 가져 $args와서 대 / .ToUpper소문자를 변환 한 다음이를 char배열로 변환하여 for each루프에 넣습니다 . 루프 내부에서, 우리는 현재 값이 있는지 여부에 근거하여 (ASCII의 INT) 값에서 하나 자체 또는 64 뺄 -in범위 6590(즉, 그것이 ASCII 대문자입니다). 이러한 값은 파이프 라인에 남아 있으며 -not equal을 사용하여 문자가 아닌 값을 제거합니다 (모두 0이므로). 배열의 기본 문자열 화는 공백으로 분리하는 것이기 때문에 이러한 숫자는 문자열로 캡슐화되므로 상당히 저렴합니다. 해당 문자열은 파이프 라인에 남아 있으며 출력은 암시 적입니다.


0

MS-SQL, 133 바이트

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

IO 규칙에 따라 varchar 필드 s가있는 기존 테이블 t 를 통해 입력이 이루어 집니다.

SQL 2017 이상이 필요합니다. 로 필터링 된 0 master이라는 시스템 테이블을 이용하기 때문에 데이터베이스 에서 실행해야 합니다 .spt_valuestype='P'

기본적으로을 사용하여 입력 문자열로 숫자 테이블을 조인합니다 SUBSTRING(). 이는 개별 문자마다 별도의 행을 반환합니다. 이것은을 사용하여 문자 만 필터링 LIKE'[a-z]'한 다음 ASCII 값을 가져와 64를 뺍니다.이 숫자는 (SQL 2017의 새로운 기능) 함수를 사용하여 문자열로 다시 결합됩니다 STRING_AGG.



0

C (gcc) , 67 바이트

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

온라인으로 사용해보십시오!

각 문자를 소문자로 변환하고 코드를 -96만큼 오프셋하고 1 색인 알파벳 범위에 해당하면 오프셋 코드를 인쇄합니다


0

jq , 45 바이트

[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

온라인으로 사용해보십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.