Xuất bảng chữ cái, ALPHABET hoặc chỉ một ký tự


49

Thử thách rất đơn giản:

Viết hàm hoặc chương trình lấy đầu vào xvà xuất ra bảng chữ cái chữ thường nếu xlà một phần của bảng chữ cái viết thường, xuất ra bảng chữ cái chữ hoa nếu xlà một phần của bảng chữ cái in hoa và xuất ra xnếu nó không phải là một phần của một trong hai chữ cái in hoa

Quy tắc:

  • Đầu vào có thể là đối số chức năng hoặc từ STDIN
  • Đầu vào sẽ là bất kỳ ký tự ASCII có thể in nào từ 32 đến 126 (khoảng trắng đến dấu ngã).
  • Đầu vào có thể nằm trong dấu ngoặc kép, 'x'hoặc "x", nhưng hãy nhớ rằng '"là đầu vào hợp lệ và cần được hỗ trợ.
  • Đầu vào có thể là bất kỳ chữ cái nào trong bảng chữ cái, tức là bạn không thể cho rằng nó sẽ là ahoặc A.
  • Đầu ra chỉ nên là một trong các bảng chữ cái hoặc ký hiệu đơn, nhưng các dòng mới theo dõi là OK.
  • Các chữ cái trong bảng chữ cái không được phân tách bằng dấu cách, dấu phẩy hoặc bất cứ thứ gì khác.

Vài ví dụ:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

Mã ngắn nhất trong byte thắng.


Tùy chọn nhưng được đánh giá cao: Nếu ngôn ngữ của bạn có trình thông dịch trực tuyến, vui lòng gửi một liên kết để người khác có thể dễ dàng kiểm tra.


Bảng xếp hạng

Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

## Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Chúng ta có được phép nhập các gói như trong Python chẳng hạn: import Randomvà sau đó sử dụng Random.randint(rõ ràng không phải cho thử thách này nhưng vẫn)?
Daniel

Có, bạn có thể nhập các gói. nhưng các byte để viết chẳng hạn import stringđược tính, do đó, cách khắc phục thường tốt hơn. Lưu ý rằng gói phải tồn tại trước khi thử thách được đăng. Nhiều thách thức có một cái gì đó như: "Sử dụng các gói không được phép", nhưng đó không phải là trường hợp trong thử thách này.
Stewie Griffin

Tôi giả sử rằng "trích dẫn là đầu vào hợp lệ và phải được hỗ trợ", ý bạn là nếu phương thức nhập của bạn yêu cầu dấu ngoặc kép thì dấu ngoặc kép sẽ được thoát
Cyoce

Chúng ta có thể giả sử một môi trường REPL không?
mèo

Câu trả lời:


22

TeaScript , 5 byte

xN(0)

TeaScript có (gần như) tích hợp sẵn cho việc này: D

Dùng thử trực tuyến (lưu ý: trình thông dịch trực tuyến đã được cập nhật lên TeaScript v3 vì vậy đây là N0)

Hãy thử tất cả các trường hợp thử nghiệm


TeaScript 3 , 2 byte [không cạnh tranh]

Sử dụng TeaScript 3, điều này có thể trở thành 2 byte. Điều này không cạnh tranh vì TeaScript 3 đã được thực hiện sau thử thách này

N0

Thay thế 1 byte

Nếu chúng ta có thể xuất ra 0123456789các chữ số, thì đây có thể là:

°

TeaScript 3 hợp lệ. Vì vậy, bạn có thể sử dụng nó!
dùng75200

27

Bình thường, 10 byte

h/#z[GrG1z

Bộ kiểm tra

Chúng tôi bắt đầu bằng cách xây dựng một danh sách với 3 yếu tố: bảng chữ cái viết thường, bảng chữ cái viết hoa và đầu vào. ( [GrG1z) Sau đó, chúng tôi lọc danh sách này về số lần xuất hiện của đầu vào trong các phần tử là khác không. ( /#z) Cuối cùng, chúng tôi lấy phần tử đầu tiên của danh sách được lọc.


6
Nghiêm túc mà nói, có điều gì bạn không thể giải quyết với một vài byte của Pyth không? Tôi thực sự cần học ngôn ngữ này ..
Hexaholic

25
Học ngôn ngữ nào? ... bạn đã đề cập đến hai tên. : P
quintopia

2
@quintopia Vâng, tại sao không phải cả hai? :)
Hexaholic

15

LabVIEW, 23 LabVIEW Nguyên thủy

Bộ chọn (cấu trúc? Trên cấu trúc cse) được kết nối với một vi được gọi là Lớp từ điển. Nó đưa ra các số từ 1-6 tùy thuộc vào đầu vào, 5 là chữ thường 4 là chữ hoa.

Vòng lặp for đi 26 lần để tạo một bảng chữ cái hoặc một lần để chuyển biểu tượng qua.


4
Là một người có (đặc quyền? Bất hạnh? Bạn quyết định) làm việc trong LabVIEW nhiều năm trước, câu trả lời của bạn mang lại nụ cười cho tôi. =)
corsiKa

12

Haskell, 48 byte

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

Ví dụ sử dụng:

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

Lấy tất cả các danh sách ['a' .. 'z'], ['A' .. 'Z'] và danh sách singleton với char đầu vào ctrong đó clà phần tử của. Đối với các chữ cái chúng tôi luôn có hai kết quả trùng khớp, vì vậy chúng tôi chọn cái đầu tiên.


11

JavaScript (ES6), 79 byte

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

Giải trình

JavaScript so sánh mã của từng ký tự theo thứ tự bảng chữ cái khi so sánh các chuỗi, vì vậy mã của các ký tự được sử dụng trong các so sánh là 1 bên dưới và trên phạm vi các ký tự được yêu cầu.

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
)

Kiểm tra


Đó thực sự là cách ngắn nhất để tạo ra một chuỗi với toàn bộ bảng chữ cái trong Javascript? Nếu bạn muốn toàn bộ phạm vi ASCII có thể in, bạn có phải nhập từng ký tự không?
Stewie Griffin

1
@StewieGriffin Thật đáng buồn. Cách duy nhất khác sẽ là một cái gì đó như : for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodelà rất không phù hợp để chơi golf, nhưng đôi khi đó là cách duy nhất!
dùng81655

4
Trong trường hợp này, số dư nằm giữa String.fromCharCode.toUpperCase(Dumb and Dumber) nhưng toUpperCaselà người chiến thắng
edc65

Đẹp! Tôi đã thử một vài cách khác nhau để chơi gôn này, nhưng không tìm thấy cách nào hiệu quả. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")không, nhưng là một byte dài hơn. Thay đổi [A-Z]để \wlàm việc cho tất cả mọi thứ ngoại trừ _. Giải pháp của bạn dường như là ngắn nhất có thể.
Sản xuất ETH

Đây là một trong những cách ngắn nhất để tạo ABC...abc...?mà không có forvòng lặp thực : (một số phần đệm)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R, 90 75 byte

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

Cảm ơn Giuseppe .

Phiên bản cũ (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

Trông xấu xí, nhưng những thứ đó catkhông thể được gia công cho các chức năng, IMHO.



73 byte : tham số thứ 2 của scancó thể là bất kỳ đối tượng nào có kiểu ký tự, vì vậy bạn có thể lettersthay thế ''.
Robin Ryder

7

Python 3, 92 84 82 74 byte

Phiên bản hiện tại: 74, nhờ isaacg và wnnmaw!

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

Ungolfed: (đối với một số định nghĩa về không có người

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

Phiên bản đầu tiên: 92

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

Phiên bản thứ hai: 82, nhờ isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c

Xin chào, và chào mừng đến với PPCG! Câu trả lời tốt đẹp. Đây là một gợi ý chơi gôn: Bạn có thể sử dụng biểu thức lambda ( lambda c:) thay vì định nghĩa rõ ràng ( def f(c):print() và lưu một số byte. Ngoài ra, bạn không cần không gian trước for.
isaacg

À, tôi giả sử "đầu ra" có nghĩa là in, và không chỉ trả về :) Không, nếu đó là trường hợp giảm xuống còn 84 , lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Cảm ơn!
Koneke

Vâng, định nghĩa đầu ra tiêu chuẩn trên trang web cho phép trả về từ các chức năng, vì vậy bạn có thể chỉnh sửa phiên bản mới thành câu trả lời của mình. Một môn đánh gôn khác là các dấu ngoặc không cần thiết - hàm hoạt động hoàn toàn giống nhau mà không có chúng, như một sự hiểu biết về máy phát điện thay vì hiểu danh sách.
isaacg

Ah, trước đây chưa bao giờ sử dụng máy phát điện, hiểu những điều mới! Cảm ơn một lần nữa :)
Koneke

Lưu ý rằng khi nhập "vào chức năng, bạn cần \"thay thế.
Daniel

6

Python 3, 118 105 98 97 83 byte

Giải pháp đơn giản. EDIT: Chơi golf với lời đề nghị của Erik the Golfer.

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

Ung dung:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

1
Bạn có thể sử dụng một toán tử ternary để lưu một vài byte? Một cái gì đó như return a.lower() if s.islower() else a.
David Robertson

@DavidRobertson Tôi không chắc liệu bạn có đang đọc giải pháp của tôi không, đây là dòng mã hàng đầu, chính xác, nhưng đó chính xác là những gì tôi đang làm.
Sherlock9

Ah! Tôi đã đọc phiên bản vô văn hóa. Xin lỗi vì điều đó!
David Robertson

@DavidRobertson Không thành vấn đề
Sherlock9

lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Chơi gôn

5

PHP, 62 76 82 byte

PHP hiện đang hoạt động tốt:

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

Lấy đầu vào từ dòng lệnh, như:

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

Chỉnh sửa

  • Đã lưu 6 byte bằng cách thay thế 91>ord($x)bằng Z<$x. Suy nghĩ cách phức tạp. Nhờ làm móng tay .
  • Đã lưu 14 byte bằng cách loại bỏ strtouppervà xây dựng phạm vi yêu cầu trực tiếp.

Điều đó có ord()vẻ xấu ở đó. Hãy thử Z<$x?$a:strtoupper($a).
manatwork

@manatwork Haha, tôi đã nghĩ cách phức tạp trong phần thứ hai đó. Nhờ chỉ ra nó.
insertusernamehere

Cố gắng ' '&$x^Alàm chữ hoa và chữ thường a và z. Đó là, mã của bạn trở thành<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel

@IsmaelMiguel Điều này sẽ có cùng số byte chính xác.
insertusernamehere

1
Đừng lo lắng - và đó vẫn là một cách hay để làm xáo trộn. ;)
insertusernamehere

5

Perl, 46 34 33 byte

bao gồm +2 cho -nE

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

Chạy như

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

  • cập nhật 34 lưu 12 byte bằng cách bỏ qua forvà sử dụng barewords, nhờ @Dom Hastings .
  • cập nhật 33 lưu 1 byte bằng cách sử dụng -Esaythay vì print.

@DomHastings Cảm ơn! Lẽ ra các barewords đã được cho phép ở đó - và tôi nên thấy rằng for: - /. Đã thử một loạt các phương pháp, ( -pvới $"='';$_="@_", thậm chí $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'nhưng mọi thứ còn dài hơn ...
Kenney

Có một suy nghĩ về điều này, nếu bạn đặt $_=thay vì printing và sử dụng -pcờ thay vì -nbạn có thể cứu hai người khác ... Tôi vẫn không thể nghĩ ra bất kỳ cách nào khác để tiết kiệm hơn cho đến nay ...
Dom Hastings

@DomHastings Tôi đã thử nó, nhưng tôi không thể thiết lập $_một danh sách (mà tôi biết). Nó sẽ phải được nội suy ( $_="@_") nhưng sử dụng không gian làm dấu phân cách nên tôi cũng phải làm $"=''như vậy, (hoặc sử dụng a join'',) làm cho nó dài hơn. Không có nhiều phòng ngọ nguậy trên cái này!
Kenney

Hah, tất nhiên rồi! Bạn thậm chí còn nói rằng (khi tôi đọc lại bình luận sau khi không ở quán rượu ...) tôi sẽ tiếp tục suy nghĩ về nó, nhưng bạn có thể là người ngắn nhất bạn sẽ nhận được mà không sử dụng saythay vì print!
Dom Hastings

5

Hồng ngọc, 41 + 1 = 42

Với công tắc -p, chạy

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

Điều này tạo ra chuỗi

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

và kiểm tra từng khối "ký tự từ" liền kề nhau, đó chỉ là bảng chữ cái viết thường và chữ hoa và ký tự gạch dưới. Nếu có nhiều ký tự từ liên tiếp giữa Z và a, thủ thuật này sẽ không hoạt động.

Chỉnh sửa để thêm giải thích, theo yêu cầu:

Các -pcờ không cơ bản

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

[*?A..?z]là mảng các ký tự giữa chữ hoa A và chữ thường Z, theo thứ tự ASCII. Đó là bảng chữ cái viết hoa, một số ký tự không phải chữ cái và bảng chữ cái viết thường. *''nối các mảng thành một chuỗi, vì vậy chúng ta có thể gọi .scannó. scansẽ tìm thấy từng trận đấu của biểu thức chính quy /\w+/, điền vào biến ma thuật$& với nó và gọi khối. Mỗi khi khối được lặp lại, nó sẽ kiểm tra xem chuỗi khớp có chứa $_hay không và đặt đầu ra cho chuỗi đó nếu có. Vì vậy, nếu $ _ được chứa trong bảng chữ cái in hoa hoặc viết thường, nó sẽ được sửa đổi cho phù hợp, nếu không thì nó không thay đổi.

Phiên bản không được chỉnh sửa sẽ trông giống như

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end

Bạn có thể đăng một phiên bản không chơi golf? Tôi vẫn chưa hiểu đầy đủ về cách thức hoạt động của nó.
Shelvacu

Chắc chắn, đăng một.
lịch sử

4

CJam, 18 byte

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

'[,65>đẩy bảng chữ cái viết hoa, bảng chữ cái _elchữ thường và r:Rmột chuỗi ký tự đơn được đọc từ STDIN và được gán cho biến R. Chúng được gói trong một mảng ( ]) và cái đầu tiên có bất kỳ ký tự chung nào Rđược chọn bằng cách sử dụng {R&}=.


Tôi đang cố gắng hiểu làm thế nào để CJam, nhưng tôi bị lạc giữa tài liệu chính thức và những gì tôi đang đọc ở đây. Ai đó có thể cho tôi ví dụ một trang mà tôi có thể hiểu tại sao _elbảng chữ cái viết thường?
Erdal G.

Ah, elcó nghĩa là "chuyển đổi thành chữ thường". Tôi vừa mới đẩy bảng chữ cái viết hoa, vì vậy bây giờ tôi sao chép nó với _, sau đó gọi elvào bản sao kết quả.
Lynn

1
Tôi đã tạo một pdf đẹp chứa (gần như) tất cả các lệnh của CJam.
Lynn

4

Võng mạc, 62 byte

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

Hai dòng ngắn là regex để phù hợp. Nếu đầu vào là chữ thường (trong phạm vi [a-z]), nó sẽ thay thế ký tự đó (trong trường hợp này là toàn bộ đầu vào) bằng bảng chữ cái viết thường. Quá trình này là tương tự cho chữ hoa. Nếu nó không phải là một lá thư, không có sự thay thế nào được thực hiện, và nó được xuất ra không bị ảnh hưởng.

Hãy thử trực tuyến.


4

Python 2.7.10, 95 93 79 byte

Đây là lần đầu tiên tôi thậm chí cố gắng chơi golf, vì vậy xin vui lòng, bất kỳ trợ giúp hoặc lời khuyên nào đều được đánh giá cao!

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

Cảm ơn Morgan Thrapp đã giúp đỡ!


1
@MorganThrapp, dường như không hoạt động. Bạn có chắc chắn rằng nó hoạt động trong Python 2.7.10?
Daniel

Nó hoạt động trong 2.7.8. Cái gì không hoạt động?
Morgan Thrapp

@MorganThrapp, thực sự, bạn có thể vui lòng giải thích chính xác đầu tiên cách thức hoạt động không? Có lẽ chỉ là tôi không hiểu nên tôi đang làm gì đó sai.
Daniel

Chắc chắn, nó sử dụng thực tế rằng False == 0True == 1để lập chỉ mục thành bộ dữ liệu. Vì vậy, trước tiên, nó kiểm tra xem đó có phải là một chữ cái hay không isalpha, nếu có, nó sẽ trả về 1và sau đó kiểm tra xem đó có phải là chữ thường hay không.
Morgan Thrapp

1
Không vấn đề gì! Tôi thích chơi gôn, vì vậy tôi luôn sẵn lòng giúp đỡ một người mới!
Morgan Thrapp

4

Ruby, 46 43 ký tự

(Mã 42 ký tự + 1 ký tự tùy chọn dòng lệnh)

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

Nhờ vào:

  • Jordan cho ===phép thuật (-3 ký tự)

Chạy mẫu:

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]*""}'
@

4

MATL , 22 byte

jtt1Y2XIm~Iw?km?Ik]]1$

Điều này sử dụng phiên bản hiện tại (3.1.0) của ngôn ngữ.

EDIT (ngày 15 tháng 9 năm 2017): Hãy thử tại MATL Online! (với phiên bản mới hơn của ngôn ngữ).

Ví dụ

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

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

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

Giải trình

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

3

Java, 165 ký tự

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);}}}

Tạo đầu ra cần thiết cho thiết bị xuất chuẩn (thay vì trả lại). Đầu vào là thông qua các đối số thời gian chạy.

Làm thế nào nó hoạt động.

1) Thiết lập một số biến số nguyên
c = giá trị ASCII của ký tự đầu tiên của tham số đầu tiên của các đối số thời gian chạy.
d = c được chuyển đổi thành giá trị ASCII chữ thường (bằng cách OR nó với 32)
b = phép tính để xem nếu d là một chữ cái. Sẽ là <0 nếu một chữ cái.
e = Ký tự bắt đầu cho đầu ra. Nếu giá trị ASCII trong d là một chữ cái (xem b) thì nó được đặt thành 'A' (hoặc 'a' bằng cách thêm c VÀ 32 vào 'A' giá trị ASCII) nếu không nó được đặt thành giá trị ban đầu của c.
f = số lượng ký tự cần xuất. Nếu nó không phải là một chữ cái (xem b) thì nó được đặt thành 1 chữ cái khác, nó được đặt thành 26
2) Lặp từ e đến e + f xuất từng ký tự thành thiết bị xuất chuẩn.


2
Bạn biết rằng đối với hầu hết các thách thức, giải pháp có thể được cung cấp dưới dạng chương trình hoàn chỉnh hoặc chức năng? Với số lượng lớn mã soạn sẵn trong Java, một hàm có thể ngắn hơn.
manatwork

1
Áp dụng một vài thủ thuật nhỏ mà không thay đổi logic, tôi đã nhận được điều này : 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

Bao gồm +2 cho -nE(thay vì +1 thông thường) để công bằng với giải pháp perl khác

Chạy với đầu vào trên STDIN mà không theo dõi dòng mới:

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

Chỉ cần mã:

say/\pL/?a&$_|A..Z:$_

Sử dụng tốt thực tế là đầu vào được giới hạn ở các ký tự 7 bit.
msh210

3

Lua, 98 97 byte

Đáng buồn thay, tôi đã không tìm thấy một giải pháp ngắn hơn 26 byte để thiết lập avới bảng chữ cái. Trên thực tế, tôi đã không tìm thấy ngắn hơn 32.

Chỉnh sửa: lưu 1 Byte nhờ @ATaco, đã làm lỗi này rất nhiều khi bắt đầu với Lua: p

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

Bạn có thể kiểm tra nó trực tuyến trên trang web chính thức hoặc trên ideone . Nếu bạn sử dụng cái trước, đầu vào sẽ không hoạt động (bị vô hiệu hóa), vì vậy hãy sử dụng nguồn sau, nơi nó được gói vào một hàm.

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"))

Bạn không phải là người duy nhất không tìm thấy cách ngắn hơn để tạo bảng chữ cái trong Lua. :(
manatwork

@manatwork haha, chính xác là như vậy, ngoại trừ tôi không phải in nó, nhưng để nối nó ^^. Ít nhất, điều đó có nghĩa là không có một mẹo ẩn nào mà tôi không biết để làm điều đó ^^ '.
Katenkyo

Bạn có thể lưu một byte bằng c=io.read()a="abcdefghijklmnopqrstuvwyz"thay vì a, c = ...
ATaco

2

Toán học, 75 byte

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

Điểm khá tốt cho một ngôn ngữ không chơi gôn ... Bất kỳ giải pháp nào sử dụng xử lý mã ký tự sẽ tốn nhiều byte hơn, do chi phí ToCharacterCodeFromCharacterCode.


2

C (hàm), 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++);}

f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}tiết kiệm một byte.
Kenney

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}cho 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]

Đây về cơ bản là một bản dịch của câu trả lời Pyth. Nó định nghĩa một hàm flấy đối số là ký tự và trả về kết quả.


1
Ý bạn là if z in kđúng không? Ngoài ra, f=là tùy chọn theo mặc định.
xnor

@xnor Vâng. Rõ ràng tôi đã bỏ lỡ một Ctrl-C.
PurkkaKoodari

2
Loại bỏ f=, làm cho chức năng ẩn danh. -2
Erik the Outgolfer

2

Jolf , 17 byte

Hãy thử nó ở đây.

? 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

2

MATLAB: 71 68 byte

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

(cảm ơn OP vì đã tiết kiệm 3 byte)

Kiểm tra:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Giải thích: Bảng chữ cái chữ hoa chiếm các 65:90ký tự ASCII. Bảng chữ cái chữ thường là tại 97:122ASCII. Vì vậy, b=i<65|i>122|(i>90&i<97)kiểm tra xem ký tự đầu vào iKHÔNG phải là chữ cái. Nếu vậy, đầu vào được trả lại. Bảng chữ cái viết hoa được trả về nếu b==1i<97(ký tự viết hoa). Nếu b==1i>96, 32 được thêm vào 65:90tương ứng với 97:122- bảng chữ cái chữ thường.


Trình tốt đẹp. Hai nhận xét: Nó được sử dụng phổ biến i=input('')nếu nội dung gửi là tập lệnh hoặc làm đối số chức năng nếu đó là chức năng @(i)i^2. i='a'nói chung là không được chấp nhận. Ngoài ra, bạn có thể lưu 3 byte bằng cách thực hiện [1,2,3,'']thay vì char([1,2,3]).
Stewie Griffin

Ok, chỉnh sửa. Cảm ơn đã gợi ý!
brainkz

2

SpecBAS, 111 byte

Tôi đã trải qua một số phiên bản này, 111 dường như là phiên bản tốt nhất tôi có thể quản lý.

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

Dòng 2 sử dụng ?phím tắt cho PRINTvà lồng trong dòngIF câu lệnh

Giải thích mã giả

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

Thật khó để làm cho nó ["a" TO "z","A" TO "Z"]trông giống như một mã giả hơn nó đã làm. "a".."z","A".."Z"trông giống như một "mã thực", ít nhất là trong mắt tôi ... Cả hai đều rất dễ hiểu =)
Stewie Griffin

2
Thông số kỹ thuật ????
Bassdrop Cumberwubwubwub

2

Swift 2, 142 byte

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}

Ung dung

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
}

2

05AB1E , 19 16 byte

-3 byte nhờ else

DAsåiAëDAusåiAuë

Làm thế nào nó hoạt động

                   # 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

Hãy thử trực tuyến!


Không chắc chắn nếu ¹(đầu vào đầu tiên) đã tồn tại khi bạn đăng câu trả lời của mình, nhưng bạn có thể đánh golf 2 byte với nó: A¹åiAëAu¹åiAuë( Thử trực tuyến hoặc bộ kiểm tra ).
Kevin Cruijssen

2

Java SE 8, 71 69 byte

Chơi gôn

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

Ung dung:

(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

Ban đầu tôi đã thực hiện như sau

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

Nó thanh lịch hơn nhưng đáng buồn là nó lớn hơn một byte. Điều này giả định rằng hành vi cho các ký tự không phải là alpha không được xác định và chuỗi s được khởi tạo thành "" trước khi thực hiện. Hãy nhẹ nhàng đó là bài viết đầu tiên của tôi.

chỉnh sửa: 2 byte được lưu bởi Stewie Griffin bằng cách thay đổi

a - 91 < 0 to a < 91

2
Chào mừng đến với trang web! :)
DJMcMayhem

1
Cảm ơn! Đã ẩn giấu vài năm nay và thực sự quan tâm xem liệu tôi có thể đưa ra các câu trả lời Java / C ++ hay không :)
jfh

1
a<91nên làm việc, hay ...?
Stewie Griffin

2

Scala, 91 ký tự

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

Không chơi gôn

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
}

Có một kết quả có thể thay đổi ban đầu thay vì trả về một giá trị bất biến từ 3 số khác biệt nếu các khối khác tiết kiệm cho tôi 2 ký tự, mặc dù tôi ghét nó.

Phương pháp Scala-thonic

Một phương pháp tốt hơn cho scala sẽ là một cái gì đó như thế này:

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
    }
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.