Diberikan dua string surat, transfer pola kapitalisasi setiap string ke yang lain. Bytes paling sedikit menang.
Input: CodeGolf xxPPCGxx
Output: coDEGOlf XxppCgxx
- Kedua string akan memiliki panjang yang sama dan kosong, dengan hanya huruf
a..z
danA..Z
. - Anda dapat menampilkan dua string yang dihasilkan dalam urutan mana pun relatif terhadap input.
- Anda dapat mewakili sepasang string sebagai satu string dengan pemisah satu karakter non-huruf untuk input dan / atau output.
- Anda dapat mewakili string sebagai daftar karakter atau string satu karakter, tetapi tidak sebagai urutan nilai titik kode kecuali ini hanya string dalam bahasa Anda.
- Input dan output Anda mungkin mewakili string yang berbeda.
Kasus uji:
CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx
lower UPPER -> LOWER upper
MiXeD lower -> mixed LoWeR
A A -> A A
ABcd EfGh -> AbCd EFgh
array[i++%n]+=...;
?array[t=i++%n]=array[t]+...;
bekerja dengan baik; danarray[i%n]+=...;i++;
berfungsi dengan baik juga, tetapi menggunakani++
atau++i
dengan modulo dan+=
untuk menambahkan ke baris dalam array tidak berfungsi .. Berikut Java 10 TIO sebagai contoh untuk melihat masalahnya. Apakah ini bug (atau fitur: S) di Java 10 JDK atau di compiler Java 10 TIO?String
menjadivar
.C (gcc) ,
86585553 byteCobalah online!
sumber
f(S,Z)char*S,*Z;{for(int d;d=(*Z^*S)&32,*Z++^=d;)*S++^=d;}
c(a,s,e)char*a,*s;{for(;*s++^=e=(*s^*a)&32;)*a++^=e;}
(53 byte)Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
APL (Dyalog Classic) ,
1312 byteCobalah online!
input dan output adalah matriks karakter 2 × N
⎕a
adalah alfabet bahasa Inggris huruf besar'ABC...Z'
∊∘⎕a
mengembalikan matriks boolean yang menunjukkan huruf mana dalam input huruf besar819⌶
mengonversi argumen kanan menjadi huruf besar atau kecil bergantung pada argumen kiri boolean ("819" adalah leetspeak untuk "BIG")819⌶¨⍨
apakah itu untuk setiap¨
karakter ( ), menukar (⍨
) argumen⊖
berarti membalikkan secara vertikal; yang satu⊖
bertindak sebagai argumen kiri819⌶
dan yang lain adalah tindakan terakhirsumber
"819" is leetspeak for "BIG"
... Serius? Itulah penjelasan sebenarnya mengapa 819? 0_oPyth , 10 byte
Coba di sini!
Penjelasan & Trik Pyth rapi digunakan
rVV_mmrIk1
- Program lengkap. Input diambil dari STDIN sebagai daftar dua string, dan output ditulis ke STDOUT sebagai daftar dua daftar karakter.mm
- Untuk setiap karakter di setiap string:Ik
- Periksa apakah itu invarian di bawah ...r...1
- ... Mengubah ke huruf besar. Menghasilkan Benar untuk karakter huruf besar dan Salah untuk huruf kecil._
- Balikkan daftar itu.VV
- Dan double-vectorize fungsi berikut pada dua daftar:r
- Konversikan ke huruf besar jika nilainyaTrue
(alias1
), atau dikonversi ke huruf kecilKiriman ini menyalahgunakan fakta bahwa
r0
danr1
adalah fungsi huruf kecil dan huruf besar dalam Pyth, dan kami menggunakan nilai kebenaran (nilai yang diperoleh dengan memeriksa jika setiap karakter huruf besar, terbalik) menghasilkanTrue
untuk huruf besar danFalse
untuk huruf kecil. Fakta bahwa boolean adalah subclass dari bilangan bulat di Python sangat berguna untuk pendekatan yang digunakan jawaban ini. Porting pendekatan Dennis dan Jonathan's Jelly menghasilkan lebih dari 18 byte, jadi saya cukup senang dengan trik khusus Pyth yang digunakan di sini.sumber
MATL , 11 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Haskell , 78 byte
Cobalah online!
sumber
isUpper x
bisax<'a'
.J ,
36 3127 byte-9 byte berkat FrownyFrog!
Cobalah online!
Solusi sebelumnya adalah:
J ,
3631 byte-5 byte terima kasih kepada FrownyFrog!
Cobalah online!
Bagaimana itu bekerja:
sumber
[:
dapat 0 dan(22 b.)
dapatXOR
.&.(3&u:)
menghemat 1 byte."
dan$
? Terima kasih!,:
, ada 2 baris di sisi kiri. Kami membutuhkan"(1)
tetapi"$
bekerja juga, karena itu singkatan"1 _
.$ b.0
memberikan peringkat $ (monadik, kiri diad, kanan diad).R ,
118 94 7572 byteCobalah online!
Pasti ada cara yang jauh lebih golf.-43 byte terima kasih kepada Giuseppe yang menunjuk saya ke solusi MATL oleh Luis Mendo. TIO link berisi solusi fungsi untuk jumlah byte yang sama.Bonus: Outputnya adalah vektor bernama yang namanya adalah string input asli!
sumber
a<-
karena tidak menggunakana
tempat lain.kode mesin x86-64, 14 byte
Callable from C (konvensi pemanggilan SysV x86-64) dengan prototipe ini:
Versi eksplisit-panjang dengan panjang dalam
rcx
adalah ukuran yang sama.void casexchg(char *rdi, char *rsi, int dummy, size_t len);
Ini menggunakan bit-exchange algo yang sama dengan jawaban C dan Java: Jika kedua huruf sama, tidak perlu diubah. Jika mereka bertolak belakang, mereka berdua perlu berubah.
Gunakan XOR untuk membedakan bit case dari dua string.
mask = (a XOR b) AND 0x20
adalah 0 untuk sama atau 0x20 untuk berbeda.a ^= mask; b ^= mask
caseflip kedua huruf jika mereka kasus sebaliknya. (Karena kode huruf ASCII untuk atas dan bawah hanya berbeda dalam bit 5.)Daftar NASM (dari
nasm -felf64 -l/dev/stdout
). Gunakancut -b 26- <casexchg.lst >casexchg.lst
untuk mengubah ini kembali menjadi sesuatu yang dapat Anda kumpulkan.loop
Instruksi lambat juga 2 byte, sama dengan pendekjcc
.scasb
masih merupakan cara terbaik untuk meningkatkanrdi
instruksi satu byte. Saya kira kita bisaxor al, [rdi]
/stosb
. Itu akan menjadi ukuran yang sama tetapi mungkin lebih cepat untukloop
kasus ini (memory src + store lebih murah daripada memory dst + reload). Dan masih akan mengatur ZF dengan tepat untuk kasus panjang implisit!Cobalah online! dengan _start yang memanggilnya pada argv [1], argv [2] dan menggunakan sys_write pada hasilnya
sumber
k , 14 byte
Cobalah online! Input / output adalah daftar dua string.
sumber
Python 3 , 83 byte
Cobalah online!
-3 byte terima kasih kepada Tn. Xcoder
-3 byte terima kasih kepada Chas Brown
sumber
Haskell , 78 byte
Cobalah online!
sumber
QBasic, 133 byte
Mengambil dua string yang dipisahkan koma dan mengeluarkan hasil yang dipisahkan baris baru. Menggunakan algoritma bit-fiddling dari jawaban Dennis's Jelly . Selain itu, trik golf utama di sini adalah string hasil pertama dicetak secara langsung, satu karakter pada satu waktu, yang sedikit lebih pendek daripada menyimpan kedua string hasil dalam variabel dan mencetaknya di luar loop.
sumber
JavaScript,
777473 byteTampilkan cuplikan kode
Mengambil array array char, menghasilkan array array char.
-1 byte ( @Arnauld ):
c>'Z'
→c>{}
sumber
c>{}
.Retina , 75 byte
Cobalah online! Penjelasan: Baris baru digunakan sebagai penanda untuk menentukan berapa banyak string yang telah diproses. Regex mencoba mencocokkan dengan huruf besar atau gagal karakter apa pun. Jika huruf besar dicocokkan maka karakter lainnya menggunakan huruf besar atau sebaliknya, sedangkan baris baru akan dilanjutkan ke karakter berikutnya.
sumber
Python 3 ,
7675 byteCobalah online!
Keluarkan hasilnya sebagai satu string dengan pemisah satu karakter.
Terima kasih kepada Jonathon Allan selama 1 byte.
sumber
(y>'Z')*32
->ord(y)&32
Majelis (nasm, x64, Linux) , 25 byte (sumber 123 byte)
Hex byte:
Titik masuk fungsi adalah di
a
, dengan string diteruskan menggunakanRDI
danRSI
.Cobalah online!
sumber
and al,32
hanya 2 byte, menggunakan pengkodean AL8 khusus, imm8 yang dimiliki sebagian besar instruksi ALU. Anda bisa membutuhkan panjang string dalam RCX dan menggunakannyaloop
. Saya akan mengatakan Anda harustest ah,ah
karena itu lebih efisien daripadaor
panjangnya sama, tetapi lebih lama dalam asm source sehingga idiom tua yang keras sebenarnya memiliki manfaat untuk asm-source code golf: PJelly , 13 byte
Cobalah online!
Juga 13:
=ŒuṚ×32ạŒlO$Ọ
(atau=ŒuṚæ«5ạŒlO$Ọ
)sumber
Arang , 17 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai array dari dua string. Penjelasan:
sumber
F #, 120 byte
Bersetubuh.
Cobalah online!
Fungsi
g
ini menggunakan dua string sebagai parameter.Seq.fold2
menerapkan fungsi dengan akumulator (a
) ke setiap elemen (x
dany
) di string. Awalnyaa
adalah string kosong, dan itu menambahkan karakter yang dikonversi untuk itu di setiap iterasi.b
adalah fungsi utama. Pertama bertobatf
dengan hormats
, dan kemudian bertobats
dengan hormatf
. Kemudian mengembalikan tupel dengan kedua nilai.sumber
Prolog (SWI) , 121 byte
Cobalah online!
sumber
Ruby ,
7469 byteCobalah online!
Input dan output adalah array karakter, sehingga footer melakukan transformasi bolak-balik dari string.
Saya belum yakin apakah ini merupakan pendekatan yang baik untuk masalah ini, tetapi tantangan ini jelas terlihat seperti skenario penggunaan yang bagus untuk
swapcase
metode.sumber
PHP 4.1.2 , 40 byte
Ganti pasangan tanda kutip dengan byte A0 (dalam ISO-8859-1 atau Windows-1252, ini adalah NBSP) untuk mendapatkan jumlah byte yang ditampilkan, kemudian jalankan dari browser web (atau dari baris perintah), berikan string sebagai argumen string kueri (atau variabel lingkungan)
a
danb
.Dalam versi PHP ini, register_globals aktif secara default, sehingga string akan secara otomatis ditugaskan ke variabel
$a
dan$b
. Tambah nilainya2e5
(200000) jika perlu.PHP 7.1+, 58 byte
Jalankan di baris perintah, gunakan
php -r 'code here' string1 string2
:Nilai
3e5
(300000) dipilih untuk melebihi (MAX_ARG_STRLEN * 2 + 1) pada sebagian besar sistem Linux (khususnya, x86 dan arsitektur lain yang PAGE_SIZE 4096, dan MAX_ARG_STRLEN dengan demikian 131072), untuk menghindari masalah dengan kemungkinan string input. Tambah jika perlu.Cobalah online!
sumber
Stax , 10 byte
Jalankan dan debug itu
Berikut ini adalah representasi tanpa tanda dari program yang sama untuk menunjukkan cara kerjanya.
Jalankan yang ini
sumber
Crystal , 108 byte
Cobalah online!
Bagaimana itu bekerja?
sumber