Apa yang terjadi ketika CapsLocktombol di keyboard Anda tidak memiliki lekukan di dalamnya?
"HPPENS ini."
Tujuan dari program ini adalah untuk secara konsisten meniru kesalahan keyboard dimana setiap Apers diganti CapsLock. Huruf besar 'A' dari sumber harus menghasilkan efek yang sama. Saat CapsLockdiaktifkan, kapitalisasi dibalik.
Uji Kasus
"The quick brown fox jumps over the lazy dog."
-> "The quick brown fox jumps over the lZY DOG."
"Compilation finished successfully."
-> "CompilTION FINISHED SUCCESSFULLY."
"What happens when the CapsLock key on your keyboard doesn't have a notch in it?"
-> "WhT Hppens when the CPSlOCK KEY ON YOUR KEYBOrd doesn't hVE notch in it?"
"The end of the institution, maintenance, and administration of government, is to secure the existence of the body politic, to protect it, and to furnish the individuals who compose it with the power of enjoying in safety and tranquillity their natural rights, and the blessings of life: and whenever these great objects are not obtained, the people have a right to alter the government, and to take measures necessary for their safety, prosperity and happiness."
-> "The end of the institution, mINTENnce, ND dministrTION OF GOVERNMENT, IS TO SECURE THE EXISTENCE OF THE BODY POLITIC, TO PROTECT IT, nd to furnish the individuLS WHO COMPOSE IT WITH THE POWER OF ENJOYING IN Sfety ND TRnquillity their nTURl rights, ND THE BLESSINGS OF LIFE: nd whenever these greT OBJECTS re not obtINED, THE PEOPLE Hve RIGHT TO lter the government, ND TO Tke meSURES NECESSry for their sFETY, PROSPERITY nd hPPINESS."
"aAaaaaAaaaAAaAa"
-> "" (Without the notch, no one can hear you scream)
"CapsLock locks cAPSlOCK"
-> "CPSlOCK LOCKS CPSlOCK"
"wHAT IF cAPSlOCK IS ALREADY ON?"
-> "wHt if CPSlOCK IS lreDY ON?"
Kriteria yang menang adalah, seperti biasa, ukuran kode sumber program yang dikirimkan.
teSTateSTateSTateST
Jawaban:
AutoHotKey , 7 byte
// Apakah ini valid? Ini benar - benar melakukan apa yang OP inginkan - ganti adengan CapsLock (vk14).
Jalankan program ini, dan ketik input dari keyboard ..
sumber
V , 9 byte
Cobalah online!
Hexdump:
Penjelasan:
sumber
Vim, 16 byte
Mengasumsikan input berada pada satu baris
Penjelasan
sumber
\c
di mana saja dalam pencarian regex memungkinkan case-insensitivityg~$
agar berfungsi? Karena bagi saya itu hanya membalik kasus sampai akhir baris, bukan seluruh file, jadi ini tidak benar-benar berfungsi untuk file multiline untuk saya.g~vG
atauvG~
.C, 72 byte
Terima kasih kepada @Ton Hospel untuk membantu menghemat 16 byte!
Cobalah online!
sumber
t
menjadi0/32
genap / ganjil (xor t dengan 32 untuk masing-masinga
) dan kemudian xor huruf langsung dengant
a
's6305%c
adalah 0 jikac
adalah 13.Sekam , 11 byte
Cobalah online!
Penjelasan
Saya menggunakan overloading yang agak kabur dari yang
Γ
disebutlistNF
, yang membangun fungsi rekursif yang beroperasi pada daftar. Ini sesuai dengan pola Haskell berikut:Idenya adalah yang
listNF
mengambil fungsi pembantuf
dan mengembalikan fungsi barug
, yang mengambil daftar. Fungsi tersebutf
mengambil fungsi, yang akan selalu adag
, dan kepalax
dan ekorxs
daftar, dan melakukan sesuatu dengan mereka. Dalam aplikasi kami,f
panggilang
secara rekursif aktifxs
. Program ditafsirkan seperti ini:sumber
Ḟ·+m\ṁx'Ax'a
. Bisakah kita mendapat penjelasan? Saya tidak dapat menemukan informasi tentang apa yangΓ
tepatnya dan ini sepertinya kesempatan yang baik untuk belajar.Γ
ini agak sulit dijelaskan, saya harap Anda bisa memahaminya.Γ
tampaknya lambat secara umum. Jika Anda tidak terbiasa dengan Husk, sebuah program ditafsirkan dengan perulangan melalui semua struktur yang mungkin dari program (pada dasarnya kemungkinan penempatan kurung) dan semua kelebihan beban dari masing-masing built-in, dan memilih yang pertama di mana hasilnya baik- diketik. Penerjemah cukup pintar untuk menolak beberapa kemungkinan sejak dini, tetapi tampaknya versi rekursifΓ
dapat mengacaukan langkah ini dan memaksanya untuk mengulang melalui banyak pilihan.Γ
secara rinci .Retina ,
332117 byteCobalah online
Penjelasan:
-12 byte terima kasih kepada Martin
-4 byte terima kasih kepada Leo
sumber
iT`aAlL`__Ll`a[^a]*a?
juga berfungsi untuk 21 byte.C # , 121 byte
** Pembaruan (terima kasih kepada @John & @aloisdg) **
C # , 69 byte
sumber
new[] { 'a', 'A' }
menjadi'a', 'A'
JavaScript (ES6),
93888482 byte(disimpan 5 byte berkat @Shaggy, 4 byte terima kasih ke @ user81655, dan 2 byte berkat @ l4m2.)
Kasus uji:
Tampilkan cuplikan kode
sumber
['to${c<'a'?'Low':'Upp'}erCase']
akan menghemat beberapa byte, menggantikan tanda kutip tunggal dengan backticks.^1
telahu
paritas dapat membiarkan Anda menginisialisasi lebih pendek:s=>s.replace(u=/./g,c=>/a/i.test(c)?(u^=1,''):+u?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
a
yang lebih pendek:a=>a.replace(A=/./g,c=>c in{a,A}?(A^=1,''):+A?c[`to${c<'a'?'Low':'Upp'}erCase`]():c)
in
operator seperti itu. Selalu lebih banyak belajar!R , 92 byte
Terima kasih @Giuseppe karena telah memperbaiki jawabannya.
Penjelasan
Cobalah online!
sumber
toupper
), yang merupakan persyaratan.c(F,T)
, meskipun @Broadwell benar; sepertinya itu akan menjadichartr("a-zA-Z","A-Za-z",v)[w]
bukantoupper
PowerShell Core , 105 byte
Cobalah online!
Apa yang tanpa operator ternary nyata dan tidak ada alias standar untuk mencetak ke layar, itu tidak sesingkat itu.
% t*y
memperluas ke| ForEach-Object -Method ToCharArray
equiv. dari"$args".ToCharArray()
Write-Host -n
adalah untuk parameter-NoNewLine
"$_"
mengembalikan[char]
tipe ke[string]
(karakter tidak memiliki huruf besar / kecil di .Net)|% *per
melakukan cara pintas panggilan metode yang sama seperti sebelumnya, tetapi untuk.ToUpper()
, sama dengan.ToLower()
($a,$b)[boolean test]
disalahgunakan sebagai operator terner palsu!!$c
memaksa-cast ke[bool]
sini mulai tidak terdefinisi$null
sehingga dipaksa menjadi ada sebagai "caps lock: $ false".sumber
|% t*y
adalah trik rapi yang perlu saya ingat. Lebih pendek dari[char[]]
yang saya gunakan banyak. Saya hampir mengatakan bahwa harus masuk ke thread Tips.-join($args|% t*y|%{if($_-eq'a'){$c=!$c}else{(("$_"|%("*per","*wer")[$_-in65..90]),$_)[!$c]}})
. terima kasih untuk|% *ethod
operator!Perl 5
-p
,313029 byte-1 byte terima kasih kepada @nwellnhof
-1 byte terima kasih kepada @ikegami
Cobalah online!
sumber
s/a(.*?)(a|$)/uc$1/egi
(22 byte)?s/a(.*?)(a|$)/$1^uc$1^lc$1/egi
lebih pendek satu byte.a([^a]*)a?
lebih pendek daria(.*?)(a|$)
Python, 63 byte
Solusi Python lain, bekerja di Python 2 dan 3. Membutuhkan waktu yang sangat lama untuk semua input kecil.
sumber
6502 rutin kode mesin (C64), 51 byte
Mengharapkan pointer ke string input 0-terminasi di
$fc/$fd
, output ke layar.Komentar pembongkaran
Contoh program assembler menggunakan rutin:
Demo online
Kode dalam sintaksis ca65 :
sumber
Java 8,
11910898 byte-11 byte terima kasih kepada @ OlivierGrégoire .
-10 byte berkat @Nevay .
Penjelasan:
Cobalah online.
sumber
s->{int z=0,d;for(int c:s)if((d=c&95)==65)z^=1;else System.out.printf("%c",z<1|d<66|d>90?c:c<91?c|32:c&95);}
s->{int f=0,t;for(int c:s)if((t=c&95)==65)f^=1;else System.out.printf("%c",f<1|t<66|t>90?c:c^32);}
C,
167168158131 byteTerima kasih untuk @Martin Ender untuk ulasan kode: Saya telah mengubah pemrosesan aliran untuk pemrosesan string untuk membantu penggunaan kembali. Juga banyak terima kasih kepada @RiaD dan @ceilingcat untuk saran mereka.
Cobalah online!
Bagaimana cara kerjanya?
Catatan
s[][]
adalah tempat keajaiban terjadi:[][0]
adalah fungsi perbandingan dan[][1]
fungsi transformasi terkait untuk setiap negara.!
diterapkan pada fungsi perbandingan untuk memaksanya ke dalam kisaran [0,1].sumber
d
seperti ini karena itu berarti bahwa fungsi Anda tidak dapat digunakan kembali . Sederhanad=0;
harus memperbaikinya.void f(){int c,d=0;[...]
. Bagaimanapun, aliran mati, jadi pengeditan dalam urutan!Haskell , 92 byte
Cobalah online!
Penjelasan
Pertama kita mendeklarasikan
g
sebagai fungsi yang memetakan huruf kecil ke huruf besar dan huruf besar ke huruf kecil. Ini sebenarnya sebagian dari bytecount kami. Kemudian kita mendefinisikan fungsinyaf
. Jika input kef
adalah dari formulir yanga:b
kami lakukana
danA
cocok dengan pola pertama dan dengan demikian kami berlakuf
untuk input dengan case itu terbalik. Jika tidak kami bergeraka
depan dan berlakuf
untukb
.sumber
Bahasa Wolfram (Mathematica) , 70 byte
Cobalah online!
Mengambil input dan output sebagai daftar karakter. Untuk kenyamanan saya telah menambahkan kode di footer untuk mengonversikan dari dan kembali ke string.
Bagaimana itu bekerja
Bagian
#//.{x___,"a"|"A",y___}:>Join[{x},
...{y}]&
adalah standar: kami menemukan yang pertamaA
(huruf besar atau kecil), kasus terbalik yang datang setelahA
, dan ulangi sampai tidak ada lagi yangA
dapat ditemukan.Bagian yang menarik adalah bagaimana kita membalikkan huruf besar: fungsi
ToUpperCase@# + ToLowerCase@# - #&
. Kami menambahkan versi input yang berhuruf besar dan input yang berhuruf rendah, kemudian mengurangi input yang sebenarnya. Sebagai contoh, mengingat daftar{"I","n","P","u","T"}
ini menghitungyang utas sebagai daftar
dan meskipun Mathematica tidak memiliki cara tertentu untuk menambahkan dua string, itu cukup pintar untuk menyederhanakan
a+b-a
untukb
untuk setiap nilai-nilaia
danb
, termasuk nilai-nilai string, jadi ini untuk menyederhanakan{"i","N","p","U","t"}
.sumber
Ruby ,
4241 byteCobalah online!
Seekor lambda menerima string, memutasikan string di tempatnya, dan mengembalikannya. Kuncinya di sini adalah
sub
mengembalikan string (nilai kebenaran) jika substitusi dilakukan, dan mengembalikannil
sebaliknya. Keberadaannyaswapcase
pun cukup praktis.-1 byte: Ganti logika boolean dengan operator ternary, terima kasih kepada Asone Tuhid
sumber
PHP
10199 byteJalankan seperti ini:
Tidak Terkumpul:
Ini hanya loop melalui string dengan for loop, dan pada setiap iterasi ia memeriksa apakah huruf saat ini adalah
a
, jika demikian, kemudian membalik kasing dari seluruh string (metode dari sini ), dan jika tidak, kemudian cetak huruf saat ini.sumber
$argn
,$argv
,$_GET
). Jadi saat ini ini bukan pengiriman yang benar. Kembali harusecho
diedit ataureturn
diedit (hanya diizinkan untuk fungsi c).Jelly , 14 byte
Cobalah online!
Program lengkap.
Penjelasan:
sumber
MATL ,
2320 byteCobalah online!
Penjelasan:
Jawaban yang lebih lama (23 byte):
"H @ 'aA'm? ~ XHx} @ w ~? Yo] & h
Metode lain yang saya coba:
sumber
Sekam , 15 byte
Cobalah online!
Penjelasan
sumber
05AB1E , 12 byte
Cobalah online!
Penjelasan
sumber
Japt v2.0a0, 16 byte
Cobalah
Penjelasan
sumber
SNOBOL4 (CSNOBOL4) ,
14192 byteCobalah online!
Mengasumsikan satu baris input.
49 byte kekalahan disimpan oleh @ninjalj !
Line
S
mengerjakan semua pekerjaan, dijelaskan di bawah ini:sumber
I =INPUT;S I ANY("Aa") REM . R =REPLACE(R,&LCASE &UCASE,&UCASE &LCASE) :S(S); OUTPUT =I;END
Fortran (GFortran) , 307 byte
Cobalah online!
Karena Fortran belum "canggih" alat untuk berurusan dengan string, saya datang dengan monster kecil ini.
Diindentasi dan berkomentar:
sumber
Stax , 12 byte
Jalankan dan debug secara online
Itu terbelah pada regex, dan kemudian secara bergantian matikan case. Inilah program yang sama, dibongkar, tidak diseret, dan dikomentari.
Jalankan yang ini
sumber
Javascript (ES6),
8079 byte(Sebagian didasarkan dari jawaban ini oleh Rick Hitchcock. Posting sebagai jawaban terpisah karena saya tidak memiliki reputasi yang cukup untuk berkomentar.)
(Disimpan 1 byte berkat posting @ l4m2 di sini .)
sumber
Kotor , 55 byte
Cobalah online!
Mungkin sekitar sepertiga lebih pendek.
Saya akan menulis penjelasan dan golf lagi ketika saya di desktop.
sumber
Python 3,
7872 bytesumber
m[1]
sebagai penggantim.group(1)
Python 3.6+.