เอาท์พุทตัวอักษร ALPHABET หรือเพียงแค่ตัวละคร


49

ความท้าทายนั้นง่าย:

เขียนฟังก์ชั่นหรือโปรแกรมที่รับอินพุตxและเอาต์พุตตัวอักษรตัวพิมพ์เล็กถ้าxเป็นส่วนหนึ่งของอักษรตัวพิมพ์เล็กพิมพ์ผลลัพธ์อักษรตัวพิมพ์ใหญ่ถ้าxเป็นส่วนหนึ่งของตัวอักษรตัวพิมพ์ใหญ่และเอาต์พุตxถ้ามันไม่ได้เป็นส่วนหนึ่งของทั้ง

กฎ:

  • อินพุตสามารถเป็นอาร์กิวเมนต์ของฟังก์ชันหรือจาก STDIN
  • อินพุตจะเป็นอักขระ ASCII ที่สามารถพิมพ์ได้ใด ๆ จาก 32 ถึง 126 (เว้นวรรคถึงตัวหนอน)
  • อินพุตอาจอยู่ในเครื่องหมายคำพูด'x'หรือ"x"แต่โปรดจำไว้ว่า'และ"เป็นอินพุตที่ถูกต้องและควรได้รับการสนับสนุน
  • การป้อนข้อมูลสามารถใด ๆ ของตัวอักษรในตัวอักษรคือคุณไม่สามารถสันนิษฐานได้ว่ามันจะเป็นหรือaA
  • เอาต์พุตควรเป็นหนึ่งในตัวอักษรหรือสัญลักษณ์เดียว แต่การขึ้นบรรทัดใหม่ตามด้วยตกลง
  • ตัวอักษรในตัวอักษรไม่ควรคั่นด้วยเว้นวรรคจุลภาคหรืออย่างอื่น

ตัวอย่างบางส่วน:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

โค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ


ไม่บังคับ แต่เป็นที่นิยม: หากภาษาของคุณมีล่ามออนไลน์โปรดโพสต์ลิงก์เพื่อให้ผู้อื่นสามารถทดสอบได้ง่าย


ลีดเดอร์บอร์ด

สแต็คส่วนย่อยที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการคำตอบสั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในบรรทัดแรกโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

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


เราได้รับอนุญาตให้นำเข้าแพ็คเกจเช่นใน Python import Randomหรือไม่แล้วใช้Random.randint(เห็นได้ชัดว่าไม่ใช่ความท้าทายนี้ แต่ยัง)
Daniel

ใช่คุณสามารถนำเข้าแพ็คเกจ แต่จำนวนไบต์สำหรับการเขียนimport stringจะถูกนับดังนั้นจึงเป็นการดีกว่าที่จะแก้ไขปัญหา โปรดทราบว่าแพคเกจจะต้องมีอยู่ก่อนที่จะโพสต์ความท้าทาย ความท้าทายหลายอย่างมีดังนี้: "การใช้แพคเกจที่ทำสิ่งนี้ไม่ได้รับอนุญาต" แต่นั่นไม่ใช่กรณีในการท้าทายนี้
Stewie Griffin

ฉันสมมติว่าโดย "เครื่องหมายคำพูดเป็นอินพุตที่ถูกต้องและต้องได้รับการสนับสนุน" คุณหมายความว่าหากวิธีการป้อนข้อมูลของคุณต้องมีเครื่องหมายอัญประกาศแล้วเครื่องหมายอัญประกาศจะถูกหลีกเลี่ยง
Cyoce

เราขอสมมติสภาพแวดล้อม REPL ได้ไหม
แมว

คำตอบ:


22

TeaScriptขนาด 5 ไบต์

xN(0)

TeaScript มี (เกือบ) ในตัวสำหรับสิ่งนี้: D

ลองใช้ออนไลน์ (หมายเหตุ: ล่ามออนไลน์ได้รับการอัปเดตเป็น TeaScript v3 ซึ่งเป็นสิ่งนี้N0)

ลองกรณีทดสอบทั้งหมด


TeaScript 3 , 2 ไบต์ [ไม่แข่งขัน]

เมื่อใช้ TeaScript 3 สิ่งนี้จะกลายเป็น 2 ไบต์ สิ่งนี้ไม่ใช่การแข่งขันเนื่องจาก TeaScript 3 ทำขึ้นหลังจากการท้าทายนี้

N0

ทางเลือก 1 ไบต์

หากเราสามารถแสดงผล0123456789เป็นตัวเลขได้นี่อาจเป็น:

°

TeaScript 3 นั้นถูกต้อง ดังนั้นคุณอาจใช้มัน!
user75200

27

Pyth, 10 ไบต์

h/#z[GrG1z

ชุดทดสอบ

เราเริ่มต้นด้วยการสร้างรายการที่มี 3 องค์ประกอบ: ตัวอักษรตัวพิมพ์เล็กตัวอักษรตัวพิมพ์ใหญ่และอินพุต ( [GrG1z) จากนั้นเรากรองรายการนี้ตามจำนวนที่ปรากฏของอินพุตในองค์ประกอบที่ไม่ใช่ศูนย์ ( /#z) ในที่สุดเราใช้องค์ประกอบแรกของรายการที่ถูกกรอง


6
อย่างจริงจังมีอะไรที่คุณแก้ไม่ได้ด้วย Pyth ขนาดไม่กี่ไบต์? ฉันต้องเรียนรู้ภาษานี้จริงๆ ..
Hexaholic

25
เรียนรู้ภาษาใด ... คุณพูดถึงสองชื่อ : P
quintopia

2
@quintopia ดีทำไมไม่ทั้งสองอย่าง? :)
Hexaholic

15

LabVIEW, 23 LabVIEW Primitives

ตัวเลือก (? บนโครงสร้าง cse) เชื่อมต่อกับ vi ที่เรียกว่า Lexical Class มันใช้ตัวเลขตั้งแต่ 1-6 ขึ้นอยู่กับอินพุต 5 เป็นตัวพิมพ์เล็ก 4 เป็นตัวพิมพ์ใหญ่

ห่วงสำหรับไป 26 ครั้งเพื่อสร้างตัวอักษรหรือครั้งเดียวเพื่อส่งผ่านสัญลักษณ์


4
ในฐานะที่เป็นคนที่มีสิทธิ์โชคร้ายที่คุณตัดสินใจทำงาน LabVIEW เมื่อหลายปีก่อนคำตอบของคุณทำให้ยิ้มได้ =)
corsiKa

12

Haskell, 48 ไบต์

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

ตัวอย่างการใช้งาน:

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

ใช้รายการทั้งหมดของ ['a' .. 'z'], ['A' .. 'Z'] และรายการซิงเกิลที่มีอินพุตถ่านcซึ่งcเป็นองค์ประกอบของ สำหรับตัวอักษรเรามีการจับคู่สองครั้งเสมอดังนั้นเราจึงเลือกตัวแรก


11

JavaScript (ES6), 79 ไบต์

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

คำอธิบาย

JavaScript เปรียบเทียบรหัสของอักขระแต่ละตัวอักษรตามตัวอักษรเมื่อเปรียบเทียบสตริงดังนั้นรหัสของอักขระที่ใช้ในการเปรียบเทียบคือ 1 ด้านล่างและสูงกว่าช่วงของอักขระที่ต้องการ

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
)

ทดสอบ


นั่นเป็นวิธีที่สั้นที่สุดในการสร้างสตริงด้วยตัวอักษรทั้งหมดใน Javascript หรือไม่? หากคุณต้องการช่วง ASCII ที่พิมพ์ได้ทั้งหมดคุณจะต้องพิมพ์อักขระทุกตัวหรือไม่
Stewie Griffin

1
@StewieGriffin น่าเศร้าที่มันเป็น เฉพาะทางอื่น ๆ for(a="",i=64;++i<91;)a+=String.fromCharCode(i)จะเป็นสิ่งที่ชอบ String.fromCharCodeไม่เหมาะสำหรับการเล่นกอล์ฟมากนัก แต่บางครั้งก็เป็นวิธีเดียว!
user81655

4
ในกรณีนี้ความสมดุลอยู่ระหว่างString.fromCharCodeและ.toUpperCase(Dumb and Dumber) แต่toUpperCaseเป็นผู้ชนะ
edc65

ดี! ฉันลองเล่นกอล์ฟสองสามทาง แต่ไม่พบวิธีที่ใช้งานได้ x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")ทำ แต่มีความยาวหนึ่งไบต์ เปลี่ยน[A-Z]ไปผลงานทุกอย่างยกเว้น\w _ทางออกของคุณน่าจะสั้นที่สุด
ETHproductions

นี่เป็นหนึ่งในวิธีที่สั้นที่สุดในการสร้างABC...abc...?โดยไม่มีการforวนซ้ำจริง ๆ: (padding บางส่วน)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R, 90 75 ไบต์

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

ขอขอบคุณที่จูเซปเป้

รุ่นเก่า (90 ไบต์):

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

ดูน่าเกลียด แต่catไม่สามารถเอาต์ซอร์ซเหล่านั้นไปใช้กับฟังก์ชันได้ IMHO



73 ไบต์ : พารามิเตอร์ตัวที่ 2 ของscanสามารถเป็นวัตถุประเภทตัวอักษรใด ๆ ดังนั้นคุณสามารถlettersแทน''แทน
Robin Ryder

7

Python 3, 92 84 82 74 ไบต์

รุ่นปัจจุบัน: 74 ต้องขอบคุณ isaacg และ wnnmaw!

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

Ungolfed: (สำหรับคำนิยามของ ungolfed

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

รุ่นแรก: 92

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

รุ่นที่สอง: 82 ขอบคุณ isaacg! :)

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

สวัสดีและยินดีต้อนรับสู่ PPCG! คำตอบที่ดี นี่คือคำแนะนำการเล่นกอล์ฟ: คุณสามารถใช้แลมบ์ดานิพจน์ ( lambda c:) แทนคำจำกัดความที่ชัดเจน ( def f(c):print() และบันทึกบางไบต์ forนอกจากนี้คุณไม่จำเป็นต้องมีช่องว่างก่อนที่
isaacg

อ่าผมถือว่า "ส่งออก" หมายถึงการพิมพ์และไม่เพียง แต่กลับ :) เรียบร้อยถ้าเป็นกรณีที่มันลงไปที่ lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c84, ขอบคุณ!
Koneke

ใช่คำจำกัดความมาตรฐานของเอาต์พุตบนไซต์อนุญาตให้ส่งคืนจากฟังก์ชันดังนั้นคุณสามารถแก้ไขเวอร์ชันใหม่เป็นคำตอบของคุณ กอล์ฟอีกอันคือวงเล็บไม่จำเป็น - ฟังก์ชั่นทำงานเหมือนกันทุกประการโดยไม่ต้องใช้พวกเขาเป็นเครื่องกำเนิดความเข้าใจแทนความเข้าใจในรายการ
isaacg

อาไม่เคยใช้เครื่องกำเนิดความเข้าใจมาก่อนเรียนรู้สิ่งใหม่! ขอขอบคุณอีกครั้ง :)
Koneke

โปรดทราบว่าเมื่อคุณป้อน"ฟังก์ชั่นคุณต้อง\"แทน
Daniel

6

Python 3, 118 105 98 97 83 ไบต์

ทางออกที่ง่าย แก้ไข: Golfed ด้วยขอบคุณ Erik the Golfer คำแนะนำ

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

Ungolfed:

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

1
คุณสามารถใช้ผู้ประกอบการที่ประกอบไปด้วยเพื่อบันทึกไม่กี่ไบต์? return a.lower() if s.islower() else aสิ่งที่ชอบ
David Robertson

@DavidRobertson ฉันไม่แน่ใจว่าคุณกำลังอ่านวิธีแก้ปัญหาของฉันซึ่งเป็นบรรทัดบนสุดของรหัสถูกต้อง แต่นั่นคือสิ่งที่ฉันกำลังทำอยู่
Sherlock9

Ah! ฉันกำลังอ่านเวอร์ชันที่ไม่ดี ขอโทษสำหรับเรื่องนั้น!
David Robertson

@DavidRobertson ไม่ใช่ปัญหา
Sherlock9

Golfed:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik the Outgolfer

5

PHP, 62 76 82ไบต์

PHP กำลังทำอะไรอยู่ตอนนี้:

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

รับอินพุตจากบรรทัดรับคำสั่งเช่น:

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

การแก้ไข

  • ที่บันทึกไว้ 6 ไบต์โดยการแทนที่ด้วย91>ord($x) Z<$xวิธีคิดที่ซับซ้อน ขอบคุณ manatwork
  • บันทึก 14 ไบต์โดยการลบstrtoupperและสร้างช่วงที่ต้องการโดยตรง

นั่นord()ดูไม่ดีตรงนั้น ลองZ<$x?$a:strtoupper($a)ดู
จัดการ

@ การทำงานฮ่าฮ่าฉันคิดว่าวิธีที่ซับซ้อนในส่วนที่สองนั้น ขอบคุณที่ชี้ให้เห็น
แทรกชื่อผู้ใช้ ณ

พยายาม' '&$x^Aทำให้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก a และ z นั่นคือรหัสของคุณกลายเป็น<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel

@IsmaelMiguel นี่จะมีจำนวนไบต์เท่ากัน
แทรกชื่อผู้ใช้ ณ

1
ไม่ต้องกังวล - และยังเป็นวิธีที่ดีที่ทำให้งงงวย ;)
insertusernamehere

5

Perl, 46 34 33 ไบต์

รวมถึง +2 สำหรับ -nE

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

ทำงานเป็น

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

  • อัปเดต 34บันทึก 12 ไบต์โดยเลี่ยงforและการใช้ barewords ขอบคุณ@Dom เฮสติ้งส์
  • อัปเดต 33บันทึก 1 ไบต์ใช้-Eและแทนsayprint

@ DomHastings ขอบคุณ! ควรมี barewords ที่รู้จักกันได้รับอนุญาต - และฉันควรจะเห็นว่าfor: - / พยายามพวงของวิธี ( -pด้วย$"='';$_="@_"แม้$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'แต่ทุกอย่างมีความยาว ...
เคนนีย์

หากคุณตั้งค่า$_=แทนที่จะใช้printไอเอ็นจีและใช้-pธงแทนคุณ-nสามารถบันทึกอีกสองรายการ ... ฉันยังไม่สามารถคิดวิธีอื่น ๆ ในการประหยัดได้มากขึ้น ...
Dom Hastings

@DomHastings ฉันลองแล้ว แต่ฉันไม่สามารถตั้งค่า$_เป็นรายการ (ที่ฉันรู้) มันจะต้องถูกสอดแทรก ( $_="@_") แต่ใช้เนื้อที่เป็นตัวคั่นดังนั้นฉันต้องทำ$"=''เช่นกัน (หรือใช้ a join'',) ซึ่งทำให้มันยาวขึ้น ไม่กระดิกในห้องนี้มาก!
Kenney

แน่นอน! คุณยังพูดอีกว่า (เมื่อฉันอ่านความคิดเห็นใหม่หลังจากที่ไม่ได้อยู่ที่ผับ ... ) ฉันจะคิดถึงมันต่อไป แต่คุณอาจจะสั้นที่สุดที่คุณจะได้รับโดยไม่ต้องใช้sayแทนprint!
Dom Hastings

5

ทับทิม, 41 + 1 = 42

ด้วยสวิตช์-pให้เรียกใช้

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

สิ่งนี้สร้างสตริง

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

และตรวจสอบแต่ละบล็อกที่ต่อเนื่องกันของ "ตัวอักษรคำ" ซึ่งเกิดขึ้นเป็นเพียงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และตัวอักษรขีดล่าง หากมีอักขระคำต่อเนื่องหลายตัวระหว่าง Z และ a เคล็ดลับนี้จะไม่ทำงาน

แก้ไขเพื่อเพิ่มคำอธิบายตามคำขอ:

-pธงไม่เป็นหลัก

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

[*?A..?z]คืออาร์เรย์ของอักขระระหว่างตัวพิมพ์ใหญ่ A และ Z ตัวพิมพ์เล็กตามลำดับ ASCII นั่นคือตัวอักษรตัวพิมพ์ใหญ่ตัวอักษรที่ไม่ใช่ตัวอักษรบางตัวและตัวพิมพ์เล็ก *''รวมอาเรย์เข้ากับสตริงดังนั้นเราจึงสามารถเรียก.scanใช้มันได้ scanจะค้นหาแต่ละการจับคู่ของนิพจน์ทั่วไป/\w+/เติมตัวแปรวิเศษ$&ด้วยแล้วเรียกบล็อก ทุกครั้งที่มีการวนซ้ำบล็อกจะตรวจสอบว่ามีสตริงที่ตรงกันหรือไม่$_และตั้งค่าเอาต์พุตเป็นสตริงนั้นหรือไม่ ดังนั้นหาก $ _ มีอยู่ในตัวอักษรตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กก็จะได้รับการแก้ไขตามนั้นมิฉะนั้นจะไม่เปลี่ยนแปลง

รุ่นที่ไม่ได้รับการอวดจะมีหน้าตาเป็นอย่างไร

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

คุณสามารถโพสต์เวอร์ชันที่ไม่ตีกอล์ฟได้หรือไม่? ฉันยังไม่เข้าใจวิธีการทำงานอย่างสมบูรณ์
Shelvacu

แน่นอนโพสต์หนึ่ง
ฮิสโทแกต

4

CJam, 18 ไบต์

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

'[,65>ผลักดันตัวอักษรตัวพิมพ์ใหญ่_elตัวอักษรตัวพิมพ์เล็กและr:Rสายเดียวถ่านที่ถูกอ่านจาก STDIN Rและกำหนดให้กับตัวแปร เหล่านี้จะถูกห่อในอาร์เรย์ ( ]) และคนแรกที่มีตัวอักษรใด ๆ ในการร่วมกันกับการเลือกใช้R{R&}=


ฉันพยายามที่จะเข้าใจวิธีการ CJam แต่ฉันหลงทางระหว่างเอกสารอย่างเป็นทางการกับสิ่งที่ฉันกำลังอ่านอยู่ที่นี่ มีใครให้ฉันเป็นตัวอย่างหน้าที่ฉันเข้าใจว่าทำไม_elตัวอักษรพิมพ์เล็กคืออะไร
Erdal G.

อาelหมายถึง "แปลงเป็นตัวพิมพ์เล็ก" ฉันเพิ่งผลักดันตัวอักษรตัวพิมพ์ใหญ่ดังนั้นตอนนี้ฉันจึงทำซ้ำด้วย_แล้วโทรหาelสำเนาที่เกิดขึ้น
ลินน์

1
ฉันสร้างไฟล์ PDF ที่สวยงามซึ่งบรรจุ (เกือบ) คำสั่ง CJam ทั้งหมด
ลินน์

4

เรติน่า 62 ไบต์

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

สองบรรทัดสั้น ๆ คือ regex ให้ตรงกัน หากอินพุตเป็นตัวพิมพ์เล็ก (ในช่วง[a-z]) จะแทนที่อักขระนั้น (ในกรณีนี้นั่นคืออินพุตทั้งหมด) ด้วยตัวอักษรตัวพิมพ์เล็ก กระบวนการนี้คล้ายกับตัวพิมพ์ใหญ่ หากไม่ใช่ตัวอักษรจะไม่มีการทดแทนและจะไม่มีการแตะต้องเลย

ลองออนไลน์


4

Python 2.7.10, 95 93 79 ไบต์

นี่เป็นครั้งแรกที่ฉันพยายามตีกอล์ฟดังนั้นได้โปรดความช่วยเหลือหรือคำแนะนำใด ๆ ได้รับการชื่นชมอย่างมาก!

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

ขอบคุณ Morgan Thrapp สำหรับความช่วยเหลือ!


1
@ MorganThrapp ที่ดูเหมือนจะไม่ทำงาน คุณแน่ใจหรือว่าใช้กับ Python 2.7.10 ได้
Daniel

มันทำงานใน 2.7.8 อะไรไม่ทำงาน
Morgan Thrapp

@ MorganThrapp ที่จริงแล้วคุณช่วยอธิบายก่อนได้มั้ย อาจเป็นเพราะฉันไม่เข้าใจดังนั้นฉันจึงทำสิ่งที่ผิด
แดเนียล

แน่นอนว่ามันใช้ความจริงนั้นFalse == 0และTrue == 1เพื่อจัดทำดัชนีเป็นสิ่งอันดับ ดังนั้นจึงตรวจสอบก่อนว่าเป็นจดหมายด้วยisalphaหรือไม่ถ้าใช่จะส่งคืน1หรือไม่จากนั้นตรวจสอบว่าเป็นตัวพิมพ์เล็กและทำเช่นเดียวกัน
Morgan Thrapp

1
ไม่มีปัญหา! ฉันรักการเล่นกอล์ฟดังนั้นฉันจึงมีความสุขเสมอที่จะช่วยคนใหม่!
Morgan Thrapp

4

ทับทิม, 46 43 ตัวอักษร

(ตัวเลือกรหัส 42 ตัวอักษร + 1 ตัวเลือกบรรทัดคำสั่ง)

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

ขอบคุณที่:

  • Jordan for the ===magic (-3 ตัวละคร)

วิ่งตัวอย่าง:

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 ไบต์

jtt1Y2XIm~Iw?km?Ik]]1$

สิ่งนี้ใช้ เวอร์ชันปัจจุบัน (3.1.0)ของภาษา

แก้ไข (15 ก.ย. 2017): ลองดู MATL ออนไลน์! (ด้วยภาษาเวอร์ชันที่ใหม่กว่า)

ตัวอย่าง

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

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

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

คำอธิบาย

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 ตัวอักษร

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

สร้างเอาต์พุตที่ต้องการเพื่อ stdout (แทนที่จะส่งคืน) อินพุตคือผ่านอาร์กิวเมนต์ของรันไทม์

มันทำงานอย่างไร.

1) ตั้งค่าตัวแปรจำนวนเต็มบางตัว
c = ค่า ASCII ของอักขระตัวแรกของพารามิเตอร์แรกของอาร์กิวเมนต์แบบรันไทม์
d = c แปลงเป็นค่า ASCII ตัวพิมพ์เล็ก (โดย ORing ด้วย 32)
b = การคำนวณเพื่อดูว่า d เป็นตัวอักษร จะเป็น <0 ถ้าตัวอักษร
e = อักขระเริ่มต้นสำหรับการส่งออก หากค่า ASCII ใน d เป็นตัวอักษร (ดู b) จะมีการตั้งค่าเป็น 'A' (หรือ 'a' โดยการเพิ่ม c และ 32 เป็น 'A' ค่า ASCII) มิฉะนั้นจะถูกตั้งเป็นค่าเริ่มต้นของ c
f = จำนวนตัวอักษรที่จะส่งออก หากไม่ใช่ตัวอักษร (ดู b) นี่จะถูกตั้งค่าเป็น 1 อื่นมันถูกตั้งค่าเป็น 26
2) วนซ้ำจาก e ถึง e + f เอาท์พุทอักขระแต่ละตัวเป็น stdout


2
คุณรู้หรือไม่ว่าสำหรับความท้าทายส่วนใหญ่ทางแก้ปัญหาสามารถให้ได้ทั้งโปรแกรมที่สมบูรณ์หรือฟังก์ชั่น? เมื่อพิจารณาจากจำนวนรหัสหม้อไอน้ำจำนวนมหาศาลใน Java ฟังก์ชันอาจสั้นลง
จัดการ

1
การใช้กลเม็ดเล็ก ๆ สองสามอย่างโดยไม่เปลี่ยนตรรกะฉันได้สิ่งนี้: 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++);}.
จัดการ

3

Perl, 23 ไบต์

รวมถึง +2 สำหรับ -nE (แทน +1 ปกติ) เพื่อให้มีความยุติธรรมกับโซลูชัน perl อื่น ๆ

รันด้วยอินพุตบน STDIN โดยไม่ขึ้นบรรทัดใหม่:

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

เพียงแค่รหัส:

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

การใช้งานที่ดีของความจริงที่ว่าอินพุตจะ จำกัด อักขระที่ 7 บิต
msh210

3

Lua, 98 97 ไบต์

น่าเศร้าที่ฉันไม่พบวิธีแก้ปัญหาที่สั้นกว่า 26 ไบต์เพื่อตั้งค่าaด้วยตัวอักษร อันที่จริงฉันไม่พบว่าสั้นกว่า 32

แก้ไข: บันทึก 1 ไบต์ขอบคุณ @ATaco ทำให้เกิดข้อผิดพลาดนี้มากมายเมื่อเริ่มต้นด้วย Lua: p

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

คุณสามารถทดสอบออนไลน์บนเว็บไซต์อย่างเป็นทางการหรือบนideone หากคุณใช้อดีตอินพุตจะไม่ทำงาน (ปิดใช้งาน) ดังนั้นให้ใช้แหล่งข้อมูลต่อไปนี้ซึ่งจะถูกรวมเข้ากับฟังก์ชั่น

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

คุณไม่ใช่คนเดียวที่ไม่พบวิธีที่สั้นกว่าในการสร้างตัวอักษรใน Lua :(
จัดการ

@ manatwork ฮ่าฮ่าเหมือนกันยกเว้นฉันไม่ต้องพิมพ์มัน แต่จะต่อมัน ^^ อย่างน้อยนั่นก็หมายความว่าไม่มีเคล็ดลับที่ซ่อนอยู่ฉันไม่รู้จะทำอย่างไร ^^ '
Katenkyo

คุณสามารถบันทึกไบต์ด้วยc=io.read()a="abcdefghijklmnopqrstuvwyz"a, c = ...
ATaco

2

Mathematica, 75 ไบต์

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

คะแนนที่ดีงามสำหรับภาษาที่ไม่ใช่การเล่นกอล์ฟ ... การแก้ปัญหาใด ๆ โดยใช้การประมวลผลรหัสอักขระจะใช้เวลาไบต์มากขึ้นเนื่องจากค่าใช้จ่ายของและToCharacterCodeFromCharacterCode



2

Python ขนาด 81 ไบต์

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

นี่เป็นการแปลคำตอบของ Pyth มันกำหนดฟังก์ชั่นfที่ใช้เป็นอาร์กิวเมนต์ตัวละครและส่งกลับผลลัพธ์


1
คุณหมายถึงif z in kใช่มั้ย นอกจากนี้ยังf=เป็นตัวเลือกโดยค่าเริ่มต้น
xnor

@xnor ใช่ เห็นได้ชัดว่าฉันพลาด Ctrl-C
PurkkaKoodari

2
ลบออกf=ทำให้ฟังก์ชั่นไม่ระบุชื่อ -2
Erik the Outgolfer

2

Jolf , 17 ไบต์

ลองที่นี่

? 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 ไบต์

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

(ขอบคุณ OP สำหรับการบันทึก 3 ไบต์)

ทดสอบ:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

คำอธิบาย: ตัวอักษรตัวพิมพ์ใหญ่ใช้65:90อักขระ ASCII อักษรตัวพิมพ์เล็กคือ97:122ASCII ดังนั้นb=i<65|i>122|(i>90&i<97)ตรวจสอบว่าอักขระอินพุตiไม่ใช่ตัวอักษร ถ้าเป็นเช่นนั้นอินพุตจะถูกส่งคืน ตัวอักษรตัวพิมพ์ใหญ่จะถูกส่งกลับถ้าb==1และi<97(ตัวอักษรตัวพิมพ์ใหญ่) หากb==1และi>96มีการเพิ่ม 32 ให้65:90ตรงกับ97:122- ตัวอักษรตัวพิมพ์เล็ก


ส่งที่ดี สองความคิดเห็น: มันเป็นเรื่องธรรมดาที่จะใช้อย่างใดอย่างหนึ่งถ้าส่งเป็นสคริปต์หรือเป็นอาร์กิวเมนต์ฟังก์ชั่นถ้าหากมันเป็นฟังก์ชั่นi=input('') โดยทั่วไปไม่เป็นที่ยอมรับ นอกจากนี้คุณยังสามารถบันทึก 3 ไบต์โดยทำแทน @(i)i^2i='a'[1,2,3,'']char([1,2,3])
Stewie Griffin

ตกลงแก้ไขแล้ว ขอบคุณสำหรับคำแนะนำ!
brainkz

2

SpecBAS, 111 ไบต์

ฉันเคยผ่านมาหลายรุ่นแล้ว 111 ดูเหมือนจะดีที่สุดที่ฉันสามารถจัดการได้

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

บรรทัดที่ 2 ใช้?ทางลัดสำหรับPRINTและIFคำสั่งอินไลน์ซ้อนกัน

คำอธิบายรหัสเทียม

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

มันยากที่จะทำให้["a" TO "z","A" TO "Z"]ดูเหมือนรหัสหลอกกว่าที่มันทำไปแล้ว "a".."z","A".."Z"มีลักษณะเหมือน "รหัสของจริง" อย่างน้อยในสายตาของฉัน ... ทั้งสองเป็นเรื่องง่ายมากที่จะเข้าใจแม้ว่า =)
สตีวีกริฟฟิ

2
สเป็คอะไร ????
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}

Ungolfed

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 ไบต์

-3 ไบต์ขอบคุณ else

DAsåiAëDAusåiAuë

มันทำงานอย่างไร

                   # 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

ลองออนไลน์!


ไม่แน่ใจว่ามี¹(อินพุตแรก) มีอยู่แล้วเมื่อคุณโพสต์คำตอบของคุณ แต่คุณสามารถเล่นกอล์ฟ 2 ไบต์ด้วย: A¹åiAëAu¹åiAuë( ลองออนไลน์หรือทดสอบชุด )
Kevin Cruijssen

2

Java SE 8, 71 69 ไบต์

แข็งแรงเล่นกอล์ฟ:

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

Ungolfed:

(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

ฉันได้ดำเนินการต่อไปนี้มาแล้ว

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

มันดูหรูหรามากขึ้น แต่น่าเศร้าที่มันมีขนาดใหญ่กว่าหนึ่งไบต์ นี่คือการสันนิษฐานว่าพฤติกรรมสำหรับอักขระที่ไม่ใช่ตัวอักษรไม่ได้ถูกกำหนดไว้และสตริง s ถูกเตรียมใช้งานเป็น "" ก่อนดำเนินการ เป็นคนสุภาพนะโพสต์แรกของฉัน

แก้ไข: 2 ไบต์บันทึกโดย Stewie Griffin โดยการเปลี่ยน

a - 91 < 0 to a < 91

2
ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

1
ขอบคุณ! ถูกซุ่มซ่อนไม่กี่ปีที่ผ่านมาในขณะนี้และสนใจจริงๆเพื่อดูว่าฉันสามารถทำให้การแข่งขัน Java / C ++ ตอบ :)
jfh

1
a<91ควรทำงานหรือ ...
Stewie Griffin

2

สกาลา, 91 ตัวละคร

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

ยกเลิกแข็งแรงเล่นกอล์ฟ

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
}

มีผลเริ่มต้นที่ไม่แน่นอนแทนที่จะส่งกลับค่าไม่เปลี่ยนรูปจาก 3 ที่แตกต่างกันถ้าบล็อกอื่นช่วยฉัน 2 ตัวอักษรแม้ว่าฉันจะเกลียดมัน

วิธีสกาล่า - โทนิก

วิธีที่ดีกว่าสำหรับสกาล่าจะเป็นดังนี้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.