Keluarkan alfabet, ALPHABET, atau hanya karakter

49

Tantangannya sederhana:

Tulis fungsi atau program yang mengambil input x, dan output huruf kecil jika xmerupakan bagian dari huruf kecil, hasilkan huruf besar jika xmerupakan bagian dari huruf besar dan hasilkan hanya xjika 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 aatau A.
  • 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 Nukuran 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

Stewie Griffin
sumber
Apakah kita diizinkan mengimpor paket seperti, dengan Python misalnya: import Randomdan kemudian menggunakan Random.randint(jelas bukan untuk tantangan ini tapi tetap saja)?
Daniel
Ya, Anda dapat mengimpor paket. tetapi byte untuk menulis misalnya import stringdihitung, 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.
Stewie Griffin
Saya berasumsi bahwa dengan "tanda kutip adalah input yang valid dan harus didukung" yang Anda maksudkan bahwa jika metode input Anda membutuhkan tanda kutip maka tanda kutip sebagai input akan diloloskan
Cyoce
Bisakah kita menganggap lingkungan REPL?
kucing

Jawaban:

22

TeaScript , 5 byte

xN(0)

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

N0

Alternatif 1 byte

Jika kita bisa menampilkan 0123456789angka, maka ini bisa:

°
Downgoat
sumber
TeaScript 3 adalah valid. Jadi, Anda bisa menggunakannya!
user75200
27

Pyth, 10 byte

h/#z[GrG1z

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.

isaacg
sumber
6
Serius, adakah yang tidak bisa Anda pecahkan dengan beberapa byte Pyth? Saya benar-benar perlu belajar bahasa ini ..
Hexaholic
25
Pelajari bahasa yang mana? ... Anda menyebutkan dua nama. : P
quintopia
2
@quintopia Nah, mengapa tidak keduanya? :)
Hexaholic
15

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.

Eumel
sumber
4
Sebagai seseorang yang memiliki (hak istimewa? Kemalangan? Anda memutuskan) untuk bekerja di LabVIEW bertahun-tahun yang lalu, jawaban Anda membuat saya tersenyum. =)
corsiKa
12

Haskell, 48 byte

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

Contoh penggunaan:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

Ambil semua daftar ['a' .. 'z'], ['A' .. 'Z'] dan daftar tunggal dengan karakter input di cmana celemen. Untuk huruf kami selalu memiliki dua pasangan, jadi kami memilih yang pertama.

nimi
sumber
11

JavaScript (ES6), 79 byte

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

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.

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

Uji

pengguna81655
sumber
Apakah itu sebenarnya cara terpendek untuk menghasilkan string dengan seluruh alfabet di Javascript? Jika Anda ingin seluruh rentang ASCII yang dapat dicetak, apakah Anda harus mengetikkan setiap karakter tunggal?
Stewie Griffin
1
@StewieGriffin Sedih itu. Satu-satunya cara lain akan menjadi sesuatu seperti: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodesangat tidak cocok untuk bermain golf, tapi terkadang itu satu-satunya cara!
user81655
4
Dalam hal ini keseimbangannya adalah antara String.fromCharCodedan .toUpperCase(Bodoh dan bodoh) tetapi toUpperCaseadalah pemenangnya
edc65
Bagus! Saya sudah mencoba beberapa cara berbeda untuk bermain golf ini lebih jauh, tetapi belum menemukan satu yang berfungsi. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")tidak, tetapi satu byte lebih lama. Mengubah [A-Z]ke \wbekerja untuk semuanya kecuali _. Solusi Anda tampaknya yang sesingkat mungkin.
ETHproduksi
Inilah salah satu cara ABC...abc...?for[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
pintas
8

R, 90 75 byte

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

Terima kasih untuk Giuseppe .

Versi lama (90 byte):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

Terlihat jelek, tetapi itu cattidak bisa di-outsourcing-kan ke fungsi, IMHO.

Andreï Kostyrka
sumber
75 byte
Giuseppe
73 byte : parameter ke-2 scandapat berupa objek tipe karakter apa pun, jadi Anda dapat menggunakannya letterssebagai ganti ''.
Robin Ryder
7

Python 3, 92 84 82 74 byte

Versi saat ini: 74, terima kasih kepada isaacg dan wnnmaw!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed: (untuk beberapa definisi ungolfed

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

Versi pertama: 92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

Versi kedua: 82, terima kasih kepada isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c
Koneke
sumber
Hai, dan selamat datang di PPCG! Jawaban bagus. Berikut saran bermain golf: Anda dapat menggunakan ekspresi lambda ( lambda c:) alih-alih definisi eksplisit ( def f(c):print(), dan menyimpan beberapa byte. Juga, Anda tidak perlu ruang sebelum for.
isaacg
Ah, saya berasumsi "output" berarti cetak, dan tidak hanya kembali :) Rapi, jika itu masalahnya ke 84 lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c,. Terima kasih!
Koneke
Ya, definisi standar keluaran di situs memungkinkan Anda untuk kembali dari fungsi, sehingga Anda dapat mengedit versi baru menjadi jawaban Anda. Golf lainnya adalah bahwa tanda kurung tidak diperlukan - fungsinya bekerja sama persis tanpa mereka, sebagai pemahaman generator alih-alih pemahaman daftar.
isaacg
Ah, belum pernah benar-benar menggunakan pemahaman generator sebelumnya, mempelajari hal-hal baru! Terima kasih lagi :)
Koneke
Perhatikan bahwa saat memasukkan "ke fungsi, Anda membutuhkannya \".
Daniel
6

Python 3, 118 105 98 97 83 byte

Solusi sederhana. EDIT: Golf dengan terima kasih atas saran Erik the Pegolf.

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

Tidak Disatukan:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s
Sherlock9
sumber
1
Bisakah Anda menggunakan operator ternary untuk menghemat beberapa byte? Sesuatu seperti return a.lower() if s.islower() else a.
David Robertson
@ DavidVobertson Saya tidak yakin apakah Anda membaca solusi saya, yang merupakan baris teratas kode, dengan benar, tetapi itulah yang saya lakukan.
Sherlock9
Ah! Saya sedang membaca versi tanpa ungolfed. Maaf soal itu!
David Robertson
@ Davidvidoberton Tidak masalah
Sherlock9
Golf:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik the Outgolfer
5

PHP, 62 76 82 byte

PHP baik-baik saja sekarang:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

Mengambil input dari baris perintah, seperti:

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

Suntingan

  • Disimpan 6 byte dengan mengganti 91>ord($x)dengan Z<$x. Cara berpikirnya rumit. Berkat kerja manat .
  • Disimpan 14 byte dengan menghapus strtoupperdan membangun jangkauan yang diminta secara langsung.
masukkan nama pengguna di sini
sumber
Itu ord()terlihat buruk di sana. Coba Z<$x?$a:strtoupper($a).
manatwork
@manatwork Haha, saya sudah memikirkan cara rumit di bagian kedua itu. Terima kasih untuk menunjukkannya.
insertusernamehere
Cobalah ' '&$x^Amembuat huruf besar dan kecil a dan z. Artinya, kode Anda menjadi<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel
@ IsmaelMiguel Ini akan memiliki jumlah byte yang sama persis.
insertusernamehere
1
Jangan khawatir - dan ini masih cara yang bagus untuk mengaburkan. ;)
insertusernamehere
5

Perl, 46 34 33 byte

termasuk +2 untuk -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

Jalankan sebagai

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • perbarui 34, hemat 12 byte dengan menghilangkan fordan menggunakan kata kunci, terima kasih kepada @Dom Hastings .
  • perbarui 33 simpan 1 byte menggunakan -Edan saybukannya print.
Kenney
sumber
@HomHastings Terima kasih! Seharusnya tahu bilah pedang diizinkan di sana - dan saya seharusnya sudah melihat bahwa for: - /. Mencoba banyak pendekatan, ( -pdengan $"='';$_="@_", bahkan $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'tetapi semuanya lebih lama ...
Kenney
Pikirkan hal ini, jika Anda menetapkan $_=alih-alih printmenggunakan dan menggunakan -pbendera alih-alih -nAnda dapat menyimpan dua lagi ... Saya masih tidak dapat memikirkan cara lain untuk menyimpan lebih banyak sejauh ini ...
Dom Hastings
@HomHastings saya mencobanya, tapi saya tidak bisa mengatur $_ke daftar (yang saya tahu). Itu harus diinterpolasi ( $_="@_") tetapi menggunakan ruang sebagai pemisah jadi saya harus melakukannya $"=''juga, (atau menggunakan a join'',) yang membuatnya lebih lama. Tidak banyak ruang gerak yang satu ini!
Kenney
Hah, tentu saja! Anda bahkan mengatakan bahwa (ketika saya membaca kembali komentar setelah tidak berada di pub ...) Aku akan terus berpikir tentang hal itu, tetapi Anda mungkin terpendek Anda akan mendapatkan tanpa menggunakan saybukannya print!
Dom Hastings
5

Ruby, 41 + 1 = 42

Dengan sakelar -p, jalankan

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

Ini menghasilkan string

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

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 -pbendera tidak dasarnya

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?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. scanakan 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

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end
histokrat
sumber
Bisakah Anda memposting versi yang tidak golf? Saya masih belum mengerti sepenuhnya bagaimana ini bekerja.
Shelvacu
Tentu, memposting satu.
histokrat
4

CJam, 18 byte

'[,65>_elr:R]{R&}=

'[,65>mendorong alfabet huruf besar, alfabet _elhuruf kecil, dan r:Rstring char tunggal yang dibaca dari STDIN dan ditugaskan ke variabel R. Ini dibungkus dalam array ( ]) dan yang pertama yang memiliki karakter yang sama dengan Rdipilih menggunakan {R&}=.

Lynn
sumber
Saya mencoba memahami cara CJam, tapi saya bingung antara dokumen resmi dan apa yang saya baca di sini. Dapatkah seseorang memberi saya misalnya halaman di mana saya bisa mengerti mengapa _elalfabet huruf kecil?
Erdal G.
Ah, elberarti "konversi ke huruf kecil". Saya baru saja mendorong abjad huruf besar, jadi sekarang saya menduplikasinya _, lalu memanggil elsalinan yang dihasilkan.
Lynn
1
Saya membuat pdf bagus yang berisi (hampir) semua perintah CJam.
Lynn
4

Retina, 62 byte

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

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.

NinjaBearMonkey
sumber
4

Python 2.7.10, 95 93 79 byte

Ini adalah pertama kalinya saya mencoba bermain golf, jadi tolong, setiap bantuan atau saran sangat dihargai!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

Terima kasih kepada Morgan Thrapp untuk bantuannya!

Daniel
sumber
1
@MorganThrapp, itu sepertinya tidak berhasil. Apakah Anda yakin itu berfungsi dalam Python 2.7.10?
Daniel
Ini bekerja di 2.7.8. Apa yang tidak berhasil?
Morgan Thrapp
@MorganThrapp, sebenarnya, bisa tolong jelaskan terlebih dahulu bagaimana cara kerjanya Mungkin hanya saja saya tidak mengerti jadi saya melakukan sesuatu yang salah.
Daniel
Tentu, ini menggunakan fakta bahwa False == 0dan True == 1untuk mengindeks ke dalam tupel. Jadi, pertama-tama memeriksa apakah itu surat dengan isalpha, jika ya, itu kembali 1dan kemudian memeriksa apakah itu huruf kecil dan melakukan hal yang sama.
Morgan Thrapp
1
Tidak masalah! Saya suka bermain golf, jadi saya selalu senang membantu orang baru!
Morgan Thrapp
4

Ruby, 46 43 karakter

(42 karakter kode + 1 opsi baris perintah karakter)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

Terimakasih untuk:

  • Jordan for the ===magic (-3 karakter)

Contoh dijalankan:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@
manatwork
sumber
4

MATL , 22 bytes

jtt1Y2XIm~Iw?km?Ik]]1$

Ini menggunakan versi bahasa saat ini (3.1.0) .

EDIT (15 Sep 2017): Cobalah di MATL Online! (dengan versi bahasa yang lebih baru).

Contohnya

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

Penjelasan

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing
Luis Mendo
sumber
3

Jawa, 165 karakter

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

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.

Minimal
sumber
2
Anda tahu bahwa untuk sebagian besar tantangan, solusinya dapat diberikan sebagai program yang lengkap atau fungsi? Mengingat banyaknya kode boilerplate di Jawa, suatu fungsi mungkin lebih pendek.
manatwork
1
Menerapkan beberapa trik kecil, tanpa mengubah logika, saya punya ini: 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++);}.
manatwork
3

Perl, 23 byte

Termasuk +2 untuk -nE(bukan +1 normal) agar adil dengan solusi perl lainnya

Jalankan dengan input pada STDIN tanpa tertinggal baris baru:

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

Hanya kode:

say/\pL/?a&$_|A..Z:$_
Ton Hospel
sumber
Fakta bahwa input terbatas pada karakter 7-bit.
msh210
3

Lua, 98 97 byte

Sayangnya, saya tidak menemukan solusi yang lebih pendek dari 26 byte untuk diatur adengan 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

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

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.

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))
Katenkyo
sumber
Anda bukan satu-satunya yang tidak menemukan cara yang lebih pendek untuk menghasilkan alfabet dalam bahasa Lua. :(
manatwork
@manatwork haha, hal yang persis sama, kecuali saya tidak harus mencetaknya, tetapi untuk menyatukannya ^^. Setidaknya, itu berarti tidak ada trik tersembunyi yang saya tidak tahu melakukannya ^^ '.
Katenkyo
Anda dapat menyimpan byte dengan c=io.read()a="abcdefghijklmnopqrstuvwyz"alih - alih a, c = ...
ATaco
2

Mathematica, 75 byte

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

Skor yang cukup bagus untuk bahasa non-golf ... Solusi apa pun yang menggunakan pemrosesan kode karakter akan membutuhkan lebih banyak byte, karena biaya ToCharacterCodedan FromCharacterCode.

LegionMammal978
sumber
2

C (fungsi), 71 byte

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}
Trauma Digital
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.
Kenney
1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}untuk 62 byte
gastropner
2

Python, 81 byte

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

Ini pada dasarnya adalah terjemahan dari jawaban Pyth. Ini mendefinisikan fungsi fyang mengambil argumen karakter dan mengembalikan hasilnya.

PurkkaKoodari
sumber
1
Maksudmu if z in kbenar? Juga, f=opsional secara default.
xnor
@xnatau Ya. Ternyata saya ketinggalan Ctrl-C.
PurkkaKoodari
2
Hapus f=, buat fungsinya anonim. -2
Erik the Outgolfer
2

Jolf , 17 byte

Coba di sini.

? hpLipl? hpUipui
?                  if
  hpL               the lowercase alphabet (array) contains
     i               the input
      pl            return the lowercase alphabet (string)
        ?          else if
          hpU       the uppercase alphabet (array) contains
             i       the input
              pu    return the uppercase alphabet (string)
                i  otherwise, return the input
                   implicit: print the result
Conor O'Brien
sumber
2

MATLAB: 71 68 byte

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(terima kasih kepada OP untuk menyimpan 3 byte)

Uji:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Penjelasan: Alfabet huruf besar menempati 65:90karakter ASCII. Alfabet huruf kecil ada di 97:122ASCII. Jadi, b=i<65|i>122|(i>90&i<97)periksa apakah karakter input iBUKAN alfabet. Jika demikian, input dikembalikan. Alfabet huruf besar dikembalikan jika b==1dan i<97(karakter huruf besar). Jika b==1dan i>96, 32 ditambahkan ke 65:90yang sesuai dengan 97:122- alfabet huruf kecil.

brainkz
sumber
Pengiriman yang bagus. Dua komentar: Biasa digunakan 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 - alih char([1,2,3]).
Stewie Griffin
Oke, sudah diedit. Terima kasih atas sarannya!
brainkz
2

SpecBAS, 111 byte

Saya telah melalui beberapa versi ini, 111 tampaknya menjadi yang terbaik yang bisa saya kelola.

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

Baris 2 menggunakan jalan ?pintas untuk PRINTdan IFpernyataan inline bersarang

Penjelasan kode semu

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF
Brian
sumber
Sulit untuk membuatnya ["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 =)
Stewie Griffin
2
Tentukan apa ????
Bassdrop Cumberwubwubwub
2

Swift 2, 142 Bytes

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

Tidak disatukan

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}
Jojodmo
sumber
2

05AB1E , 19 16 byte

-3 byte terima kasih else

DAsåiAëDAusåiAuë

Bagaimana itu bekerja

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

Cobalah online!

Neil A.
sumber
Tidak yakin apakah ¹(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 ).
Kevin Cruijssen
2

Java SE 8, 71 69 byte

Golf:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

Tidak Disatukan:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

Saya awalnya menerapkan yang berikut ini

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

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

a - 91 < 0 to a < 91
jfh
sumber
2
Selamat datang di situs ini! :)
DJMcMayhem
1
Terima kasih! Sudah mengintai selama beberapa tahun sekarang dan benar-benar tertarik untuk melihat apakah saya dapat membuat jawaban Java / C ++ yang bersaing :)
jfh
1
a<91harus bekerja, atau ...?
Stewie Griffin
2

Scala, 91 karakter

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

Tidak bermain golf

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

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:

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}
sprague44
sumber