Tantangannya sederhana:
Tulis fungsi atau program yang mengambil input x
, dan output huruf kecil jika x
merupakan bagian dari huruf kecil, hasilkan huruf besar jika x
merupakan bagian dari huruf besar dan hasilkan hanya x
jika itu bukan bagian dari keduanya.
Aturan:
- Input dapat berupa argumen fungsi atau dari STDIN
- Input akan berupa karakter ASCII yang dapat dicetak dari 32 hingga 126 (spasi hingga tilde).
- Input mungkin berada di dalam tanda kutip,
'x'
atau"x"
, tetapi ingat itu'
dan"
merupakan input yang valid dan harus didukung. - Input dapat berupa huruf apa saja dalam alfabet, yaitu Anda tidak dapat menganggap itu adalah
a
atauA
. - Outputnya harus hanya salah satu dari alfabet atau simbol tunggal, tetapi trailing newlines OK.
- Huruf-huruf dalam alfabet tidak boleh dipisahkan oleh spasi, koma atau apa pun.
Beberapa contoh:
F
ABCDEFGHIJKLMNOPQRSTUVWXYZ
z
abcdefghijklmnopqrstuvwxyz
"
"
<- Input: Space
<- Output: Space
Kode terpendek dalam byte menang.
Opsional tetapi dihargai: Jika bahasa Anda memiliki juru bahasa online, silakan juga mengirim tautan sehingga dapat dengan mudah diuji oleh orang lain.
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Misalnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
import Random
dan kemudian menggunakanRandom.randint
(jelas bukan untuk tantangan ini tapi tetap saja)?import string
dihitung, sehingga sering kali lebih baik melakukan penyelesaian masalah. Perhatikan bahwa paket harus ada sebelum tantangan diposting. Banyak tantangan memiliki sesuatu seperti: "Menggunakan paket yang melakukan ini tidak diperbolehkan", tetapi tidak demikian halnya dengan tantangan ini.Jawaban:
TeaScript , 5 byte
TeaScript memiliki (hampir) bawaan untuk ini: D
Cobalah secara online (catatan: juru bahasa online telah diperbarui ke TeaScript v3 jadi di mana ini
N0
)Coba semua test case
TeaScript 3 , 2 byte [tidak bersaing]
Menggunakan TeaScript 3, ini bisa menjadi 2-byte. Ini non-bersaing karena TeaScript 3 dibuat setelah tantangan ini
Alternatif 1 byte
Jika kita bisa menampilkan
0123456789
angka, maka ini bisa:sumber
Pyth, 10 byte
Suite uji
Kita mulai dengan membuat daftar dengan 3 elemen: alfabet huruf kecil, alfabet huruf besar, dan input. (
[GrG1z
) Lalu, kami memfilter daftar ini pada jumlah tampilan input pada elemen yang bukan nol. (/#z
) Akhirnya, kami mengambil elemen pertama dari daftar yang difilter.sumber
LabVIEW, 23 LabVIEW Primitif
Selector (the? On the cse structure) terhubung ke vi yang disebut Lexical Class. Itu angka dari 1-6 tergantung pada input, 5 adalah huruf kecil 4 adalah huruf besar.
Untuk loop berjalan 26 kali untuk membuat alfabet atau sekali untuk melewati simbol.
sumber
Haskell, 48 byte
Contoh penggunaan:
Ambil semua daftar ['a' .. 'z'], ['A' .. 'Z'] dan daftar tunggal dengan karakter input di
c
manac
elemen. Untuk huruf kami selalu memiliki dua pasangan, jadi kami memilih yang pertama.sumber
JavaScript (ES6), 79 byte
Penjelasan
JavaScript membandingkan kode setiap karakter secara alfabet saat membandingkan string, sehingga kode karakter yang digunakan dalam perbandingan adalah 1 di bawah dan di atas kisaran karakter yang diperlukan.
Uji
Tampilkan cuplikan kode
sumber
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
sangat tidak cocok untuk bermain golf, tapi terkadang itu satu-satunya cara!String.fromCharCode
dan.toUpperCase
(Bodoh dan bodoh) tetapitoUpperCase
adalah pemenangnyax=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")
tidak, tetapi satu byte lebih lama. Mengubah[A-Z]
ke\w
bekerja untuk semuanya kecuali_
. Solusi Anda tampaknya yang sesingkat mungkin.ABC...abc...?
for
[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R,
9075 byteTerima kasih untuk Giuseppe .
Versi lama (90 byte):
Terlihat jelek, tetapi itu
cat
tidak bisa di-outsourcing-kan ke fungsi, IMHO.sumber
scan
dapat berupa objek tipe karakter apa pun, jadi Anda dapat menggunakannyaletters
sebagai ganti''
.Python 3,
92848274 byteVersi saat ini: 74, terima kasih kepada isaacg dan wnnmaw!
Ungolfed: (untuk beberapa definisi ungolfed
Versi pertama: 92
Versi kedua: 82, terima kasih kepada isaacg! :)
sumber
lambda c:
) alih-alih definisi eksplisit (def f(c):print(
), dan menyimpan beberapa byte. Juga, Anda tidak perlu ruang sebelumfor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
,. Terima kasih!"
ke fungsi, Anda membutuhkannya\"
.Python 3,
118105989783 byteSolusi sederhana. EDIT: Golf dengan terima kasih atas saran Erik the Pegolf.
Tidak Disatukan:
sumber
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682bytePHP baik-baik saja sekarang:
Mengambil input dari baris perintah, seperti:
Suntingan
91>ord($x)
denganZ<$x
. Cara berpikirnya rumit. Berkat kerja manat .strtoupper
dan membangun jangkauan yang diminta secara langsung.sumber
ord()
terlihat buruk di sana. CobaZ<$x?$a:strtoupper($a)
.' '&$x^A
membuat huruf besar dan kecil a dan z. Artinya, kode Anda menjadi<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Perl,
463433 bytetermasuk +2 untuk
-nE
Jalankan sebagai
for
dan menggunakan kata kunci, terima kasih kepada @Dom Hastings .-E
dansay
bukannyaprint
.sumber
for
: - /. Mencoba banyak pendekatan, (-p
dengan$"='';$_="@_"
, bahkan$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
tetapi semuanya lebih lama ...$_=
alih-alihprint
menggunakan dan menggunakan-p
bendera alih-alih-n
Anda dapat menyimpan dua lagi ... Saya masih tidak dapat memikirkan cara lain untuk menyimpan lebih banyak sejauh ini ...$_
ke daftar (yang saya tahu). Itu harus diinterpolasi ($_="@_"
) tetapi menggunakan ruang sebagai pemisah jadi saya harus melakukannya$"=''
juga, (atau menggunakan ajoin'',
) yang membuatnya lebih lama. Tidak banyak ruang gerak yang satu ini!say
bukannyaprint
!Ruby, 41 + 1 = 42
Dengan sakelar
-p
, jalankanIni menghasilkan string
dan memeriksa setiap blok yang berdekatan dari "karakter kata", yang kebetulan hanya huruf kecil dan huruf besar dan karakter garis bawah. Jika ada beberapa karakter kata berurutan antara Z dan a, trik ini tidak akan berhasil.
Diedit untuk menambahkan penjelasan, dengan permintaan:
The
-p
bendera tidak dasarnya[*?A..?z]
adalah array karakter antara huruf besar A dan huruf kecil Z, dalam urutan ASCII. Itu adalah huruf besar, beberapa karakter non-huruf, dan huruf kecil.*''
bergabung dengan array menjadi string, jadi kita bisa memanggilnya.scan
.scan
akan menemukan setiap kecocokan dari ekspresi reguler/\w+/
, mengisi variabel sihir$&
dengan itu, dan memanggil blok. Setiap kali blok iterasi, ia memeriksa apakah string yang cocok berisi$_
dan mengatur output ke string itu jika demikian. Jadi jika $ _ terkandung dalam alfabet huruf besar atau kecil, itu akan diubah sesuai, jika tidak maka tidak berubah.Versi ungolfed akan terlihat seperti
sumber
CJam, 18 byte
'[,65>
mendorong alfabet huruf besar, alfabet_el
huruf kecil, danr:R
string char tunggal yang dibaca dari STDIN dan ditugaskan ke variabelR
. Ini dibungkus dalam array (]
) dan yang pertama yang memiliki karakter yang sama denganR
dipilih menggunakan{R&}=
.sumber
_el
alfabet huruf kecil?el
berarti "konversi ke huruf kecil". Saya baru saja mendorong abjad huruf besar, jadi sekarang saya menduplikasinya_
, lalu memanggilel
salinan yang dihasilkan.Retina, 62 byte
Dua garis pendek adalah regex yang cocok. Jika input huruf kecil (dalam kisaran
[a-z]
), itu menggantikan karakter itu (dalam hal ini, itu adalah seluruh input) dengan alfabet huruf kecil. Prosesnya mirip untuk huruf besar. Jika itu bukan surat, tidak ada penggantian yang dibuat, dan itu dikeluarkan tidak tersentuh.Cobalah online.
sumber
Python 2.7.10,
959379 byteIni adalah pertama kalinya saya mencoba bermain golf, jadi tolong, setiap bantuan atau saran sangat dihargai!
Terima kasih kepada Morgan Thrapp untuk bantuannya!
sumber
False == 0
danTrue == 1
untuk mengindeks ke dalam tupel. Jadi, pertama-tama memeriksa apakah itu surat denganisalpha
, jika ya, itu kembali1
dan kemudian memeriksa apakah itu huruf kecil dan melakukan hal yang sama.Ruby,
4643 karakter(42 karakter kode + 1 opsi baris perintah karakter)
Terimakasih untuk:
===
magic (-3 karakter)Contoh dijalankan:
sumber
MATL , 22 bytes
Ini menggunakan versi bahasa saat ini (3.1.0) .
EDIT (15 Sep 2017): Cobalah di MATL Online! (dengan versi bahasa yang lebih baru).
Contohnya
Penjelasan
sumber
Jawa, 165 karakter
Menghasilkan output yang diperlukan untuk stdout (bukan mengembalikannya). Input melalui argumen runtime.
Bagaimana itu bekerja.
1) Setup beberapa variabel integer
c = nilai ASCII dari karakter pertama dari parameter pertama dari argumen runtime.
d = c dikonversi ke nilai ASCII huruf kecil (dengan ORing dengan 32)
b = perhitungan untuk melihat apakah d adalah huruf. Akan <0 jika huruf.
e = Karakter awal untuk keluaran. Jika nilai ASCII dalam d adalah huruf (lihat b) maka nilai tersebut diatur ke 'A' (atau 'a' dengan menambahkan c AND 32 ke 'A' nilai ASCII) jika tidak maka nilai tersebut ditetapkan ke nilai asli c.
f = jumlah karakter yang akan diproduksi. Jika bukan huruf (lihat b) maka ini diatur ke 1 lain diatur ke 26
2) Loop dari e ke e + f mengeluarkan setiap karakter ke stdout.
sumber
void f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}
.Perl, 23 byte
Termasuk +2 untuk
-nE
(bukan +1 normal) agar adil dengan solusi perl lainnyaJalankan dengan input pada STDIN tanpa tertinggal baris baru:
Hanya kode:
sumber
Lua,
9897 byteSayangnya, saya tidak menemukan solusi yang lebih pendek dari 26 byte untuk diatur
a
dengan alfabet. Bahkan, saya tidak menemukan yang lebih pendek dari 32.Sunting: simpan 1 Byte berkat @ATaco, banyak melakukan kesalahan ini ketika mulai dengan Lua: p
Anda dapat mengujinya secara daring di situs resmi atau di ideone . Jika Anda menggunakan yang pertama, input tidak akan berfungsi (dinonaktifkan), jadi gunakan sumber berikut ini, di mana ia dibungkus dengan fungsi.
sumber
c=io.read()a="abcdefghijklmnopqrstuvwyz"
alih - alih a, c = ...Mathematica, 75 byte
Skor yang cukup bagus untuk bahasa non-golf ... Solusi apa pun yang menggunakan pemrosesan kode karakter akan membutuhkan lebih banyak byte, karena biaya
ToCharacterCode
danFromCharacterCode
.sumber
C (fungsi), 71 byte
sumber
f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}
menghemat satu byte.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
untuk 62 bytePython, 81 byte
Ini pada dasarnya adalah terjemahan dari jawaban Pyth. Ini mendefinisikan fungsi
f
yang mengambil argumen karakter dan mengembalikan hasilnya.sumber
if z in k
benar? Juga,f=
opsional secara default.f=
, buat fungsinya anonim. -2Jolf , 17 byte
Coba di sini.
sumber
MATLAB:
7168 byte(terima kasih kepada OP untuk menyimpan 3 byte)
Uji:
Penjelasan: Alfabet huruf besar menempati
65:90
karakter ASCII. Alfabet huruf kecil ada di97:122
ASCII. Jadi,b=i<65|i>122|(i>90&i<97)
periksa apakah karakter inputi
BUKAN alfabet. Jika demikian, input dikembalikan. Alfabet huruf besar dikembalikan jikab==1
dani<97
(karakter huruf besar). Jikab==1
dani>96
, 32 ditambahkan ke65:90
yang sesuai dengan97:122
- alfabet huruf kecil.sumber
i=input('')
jika kiriman adalah skrip, atau sebagai argumen fungsi jika itu sebuah fungsi@(i)i^2
.i='a'
secara umum tidak diterima. Anda juga dapat menyimpan 3 byte dengan melakukan[1,2,3,'']
alih - alihchar([1,2,3])
.SpecBAS, 111 byte
Saya telah melalui beberapa versi ini, 111 tampaknya menjadi yang terbaik yang bisa saya kelola.
Baris 2 menggunakan jalan
?
pintas untukPRINT
danIF
pernyataan inline bersarangPenjelasan kode semu
sumber
["a" TO "z","A" TO "Z"]
terlihat seperti kode pseudo daripada yang sudah dilakukannya."a".."z","A".."Z"
lebih mirip "kode nyata", setidaknya di mata saya ... Keduanya sangat mudah dimengerti =)Swift 2, 142 Bytes
Tidak disatukan
sumber
05AB1E ,
1916 byte-3 byte terima kasih
else
Bagaimana itu bekerja
Cobalah online!
sumber
¹
(input pertama) sudah ada ketika Anda memposting jawaban Anda, tetapi Anda dapat memasukkan 2 byte dengan itu:A¹åiAëAu¹åiAuë
( Cobalah online atau test suite ).Java SE 8,
7169 byteGolf:
Tidak Disatukan:
Saya awalnya menerapkan yang berikut ini
Ini lebih elegan tetapi sayangnya satu byte lebih besar. Ini mengasumsikan bahwa perilaku untuk karakter non alpha tidak ditentukan dan string s diinisialisasi ke "" sebelum dieksekusi. Jadilah lembut itu posting pertama saya.
sunting: 2 byte disimpan oleh Stewie Griffin dengan mengubah
sumber
a<91
harus bekerja, atau ...?Scala, 91 karakter
Tidak bermain golf
Memiliki hasil awal yang bisa berubah daripada mengembalikan nilai yang tidak berubah dari 3 berbeda jika lagi blok menyelamatkan saya 2 karakter, meskipun saya membencinya.
Metode scala-thonic
Metode yang lebih baik untuk scala adalah seperti ini:
sumber
Japt, 9 byte
Jalankan secara online
sumber