알파벳, 알파벳 또는 문자 만 출력


49

도전은 간단하다 :

input을 가져 와서 x소문자 알파벳의 x일부인 경우 소문자 알파벳을 출력하고, 대문자 알파벳의 x일부인 경우 대문자 알파벳을 출력하고 x, 둘 중 하나가 아닌 경우에만 출력 하는 함수 또는 프로그램을 작성 하십시오 .

규칙 :

  • 입력은 함수 인수 또는 STDIN에서 가능합니다.
  • 입력은 32에서 126까지의 인쇄 가능한 ASCII 문자 (공백에서 물결표까지)입니다.
  • 입력은 인용 부호 안에있을 수있다 'x'거나 "x",하지만 기억 '하고 "유효한 입력하고 지원해야한다.
  • 입력은 알파벳의 문자 중 하나 일 수 있습니다. 즉, a또는 이라고 가정 할 수 없습니다 A.
  • 출력은 알파벳 중 하나이거나 단일 기호 여야하지만 후행 줄 바꿈은 정상입니다.
  • 알파벳의 문자는 공백, 쉼표 또는 기타로 분리해서는 안됩니다.

몇 가지 예 :

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

바이트 단위의 최단 코드가 이깁니다.


선택 사항이지만 높이 평가됨 : 귀하의 언어에 온라인 통역사가있는 경우 다른 사람이 쉽게 테스트 할 수 있도록 링크를 게시하십시오.


리더 보드

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

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


예를 들어 파이썬에서 다음 import Random과 같은 패키지를 가져올 수 Random.randint있습니까? (이 도전에 대해서는 아니지만 여전히)
Daniel

예, 패키지를 가져올 수 있습니다. 그러나 예를 들어 쓰기위한 바이트 import string가 계산되므로 종종 해결 방법을 사용하는 것이 좋습니다. 챌린지가 게시되기 전에 패키지가 존재해야합니다. 많은 과제는 "이를 수행하는 패키지 사용은 허용되지 않습니다"와 같은 것이지만이 과제에서는 그렇지 않습니다.
Stewie Griffin

"인용구가 유효 입력이고 지원되어야한다"는 말에 따르면, 입력 방법에 따옴표가 필요한 경우 입력으로 따옴표가 이스케이프됩니다
Cyoce

REPL 환경을 가정 할 수 있습니까?
cat

답변:


22

티 스크립트 , 5 바이트

xN(0)

TeaScript에는 다음과 같은 기능이 내장되어 있습니다.

온라인으로 사용해보십시오 (참고 : 온라인 인터프리터가 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 프리미티브

선택기 (cse 구조의?)는 Lexical Class라는 vi에 연결됩니다. 입력에 따라 1-6에서 숫자를 출력하고 5는 소문자 4는 대문자입니다.

for 루프는 알파벳을 만들기 위해 26 번, 심볼을 통과하기 위해 한 번 이동합니다.


4
몇 년 전에 LabVIEW에서 일한 (특권? 불행? 결정한) 사람으로서 여러분의 대답은 저의 미소를 가져옵니다. =)
corsiKa

12

하스켈, 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

자바 스크립트 (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와 Dumber) 사이 이지만 toUpperCase승자입니다.
edc65

좋은! 나는 이것을 더 골프화시키는 몇 가지 다른 방법을 시도했지만 작동하는 것을 찾지 못했습니다. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")하지만 1 바이트 더 깁니다. 변경 [A-Z]\w제외하고 모든 것을 작품 _. 귀하의 솔루션이 가장 짧은 것 같습니다.
ETHproductions

다음 ABC...abc...?은 실제 for루프 없이 생성하는 가장 짧은 방법 중 하나입니다 . (일부 패딩)[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

못생긴 것처럼 보이지만 catIMHO 기능에 아웃소싱 할 수는 없습니다.



73 바이트 :의 두 번째 매개 변수는 scan문자 유형의 모든 개체가 될 수 있으므로 letters대신 사용할 수 있습니다 ''.
로빈 라이더

7

파이썬 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 : (언 골프의 일부 정의

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

아, 나는 인쇄를 의미하는 "출력을"가정, 그냥 반환하지 :) 깔끔한, 그게 아래로 84의 경우라면 lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. 감사!
Koneke

예, 사이트 출력의 표준 정의를 통해 함수에서 복귀 할 수 있으므로 새 버전을 답변으로 편집 할 수 있습니다. 또 다른 골프는 대괄호가 필요하지 않다는 것입니다. 함수는 목록 이해 대신 생성기 이해와 동일하게 작동합니다.
isaacg

아, 실제로 새로운 것을 배우기 전에 발전기 이해력을 사용하지 않았습니다! 다시 한번 감사드립니다 :)
Koneke

"함수에 입력 할 때 \"대신 필요 합니다.
Daniel

6

파이썬 3 118 105 98 97 83 바이트

간단한 해결책. 편집 : 골퍼의 에릭 덕분에 골프를 쳤다.

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

언 골프 드 :

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

아! 나는 ungolfed 버전을 읽고 있었다. 미안합니다!
David Robertson

@DavidRobertson 문제 없음
Sherlock9

골프 :lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik

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).
manatwork

@manatwork Haha, 나는 두 번째 부분에서 복잡한 방법을 생각했습니다. 지적 해 주셔서 감사합니다.
insertusername 여기

' '&$x^A대문자와 소문자 a와 z를 만들어 보십시오 . 즉 코드가되고, 인<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
이스마엘 미구엘

@IsmaelMiguel 이것은 정확히 같은 바이트 수를 갖습니다.
insertusername 여기

1
걱정하지 마십시오. 여전히 난독 화하는 좋은 방법입니다. ;)
insertusernamehere

5

펄, 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:$_'

  • 업데이트 34for@Dom Hastings 덕분에 베어 워드 를 생략 하고 사용하여 12 바이트를 절약 합니다.
  • 33 업데이트 바이트 1 저장 사용 -E하고 say대신 print.

@DomHastings 감사합니다! 알려진 베어 워드가 허용 되었어야했는데 for-: //를 보았습니다 . 접근의 무리 (시도 -p와를 $"='';$_="@_", 심지어는 $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'하지만 모든 ... 이상
케니

ing $_=대신 설정하고 대신에 플래그를 print사용 하면 다른 두 가지를 저장할 수 있습니다. 지금까지 다른 방법으로는 더 이상 생각할 수 없습니다 ...-p-n
Dom Hastings

@DomHastings 나는 그것을 시도했지만 $_목록으로 설정할 수 없습니다 (내가 아는). 보간 ( $_="@_")해야하지만 공간을 구분 기호 $"=''로 사용 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]ASCII 순서로 대문자 A와 소문자 Z 사이의 문자 배열입니다. 대문자 알파벳, 문자가 아닌 문자 및 소문자 알파벳입니다. *''배열을 문자열로 결합하여 호출 할 수 있습니다 .scan. scan정규 표현식의 각 일치 항목을 찾아 /\w+/마법 변수 $&를 채우고 블록을 호출합니다. 블록이 반복 될 때마다 일치하는 문자열에$_ 하고 해당 문자열로 출력을 설정합니다. 따라서 $ _가 대문자 또는 소문자 알파벳에 포함되어 있으면 그에 따라 수정됩니다. 그렇지 않으면 변경되지 않습니다.

ungolfed 버전은 다음과 같습니다

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

골프 용 버전을 게시 할 수 있습니까? 나는 이것이 어떻게 작동하는지 여전히 완전히 이해하지 못한다.
Shelvacu

물론 게시했습니다.
histocrat

4

CJam, 18 바이트

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

'[,65>대문자 알파벳, _el소문자 알파벳 및 r:RSTDIN에서 읽고 variable에 지정된 단일 문자 문자열을 푸시합니다 R. 이것들은 배열 ( ])에 싸여 있으며 공통의 문자가있는 첫 번째 문자는를 R사용하여 선택됩니다 {R&}=.


CJam 방법을 이해하려고 노력하고 있지만 공식 문서와 내가 읽고있는 내용 사이에서 길을 잃었습니다. _el소문자 알파벳 이 왜인지 이해할 수있는 페이지를 누군가에게 알려줄 수 있습니까 ?
Erdal G.

아, el"소문자로 변환"을 의미합니다. 방금 대문자 알파벳을 눌렀으므로 이제와을 복제 _한 다음 el결과 사본 을 호출 하십시오.
Lynn

1
나는 거의 모든 CJam 명령을 포함 하는 멋진 pdf 를 만들었습니다 .
Lynn

4

레티 나, 62 바이트

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

두 줄은 일치하는 정규식입니다. 입력이 소문자 (범위 [a-z]) 인 경우 해당 문자 (이 경우 전체 입력)를 소문자 알파벳으로 바꿉니다. 이 프로세스는 대문자와 비슷합니다. 문자가 아닌 경우 교체가 수행되지 않고 그대로 출력됩니다.

온라인으로 사용해보십시오.


4

파이썬 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는 실제로 어떻게 작동하는지 먼저 설명해 주시겠습니까? 어쩌면 내가 이해하지 못해서 잘못하고있는 것일 수 있습니다.
Daniel

물론, 그 사실 사용 False == 0하고 True == 1튜플에 대한 인덱스를. 따라서 먼저 문자가있는 문자인지 확인하고 문자가 isalpha있으면 1소문자인지 확인하고 소문자인지 확인합니다.
Morgan Thrapp

1
문제 없어요! 나는 골프를 좋아하기 때문에 항상 새로운 사람을 도와 드리겠습니다.
Morgan Thrapp

4

루비, 46 43 자

(42 자 코드 + 1 자 명령 행 옵션)

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

덕분에 :

샘플 실행 :

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) 을 사용합니다.

편집 (2017 년 9 월 15 일) : MATL Online 에서 사용해보십시오 ! (최신 언어 버전).

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

자바, 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 값으로 변환 (32로 OR하여)
d = 문자인지 확인하기위한 계산. 문자이면 <0이됩니다.
e = 출력의 시작 문자입니다. d의 ASCII 값이 문자 (b 참조) 인 경우 'A'(또는 c 및 32를 'A'ASCII 값에 추가하여 'a')로 설정되고 그렇지 않으면 c의 원래 값으로 설정됩니다.
f = 출력 할 문자 수 문자가 아닌 경우 (b 참조) 1로 설정되고 그렇지 않으면 26으로 설정됩니다.
2) e에서 e + f로 루프하여 각 문자를 stdout으로 출력합니다.


2
대부분의 문제에 대해 솔루션이 완전한 프로그램 또는 기능으로 제공 될 수 있다는 것을 알고 있습니까? Java에서 상용구 코드가 엄청 나면 함수가 더 짧을 수 있습니다.
manatwork

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++);}.
manatwork

3

펄, 23 바이트

-nE다른 펄 솔루션에 공평하게하기 위해 (일반 +1 대신) +2 포함

줄 바꿈없이 STDIN의 입력으로 실행하십시오.

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

코드 만 :

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

입력이 7 비트 문자로 제한된다는 사실을 잘 사용합니다.
msh210

3

루아, 98 97 바이트

슬프게도, 나는 a알파벳 으로 설정할 26 바이트보다 짧은 해결책을 찾지 못했습니다 . 사실, 나는 32보다 짧지 않았습니다.

편집 : @ATaco 덕분에 1 바이트 저장, 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"))

루아에서 알파벳을 생성하는 짧은 방법찾지 못한 유일한 사람은 아닙니다 . :(
manatwork

@manatwork haha, 인쇄 할 필요는 없지만 연결하는 것을 제외하고는 정확히 똑같습니다. 적어도, 그것은 내가 그것을 몰랐던 숨겨진 트릭이 없다는 것을 의미합니다 ^^ '.
Katenkyo

c=io.read()a="abcdefghijklmnopqrstuvwyz"a, c = ... 대신 바이트를 저장할 수 있습니다 .
ATaco

2

수학, 75 바이트

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

골프가 아닌 언어에 대해서는 꽤 좋은 점수입니다 ... 문자 코드 처리를 사용하는 모든 솔루션은 ToCharacterCode및 의 비용으로 인해 더 많은 바이트가 필요합니다 FromCharacterCode.


2

C (기능), 71 바이트

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++);}바이트를 저장합니다.
Kenney

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}의 62 바이트
gastropner

2

파이썬, 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
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)),'']

(3 바이트 절약을 위해 OP에 감사)

테스트:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

설명 : 대문자 알파벳이 65:90ASCII 문자를 차지 합니다. 소문자 알파벳은 97:122ASCII입니다. 따라서 b=i<65|i>122|(i>90&i<97)입력 문자 i가 알파벳이 아닌지 확인합니다 . 그렇다면 입력이 반환됩니다. 다음과 같은 경우 대문자 알파벳이 반환됩니다b==1i<97(대문자). 경우 b==1i>96, (32)에 추가 65:90하는에 해당 97:122소문자 알파벳 -.


좋은 제출. 두 가지 의견 : i=input('')제출이 스크립트 인 경우 사용 하거나 함수 인 경우 함수 인수로 사용하는 것이 일반적 @(i)i^2입니다. i='a'일반적으로 허용되지 않습니다. 또한 [1,2,3,'']대신에 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"적어도 내 눈에는 "실제 코드"처럼 보입니다 ... 둘 다 이해하기는 매우 쉽지만 =)
Stewie Griffin

2
스펙 ???
Bassdrop Cumberwubwubwub

2

스위프트 2, 142 바이트

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}

언 골프

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

자바 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;}

언 골프 드 :

(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;

더 우아하지만 슬프게도 1 바이트 더 큽니다. 이것은 비 알파 문자의 동작이 정의되어 있지 않고 실행 전에 문자열 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
}

다른 블록이 나를 싫어하더라도 2 개의 문자를 저장하면 3 개의 구별 할 수없는 값을 반환하는 대신 초기 변경 가능한 결과를 얻습니다.

스칼라 톤법

스칼라에 대한 더 좋은 방법은 다음과 같습니다.

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.