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!
Jawaban:
05AB1E , (5?) 7 byte
Dua byte paling kanan adalah format output
Port jawaban Jelly saya , tetapi O5AB1E lebih ringkas untuk pemfilteran alfabet.
Cobalah online!
Bagaimana?
sumber
ðý
dapat ditambahkan. Tapi karena separuh dari daftar jawaban jawaban saya kira biarkan saja untuk saat ini.Java 8,
8278726962 byte-13 byte terima kasih kepada @ OlivierGrégoire .
Cobalah online.
Penjelasan:
sumber
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72bytes).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 byte) menggunakanchar[]
input sebagai ganti aString
.Python 3 ,
626049 byte-5 byte terima kasih kepada Jo King .
-8 byte berkat pLOPeGG .
Setelah perbaikan ini, jawaban ini sekarang mirip dengan Jonathan Allan 's jawaban .
Cobalah online!
sumber
%32
bekerja dengan baikR ,
5550 byteCobalah online!
Membaca input dari stdin,
mengonversi ke huruf besar,menghapushurufalfabet bukanhuruf besar, mengonversi ke titik kode,mengurangi ke 64mod pada 32, dan mencetak ke stdout, dipisahkan oleh spasi.Terima kasih kepada Kevin Cruijssen untuk golfnya!
sumber
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 1413 byte-4 byte terima kasih kepada Zacharý (dan Mr. Xcoder)!
-6 byte terima kasih kepada Adám!
-1 byte terima kasih kepada ngn!
Cobalah online!
Penjelasan:
Solusi awal saya:
APL (Dyalog Unicode) ,
2420 byteCobalah online!
Penjelasan:
Jangan menertawakan saya, saya baru di APL :)
sumber
{1(819⌶)⍵}
bisa1(819⌶)⊢
. Kalau tidak, pekerjaan luar biasa! Semoga Anda menikmati APL di masa depan!1
ke819⌶
dan menghemat lima dengan menghapus 27s langsung:27~⍨⎕A⍳819⌶⍨∘1
; atau ambil persimpangan dengan alfabet:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 byte
11 byte ditambahkan ke format output, yang juga membuat ini tidak sesuai dengan Python 3)
Port lain jawaban Jelly saya.
Cobalah online!
Versi tidak diformat (mengembalikan daftar bilangan bulat):
sumber
JavaScript (Node.js) ,
695554 byteCobalah online!
Penjelasan:
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
Cobalah online!
sumber
a-z
keA-Za-z
dani.toLowerCase().charCodeAt()-96
kei.charCodeAt()%32
parseInt(i,36)-9
menyimpan byte lain..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
memungkinkan Anda mendukung angka, meskipun tidak yakin apakah itu cara terbaik.Jelly , (7?) 8 byte
Byte paling kanan adalah pemformatan output
Program lengkap yang menerima string dalam format Python yang mencetak hasilnya ke STDOUT
Cobalah online!
Bagaimana?
sumber
Japt v2.0a0
-S
,1210 byteCobalah
Penjelasan
sumber
opcode x86, 35 byte
Anggap hasilnya mengandung setidaknya satu huruf, dan tidak
{|}~
40 byte, memungkinkan semua karakter ASCII
sumber
Stax ,
9109 byteJalankan dan debug itu
-1 byte terima kasih kepada @recursive
Penjelasan:
Stax , 7 byte
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.sumber
Ruang putih ,
152117 byte-35 byte terima kasih kepada @Lynn .
Huruf
S
(spasi),T
(tab), danN
(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:
sumber
05AB1E , 8 byte
Cobalah online!
atau, jika kita dapat mengembalikan array:
05AB1E , 6 byte
Penjelasan:
Cobalah online!
atau jika Anda ingin menghitung angka:
05AB1E , 13 byte
Cobalah online!
sumber
05AB1E , 14 byte
Menangani angka juga
Cobalah online!
sumber
Arang , 21 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Tambahkan digit ke variabel huruf kecil yang sudah ditentukan sebelumnya.
Ulangi input yang lebih kecil.
Jika karakter saat ini adalah huruf atau angka,
cetak indeks 1-indeksnya,
dan sisakan ruang untuk nilai selanjutnya.
sumber
Merah , 93 byte
Cobalah online!
sumber
#"a"-#"z"
diubah menjadi huruf kecil dan besar; dan kemudianlowercase
dapat dihapus; dan-96 + to-char c
dapatkah modulo-32? Tidak yakin apakah itu bahkan menyimpan byte Dalam Merah, meskipun.parse
Fungsi @KevinCruijssen mengumpulkan string bahkan ketika pertandingan adalah karakter tunggal, itu sebabnya saya selalu membutuhkannyato-char
. Untuk huruf besar saya perlu menambahkan ke charset # "A" - # "Z", yang merusak keuntungan (jika ada) dari menghilangkanlowercase
.#"A"-#"Z"
mungkin tidak mendapatkan banyak dibandingkanlowercase
, karena hanya 1 byte lebih pendek. Dan saya tahu Anda membutuhkannyato-char
, hanya tidak yakin apakah-96 +
dan modulo-32 akan memiliki ukuran yang serupa.Perl 5 , 47 byte
Dengan tantangan tambahan dari penguraian digit:
Cobalah online!
Dikurangi menjadi 38 byte dengan mengabaikan digit
sumber
PHP , 70 byte
Cobalah online!
-5 byte terima kasih kepada Kevin
sumber
&&
bisa&
, danord(strtolower($c))-96
bisaord($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.Perl 5
-p
, 35 byteCobalah online!
Termasuk bagian ekstra tentang digit.
sumber
/\w/
termasuk_
-F/[^0-9\pL]|/
: Coba online!Japt 2.0
-S
, 9 bytesJalankan secara online
Penjelasan:
sumber
Perl 6 , 32 byte (alfa), 41 byte (alfa + digit)
Cobalah (32 byte alpha)
Cobalah (41 byte alpha + digit)
Diperluas:
32 byte alpha
41 byte alpha + digit
sumber
Э
, tetapi saya sudah meminta klarifikasi dari OP tentang apakah inputnya hanya ASCII atau tidak.Tcl , 93 byte
Cobalah online!
sumber
PHP
108105 BytesCobalah 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
Penjelasan
sumber
strtolower($argv)
dan menghapus modalA-Z
dari regex.$argv[1]
atau$argn
bukan$argv
?join
lebih pendek 3 byte dariimplode
.Python 3 , 84 byte
Cobalah online!
sumber
Python 2,
110 byte104 byte , dengan input penggunaCobalah secara Online!
Python 2,
105 byte 104 byte96 byte , di manat
sudah ditentukan sebelumnya:Cobalah secara Online!
Mari kita uraikan dengan versi yang lebih mudah dibaca:
Pertama, kami mendefinisikan
alphabet
sebagai alfabet.Selanjutnya, kami menggunakan pemahaman daftar untuk:
t
Akhirnya, kami menggabungkan semuanya dan mencetaknya.
Sunting: Diubah menjadi
print
(dan kehilangan portabilitas) untuk menyimpan byte dan membuatnya berfungsi di luar fungsiSunting 2: Menambahkan versi dengan
input()
alih - alih variabel yang telah ditentukanSunting 3: Dihapus 8 byte dalam Solusi 1 dan 2 berkat Jo King
sumber
+
), di mana yang lain?if
,for
dan" "
[]
dalamjoin
PowerShell , 63 byte
Cobalah online!
(Sepertinya lama ...)
Mengambil input
$args
, mengonversi.ToUpper
kasusnya, melemparkannya sebagaichar
-array, mengumpankannya ke dalam satufor each
lingkaran. Di dalam loop, kita mengurangi nilai itu sendiri atau 64 dari nilai (ASCII int), berdasarkan pada apakah nilai saat ini adalah-in
rentang65
untuk90
(yaitu, ini merupakan huruf ASCII). Nilai-nilai itu dibiarkan di dalam pipa, dan kami menggunakan-n
ote
qual 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.sumber
MS-SQL, 133 byte
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
master
database, karena saya mengambil keuntungan dari tabel sistem yang disebutspt_values
, yang (ketika difilter olehtype='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 hurufLIKE'[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
.sumber
Pyth , 10 byte
Saya cukup yakin ini bisa sedikit golf ... -2 byte jika saya bisa menampilkan sebagai daftar, beberapa jawaban tampaknya tetapi tidak dalam spesifikasi
Cobalah online!
sumber
d
(jdfTmhGr0
, 10 byte).C (gcc) , 67 byte
Cobalah online!
Mengubah setiap karakter menjadi huruf kecil, mengimbangi kodenya dengan -96 dan, jika jatuh dalam kisaran alfabet 1-indeks, mencetak kode offset
sumber
jq , 45 byte
Cobalah online
sumber