Terinspirasi oleh tantangan ini (atau, lebih khusus lagi, dengan salah baca), saya datang dengan tantangan berikut:
Diberikan string input S, membalikkan urutan semua karakter huruf besar, dan semua karakter huruf kecil. Biarkan semua karakter non-huruf tetap di tempatnya. Contohnya:
Perhatikan bahwa huruf besar W
( huruf besar pertama) diganti dengan H
(yang terakhir). Hal yang sama berlaku untuk huruf kecil: 'd' (yang pertama) ditukar dengan e
(yang terakhir), l
(kedua) diganti dengan l
(pena-ultimate) ... Semua karakter non-huruf dibiarkan di tempatnya.
Memasukkan
- Input adalah string dengan hanya karakter ASCII dalam kisaran 32-126.
- Input dijamin paling panjang 1 karakter, dan tidak akan melebihi batas bahasa Anda.
Keluaran
- String yang sama, dengan karakter yang ditukar seperti yang dijelaskan.
Aturan tambahan
- Celah standar dilarang
- Jawaban harus berupa program atau fungsi lengkap, bukan cuplikan atau entri REPL.
- kode-golf , jawaban terpendek dalam byte menang.
Uji kasus
A
A
Ok
Ok
OK
KO
Hello, World!
Wdlro, Holle!
0123456789
0123456789
The quick brown Fox jumps over the lazy doge
Feg odyza lehtr Tev ospmu jxon wor bkci uqeh
odd
ddo
racecar
racecar
EtOn Em OsN R AaToNsIsIhT!!1!
ThIs Is NoT A RaNsOmEnOtE!!1!
.+
ke.*
)Jawaban:
MATL , 14 byte
Cobalah di MATL Online
Penjelasan
sumber
2:"tttXk>f)5MP(Yo
17 byteRetina , 19 byte
Retina tidak memiliki cara langsung untuk membalikkan string, tetapi kita bisa melakukannya dengan mengeksploitasi tahap penyortiran:
Sortir (
O
), bacalah sebagai angka (#
), lalu balik urutan (^
), dari semua string yang cocok dengan regex yang diberikan (huruf kecil untuk baris pertama, dan huruf besar untuk yang kedua).Ini berfungsi karena ketika kita mencoba membaca string tanpa karakter angka sebagai angka mereka diperlakukan
0
, sehingga semua karakter memiliki nilai yang sama untuk pengurutan. Karena penyortiran stabil mereka dibiarkan dalam urutan yang sama, dan membalikkannya mengembalikan string asli terbalik.Cobalah online!
sumber
Perl , 45 byte
44 byte kode +
-p
bendera.Cobalah online!
Unicode karakter mengklasifikasikan
\p{Lu}
dan\p{Ll}
mencocokkan huruf besar dan kecil.Jadi
/\p{L$c}/
akan mengembalikan daftar semua huruf besar (atau lebih rendah) (dan menyimpannya di dalam@T
).Dan kemudian, regex
s/\p{$c}/pop@T/ge
akan mengganti setiap huruf (atas, bawah) dengan huruf terakhir@T
saat menghapusnya@T
.sumber
JavaScript (ES6),
74737170 byteSunting: Disimpan 1 byte berkat @Arnauld.
sumber
JavaScript (ES6), 92 byte
Ada mendapat menjadi cara untuk mengambil keuntungan dari kesamaan antara regexes ...
Cuplikan tes
Tampilkan cuplikan kode
sumber
f
? Bukankah seharusnya dalam hitungan byte?F
lalu memanggilnya dua kali secara rekursif. Fungsi luar sebenarnya tidak menyebut dirinya sendiri pada titik mana pun..*
dalam regex?a
dalam([x],a,y)=>
)Perl 6 ,
7569 byteBagaimana itu bekerja
my @a=.comb;
Membagi string menjadi karakter, dan menyimpannya dalam array.
for /<:Lu>/,/<:Ll>/
Untuk dua regex yang cocok dengan huruf besar dan kecil, masing-masing ...
@(grep $_,@a)
Dapatkan sepotong semua entri array yang cocok dengan regex.
.&{@$_=[R,] $_}
Tetapkan kebalikan dari irisan itu sendiri.
[~] @a
Menggabungkan array yang dimodifikasi untuk membentuk string lagi, dan mengembalikannya.
-6 byte dengan mencuri ide untuk menggunakan kelas Unicode alih-alih rentang karakter, dari solusi @ Dada.
sumber
Jelly , 14 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Utilitas Bash + Unix,
122121 byteCobalah online!
Tidak terlalu pendek; mungkin seseorang bisa bermain golf lebih jauh.
Input pada stdin, output pada stdout.
Ini akan bekerja dengan benar pada input kurang dari 200 karakter.
(Sebenarnya itu benar menangani string apa pun dengan kurang dari 200 huruf kecil dan kurang dari 200 huruf besar.)
Jika Anda menambah 99 dalam kode menjadi 102 (dengan biaya satu byte tambahan), ia akan menangani string hingga 205 karakter.
Namun, Anda tidak dapat meningkatkan 99 dalam kode di atas 102 karena Anda kemudian akan melebihi panjang argumen maksimum sed.
Ini adalah versi tanpa batasan ukuran input tertentu, tetapi hitungannya sedikit lebih lama, 137 byte. (Versi yang lebih panjang ini menulis ke file bantu bernama t.)
Tes berjalan:
sumber
sed
implementasi yang diinstal pada sistem Anda, tetapi untuk GNUsed
Anda dapat menambahkan-r
opsi dan menghapus\
pelolosan semua tanda kurung.Python 2 , 115 byte
Cobalah online!
sumber
exec
diuraikan seperti kode Python biasa, jadi untuk loop harus pada barisnya sendiri.Java (OpenJDK 8) , 271 byte
Cobalah online!
sumber
s->new String...
char[]o=s.toCharArray();char c;int b;
untukchar o[]=s.toCharArray(),c,b;
; dan keduanya&&
untuk&
'; danc=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);
hinggac=o[i];Character x=c;return b>1?!x.isUpperCase(c):!x.isLowerCase(c);
( total 259 byte ). Dan saya mungkin melewatkan beberapa hal untuk golf lebih banyak. Juga, jika Anda belum melihatnya, tips untuk bermain golf di Jawa mungkin menarik untuk dibaca.R , 107 byte
Diadaptasi dari tanggapan saya terhadap tantangan terkait. Ini jauh lebih mudah daripada hanya bertukar pasangan. Saya ingin tahu apakah saya bisa mendapatkan sub 100 dengan beberapa golf ...
Cobalah online!
sumber