Diberikan string yang tidak kosong yang hanya terdiri dari karakter dan spasi alfabet huruf kecil dan huruf besar ( [a-zA-Z ]
), kurangi menjadi potongan alfabet, dimulai dengan karakter pertama.
Untuk mengurangi string, mulailah dengan karakter alfabet pertama, lalu hapus setiap karakter setelah itu yang bukan huruf berikutnya dari alfabet. Lanjutkan melakukan ini sampai Anda mencapai akhir string.
Sebagai contoh codegolf
:
Mulailah dengan c
, hapus o
karena ini bukan huruf alfabet berikutnya.
Tetap d
seperti itu adalah huruf berikutnya alfabet, dan tetap e
seperti itu huruf berikutnya juga.
Hapus g
,, o
dan l
, dan simpan f
.
Cuplikan terakhir Anda akan menjadi cdef
Aturan
- Kapitalisasi harus dipertahankan, sehingga
CodEgolF
akan menghasilkanCdEF
- Spasi bukan huruf alfabet, dan karenanya harus selalu dihapus, bahkan jika itu adalah awal dari string
- Karena sifat reduksi, karakter alfabet pertama dari input akan selalu menjadi karakter pertama dari output.
zZ
adalah huruf terakhir dari alfabet. Tidak ada huruf setelahnya, alfabet tidak berulang.
Uji Kasus
codegolf -> cdef
CodEgolf -> CdEf
codeolfg -> cdefg
ProgrammingPuzzles -> P
Stack Exchange -> St
The quick red fox jumped over the lazy brown dog -> Tuvw
Zebra -> Z
Abcdegfhijkl -> Abcdef
Mencetak gol
Ini adalah kode-golf , sehingga byte paling sedikit di setiap bahasa menang!
z
Kita hanya berhenti, kan?<space>codegolf
Jawaban:
JavaScript (ES6),
66796867 byteBagaimana?
Menguji huruf berturut-turut
Karena mengonversi dua karakter ke kode ASCII mereka akan menjadi operasi yang agak panjang di JS, kami menggunakan rumus berikut sebagai gantinya:
Asalkan kedua a dan b berada di
[a-zA-Z ]
, ekspresi di atas sama dengan0
jika dan hanya jika a dan b adalah huruf berurutan (yaitu digit berurutan dalam basis 36), tidak peduli kasus karakternya.Contohnya:
Diformat dan dikomentari
Uji kasus
Tampilkan cuplikan kode
sumber
Python 2 , 69 byte
Cobalah online!
Pengurangan sederhana dari string. Kami hanya menggabungkan karakter berikutnya jika dan hanya jika
(ord(y)-ord(x[~0]))%32==1
. Pemeriksaan sangat jelek - Saya yakin ini bisa diperbaiki, tapi saya tidak yakin bagaimana caranya!sumber
from functools import*
.import functools as f
danf.
jauh lebih lama dari yangfrom functools import*
pasti, bahkan digunakan sekali. Lihat utas ini untuk informasi lebih lanjut.Python 3 ,
75 85 84 91 81 7775 byteSaya pikir ini sesingkat itu bisa di Python 3 . Itu dapat dipersingkat oleh beberapa byte dalam Python 2, seperti yang ditunjukkan dalam pengajuan Sisyphus .
Cobalah online!
sumber
05AB1E , 13 byte
Cobalah online!
-1 terima kasih kepada Adnan
sumber
ðK
denganá
?Brachylog , 15 byte
Cobalah online!
Ini akan menjadi 10 byte:,
⊇.ḷ~sẠ&h~h
jika bukan karena kendala "string dapat mulai dengan spasi" yang tidak menarik.Penjelasan
Karena ini cukup deklaratif, ini juga sangat lambat.
sumber
MATL ,
181615 byteTerima kasih kepada Mr.Xcoder karena menunjukkan kesalahan, sekarang diperbaiki
Huruf dalam output dipisahkan oleh baris baru.
Cobalah online! Atau verifikasi semua kasus uji (kode footer menampilkan semua huruf keluaran pada baris yang sama untuk kejelasan).
Penjelasan
sumber
Java (OpenJDK 8) ,
10210174 byteCobalah online!
-27 byte terima kasih kepada @Olivier Grégoire
sumber
s->{char c=0;for(char x:s)if(c<33&x>33|~-x%32==c%32)System.out.print(c=x);}
(denganchar[]
input)C # (Mono) ,
129107939187 byteDisimpan 2 byte berkat @Mr. Xcoder.
Disimpan 4 byte berkat @jkelm.
Cobalah online!
sumber
(c-1)%32
adalah~-c%32
PHP, 64 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .Terlepas dari trik yang biasa: Ketika
$c
mencapaiZ
,++$c
menghasilkanAA
,dan
&__
menjaga panjang itu tidak tersentuh; jadi tidak$n
akan cocok lagi$c
.sumber
Pyth ,
23 22 2120 byte-1 byte secara tidak langsung berkat @Erik trik Outgolfer (
-Qd
) .-1 byte terima kasih kepada @Erik the Outgolfer.
Coba di sini.
sumber
Haskell,
106 10597 byteSaya mencoba menggunakan
fromEnum
aritmatika + char alih-alih mengimporData.Char
, tapi itu berakhir lebih lama ...Disimpan 8 byte berkat H.PWiz!
Cobalah online.
sumber
filter
Data.List
Pyth,
212018 byteCoba di sini.
Versi 20-byte yang lebih efisien:
Coba di sini.
-1 terima kasih kepada Tn. Xcoder (secara tidak langsung).
sumber
.U+b?tlrreb1rZ1kZrz6
(saya pikir). Trik itu membantu saya..U+b?tlrreb1rZ1kZr6
tetapi sayangnyar <str> 6
berartiA.strip()
, tidak menghapus spasi kosong yang tidak terkemuka atau tertinggal.32
, sementara semua surat memiliki> 64
, dan dengan demikian tidak mempengaruhi fungsi. Saya pikir ini berlaku untuk jawaban Anda juga.Perl 6 , 51 byte
Menguji
Diperluas:
Perhatikan bahwa
<!before …>
pernyataan lebar nolsumber
Jelly , 17 byte
Cobalah online!
sumber
Japt ,
181716 byteDisimpan 1 byte berkat @Shaggy
Uji secara online!
Berpikir ini akan menjadi sedikit lebih baik, tapi ... Seperti itulah kehidupan ...
Penjelasan
sumber
rS
denganx
.C # (.NET Core) ,
7060 + 18 byte-10 byte terima kasih kepada TheLethalCoder
Hitungan byte juga mencakup:
Cobalah online!
1 byte lebih lama
(saat ini)(tidak lagi) daripada posting TheLethalCoder untuk kesenangan. Pendekatan berbeda, dengan LINQ.Ini mengambil keuntungan dari dua fitur mirip-C dalam C # -
char
variabel karakter secara implisit berperilaku sama dengan integerint
, dan operator boolean DAN&&
tidak menjalankan operasi yang benar jika kiri mengembalikan afalse
. Penjelasan kode:sumber
.ToArray()
dengan mengembalikan sebagaiIEnumerable<char>
untuk menyimpan byte.q / kdb +,
4745 byteLarutan:
Contoh:
Penjelasan:
Memanfaatkan
mod 32
trik dari solusi yang ada bersama dengan fungsi konvergen . Iterate atas string, jika perbedaan antara elemen terakhir dari hasil (misalnya dimulai denganT
untuk "rubah merah cepat ...") dan karakter saat ini adalah 1 (setelahmod
'd dengan 32), maka kita tambahkan ini ke hasilnya (oleh karena itu mengambil mengapa kita mengambillast x
), lalu melemparkan semuanya kembali ke string.sumber
Perl 5 , 30 + 1 (-n) = 31 byte
Cobalah online!
Bagaimana?
sumber
Retina , 76 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Hapus spasi.
Rangkap tiga karakter pertama dan masukkan pemisah.
Konversikan karakter kedua dan ketiga menjadi huruf kecil dan tambahkan mereka. Ubah yang terakhir menjadi huruf besar. Sekarang ini adalah karakter pencarian.
Cobalah untuk mencocokkan salah satu karakter pencarian. Jika ditemukan, rangkap tiga pertandingan, yang memulai ulang loop untuk pencarian berikutnya. Jika tidak, hapus saja karakter pencarian dan sisa input.
sumber
8 , 114 byte
Kode
Penjelasan
Contoh
sumber
C (gcc) ,
79787570 byteCobalah online!
sumber
Proton , 59 byte
Pengajuan Port Python 2 .
Cobalah online!
sumber
Pyth, 15 byte
Suite uji
Tidak seperti semua jawaban lain, ini tidak menyatukan output, itu menghasilkan semua urutan input, dan kemudian memerintahkan mereka untuk meletakkan string yang diinginkan di akhir, dan output itu.
sumber
J, solusi parsial
Saya memposting ini untuk umpan balik dan ide untuk perbaikan lebih dari apa pun. Ini bekerja, tetapi tidak menangani huruf kapital dan spasi, dan sudah lama untuk J.
Pertama kata kerja pembantu diad yang memberi tahu Anda jika args kiri dan kanan berbatasan dengan abjad:
Berikutnya kata kerja yang menghilangkan elemen pertama yang bukan bagian dari garis alfabet mulai dari elemen pertama:
Catatan kami menggunakan Adverse
::
untuk mengembalikan seluruh argumen tidak berubah jika tidak ada elemen non-streak ditemukan (yaitu, jika seluruh argumen adalah beruntun alfabet yang valid).Akhirnya, solusi diberikan dengan menerapkan
f
hingga konvergensi:Cobalah online!
Dan ini adalah versi yang diuraikan
f
untuk memudahkan membaca:Pertanyaan Samping : mengapa karakter kotak tidak selaras sempurna saat ditampilkan pada SO (mereka bekerja di konsol saya):
sumber