문자열을 소문자로 변환 (내장 된 기능을 사용하지 않고!)


25

이 코드 골프의 목표는 사용자가 ASCII 문자열 ( 인쇄 가능한 ASCII 문자 만 포함)을 입력 할 수있는 코드를 작성하고 프로그램은이 문자열의 소문자 변형을 출력하는 것입니다.

중요 : 문자열 (또는 한 문자)을 소문자 (예 : ToLower().NET, strtolower()PHP 등)로 변환하는 내장 함수를 사용할 수 없습니다 ! 그러나 다른 모든 내장 기능을 사용할 수 있습니다.

또 다른 중요한 참고 사항 : 입력 문자열에는 대문자 포함되지 않습니다 . 입력 문자열은 대문자, 소문자, 숫자 및 기타 ASCII 인쇄 가능 문자 의 혼합입니다 .

행운을 빕니다!


4
안타깝게도 옵트 아웃해야합니다. 나는 초보자가 아닙니다.
John Dvorak

@Jan : 글쎄, 초보자와 함께, 나는 실제로 초보자의 입장 만 허용되는 것이 아니라 '초보자'라는 기술 수준을 의미했습니다. 나는 '초보자'라는 단어를 제거했으며 반드시 입력 할 수 있습니다.
ProgramFOX

1
정규식이 허용됩니까? GolfScript만이 이길 수있었습니다 s/./\L\0/g.
manatwork

3
@manatwork : 반드시 \L내장되어 있습니까?
marinus

@manatwork : 예, 정규식이 허용됩니다.
ProgramFOX

답변:


21

쉘-10

를 사용한 @ Gowtham 's Perl 솔루션의 번역 /bin/tr.

tr A-Z a-z

샘플 실행 :

% tr A-Z a-z <<<'Hello WORLD! @'
hello world! @

이것이 호기심으로 받아 들여지는 이유는 무엇입니까? Gowtham은 먼저 10 자 솔루션을 가졌습니다.
Ry-

1
메타대한 토론을 바탕으로 Gowtham의 솔루션은 11 자 ( -p플래그가 1로 계산 되기 때문에 )입니다. 나는 동의하지만, 더 받아 들일 가치가있는 것처럼 보인다 ..
FireFly

아, 감사합니다. 명심하겠습니다!
Ry-

53

Python 2.7-30 (끔찍하고 비사 과적 규칙 남용)

raw_input().upper().swapcase()

익명 편집이 지적했듯이 27파이썬 3에서 26 :

input().upper().swapcase()

나는 여기에서 규칙을 명백히 악용하고 있지만 ...

중요 : 문자열 (또는 한 문자)을 소문자 (예 : ToLower().NET, strtolower()PHP 등)로 변환하는 내장 함수를 사용할 수 없습니다 ! 그러나 다른 모든 내장 기능을 사용할 수 있습니다.

이것은 문자열을 취해 대문자로 감싼다 . 그리고 매우 관련이없는 메소드 호출, 그것은 문자열의 경우를 반전 - 모든 소문자가 대문자 ... 그리고 될 그래서 대문자를 낮추기 위해 스왑 모든 대문자를 .


1
Python 3 솔루션은 26 자입니다.
Timtech

@Timtech 나는 셀 수 없습니다.

1
그것은 단지 관련이 없습니다. 매우 관련이 없습니다.
카터 파페

1
문자 ß가 포함 된 텍스트를 발견하면 이상한 결과가 발생합니다.
FUZxxl

33

- 11 10 자.

y/A-Z/a-z/

y///와 동일합니다 tr///!

실제로 :

% perl -pe 'y/A-Z/a-z/' <<< 'Hello @ WORLD !'
hello @ world !

3
+1, 적은 (?) 실제 언어를 능가하는 유일한 실제 언어.
Behrooz

실제로는 11 자입니다. -p옵션은 1로 계산됩니다
manatwork

@manatwork 아니면 2로 계산해야합니다 : -p:)
Gowtham

-e( perl -e-> perl -pe) 라고 가정하면 1 , 스크립트 ( perl-> perl -p)로 가정하면 3
nyuszika7h

10

Befunge-98-26 22 21 19

~:''-d2*/1-!' *+,#@

사실에 의존 (c-39)/26하다 1대문자 ASCII 문자 (정수 나누기를 가정)의 문자 코드에 대한. 각 문자마다 c인쇄하십시오 c + (((c-39)/26)==1)*' '.

샘플 세션 :

% cfunge lower.b98
hello WORLD!
hello world!
This is a TEST!!11 az AZ @[`{
this is a test!!11 az az @[`{

9

파이썬 3, 58

print("".join(chr(ord(x)+('@'<x<'[')*32)for x in input()))

이것이 어떻게 작동하는지 설명 할 수 있습니까? 저는 파이썬을 더 잘하는 데 관심이 있습니다. map(ord,input())비트 작동 방법을 모르겠습니다 .
asteri

1
@JeffGohlke : map함수 (이 경우 ord)를 interable에 적용하고 iterable을 리턴합니다. 더 짧은 형식입니다 (ord(x) for x in input()).
Ry-

알았다. 설명 주셔서 감사합니다!
asteri

1
당신의 대답은 다음과 정신 질문을하지만, 내는 다음과 편지 ... 질문을

아주 좋아요 내 게시되지 않은 62 길이 솔루션을 이겼습니다 for c in input():print([c,(chr(ord(c)+32))]['@'<c<'['],end=''). 나는 map(ord,input())트릭으로 일부를 시도했지만 진리 값에 32를 곱하고 문자 코드 트릭에 추가하는 것을 놓쳤다. 아주 좋아요
Steven Rumbalski

8

루비, 18 자

정말 흥미로운 것은 없습니다.

gets.tr'A-Z','a-z'

(IRB에서 실행)

혼란스러운 버전 :

$,=$* *' ';$;=$,.tr'A-Z','a-z';$><<$;

다음과 같이 실행하십시오.

c:\a\ruby>lowercase.rb Llamas are AMAZING!

산출

llamas are amazing!

7

J-30

'@Z'(]+32*1=I.)&.(a.&i.)1!:1]1

J는 오른쪽에서 왼쪽으로 읽으므로 이것을 분류하십시오.

  1. 사용자에게 입력하라는 메시지를 표시합니다. 1!:1]1
  2. 코드 포인트 공간에서 알고리즘을 수행하십시오. &.(a.&i.)
  3. 각 문자의 문자 범위를 식별하십시오. 코드 포인트 "@"와 "Z"사이의 문자는 대문자로 간주됩니다 1=I..
  4. 각 대문자 코드 포인트에 32를 추가하십시오. ]+32* ...
  5. 단계 (2)는 암시 적 단계 (5)를 만듭니다. 우리는 문자에서 정수 도메인으로 투영하여 시작했습니다. 이제 끝났으므로 정수를 문자에 다시 매핑합니다.

분명히이 특정 구현은 ASCII 만 고려합니다. 그러나 접근 방식은 유니 코드로 최소한 기본 다국어 평면으로 확장 될 수 있습니다.


1
좋은! 불행히도 귀하의 솔루션이 잘못된 길을 가고있는 것 같습니다. ;-) 쉬운 수정이어야합니다. (편집 : '@Z'(]+32*1=I.)&.(a.&i.)1!:1]1해야 할 일)
FireFly

캐치, 고마워 또한 코드를 직접 고칠 수 있다는 것에 깊은 인상을 받았습니다. J는 가장 즉시 액세스 가능한 언어는 아닙니다. :)
Dan Bron

아, 나는 J와 함께 놀았습니다.. 나는 u:(a.i.x)+32*1='@Z'I.x=.1!:1]1당신의 길이와 일치하지만 훨씬 덜 흥미 롭습니다 ( 'under'를 사용하지 않기 때문에). 에 대해 말하면, 나는 dyadic I.에 대해 몰랐으므로 그것을 사용하여 주셔서 감사합니다. :-)
FireFly

시원한. 그러나 Befunge 솔루션에는 여전히 J 비트가 4 자입니다. 분명히 나는 ​​그것을 견딜 수 없다 :) 나는 '@'와 'Z'가 아닌 '@'에만 의존하여 당신의 리드를 따름으로써 J 솔루션을 다듬는 지 보려고합니다.
Dan Bron

(32(23)b.])&.(3&u:), 5 바이트 더 짧아야합니다.
FrownyFrog

7

C 64 63 59 55 자

main(c){while(c=getchar(),~c)putchar(c-65u<27?c+32:c);}

나는 거기에 63 자만 계산합니다.
manatwork

drop int 및으로 9자를 잃을 수 있습니다 ,c>=0. 여기에는 필요하지 않습니다.
JoeFish

getchar (EOF)가 <0이므로 c> = 0이 필요합니다. 다른 제안에 감사드립니다.
Rozuur

2
1. ~(c=getchar())2.c-64u<27
ugoren

1
미미하게 작은 버그 : 64 개 대신 65 개가 있어야합니다. pastebin.com/Zc9zMx2W
manatwork

5

골프 스크립트-17

프로그램:

{..64>\91<*32*+}%

설명:

  1. {}% 내부의 코드를 문자열의 모든 문자에 매핑합니다.
  2. .. 스택의 상단 (문자)을 두 번 복사합니다.
  3. 64> 문자 코드가 64보다 크면 1, 그렇지 않으면 0
  4. \스택에서 두 항목을 교체합니다 (문자의 두 번째 사본을 가져오고 결과를 64>위치 2에 저장함 ).
  5. 91< 문자 코드가 91 미만인지 확인합니다. 3 단계와 유사합니다.
  6. *3 단계와 5 단계의 결과를 함께 곱합니다. 두 단계가 모두 참이면 1과 같습니다.
  7. 32* 6 단계의 결과에 32를 곱합니다. 6 단계가 1이면 32, 그렇지 않으면 0입니다.
  8. + 문자 코드에 결과 (32 또는 0)를 추가하십시오.

출력 예 :

echo HelLO @ WorLD | ruby golfscript.rb upper_to_lower.gs
hello @ world

4

펄 : 24 자

s/[A-Z]/chr 32+ord$&/ge

샘플 실행 :

bash-4.1$ perl -pe 's/[A-Z]/chr 32+ord$&/ge' <<< 'Hello @ WORLD !'
hello @ world !

흠, 왜 chr ord? 나는 당신이 내 대답을 읽을 때 아무것도 배우지 않을 것이라고 확신합니다 ;-)
F. Hauri

놀라운 트릭, @ F.Hauri!
manatwork

@ nyuszika7h에서 +1은 -p명령 줄 매개 변수이며 줄 바꿈이 아닙니다.
manatwork

아, 미안
nyuszika7h

3

파이썬 (33)

확실하지 않은 경우 쉘을 사용하십시오.

import os;os.system('tr A-Z a-z')

유감스럽게도 이것은 여전히 ​​레고의 솔루션보다 더 깁니다.


+1 그것은 실제로 당신이 사용하고있는 파이썬 내장이 아닙니다. 리눅스에서만 작동하지만 여전히 매우 규칙적입니다!

@LegoStormtroopr tr호출 된 쉘의 경로에 명령 이있는 곳 어디에서나 작동 합니다.
Paŭlo Ebermann

3

델피

const
  UpChars:set of AnsiChar = ['A'..'Z'];
var
  I: Integer;
begin
  SetLength(Result, Length(pString));
  for I := 1 to length(pstring) do
    Result[i] := AnsiChar((Integer(pString[i] in UpChars))*(Ord(pString[i])+32));
  WriteLn(Result);
end;

3
이것은 골프가 아닙니다. 이 작품이 다른 것과 비교할 때 매우 다르다고 생각하지 않습니까?
Ray

1
@ray Golfing은 코드를 최대한 짧게 만드는 것입니다. 델파이는 골프를위한 훌륭한 언어가 아닙니다. 나는 델파이를 직접 사용하지만 큰 기회는 없지만 델파이로 골프를 이길 수는 있지만 여전히 자신에게 도전하는 재미입니다.
Teun Pronk

3

자바 스크립트 - 109 104 (ES6 95)

수정 된 버전에 감사합니다.

a=prompt();for(b=[i=0];c=a.charCodeAt(i);)b[i++]=String.fromCharCode(c|(c>64&c<91)*32);alert(b.join(""))

브라우저가 ES6 함수 표현식을 지원하는 경우 다음이 작동합니다.

alert(prompt().split("").map(c=>String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)).join(""))

첫 번째 코드는 문자열의 길이 후 문자를 얻으려고 할 때, 당신이 얻을 수 있기 때문에 작업 (FF와 크롬에서 테스트)하지 않는 undefined다음과 c.charCodeAt()정의가 없기 때문에 실패 charCodeAt. 실례 105 자 :a=prompt();for(b=[i=0];c=a.charCodeAt(i);)b[i++]=String.fromCharCode(c|(c>64&&c‌​<91)*32);alert(b.join(''))

@ oops, 나는 그 스 니펫을 어떻게 생각해 냈는지 궁금합니다. 그 코드를 테스트했다고 확신합니다. 작동하지 않는 버전이나 다른 것을 복사했을 것입니다. 어쨌든 정정 주셔서 감사합니다.
FireFly

and논리적 인 것 대신 비트 단위로 사용하는 것이 좋습니다!
일부

더욱 ES6의 용액 ( 79 ) L=s=>[String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)for(c of s)].join(''). 사용법 :L('SoMeTeXt')
플로랑

좋은! 다른 모든 솔루션은 "적절한"프로그램이므로이 기능을 단순한 기능으로 만들지 모르겠습니다. 그럼에도 불구하고 아주 잘 사용 for..of합니다.
FireFly

3

펄 18

s/[A-Z]/$&|" "/eg

다음과 같은 것 :

perl -pe 's/[A-Z]/$&|" "/eg'  <<<'are NOT allowed to: ToLower() in .NET, strtolower() in PHP'
are not allowed to: tolower() in .net, strtolower() in php

perl -pe 's/[A-Z]/$&|" "/eg' <<< "The input string Doesn't cOntaIn...( C0D3-@01F. ;-)"
the input string doesn't contain...( c0d3-@01f. ;-)

대한 @FireFly :

perl -pe 's/[A-Z]/$&|" "/eg' <<< "Doesn't this translate @ to \` and [\]^_ to {|}~DEL? "
doesn't ... @ to ` and [\]^_ to {|}~del? 

아니.

더 일반적인 : 어쨌든 18 문자 :

s/[A-Z]/$&|" "/eg

s/[A-Z]/$&^" "/eg

이것은 상태에서 아무것도 변경하지 않습니다.

perl -pe 's/[A-Z]/$&^" "/eg' <<< "Doesn't ... @ to \` and [\]^_ to {|}~DEL? "
doesn't ... @ to ` and [\]^_ to {|}~del? 

모든 잘 작동하지만, 변화의 장점 |에 의해 (또는) ^(XOR)는 같은 구문을 사용할 수 있다는 것입니다 toLower, toUpper또는 swapCase:

상단 :

perl -pe 's/[a-z]/$&^" "/eg' <<< "Doesn't ... @ to \` and [\]^_ to {|}~DEL? "
DOESN'T ... @ TO ` AND [\]^_ TO {|}~DEL? 

그리고 swapCase (18 + 1 = 19 문자) :

perl -pe 's/[a-z]/$&^" "/egi' <<< "Doesn't ... @ to \` and [\]^_ to {|}~DEL? "
dOESN'T ... @ TO ` AND [\]^_ TO {|}~del? 

나는 +1을 잊었 -p미안 @manatwork
F. 하우리에게

이것이 @백틱과 [\]^_로 번역되지 {|}~DEL않습니까? 그리고 그 까다로운 부분이 있습니다 ..
FireFly

1
@FireFly 아니요, $&일치해야합니다 [A-Z].
F. Hauri

오, 나빠 그럼 정말 멋지다!
FireFly

3

자바 스크립트 80

"X".replace(/[A-Z]/g,function($){return String.fromCharCode($.charCodeAt()+32)})

(제거하면 76 "X")

promptalert- (92)

alert(prompt().replace(/[A-Z]/g,function($){return String.fromCharCode($.charCodeAt()+32)}))

깡깡이

@FireFly @some @ C5H8NNaO4 및 @minitech 덕분에


어, 당신은에 두 번째 인수를 마무리해야 할 것 replacefunction($){return ...}아니? 그건 그렇고, 대체 함수의 첫 번째 매개 변수는 일치하는 문자열이므로 정규 표현식에서 parens를 삭제할 수 있습니다.
FireFly

이처럼 어떻게 실행합니까?
C5H8NNaO4

@ C5H8NNaO4 str (코드는 여기에서)
Math chiller

6
나는 여기에있는 모든 (또는 적어도) 대답이 stdin에서 읽고 stdout으로 인쇄한다고 생각합니다. 내가 수집 한 것은 JS에서 I / O 를 사용 prompt하고 사용 alert하는 것입니다.
FireFly

1
/g제대로 작동하려면 플래그 가 필요합니다 .
Ry-

2

아르 자형

71 자 :

chartr(paste(LETTERS,collapse=""),paste(letters,collapse=""),scan(,""))

83 자 :

a=as.integer(charToRaw(scan(,"")))
b=a%in%(65:90)
a[b]=a[b]+32
rawToChar(as.raw(a))

그것은 86문자입니다-개행은 2 문자로 계산됩니다. ( string-functions.com/length.aspx )
Timtech

@Timtech : R에서는 코드의 개행 문자를 대체하여 한 문자로만 계산할 수는 ;없습니다. 그것은 기록 될 수있다 :a=as.integer(charToRaw(scan(,"")));b=a%in%(65:90);a[b]=a[b]+32;rawToChar(as.raw(a))
plannapus

예, 이제 깨달았습니다. 메타에서 읽었습니다 ... 줄 바꿈이 2자인 Windows에서만 (코드 길이를 측정하는 프로그램을 사용하고있는) 것 같습니다.
Timtech



2

PHP (42)

명령 행에서 실행하십시오.

-R'echo@str_ireplace($a=range(a,z),$a,$argn);'

-R 작은 따옴표는 계산되지 않습니다.


Gowtham의 Peal 솔루션을 따르면 42 자만 계산됩니다.
eisberg

1
@eisberg : 분쟁 발생시 기록에 43 자 버전을 남기고 점수를 업데이트했습니다.
PleaseStand

str_ireplace대소 문자를 구분하지 않는 검색을 수행하여 규칙을 위반하지 않으면 규칙을 확장합니다.
ugoren

@ugoren 나는 그렇게 생각하지 않습니다. 명확하게 언급했듯이 케이스를 변경하는 기능 만 빌드 할 수 없으며 케이스를 변경하지 않는 것은 무시합니다.
eisberg

2

PowerShell : 69 65 64

[regex]::Replace구문 을 사용하지 않고 Replace가 원하는 방식으로 작동하도록 6 가지 방법을 시도했지만 운이 없었습니다. 다른 사람이 작동 할 수있는 아이디어가 있다면 제안하십시오.

골프 코드 :

[regex]::Replace((read-host),"[A-Z]",{[char](32+[char]"$args")})

원본에서 변경 :

  • [int]의견의 제안에 따라 더 이상 필요하지 않도록 마지막 인수를 재정렬했습니다 .

설명:

(read-host) 사용자 입력을받습니다.

[regex]::Replace(... )PowerShell에 RegEx 일치를 사용하여 문자열에서 교체 작업을 수행하도록 지시합니다.

"[A-Z]" 모든 대문자와 일치합니다.

{... }대체 값을 결정하기 위해 스크립트를 사용하도록 PowerShell에 지시합니다.

[char]"$args" 현재 일치를 가져 와서 ASCII 문자로 입력합니다.

32+ 문자를 ASCII 코드를 나타내는 정수로 변환하고 값을 32 씩 증가시킵니다. 이는 해당 소문자의 ASCII 코드와 일치합니다.

[char](... )결과 값을 가져 와서 ASCII 문자로 다시 변환합니다.

원본 데모 :

여기에 이미지 설명을 입력하십시오

(현재 버전 테스트-스크린 샷이 아직 게시되지 않았습니다.)


1
그 주위를 얻는 방법에 확인하지 않은 [regex]::Replace,하지만 당신은 변경하여 4 개 문자를 저장할 수 [int]+
goric

1
실제로, 마지막 인수 전체를로 재정렬 할 수 있습니다 {[char](32+[char]"$args")}.이를 통해 명시 적으로 int로 캐스트하고 하나 이상의 캐릭터를 제거 할 필요가 없습니다
goric

@ goric Geez, 왜 그렇게 생각하지 않았습니까? 아직도 배우고 있다고 생각합니다.
Iszi

2

k2, 15 바이트

나는 슈퍼 이 하나 늦었지만 어쨌든이 멋진을 발견했다.

{_ci 32+_ic x}'

또한:

Pyth, 10 바이트

Pyth가 게시 된 후 생성 되었기 때문에 실제로 계산되지 않습니다. 여전히 시원합니다.

jkmC+32Cdw

2

05AB1E , 3 바이트

u.š

@ user8777 포트 Python 3 답변 .

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

설명:

u    # Convert the (implicit) input to uppercase
   # Switch the case (upper to lower and vice-versa)
     # (and output the result implicitly)

그러나 대소 문자를 바꾸는 내장이 없다면 :

05AB1E , 12 11 바이트

ÇIS.u32*+çJ

@Emigna 덕분에 -1 바이트 .

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

설명:

Ç            # Get the unicode values of each character of the (implicit) input-String
 IS          # Get the input-string, split to characters again
   .u        # Check for each if it's uppercase or not (1 if truthy; 0 if falsey)
     32*     # Multiply that result by 32 (32 if truhy; 0 if falsey)
        +    # Add it to all the unicode values at the same indices in the list
         ç   # Convert the now modified unicode values back to characters
          J  # And join all characters together to a string again
             # (which is output implicitly as result)

1
ÇIS.u32*+çJ12 바이트 버전의 바이트를 저장합니다.
Emigna

@Emigna 아, 똑똑하다. 나는 시도했다 .u32*+이 같은 접근 방식을 : εÇy.u32*+ç]J하지만, 불행히도 ç추가, 그래서 목록의 문자를 래핑 J또는`사후이 필요했다 ç..
케빈 Cruijssen

1

자바 스크립트, 105

prompt().split("").map(function(a){c=a.charCodeAt(0);return String.fromCharCode(c|(c-64?32:0))}).join("")

실제로는 지정된 출력 형식이 없으므로 콘솔에서 실행하십시오. 예, JavaScript는 실제로 charcode <-> 문자열로 자세합니다.


1
c.charCodeAt()- 0인덱스가 생략 된 경우 기본값 입니다. 또한, 내가 믿는 '@'을 깬다 ( '소문자'가 백틱으로 바뀐다)
FireFly

@FireFly 니스, 감사합니다! 괜찮아 내가) = 그것을 해결 할거야
C5H8NNaO4

1

루비 : 66

def l(s)s.bytes.map{|b|(65..90).include?(b)?b+32:b}.pack('c*');end

1

C #-108

class P{static void Main(string[]a){foreach(var c in a[0])System.Console.Write(
(char)(c>64&&c<91?c+32:c));}}

메소드 본문에 대해서는 약 70입니다.

출력에 LF / CR을 포함하려면 5자를 추가하십시오.

class P{static void Main(string[]a){foreach(var c in a[0]+"\n")System.Console.Write(
(char)(c>64&&c<91?c+32:c));}}

LINQ 버전은 더 짧을 것입니다 :

class P{static void Main(string[]a){a[0].Any(c=>System.Console.Write(
(char)(c>64&&c<91?32+c:c))is P);}}

(103) .. 필요한 경우를 제외하고 using System.Linq;(전체 : 121).


1

하스켈-58

p x|(elem x['A'..'Z'])=[x..]!!32|1<2=x
main=interact$map p

1

파이썬 3-70

OP의 변경 사항이 업데이트되었습니다.

나는 파이썬 초보자이기 때문에 어떤 비판도 환영합니다.

print("".join(chr(ord(c)+32) if 64<ord(c)<91 else c for c in input()))

죄송합니다. 한 캐릭터에서 더 낮은 기능을 사용할 수 없습니다. 질문이 업데이트되었습니다.
ProgramFOX

1
내 최근 의견을 참조하십시오 : 입력 문자열에 대문자 만 포함 된 경우에만 코드가 작동하지만 소문자 및 숫자와 같은 다른 ASCII 문자도 포함되어 있습니다.
ProgramFOX

좋아, 집에 도착하면 업데이트 될 예정입니다
asteri

@ProgramFOX가 업데이트되었습니다.
asteri

Jeff, @minitechs answer를 확인하십시오 . 둘 다 비슷한 접근 방식을 사용하므로 어떻게, 그의 대답이 더 짧은 알 수 있어야합니다 .

1

Perl, 9 + 1 (-p 플래그의 경우) = 10

$_="\L$_"

\L 내장되어 있지만 기능이 아니기 때문에 특별히 묻고 허용했습니다.


1

파워 쉘, 53 49 바이트

-4 바이트 덕분에 @AdmBorkBork

-join($args|% t*y|%{[char](32*($_-in65..90)+$_)})

테스트 스크립트 :

$f = {

-join($args|% t*y|%{[char](32*($_-in65..90)+$_)})

}

@(
    ,("Hello WORLD from PowerShell", "hello world from powershell")
) | % {
    $a,$e = $_
    $r = &$f $a
    "$($r-eq$e): $r"
}

산출:

True: hello world from powershell

시원한! ¯\_(ツ)_/¯
mazzy

1

8086 기계어 코드, 14 바이트

조립 :

AC 3C 41 7C 06 3C 5A 7F 02 0C 20 AA E2 F2

조립되지 않은 리스팅 :

 ; Lowercase a string
 ; Input: string: SI, length: CX
 ; Output: string: DI
 TOLOW  MACRO   
        LOCAL _LOOP, _STORE
       _LOOP:
 AC         LODSB           ; load byte from [SI] into AL, advance SI 
 3C 41      CMP  AL, 'A'    ; is char less than 'A'? 
 7C 06      JL   _STORE     ; if so, do not convert 
 3C 5A      CMP  AL, 'Z'    ; is char greater than 'Z'? 
 7F 02      JG   _STORE     ; if so, do not convert 
 0C 20      OR   AL, 020H   ; lowercase the char 
       _STORE:
 AA         STOSB           ; store char to [DI], advance DI 
 E2 F2      LOOP _LOOP      ; continue loop through string 

MACRO(본질적으로 함수) 로 구현됩니다 . 에서 입력 문자열 SI의 길이 CX. 출력 문자열 DI.

PC DOS 테스트 프로그램에서 출력 :

여기에 이미지 설명을 입력하십시오

TOLOW.COM 예제 프로그램을 다운로드하여 테스트 하십시오 .


14 바이트 수는 어디에서 오는가? 스 니펫은 주석이 없더라도 그보다 깁니다. 컴파일 된 프로그램의 14 바이트입니까?
요나

1
@Jonah 바이트 opcode는 왼쪽 열 AC 3C 41등에 있습니다. 명확성을 위해 상단에 조립 된 16 진 바이트 코드를 추가하겠습니다. codegolf.meta.stackexchange.com/a/12340/84624
640KB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.