your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
Deskripsi
Inputnya adalah dua string, s1
dan s2
panjangnya sama. Masing-masing hanya berisi ASCII yang dapat dicetak dan panjangnya setidaknya satu karakter. Anda dapat memasukkan ini sebagai dua string, array dua string, atau string tunggal dengan s1
dan s2
dipisahkan oleh tab atau baris baru.
Outputnya adalah sebagai berikut:
Untuk setiap karakter
c
dis1
:Jika karakter bukan huruf, output tidak berubah.
Kalau tidak, jika
c
ada surat:Temukan karakter yang cocok (satu pada indeks yang sama) di
s2
.Jika huruf kapital, output
c
dikapitalisasi.Jika huruf kecil, hasilkan
c
dalam huruf kecil.Jika tidak, output
c
tidak berubah.
Kemudian lakukan hal yang sama, kecuali dengan
s1
dans2
diaktifkan.
Pada dasarnya, semua huruf di s1
mana karakter yang cocok dalam huruf s2
kapital harus dikapitalisasi, dan semua huruf s1
dengan huruf kecil di indeks yang sama s2
harus menjadi huruf kecil (dan sebaliknya).
Uji kasus
Memasukkan:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Keluaran:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Memasukkan:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Keluaran:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Memasukkan:
AAAbbb111
Cc2Dd3Ee4
Keluaran:
AaABbb111
CC2dd3Ee4
Jawaban:
Pyth,
1918 byteIni mendefinisikan fungsi y yang menerima dan mengembalikan daftar string.
Verifikasi semua kasus uji sekaligus di Pyth Compiler / Executor .
Berkat @Jakube untuk bermain golf 1 byte.
Bagaimana itu bekerja
sumber
CJam, 25 byte
Ini adalah fungsi anonim yang memunculkan array string dari tumpukan dan mengembalikannya.
Di browser yang didukung, Anda dapat memverifikasi semua kasus uji sekaligus dalam juru bahasa CJam .
Uji kasus
Kode
Memasukkan
Keluaran
Bagaimana itu bekerja
sumber
C, 126 byte
Ini adalah upaya pertama saya di golf kode, pernah. Beri tahu saya jika saya melakukan kesalahan.
Saya menggunakan operasi bitwise untuk melakukan switching
Golf:
Tidak Disatukan:
edit: diganti && dengan *
sumber
SQL (PostGreSQL), 427 Bytes
Meskipun ukurannya sangat besar, ini akhirnya menjadi sedikit lebih kecil dari yang saya harapkan. Saya tidak yakin saya akan bisa jujur. Saya curiga masih banyak yang bisa dilakukan :)
Diformat dan dikomentari
Uji coba
sumber
Julia, 140 byte
Ini menciptakan fungsi yang menerima dua string dan mengembalikan tuple string. Tidak ada yang pintar terjadi di sini; kita cukup mendefinisikan fungsi bagian dalam yang secara langsung mengimplementasikan algoritma dalam spesifikasi dan menyebutnya dua kali.
Tidak Disatukan:
sumber
JavaScript ES6,
128108 byteJavaScript
toUpperCase()
dantoLowerCase()
membutuhkan banyak byte tetapiString.fromCharCode()
bahkan lebih lamasumber
s2
bukan huruf dan karakter yang sesuai dalams1
huruf besar. Dalam hal ini,c
dis1
harus dikembalikan tidak berubah.Mathematica,
173169155 byteIni adalah fungsi mengambil array dari dua string, misalnya
{"Foo","bAR"}
dan mengeluarkan array dari dua string. Un-spasial-mengompresi, menulis ulang skemaf@x
sepertif[x]
di mana pun muncul, memperluas singkatan notasi (f=0>1
aliasFalse
,t=!f
aliasTrue
,c=Characters
, danu=ToUpperCaseQ
), dan un-menggantikan UpperCaseQ [#] dengan#==u@#
(karakter ini sama dengan versi uppercased nya), itu adalah:Interfacing: trailing
&
membuat fungsi ini. Argumennya dimasukkan sebagai "#" pada kedua contoh/@ #
. Misalnyaf=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
menghasilkan output{AaABbb111,CC2dd3Ee4}
.Memproses: Diberitahu di luar biasa agar:
MapThread[...]
adalah daftar dua daftar karakter. StringJoin diterapkan ke masing-masing dua daftar karakter ini untuk menghasilkan daftar dua string, output.MapThread[#[#2]&, ... , 2]
bertindak pada array dari dua daftar elemen 2-oleh-n. Daftar pertama adalah susunan fungsi 2-oleh-n. Daftar kedua adalah array karakter 2-oleh-nCharacters /@ #
, daftar karakter dalam dua string input. Ia bekerja pada kedalaman 2, yaitu, pada fungsi dan karakter individu.Reverse[...]
swap kedua daftar fungsi sehingga MapThread akan menerapkan fungsi string kedua ke string pertama dan sebaliknya.{ ... } &
adalah fungsi anonim yang diterapkan ke masing-masing dari dua string input.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
membagi string menjadi daftar karakter, lalu mengganti setiap karakter dengan dua daftar elemen. Dalam dua daftar elemen ini, elemen pertama adalahTrue
jika karakter adalah huruf danFalse
sebaliknya, elemen kedua menunjukkan apakah karakter huruf besar.UpperCaseQ[]
tidak dapat mengembalikan true jika tidak menerima surat./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
mengganti dua daftar elemen ini dengan fungsi. (Perluasan singkatant
danf
terjadi sebelum pencocokan dicoba.) Jika daftar dua elemen memilikiFalse
sebagai elemen pertama, itu diganti dengan fungsi(# &)
, fungsi identitas. (Tanda kurung diperlukan, jika panah mengikat lebih ketat daripada ampersand.) Jika tidak, daftar elemen dua dimulai denganTrue
, karakter adalah huruf, dan kami menampilkan fungsiToUpperCase
danToLowerCase
sesuai dengan kasusnya. (Memeriksa yang terakhirFalse
ini tidak perlu, pada kenyataannya{_,_}->ToLowerCase
akan berhasil, menangkap apa pun yang belum diganti, tetapi ini tidak akan lebih pendek dan lebih tidak jelas.)Satu-satunya tantangan adalah mencari tahu cara ringkas untuk zip array fungsi dua dimensi ke array argumen.
Sunting: Terima kasih kepada @Martin Büttner karena telah menangkap backslash "membantu" cut / paste linebreak,
1>0
dan1<0
singkatan, dan juga untuk panduan untuk menghitung panjang dalam byte, bukan karakter (apa pun itu :-))Sunting2: Terima kasih lebih lanjut kepada @Martin Büttner karena menunjukkan bahwa mencemari namespace global adalah golf yang dapat diterima, mengingatkan saya pada satu aplikasi fungsi karakter, dan menyarankan untuk mengganti dua fungsi huruf besar dengan singkatan untuk satu dan menggunakan yang lain untuk meniru yang lain (menyimpan empat karakter). (Saya pikir dia sudah melakukan ini sebelumnya. :-))
sumber
f@g
alih-alihf[g]
(di seluruh kode Anda). Saya juga cukup yakin Anda tidak perlu blok. Lakukan saja(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. Ini mencemari namespace global, tapi kami sama sekali tidak keberatan dengan itu saat bermain golf. Juga, saya belum menghitung, tetapi Anda mungkin dapat menyimpan byte dengan menyimpanToUpperCase
dalam variabel (u
, katakanlah) dan gantiUpperCaseQ@#
dengan#==u@#
.Python 3, 131 byte
Fungsi mengembalikan string dalam sebuah tuple
sumber
Erlang, 157 byte
Ritsleting dua string (sebenarnya, daftar) ke dalam daftar dua karakter-tupel dan memetakan masing-masing karakter ke kasus yang sesuai menggunakan pemahaman daftar.
sumber
Python 2, 101 byte
Fungsi anonim yang mengambil dua string dan mengembalikan string output dalam daftar. Saya telah menandai ini sebagai Python 2 karena Python 3 tidak memungkinkan
I,I[::-1]
untuk duduk sendiri di akhir seperti itu.sumber
Python, 126 byte
Fungsi
f
mengembalikan string dalam sebuah tuplesumber
C, 181 byte
Mengalami kesulitan memperpendek nama perpustakaan standar dengan cara yang berharga, (# define'ing mereka membutuhkan 11 karakter overhead). Menggunakan rekursi utama dan variabel global x dan y sebagai argumen.
main (<non-zero>, argv) = panggil main (0, {argv [1], argv [2]}) lalu cetak baris baru lalu panggil main (0, {argv [2], argv [1]})
main (0, {x, y}) = jika x adalah akhir dari string mengembalikan 0, selain itu cetak huruf yang benar dari karakter pertama x dan panggil main (0, {x + 1, y + 1}).
Jalankan dengan dua string sebagai argumen.
sumber
C -
164153 Bytes - GCCgcc prog.c
./a.out AfdgF a2dfsd
Akan memperbarui jika saya bisa turun wc -c. Bekerja dengan sangat baik sebenarnya
sumber
F #, 211 karakter
dapat menjadi lebih baik ...
sumber
Matlab, 140
Tidak Disatukan:
Contoh:
sumber
C, 164 byte
Cukup banyak menerapkan algoritma seperti yang dijelaskan dalam masalah. Mengambil 2 string sebagai parameter input.
Tidak Disatukan:
sumber
Ruby, 102
Mengambil string asli, memasangkan surat dalam array. Jika keduanya lebih rendah / tutup atau tutup / lebih rendah, maka bertukar pada keduanya. Kemudian, pindahkan array kembali ke array yang kita pesan.
Ini membutuhkan baris baru di input.
sumber
Perl 5.10+,
10199 byte96 byte + 3 byte untuk bendera baris perintah
p00
. Mengambil satu string yang dibatasi baris baru sebagai input:Atau Anda dapat memasukkan input pada STDIN:
Rusak:
sumber
Upaya pertama di scala, 138 karakter
f adalah fungsi yang mengambil dua string input dan melakukan pekerjaan, dengan fungsi lokal, digunakan dua kali, untuk mengubah kasus string.
Kode yang sama, dengan lekukan dan hanya sedikit nama yang lebih mudah dibaca:
sumber
Jelly , 13 byte
Tautan monadik yang menerima dan mengembalikan daftar dua "string" (daftar karakter dalam Jelly).
Cobalah online!
sumber
Python 2 , 97 byte
Cobalah online!
sumber
Tcl , 194 byte
Cobalah online!
sumber
Haskell ,
10991 byteTerima kasih kepada @Laikoni selama 16 byte!
Cobalah online!
sumber