Pencari Posisi Alfabet

10

Terinspirasi oleh Codewars Kata .

Tujuan Anda adalah mengambil string masukan seperti ini:

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

dan mengembalikan string yang berisi posisi setiap karakter dalam alfabet, dipisahkan oleh spasi dan mengabaikan karakter non-alfabet, seperti ini:

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

Untuk tantangan tambahan, Anda dapat mengganti karakter numerik apa pun dalam string asli dengan diri mereka sendiri + 27. Misalnya, "25"akan menjadi "29, 32". Ini sepenuhnya opsional.

Anda harus menggunakan 1-pengindeksan ( 'a'==1, 'b'==2, dll)

Aturan tambahan:

  • Anda harus mengembalikan string, bukan array.

  • Trailing whitespace OK.

Pemenang memiliki jumlah byte terendah.

Semoga berhasil!

Theo C
sumber
terkait erat
Giuseppe
5
@TheoC Mengapa? Konsensus umum adalah bahwa jawaban harus dapat dihasilkan dalam format apa pun yang masuk akal, karena mungkin menambah terlalu banyak mengasapi dan membuatnya tidak adil untuk bahasa yang dapat bergabung dengan spasi dengan cara yang lebih pendek.
Okx
1
@TheoC Mengapa Anda tidak mengizinkan keduanya saja?
Okx
3
Selamat datang di PPCG! Ini adalah tantangan yang layak secara keseluruhan, tetapi untuk lain kali Anda memposting tantangan, berikut adalah beberapa hal yang perlu diingat. 1) Tantangan ini cukup sederhana. Saya pikir akan lebih menarik jika bagian opsional wajib (catatan, jangan ubah bagian itu sekarang, sudah terlambat). 2) Anda cukup membatasi tentang beberapa bagian yang sewenang-wenang. Mengapa tidak mengizinkan array? Ini standar kami daripada serangkaian karakter adalah string . Saya akan merekomendasikan membaca utas ini untuk ide-ide.
James
2
Catatan masa depan: pengindeksan 1 dan 0 biasanya satu dan sama, dan keduanya biasanya diizinkan. Juga, membatasi format output disukai. Jika daftar nilai biarkan bahasa memutuskan format. Tantangannya bukan tentang memformat output juga bukan tentang menggeser indeks. Oleh karena itu, itu tidak boleh menjadi kendala ketika Anda bisa membiarkan bahasa melakukan apa yang mereka lakukan secara alami dan fokus pada maksud tantangan.
Magic Gurita Guci

Jawaban:

5

05AB1E , (5?) 7 byte

Dua byte paling kanan adalah format output

áÇ32%ðý

Port jawaban Jelly saya , tetapi O5AB1E lebih ringkas untuk pemfilteran alfabet.

Cobalah online!

Bagaimana?

áÇ32%ðý - take input implicitly
á       - filter keep alphabetical characters
 Ç      - to ordinals
  32    - thirty-two
    %   - modulo (vectorises)
     ð  - push a space character
      ý - join
Jonathan Allan
sumber
Karena OP ingin itu dicetak dibagi dengan spasi, sebuah trailing ðýdapat ditambahkan. Tapi karena separuh dari daftar jawaban jawaban saya kira biarkan saja untuk saat ini.
Kevin Cruijssen
Ah. Saya telah melewatkannya dalam jawaban saya ...
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 terima kasih kepada @ OlivierGrégoire .

Cobalah online.

Penjelasan:

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
sumber
1
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})(72bytes).
Olivier Grégoire
1
@ OlivierGrégoire Terima kasih! Dan -3 byte lebih banyak dengan mengubahnya menjadi terner jika. :)
Kevin Cruijssen
s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}(62 byte) menggunakan char[]input sebagai ganti a String.
Olivier Grégoire
4

R , 55 50 byte

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

Cobalah online!

Membaca input dari stdin, mengonversi ke huruf besar, menghapus huruf alfabet bukan huruf besar , mengonversi ke titik kode, mengurangi ke 64 mod pada 32, dan mencetak ke stdout, dipisahkan oleh spasi.

Terima kasih kepada Kevin Cruijssen untuk golfnya!

Giuseppe
sumber
50 byte
Kevin Cruijssen
@KevinCruijssen * facepalm * duh
Giuseppe
Saya telah menambahkan dua komentar (pertanyaan) ke pertanyaan - tergantung pada jawabannya ada peluang untuk bermain golf ini hingga 46 atau bahkan 39 karakter.
JayCe
1
Anda dapat melakukan 47 dengan menggunakan[^A-z]
MickyT
4

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

-4 byte terima kasih kepada Zacharý (dan Mr. Xcoder)!

-6 byte terima kasih kepada Adám!

-1 byte terima kasih kepada ngn!

A⍳⎕A∩⍨≡819⌶⊢

Cobalah online!

Penjelasan:

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

Solusi awal saya:

APL (Dyalog Unicode) , 24 20 byte

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

Cobalah online!

Penjelasan:

                        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)

Jangan menertawakan saya, saya baru di APL :)

Galen Ivanov
sumber
1
Itu sebenarnya sangat bagus untuk seseorang yang baru mengenal APL! Anda tidak perlu tanda kurung, itu diasumsikan. Juga, {1(819⌶)⍵}bisa 1(819⌶)⊢. Kalau tidak, pekerjaan luar biasa! Semoga Anda menikmati APL di masa depan!
Zacharý
@ Zacharý Terima kasih! Saya harap begitu (saya memiliki pengetahuan dalam J, saya tidak sepenuhnya baru dalam bahasa array)
Galen Ivanov
1
Seperti yang dicatat Zachary, tanda kurung diasumsikan , jadi Anda tidak perlu memasukkannya ke dalam jumlah byte, menghasilkan 20 byte.
Tn. Xcoder
1
@Jonah saya menambahkan penjelasan. Anda benar, memanfaatkan huruf besar dan alfabet itu sendiri jauh lebih mahal di J.
Galen Ivanov
1
Pekerjaan yang baik! Anda dapat menyimpan byte dengan menyusun 1ke 819⌶dan menghemat lima dengan menghapus 27s langsung: 27~⍨⎕A⍳819⌶⍨∘1; atau ambil persimpangan dengan alfabet:⎕A⍳⎕A∩⍨819⌶⍨∘1
Adám
3

Python 2 , (45?) 55 byte

11 byte ditambahkan ke format output, yang juga membuat ini tidak sesuai dengan Python 3)

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

Port lain jawaban Jelly saya.

Cobalah online!


Versi tidak diformat (mengembalikan daftar bilangan bulat):

lambda s:[ord(c)%32for c in s if c.isalpha()]
Jonathan Allan
sumber
1
Sepertinya OP bersikeras pada output string yang dipisahkan oleh spasi, sayangnya
Sok
1
Yap - Saya melewatkan itu pada semua jawaban saya - orang menjadi sangat terbiasa dengan norma-norma situs!
Jonathan Allan
3

JavaScript (Node.js) , 69 55 54 byte

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

Cobalah online!

Penjelasan:

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 disimpan berkat @Kevin

1 byte lagi berkat @Neil


Anda dapat menambahkan dukungan untuk numerik untuk beberapa byte tambahan (terima kasih kepada @neil)

JavaScript (Node.js) , 62 byte

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

Cobalah online!

Muhammad Salman
sumber
-11 byte dengan mengubah a-zke A-Za-zdan i.toLowerCase().charCodeAt()-96kei.charCodeAt()%32
Kevin Cruijssen
1
parseInt(i,36)-9menyimpan byte lain.
Neil
.match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)memungkinkan Anda mendukung angka, meskipun tidak yakin apakah itu cara terbaik.
Neil
2

Jelly , (7?) 8 byte

Byte paling kanan adalah pemformatan output

fØẠO%32K

Program lengkap yang menerima string dalam format Python yang mencetak hasilnya ke STDOUT

Cobalah online!

Bagaimana?

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
sumber
2

Japt v2.0a0 -S, 12 10 byte

r\L ¨c uH

Cobalah


Penjelasan

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

opcode 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

Anggap hasilnya mengandung setidaknya satu huruf, dan tidak {|}~

40 byte, memungkinkan semua karakter 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
sumber
Apa itu "x86 opcode"? Apakah ini hanya pengiriman kode mesin x86?
Jakob
@ Jakob benar. Saya di sini tidak mengatakan ".COM" karena ini adalah fungsi dan tidak bergantung pada format ".COM"
l4m2
Hmm. Ya, saya pikir itu diasumsikan bahwa solusi kode mesin tidak harus dapat dieksekusi lengkap. Mungkin sebenarnya lebih baik untuk hanya memberi label "kode mesin x86"
Jakob
2

Stax , 9 10 9 byte

üpÉÿ%}},√

Jalankan dan debug itu

-1 byte terima kasih kepada @recursive

Penjelasan:

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»↔"

Jalankan dan debug itu

Yang ini menghasilkan baris baru yang dipisahkan. Membongkar: vmVaI^|c. Serupa, tetapi dengan peta, yang secara implisit menghasilkan dengan mengekor baris baru.

wastl
sumber
Hm Tampaknya ada masalah program pengemasan yang berakhir di luar angkasa
rekursif
@recursive Oh, tidak memperhatikan itu (biasanya saya mencoba tautannya, tetapi ternyata saya lupa di sini). Saya menambahkan solusi.
wastl
Saya tidak pernah memperhatikan bug ini. Saya akan memperbaikinya dalam rilis Stax berikutnya. Program dikemas yang ada akan tetap tidak berubah.
rekursif
Ini adalah angka 9 untuk masalah Anda.
rekursif
2

Ruang putih , 152 117 byte

-35 byte terima kasih kepada @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]

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online (dengan spasi, tab, dan baris baru saja).

Penjelasan dalam pseudo-code:

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
sumber
1
Saya tidak punya waktu untuk menulis di Whitespace, tapi mungkin Anda bisa menulis sesuatu seperti ini
Lynn
1
Sepertinya itu 117 byte ! (* Saya mengubah 64 hingga 63 dalam kode, karena itu setara tetapi lebih pendek untuk diwakili di Whitespace) :)
Lynn
@ Lynn Tidak buruk, -35 byte di sana. Terima kasih. :)
Kevin Cruijssen
1

05AB1E , 14 byte

Menangani angka juga

žKÃlvžKlÙyk>ðJ

Cobalah online!

Emigna
sumber
1

Arang , 21 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

≔⁺β⭆χιβ

Tambahkan digit ke variabel huruf kecil yang sudah ditentukan sebelumnya.

F↧S

Ulangi input yang lebih kecil.

¿№βι«

Jika karakter saat ini adalah huruf atau angka,

I⊕⌕βι

cetak indeks 1-indeksnya,

dan sisakan ruang untuk nilai selanjutnya.

Neil
sumber
1

Merah , 93 byte

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

Cobalah online!

Galen Ivanov
sumber
Saya tidak cukup tahu tentang Red, tetapi dapat #"a"-#"z"diubah menjadi huruf kecil dan besar; dan kemudian lowercasedapat dihapus; dan -96 + to-char cdapatkah modulo-32? Tidak yakin apakah itu bahkan menyimpan byte Dalam Merah, meskipun.
Kevin Cruijssen
@Kevin Cruijssen Terima kasih, saya akan mencobanya nanti
Galen Ivanov
parseFungsi @KevinCruijssen mengumpulkan string bahkan ketika pertandingan adalah karakter tunggal, itu sebabnya saya selalu membutuhkannya to-char. Untuk huruf besar saya perlu menambahkan ke charset # "A" - # "Z", yang merusak keuntungan (jika ada) dari menghilangkanlowercase .
Galen Ivanov
Ya, saya agak takut #"A"-#"Z"mungkin tidak mendapatkan banyak dibandingkan lowercase, karena hanya 1 byte lebih pendek. Dan saya tahu Anda membutuhkannya to-char, hanya tidak yakin apakah -96 + dan modulo-32 akan memiliki ukuran yang serupa.
Kevin Cruijssen
1

Perl 5 , 47 byte

Dengan tantangan tambahan dari penguraian digit:

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

Cobalah online!

Dikurangi menjadi 38 byte dengan mengabaikan digit

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

PHP , 70 byte

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

Cobalah online!

-5 byte terima kasih kepada Kevin

pengguna2803033
sumber
Cuplikan tidak diizinkan sebagai kiriman di sini, tetapi Anda dapat menjadikannya fungsi atau program lengkap.
Nissa
Maaf, sekarang ia menggunakan argumen pertama sebagai input
user2803033
Hai, selamat datang di PPCG! Jika Anda belum melakukannya, kiat untuk bermain golf di PHP dan kiat untuk bermain golf di <semua bahasa> mungkin menarik untuk dibaca. Adapun bagian Anda bisa golf: &&bisa &, dan ord(strtolower($c))-96bisa ord($c)%32. Juga, saya pikir Anda dapat menghapus ~sebelumnya $c, tapi saya tidak yakin. Belum banyak diprogram dalam PHP, dan tidak benar-benar tahu apa yang ~digunakan di sini.
Kevin Cruijssen
Terima kasih atas masukan Anda. Mod 32 adalah ide yang bagus. Menghemat beberapa byte tetapi membutuhkan pemeriksaan tambahan untuk memastikan bahwa ord ($ c) lebih besar dari 64.
user2803033
1

Perl 5 -p , 35 byte

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

Cobalah online!

Termasuk bagian ekstra tentang digit.

Xcali
sumber
1
/\w/termasuk_
Brad Gilbert b2gills
Jauh lebih kecil dari apa yang telah saya mainkan! Anda dapat menyimpan satu byte, dan memperbaiki bug @ BradGilbertb2gills yang disebutkan, menggunakan -F/[^0-9\pL]|/: Coba online!
Dom Hastings
1

Japt 2.0 -S, 9 bytes

f\l ®c %H

Jalankan secara online

Penjelasan:

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
sumber
1

Perl 6 , 32 byte (alfa), 41 byte (alfa + digit)

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

Cobalah (32 byte alpha)

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

Cobalah (41 byte alpha + digit)

Diperluas:

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 + digit

{  # 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
sumber
Ini juga cocok dengan karakter non-ASCII seperti Э, tetapi saya sudah meminta klarifikasi dari OP tentang apakah inputnya hanya ASCII atau tidak.
Jo King
1

Tcl , 93 byte

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

Cobalah online!

sergiol
sumber
1

PHP 108 105 Bytes

Cobalah online (108 Bytes)

Tri online (105 Bytes)

-3 Bytes, terima kasih kepada @manassehkatz (Ubah tingkat strtolower dan hapus AZ dari regex)

Kode, mencoba menghindari loop apa pun

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

Penjelasan

$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
sumber
Untuk menjalankan ini tanpa Peringatan, saya harus (a) mengubah $ argv menjadi $ argv [1] dan (b) menambahkan "di sekitar z terakhir. Tetapi dengan atau tanpa perubahan itu (yang mungkin tergantung pada versi - I Saya menggunakan 5.6), Anda dapat menghemat 3 byte dengan menggerakkan strtolower () di level strtolower($argv)dan menghapus modal A-Zdari regex.
manassehkatz-Moving 2 Codidact
Pada php 7 itu peringatan, saya akan mengubah jawabannya sekarang. Maaf, tidak ada waktu untuk memeriksa :-D
Francisco Hahn
1
@manassehkatz Mengambil saran Anda, dan menyelamatkan 3 Bytes, terima kasih banyak.
Francisco Hahn
Bukankah seharusnya itu $argv[1]atau $argnbukan $argv? joinlebih pendek 3 byte dari implode.
Titus
0

Python 2, 110 byte 104 byte , dengan input pengguna

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

Cobalah secara Online!


Python 2, 105 byte 104 byte 96 byte , di mana tsudah ditentukan sebelumnya:

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

Cobalah secara Online!

Mari kita uraikan dengan versi yang lebih mudah dibaca:

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

Pertama, kami mendefinisikan alphabet sebagai alfabet.

Selanjutnya, kami menggunakan pemahaman daftar untuk:

  1. Buat daftar dari mana setiap item merupakan karakter huruf kecil t
  2. Untuk setiap huruf, jika tidak ada dalam alfabet, buanglah.
  3. Jika ya, cari indeksnya dalam alfabet,
  4. tambahkan satu ke dalamnya (karena kita mulai menghitung pada 1)
  5. dan membuatnya menjadi string.

Akhirnya, kami menggabungkan semuanya dan mencetaknya.


Sunting: Diubah menjadi print(dan kehilangan portabilitas) untuk menyimpan byte dan membuatnya berfungsi di luar fungsi

Sunting 2: Menambahkan versi dengan input()alih - alih variabel yang telah ditentukan

Sunting 3: Dihapus 8 byte dalam Solusi 1 dan 2 berkat Jo King

Theo C
sumber
Anda mendapat 6 spasi di luar kode Anda
Jo King
@JoKing saya menemukan tiga (setelah titik koma, sekitarnya +), di mana yang lain?
Theo C
Sebelum if, fordan" "
Jo King
Anda juga dapat menghapus []dalamjoin
Jo King
Sekali lagi, selamat datang di PPCG! FYI secara default (yaitu jika tidak secara eksplisit ditimpa dalam pertanyaan) kiriman jawaban dapat berupa fungsi atau program penuh (seperti versi 104 byte Anda) tetapi bukan snippet (seperti versi 96 byte Anda). Di sini Anda bisa mengirimkan versi yang membuat fungsi yang mengembalikan string sebesar 100 byte :)
Jonathan Allan
0

PowerShell , 63 byte

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

Cobalah online!

(Sepertinya lama ...)

Mengambil input $args, mengonversi .ToUpperkasusnya, melemparkannya sebagai char-array, mengumpankannya ke dalam satu for eachlingkaran. Di dalam loop, kita mengurangi nilai itu sendiri atau 64 dari nilai (ASCII int), berdasarkan pada apakah nilai saat ini adalah -inrentang65 untuk 90(yaitu, ini merupakan huruf ASCII). Nilai-nilai itu dibiarkan di dalam pipa, dan kami menggunakan -not equal untuk menghilangkan nilai-nilai non-huruf (karena semuanya nol). Angka-angka tersebut dienkapsulasi dalam sebuah string karena stringifikasi default dari array adalah untuk memisahkannya, jadi kita mendapatkannya dengan cukup murah. String itu ditinggalkan di pipeline dan outputnya implisit.

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

Sesuai aturan IO kami , input diambil melalui tabel t yang sudah ada dengan bidang varchar s .

Diperlukan SQL 2017 atau yang lebih baru. Juga harus dijalankan dalam masterdatabase, karena saya mengambil keuntungan dari tabel sistem yang disebut spt_values, yang (ketika difilter oleh type='P') berisi penghitungan angka dari 0 hingga 2047.

Pada dasarnya saya bergabung dengan tabel angka dengan menggunakan string input SUBSTRING(), yang mengembalikan baris terpisah untuk setiap karakter individu. Ini difilter untuk hanya menggunakan huruf LIKE'[a-z]', maka kita mendapatkan nilai ASCII dan mengurangi 64. Angka-angka ini digabungkan kembali ke string menggunakan fungsi (baru ke SQL 2017) STRING_AGG.

BradC
sumber
0

Pyth , 10 byte

jdfTmhxGr0

Saya cukup yakin ini bisa sedikit golf ... -2 byte jika saya bisa menampilkan sebagai daftar, beberapa jawaban tampaknya tetapi tidak dalam spesifikasi

Cobalah online!

Dave
sumber
Anda dapat menghapus yang terakhir d( jdfTmhGr0, 10 byte).
Tn. Xcoder
0

C (gcc) , 67 byte

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

Cobalah online!

Mengubah setiap karakter menjadi huruf kecil, mengimbangi kodenya dengan -96 dan, jika jatuh dalam kisaran alfabet 1-indeks, mencetak kode offset

ay
sumber
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

Cobalah online

Naïm Favier
sumber