Trình tìm vị trí bảng chữ cái


10

Lấy cảm hứng từ Codewars Kata .

Mục tiêu của bạn là lấy một chuỗi đầu vào như chuỗi này:

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

và trả về một chuỗi chứa vị trí của từng ký tự trong bảng chữ cái, được phân tách bằng khoảng trắng và bỏ qua các ký tự không theo thứ tự chữ cái, như sau:

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

Đối với một thử thách bổ sung, bạn có thể thay thế bất kỳ ký tự số nào trong chuỗi gốc bằng chính chúng + 27. Ví dụ: "25"sẽ trở thành "29, 32". Điều này là hoàn toàn tùy chọn.

Bạn phải sử dụng 1-indexing ( 'a'==1, 'b'==2, vv)

Quy tắc bổ sung:

  • Bạn phải trả về một chuỗi, không phải là một mảng.

  • Trailing khoảng trắng là OK.

Người chiến thắng có số byte thấp nhất.

Chúc may mắn!



5
@TheoC Vì sao? Sự đồng thuận chung là các câu trả lời sẽ có thể xuất ra ở bất kỳ định dạng hợp lý nào, vì nó có thể thêm quá nhiều sự phình to và làm cho nó không công bằng đối với các ngôn ngữ có thể tham gia bởi các khoảng trắng theo cách ngắn hơn.
Okx

1
@TheoC Tại sao bạn không cho phép cả hai?
Okx

3
Chào mừng đến với PPCG! Đây là một thử thách khá tốt, nhưng lần sau bạn đăng một thử thách, đây là một số điều cần ghi nhớ. 1) Thử thách này khá đơn giản. Tôi nghĩ sẽ thú vị hơn nếu phần tùy chọn là bắt buộc (lưu ý, đừng thay đổi phần đó ngay bây giờ, đã quá muộn). 2) Bạn khá hạn chế về một số phần tùy ý. Tại sao không cho phép một mảng? Đó là tiêu chuẩn của chúng tôi hơn một mảng các ký tự một chuỗi . Tôi muốn giới thiệu đọc qua chủ đề này cho ý tưởng.
James

2
Lưu ý trong tương lai: lập chỉ mục 1 và 0 thường là một và giống nhau, và cả hai thường được cho phép. Ngoài ra, các định dạng đầu ra hạn chế được nhăn mặt. Nếu đó là danh sách các giá trị, hãy để ngôn ngữ quyết định định dạng. Thách thức không phải là về định dạng đầu ra cũng như về các chỉ số dịch chuyển. Do đó, không nên hạn chế khi bạn chỉ có thể cho phép các ngôn ngữ thực hiện những gì họ làm một cách tự nhiên và tập trung vào ý định thách thức.
Bạch tuộc ma thuật Urn

Câu trả lời:


5

05AB1E , (5?) 7 byte

Hai byte ngoài cùng bên phải là định dạng đầu ra

áÇ32%ðý

Một cổng của câu trả lời Jelly của tôi , nhưng O5AB1E thì ngắn gọn hơn cho việc lọc bảng chữ cái.

Hãy thử trực tuyến!

Làm sao?

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

Vì OP muốn nó được in phân tách theo khoảng trắng, nên ðýcó thể thêm một dấu . Nhưng vì một nửa danh sách đầu ra câu trả lời, tôi đoán bây giờ hãy để nó lại.
Kevin Cruijssen

Ah. Tôi đã bỏ lỡ nó trong câu trả lời của mình ...
Jonathan Allan

5

Java 8, 82 78 72 69 62 byte

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

-13 byte nhờ @ OlivierGrégoire .

Hãy thử trực tuyến.

Giải trình:

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+" ");})(72byte).
Olivier Grégoire

1
@ OlivierGrégoire Cảm ơn! Và -3 byte hơn bằng cách thay đổi nó thành một ternary if. :)
Kevin Cruijssen

s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}(62 byte) bằng cách sử dụng char[]làm đầu vào thay vì a String.
Olivier Grégoire


4

R , 55 50 byte

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

Hãy thử trực tuyến!

Đọc đầu vào từ stdin, chuyển đổi thành chữ hoa, loại bỏ các chữ cái không chữ hoa , chuyển đổi thành các điểm mã, trừ 64 mod bằng 32 và in thành stdout, cách nhau bởi khoảng trắng.

Cảm ơn Kevin Cruijssen cho golf!



@KevinCruijssen * facepalm * duh
Giuseppe

Tôi đã thêm hai nhận xét (câu hỏi) cho câu hỏi - tùy thuộc vào câu trả lời, có cơ hội để đánh golf này xuống còn 46 hoặc thậm chí 39 ký tự.
JayCe

1
Bạn có thể thực hiện 47 bằng cách sử dụng[^A-z]
MickyT

4

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

-4 byte nhờ Zacharý (và ông Xcoder)!

-6 byte nhờ Adám!

-1 byte nhờ ngn!

A⍳⎕A∩⍨≡819⌶⊢

Hãy thử trực tuyến!

Giải trình:

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

Giải pháp ban đầu của tôi:

APL (Dyalog Unicode) , 24 20 byte

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

Hãy thử trực tuyến!

Giải trình:

                        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)

Đừng cười tôi, tôi mới đến APL :)


1
Điều đó thực sự tốt cho một người mới tham gia APL! Bạn không cần dấu ngoặc đơn, chúng được giả định. Ngoài ra, {1(819⌶)⍵}có thể được 1(819⌶)⊢. Nếu không, công việc tuyệt vời! Hy vọng bạn thích APL trong tương lai!
Zacharý

@ Zacharý Cảm ơn! Tôi hy vọng như vậy (tôi có một số kiến ​​thức về J, tôi không hoàn toàn mới về ngôn ngữ mảng)
Galen Ivanov

1
Như Zachary đã lưu ý, các dấu ngoặc đơn được giả sử , do đó bạn không cần đưa chúng vào số byte, dẫn đến 20 byte.
Ông Xcoder

1
@Jonah Tôi đã thêm một lời giải thích. Bạn nói đúng, viết hoa và bản thân bảng chữ cái có giá cao hơn nhiều trong J.
Galen Ivanov

1
Công việc tốt! Bạn có thể lưu một byte bằng cách kết 1hợp với 819⌶và lưu năm bằng cách xóa trực tiếp 27 giây : 27~⍨⎕A⍳819⌶⍨∘1; hoặc đi giao điểm với bảng chữ cái:⎕A⍳⎕A∩⍨819⌶⍨∘1
Adám

3

Python 2 , (45?) 55 byte

11 byte được thêm vào để định dạng đầu ra, điều này cũng làm cho điều này không tương thích với Python 3)

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

Một cổng khác của câu trả lời Jelly của tôi.

Hãy thử trực tuyến!


Phiên bản không được định dạng (trả về danh sách các số nguyên):

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

1
Có vẻ như OP đang khăng khăng đầu ra chuỗi được phân tách bằng khoảng trắng, thật không may
Sok

1
Đúng - Tôi đã bỏ lỡ điều đó trên tất cả các câu trả lời của mình - người ta trở nên quá quen thuộc với các tiêu chuẩn của trang web!
Jonathan Allan

3

JavaScript (Node.js) , 69 55 54 byte

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

Hãy thử trực tuyến!

Giải trình :

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 byte được lưu nhờ @Kevin

Thêm 1 byte nhờ @Neil


Bạn có thể thêm hỗ trợ cho số cho một số byte bổ sung (nhờ @neil)

JavaScript (Node.js) , 62 byte

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

Hãy thử trực tuyến!


-11 byte bằng cách thay đổi a-zthành A-Za-zi.toLowerCase().charCodeAt()-96thànhi.charCodeAt()%32
Kevin Cruijssen

1
parseInt(i,36)-9lưu một byte khác.
Neil

.match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)cho phép bạn hỗ trợ số, mặc dù không chắc đó là cách tốt nhất.
Neil

2

Jelly , (7?) 8 byte

Byte ngoài cùng bên phải là định dạng đầu ra

fØẠO%32K

Một chương trình đầy đủ chấp nhận một chuỗi ở định dạng Python in kết quả thành STDOUT

Hãy thử trực tuyến!

Làm sao?

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 byte

r\L ¨c uH

Thử nó


Giải trình

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

2

op86 x86, 35 byte

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

Giả sử kết quả chứa ít nhất một chữ cái và không {|}~

40 byte, cho phép tất cả các ký tự 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                           

"Op86 xcode" là gì? Đây chỉ là một đệ trình mã máy x86?
Jakob

@Jakob đúng. Tôi ở đây không nói ".COM" vì đó là một chức năng và không dựa vào định dạng ".COM"
l4m2

Hừm. Vâng, tôi nghĩ rằng nó đã giả định rằng các giải pháp mã máy không phải là các tệp thực thi hoàn chỉnh. Có thể thực sự tốt hơn nếu chỉ gắn nhãn "mã máy x86"
Jakob

2

Stax , 9 10 9 byte

üpÉÿ%}},√

Chạy và gỡ lỗi nó

-1 byte nhờ @recursive

Giải trình:

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 byte

É▌Xl»↔"

Chạy và gỡ lỗi nó

Điều này đầu ra phân tách dòng mới. Giải nén : vmVaI^|c. Tương tự, nhưng với bản đồ, mà đầu ra ngầm với dòng mới.


Hừm. Dường như có một chương trình đóng gói có vấn đề kết thúc trong không gian
đệ quy

@recursive Ồ, không để ý điều đó (thường thì tôi đã thử các liên kết, nhưng dường như tôi đã quên nó ở đây). Tôi đã thêm một cách giải quyết.
lãng phí

Tôi cũng không bao giờ nhận thấy lỗi này. Tôi sẽ sửa nó trong bản phát hành tiếp theo của Stax. Các chương trình đóng gói hiện tại sẽ không thay đổi.
đệ quy

Đây là 9 trở lại cho rắc rối của bạn.
đệ quy

2

Khoảng trắng , 152 117 byte

-35 byte nhờ @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]

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Dùng thử trực tuyến (chỉ có khoảng trắng, tab và dòng mới).

Giải thích bằng mã giả:

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
Tôi không có thời gian để viết nó trong Whitespace, nhưng có lẽ bạn có thể viết một cái gì đó như thế này
Lynn

1
Hình như là 117 byte ! (* Tôi đã thay đổi 64 thành 63 trong mã, vì nó tương đương nhưng ngắn hơn để thể hiện trong Khoảng trắng) :)
Lynn

@Lynn Không tệ, -35 byte ngay đó. Cảm ơn. :)
Kevin Cruijssen



1

Than , 21 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

≔⁺β⭆χιβ

Nối các chữ số vào biến chữ thường được xác định trước.

F↧S

Vòng lặp trên đầu vào hạ cấp.

¿№βι«

Nếu ký tự hiện tại là một chữ cái hoặc chữ số,

I⊕⌕βι

in chỉ mục 1 chỉ mục của nó,

và để lại một khoảng trống cho giá trị tiếp theo.


1

Màu đỏ , 93 byte

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

Hãy thử trực tuyến!


Tôi không biết đủ về Màu đỏ, nhưng có #"a"-#"z"thể thay đổi thành cả chữ thường và chữ in hoa; và sau đó lowercasecó thể được gỡ bỏ; và -96 + to-char ccó thể là modulo-32? Tuy nhiên, không chắc chắn rằng điều đó thậm chí còn lưu byte trong Red.
Kevin Cruijssen

@Kevin Cruijssen Cảm ơn, tôi sẽ thử sau
Galen Ivanov

Hàm @KevinCruijssen parsethu thập các chuỗi ngay cả khi trận đấu là một ký tự đơn, đó là lý do tại sao tôi luôn cần to-char. Đối với các chữ cái viết hoa, tôi sẽ cần thêm vào bộ ký tự # "A" - # "Z", làm hỏng mức tăng (nếu có) để loại bỏ lowercase.
Galen Ivanov

Vâng, tôi hơi sợ #"A"-#"Z"có thể không đạt được nhiều so với lowercase, vì nó chỉ ngắn hơn 1 byte. Và tôi biết rằng bạn cần to-char, chỉ không chắc chắn nếu -96 + và modulo-32 sẽ có kích thước tương tự nhau.
Kevin Cruijssen

1

Perl 5 , 47 byte

Với thách thức bổ sung về phân tích cú pháp chữ số:

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

Hãy thử trực tuyến!

Giảm xuống 38 byte bằng cách bỏ qua các chữ số

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

1

PHP , 70 byte

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

Hãy thử trực tuyến!

-5 byte nhờ Kevin


Đoạn trích không được phép gửi dưới đây, nhưng bạn có thể biến nó thành một chức năng hoặc một chương trình đầy đủ.
Nissa

Xin lỗi, bây giờ nó sử dụng đối số đầu tiên làm đầu vào
user2803033

Xin chào, chào mừng đến với PPCG! Nếu bạn chưa có, mẹo chơi golf trong PHPmẹo chơi golf bằng <tất cả các ngôn ngữ> có thể rất thú vị để đọc qua. Đối với các bộ phận bạn có thể chơi golf: &&có thể &, và ord(strtolower($c))-96có thể ord($c)%32. Ngoài ra, tôi nghĩ rằng bạn có thể loại bỏ ~trước đó $c, nhưng tôi không chắc chắn. Không được lập trình nhiều trong PHP và không thực sự biết cái gì ~được sử dụng cho ngay tại đây.
Kevin Cruijssen

Cảm ơn vì đầu vào của bạn. Mod 32 là một ý tưởng tốt. Nó lưu một số byte nhưng yêu cầu kiểm tra bổ sung để đảm bảo ord ($ c) lớn hơn 64.
user2803033


1

Japt 2.0 -S, 9 byte

f\l ®c %H

Chạy nó trực tuyến

Giải trình:

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 byte (alpha), 41 byte (chữ số alpha +)

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

Hãy thử nó (32 byte alpha)

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

Hãy thử nó (41 byte alpha + chữ số)

Mở rộng:

32 byte alpha

{  # 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 byte alpha + chữ số

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

Điều này cũng phù hợp với các ký tự không phải ASCII như Э, nhưng tôi đã yêu cầu làm rõ từ OP về việc liệu đầu vào chỉ có ASCII hay không.
Jo King


1

PHP 108 105 byte

Dùng thử trực tuyến (108 byte)

Tri nó trực tuyến (105 byte)

-3 Byte, nhờ @manassehkatz (Thay đổi cấp độ của strtolower và xóa AZ khỏi regex)

Mã, đã cố gắng tránh bất kỳ vòng lặp

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

Giải trình

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

Để có được điều này để chạy mà không có Cảnh báo, tôi đã phải (a) thay đổi $ argv thành $ argv [1] và (b) thêm "xung quanh z cuối cùng. Nhưng có hoặc không có những thay đổi đó (có thể phụ thuộc vào phiên bản - Tôi đang sử dụng 5.6), bạn có thể tiết kiệm 3 byte bằng cách di chuyển strtolower () theo cấp độ strtolower($argv)và xóa vốn A-Zkhỏi regex.
manassehkatz-Move 2 Codidact

Trên php 7, nó đưa ra một cảnh báo, tôi sẽ sửa đổi câu trả lời ngay bây giờ. Tôi xin lỗi chỉ là không có wi có thời gian để kiểm tra :-D
Francisco Hahn

1
@manassehkatz Đã xóa đề xuất của bạn và đã lưu 3 Byte, cảm ơn rất nhiều.
Francisco Hahn

Không nên $argv[1]hay $argnthay thế $argv? joinngắn hơn 3 byte implode.
Tít


0

Python 2, 110 byte 104 byte , với đầu vào của người dùng

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

Hãy thử trực tuyến!


Python 2, 105 byte 104 byte 96 byte , tđược xác định trước:

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

Hãy thử trực tuyến!

Hãy chia nhỏ nó với phiên bản dễ đọc hơn:

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

Đầu tiên, chúng tôi định nghĩa alphabetlà, tốt, bảng chữ cái.

Tiếp theo, chúng tôi sử dụng hiểu danh sách để:

  1. Tạo một danh sách trong đó mỗi mục là một ký tự chữ thường từ t
  2. Đối với mỗi chữ cái, nếu nó không có trong bảng chữ cái, hãy loại bỏ nó.
  3. Nếu có, hãy tìm chỉ mục của nó trong bảng chữ cái,
  4. thêm một vào nó (vì chúng ta bắt đầu đếm ở 1)
  5. và làm cho nó một chuỗi.

Cuối cùng, chúng tôi tham gia tất cả cùng nhau và in nó.


Chỉnh sửa: Đã thay đổi thành print(và mất tính di động) để lưu byte và làm cho nó hoạt động bên ngoài một chức năng

Chỉnh sửa 2: Đã thêm phiên bản input()thay vì các biến được xác định trước

Chỉnh sửa 3: Đã xóa 8 byte trong Giải pháp 1 và 2 nhờ Jo King


Bạn đã có 6 khoảng trắng bên ngoài trong mã của mình
Jo King

@JoKing Tôi tìm thấy ba (sau dấu chấm phẩy, xung quanh +), những cái khác ở đâu?
Theo C

Trước if, for" "
Jo vua

Bạn cũng có thể xóa []trongjoin
Jo King

Một lần nữa, chào mừng bạn đến với PPCG! FYI theo mặc định (nghĩa là nếu không được ghi đè rõ ràng trong câu hỏi), các câu trả lời có thể là các hàm hoặc chương trình đầy đủ (như phiên bản 104 byte của bạn) nhưng không phải là đoạn trích (như phiên bản 96 byte của bạn). Tại đây bạn có thể gửi phiên bản tạo hàm trả về chuỗi cho 100 byte :)
Jonathan Allan

0

PowerShell , 63 byte

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

Hãy thử trực tuyến!

(Có vẻ dài ...)

Đưa đầu vào $args, chuyển đổi .ToUppertrường hợp, biến nó thành mộtchar -array, đưa nó vào một for eachvòng lặp. Bên trong vòng lặp, chúng ta trừ hoặc bản thân hoặc 64 từ giá trị (ASCII int), dựa trên hay không giá trị hiện tại là -inkhoảng 65đến 90(ví dụ, nó là một chữ cái viết hoa ASCII). Các giá trị đó được để lại trên đường ống và chúng tôi sử dụng một loại -not eđể loại bỏ các giá trị không phải là chữ cái (vì tất cả đều bằng không). Những con số đó được gói gọn trong một chuỗi vì việc xâu chuỗi mặc định của một mảng là để phân tách không gian, vì vậy chúng ta có được điều đó khá rẻ. Chuỗi đó được để lại trên đường ống và đầu ra là ẩn.


0

MS-SQL, 133 byte

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

Theo quy tắc IO của chúng tôi , đầu vào được lấy thông qua bảng t có sẵn với trường varchar s .

SQL 2017 trở lên là bắt buộc. Cũng phải được chạy trong mastercơ sở dữ liệu, vì tôi đang tận dụng một bảng hệ thống được gọi spt_values, mà (khi được lọc bởi type='P') chứa các số đếm từ 0 đến 2047.

Về cơ bản, tôi đang tham gia một bảng số với chuỗi đầu vào bằng cách sử dụng SUBSTRING(), nó trả về một hàng riêng cho từng ký tự riêng lẻ. Điều này được lọc chỉ cho các chữ cái bằng cách sử dụng LIKE'[a-z]', sau đó chúng tôi nhận được giá trị ASCII của chúng và trừ 64. Các số này được nối lại thành một chuỗi bằng cách sử dụng hàm (mới cho SQL 2017) STRING_AGG.


0

Bình thường , 10 byte

jdfTmhxGr0

Tôi khá chắc chắn rằng điều này có thể được chơi một chút ... -2 byte nếu tôi có thể xuất ra dưới dạng một danh sách, một số câu trả lời dường như nhưng nó không có trong thông số kỹ thuật

Hãy thử trực tuyến!


Bạn có thể loại bỏ cuối cùng d( jdfTmhGr0, 10 byte).
Ông Xcoder

0

C (gcc) , 67 byte

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

Hãy thử trực tuyến!

Chuyển đổi từng ký tự thành chữ thường, bù mã của nó bằng -96 và, nếu nó nằm trong phạm vi của bảng chữ cái 1 chỉ mục, hãy in mã bù


0

jq , 45 byte

[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

Dùng thử trực tuyến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.