Chuyển đổi một chuỗi thành chữ thường (không có hàm tích hợp thành hàm thấp hơn!)


25

Mục tiêu của môn đánh gôn này là tạo ra một mã cho phép người dùng nhập chuỗi ASCII (chỉ chứa các ký tự ASCII có thể in ) và chương trình của bạn xuất ra biến thể chữ thường của chuỗi này.

Quan trọng: bạn KHÔNG được phép sử dụng hàm dựng sẵn có thể chuyển đổi chuỗi (hoặc chỉ một ký tự) thành chữ thường (chẳng hạn như ToLower()trong .NET, strtolower()trong PHP, ...)! Tuy nhiên, bạn được phép sử dụng tất cả các chức năng tích hợp khác.

Một lưu ý quan trọng: Chuỗi đầu vào không chứa chỉ ký tự chữ hoa. Chuỗi đầu vào là sự pha trộn của các ký tự chữ hoa, ký tự chữ thường, số và các ký tự có thể in ASCII khác .

Chúc may mắn!


4
thật không may, tôi sẽ phải từ chối. Tôi không phải là người mới bắt đầu.
John Dvorak

@Jan: Chà, với người mới bắt đầu tôi thực sự muốn nói rằng cấp độ kỹ năng của điều này sẽ là 'người mới bắt đầu', không chỉ người mới bắt đầu mới được phép vào. Tôi đã xóa từ 'người mới bắt đầu' và chắc chắn, bạn được phép nhập.
Chương trìnhFOX

1
Là biểu thức chính quy được phép? Chỉ có GolfScript mới có thể đánh bại s/./\L\0/g.
manatwork

3
@manatwork: chắc chắn \Lđược xây dựng trong?
bến tàu

@manatwork: Có, một regex được cho phép.
Chương trìnhFOX

Câu trả lời:


21

Vỏ - 10

Dịch giải pháp Perl của @ Gowtham bằng cách sử dụng /bin/tr.

tr A-Z a-z

Chạy mẫu:

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

Điều gì làm cho câu trả lời được chấp nhận, ra khỏi sự tò mò? Gowtham đã có giải pháp 10 ký tự đầu tiên
Ry-

1
Dựa trên các cuộc thảo luận về meta , có vẻ như lý do là giải pháp của Gowtham là 11 ký tự (vì -pcờ được tính là một). Mặc dù vậy, tôi đồng ý, có vẻ như nó xứng đáng được chấp nhận hơn ..
FireFly

Ah, cảm ơn - điều đó có ý nghĩa. Tôi sẽ ghi nhớ nó!
Ry-

53

Python 2.7 - 30 (với lạm dụng quy tắc khủng khiếp và không phù hợp)

raw_input().upper().swapcase()

Như một chỉnh sửa ẩn danh đã chỉ ra, bạn có thể thực hiện nó trong 2726 trong Python 3 :

input().upper().swapcase()

Tôi thực sự lạm dụng các quy tắc ở đây, nhưng ...

Quan trọng: bạn KHÔNG được phép sử dụng hàm dựng sẵn có thể chuyển đổi chuỗi (hoặc chỉ một ký tự) thành chữ thường (chẳng hạn như ToLower()trong .NET, strtolower()trong PHP, ...)! Tuy nhiên, bạn được phép sử dụng tất cả các chức năng tích hợp khác.

Điều này có các chuỗi và bao gồm nó cho chữ hoa . Sau đó, trong một cuộc gọi phương thức rất không liên quan, nó đảo ngược trường hợp của chuỗi - để bất kỳ chữ in thường nào cũng trở thành chữ in hoa ... và hoán đổi bất kỳ chữ in hoa nào thành chữ in thường .


1
Giải pháp Python 3 là 26 ký tự.
Timtech

@Timtech Tôi không thể đếm được.

1
Nó không chỉ không liên quan. Nó rất không liên quan.
Carter Pape

1
Điều này sẽ có kết quả lạ khi gặp văn bản có chứa các ký tự ß.
FUZxxl

33

Perl - 11 10 ký tự.

y/A-Z/a-z/

y///cũng giống như tr///!

Trong hành động:

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

3
+1, đối với ngôn ngữ thực tế duy nhất đánh bại tất cả những ngôn ngữ thực (?) Ít hơn.
Behrooz

Thật ra đó là 11 ký tự. Các -ptùy chọn được tính là 1.
manatwork

@manatwork Hoặc nó nên được tính là 2: -p:)
Gowtham

1 nếu bạn giả sử -e( perl -e-> perl -pe), 3 nếu bạn giả sử tập lệnh ( perl-> perl -p).
nyuszika7h

10

Befunge-98 - 26 22 21 19

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

Dựa trên thực tế là (c-39)/261chỉ dành cho mã ký tự của các ký tự ASCII in hoa (giả sử phân chia số nguyên). Đối với mỗi nhân vật c, in ra c + (((c-39)/26)==1)*' '.

Phiên mẫu:

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

9

Trăn 3, 58

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

Bạn có thể giải thích làm thế nào điều này hoạt động? Tôi thực sự quan tâm đến việc cải thiện Python. Tôi không hiểu làm thế nào map(ord,input())bit hoạt động.
asteri

1
@JeffGohlke: mapáp dụng một hàm (trong trường hợp này ord) cho một interable và trả về một iterable. Nó giống như một hình thức ngắn hơn (ord(x) for x in input()).
Ry-

Hiểu rồi. Cảm ơn đã giải thích!
asteri

1
Câu trả lời của bạn tuân theo tinh thần của câu hỏi, nhưng câu trả lời của tôi tuân theo thư của câu hỏi ...

Rất đẹp. Đánh bại giải pháp dài 62 chưa đăng của tôi for c in input():print([c,(chr(ord(c)+32))]['@'<c<'['],end=''). Tôi đã thử một số với map(ord,input())thủ thuật, nhưng đã bỏ lỡ nhân giá trị thật với 32 và thêm nó vào thủ thuật mã ký tự. Rất đẹp.
Steven Rumbalski

8

Ruby, 18 ký tự

Không có gì thực sự thú vị.

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

(chạy trong IRB)

Chỉ để cho vui: một phiên bản khó hiểu:

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

Chạy như thế này:

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

Đầu ra

llamas are amazing!

7

J - 30

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

J được đọc từ phải sang trái, vì vậy để phá vỡ điều này:

  1. Nhắc người dùng cho đầu vào: 1!:1]1
  2. Thực hiện thuật toán trong không gian mã điểm: &.(a.&i.)
  3. Xác định phạm vi ký tự cho mỗi chữ cái; các ký tự giữa các điểm mã "@" và "Z" được coi là chữ hoa:1=I. .
  4. Đối với mỗi mật mã viết hoa, thêm 32: ]+32* ...
  5. Lưu ý rằng bước (2) tạo ra một bước ngầm định (5): chúng tôi đã bắt đầu bằng cách chiếu từ ký tự sang miền số nguyên, vì vậy bây giờ chúng tôi đã hoàn thành, chúng tôi ánh xạ các số nguyên đó trở lại các ký tự.

Rõ ràng việc triển khai cụ thể này chỉ xem xét ASCII; nhưng cách tiếp cận có thể được mở rộng đến ít nhất là mặt phẳng đa ngôn ngữ cơ bản trong Unicode.


1
Tốt đẹp! Thật không may, có vẻ như giải pháp của bạn đang đi CÁCH MẠNG. ;-) Nên là một sửa chữa dễ dàng mặc dù. (Chỉnh sửa: '@Z'(]+32*1=I.)&.(a.&i.)1!:1]1nên làm điều đó)
FireFly

Bắt tốt, cảm ơn. Tôi cũng rất ấn tượng khi bạn có thể tự sửa mã: J không phải là ngôn ngữ có thể truy cập ngay lập tức nhất ngoài đó :)
Dan Bron

À, tôi đã chơi xung quanh một số người với J .. Tôi đã xoay sở để tìm ra u:(a.i.x)+32*1='@Z'I.x=.1!:1]1, phù hợp với độ dài của bạn nhưng ít thú vị hơn (vì nó không sử dụng 'dưới'). Nói về điều đó, tôi không biết về dyadic I., vì vậy cảm ơn vì đã sử dụng nó. :-)
FireFly

Mát mẻ. Nhưng giải pháp Befunge của bạn vẫn có J beat 4 ký tự. Rõ ràng là tôi không thể chịu đựng điều đó :) Tôi đang cố gắng xem liệu có nên cắt giảm giải pháp J hay không bằng cách làm theo sự dẫn dắt của bạn chỉ dựa vào '@', thay vì cả '@' và 'Z'.
Dan Bron

(32(23)b.])&.(3&u:), nên ngắn hơn 5 byte.
FrownyFrog

7

C 64 63 59 55 ký tự

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

Tôi chỉ đếm 63 ký tự ở đó.
manatwork

Bạn có thể mất 9 ký tự: thả int ,c>=0. Chúng không cần thiết ở đây.
JoeFish

chúng ta cần c> = 0 vì getchar (EOF) sẽ <0. Cảm ơn vì đề xuất khác.
Rozuur

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

1
Lỗi nhỏ không đáng kể: dường như nên có 65 thay vì 64. pastebin.com/Zc9zMx2W
manatwork

5

Golfscript - 17

Chương trình:

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

Giải trình:

  1. {}% ánh xạ mã bên trong đến mỗi ký tự trong chuỗi.
  2. .. sao chép đỉnh của ngăn xếp (ký tự) hai lần.
  3. 64> 1 nếu mã ký tự lớn hơn 64, khác 0.
  4. \hoán đổi hai mục trên ngăn xếp (lấy bản sao thứ hai của chữ cái và lưu kết quả của 64>vị trí hai).
  5. 91< kiểm tra xem mã ký tự có nhỏ hơn 91. Tương tự như bước 3.
  6. *nhân kết quả từ bước 3 và 5 với nhau. Chỉ bằng 1, nếu cả hai bước đều đúng.
  7. 32* nhân kết quả của bước 6 với 32. Sẽ là 32 nếu bước 6 là 1, khác 0.
  8. + thêm kết quả (32 hoặc 0) vào mã ký tự.

Ví dụ đầu ra:

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

4

Perl: 24 ký tự

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

Chạy mẫu:

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

Hem, tại sao chr ord? Tôi khá chắc chắn rằng bạn sẽ không học được gì khi đọc câu trả lời của tôi ;-)
F. Hauri

Thủ thuật tuyệt vời, @ F.Hauri!
manatwork

@ nyuszika7h, +1 là -ptham số dòng lệnh, không phải là dòng mới.
manatwork

Ồ đúng rồi, xin lỗi.
nyuszika7h

3

Con trăn (33)

Nếu nghi ngờ, hãy sử dụng vỏ.

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

Đáng tiếc, điều này vẫn còn dài hơn giải pháp của Lego.


+1 That is indeed not a Python built-in you are using. Only works on linux, but still very rule-bendy!!!

@LegoStormtroopr Works everywhere there is a tr command (which does the right thing) on the path of the invoked shell, I suppose.
Paŭlo Ebermann

3

DELPHI

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
This is not golf. Don't you feel this piece is very different compared to others ?
Ray

1
@ray Golfing là về việc lấy mã của bạn càng ngắn càng tốt. Delphi không phải là một ngôn ngữ tuyệt vời để chơi gôn. Tôi sử dụng delphi cho mình và mặc dù không có cơ hội lớn để tôi có thể giành được một golf với delphi, nhưng vẫn rất vui khi thử thách bản thân.
Teun Pronk

3

JavaScript - 109 104 (ES6: 95)

Cảm ơn một số cho phiên bản sửa chữa.

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

Các hoạt động sau đây nếu trình duyệt hỗ trợ các biểu thức chức năng ES6:

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

The first code doesn't work (tested in FF and Chrome) because when trying to get a character after the length of the string, you get undefined and then c.charCodeAt() fails because undefined don't have charCodeAt. A working example 105 characters: a=prompt();for(b=[i=0];c=a.charCodeAt(i);)b[i++]=String.fromCharCode(c|(c>64&&c‌​<91)*32);alert(b.join(''))
some

@some oops, tôi tự hỏi làm thế nào tôi nghĩ ra đoạn trích đó .. Tôi khá chắc chắn rằng tôi đã kiểm tra mã đó, có thể tôi đã sao chép một phiên bản không hoạt động trong hoặc một cái gì đó. Dù sao, cảm ơn cho sự điều chỉnh.
FireFly

Sử dụng một chút andthay vì một logic ... tốt đẹp!
một số

Một giải pháp ES6 thậm chí nhiều hơn ( 79 ) : L=s=>[String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)for(c of s)].join(''). Cách sử dụng:L('SoMeTeXt')
Florent

Tốt đẹp! Tôi không chắc chắn về việc biến nó thành một chức năng đơn thuần, vì tất cả các giải pháp khác là các chương trình "phù hợp". Tuy nhiên, sử dụng rất tốt đẹp của for..ofbất kể.
FireFly

3

Perl 18

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

Cái gì đó như:

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

Dành cho @FireFly :

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

Không.

Chung hơn: 18 ký tự nào:

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

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

Điều này sẽ không thay đổi bất cứ điều gì trong trạng thái:

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

Tất cả đều hoạt động tốt, nhưng lợi thế của việc thay đổi |(hoặc) bởi ^(xor) là cùng một cú pháp có thể được sử dụng cho toLower, toUpperhoặcswapCase :

topper

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

và exchangeCase (18 + 1 = 19 ký tự) :

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

Tôi đã quên +1 vì -pxin lỗi @manatwork
F. Hauri

Điều này không dịch @sang backtick và [\]^_to {|}~DEL? Và trong đó nằm ở phần khó khăn ..
FireFly 4/12/13

1
@FireFly Không, $&phải khớp [A-Z].
F. Hauri

Ôi lỗi của tôi. Rất tuyệt, sau đó!
FireFly

3

javascript 80

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

(76 nếu bạn xóa "X")

với promptalert- 92

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

vĩ cầm

cảm ơn @FireFly @some @ C5H8NNaO4 và @minitech


Er, bạn cần phải bao bọc đối số thứ hai replacevới function($){return ...}, không? Nhân tiện, thông số đầu tiên cho chức năng thay thế là chuỗi phù hợp, vì vậy bạn có thể thả các parens trong regex.
FireFly

Làm thế nào tôi sẽ chạy về nó, như thế này?
C5H8NNaO4

@ C5H8NNaO4 str (mã ở đây)
làm lạnh toán học

6
Tôi nghĩ rằng tất cả (hoặc ít nhất là hầu hết) các câu trả lời ở đây đọc từ stdin và in ra thiết bị xuất chuẩn. Từ những gì tôi thu thập được quy ước là sử dụng promptalertcho I / O trong JS.
FireFly

1
Bạn cần một /glá cờ để điều này hoạt động đúng.
Ry- 7/12/13

2

R

71 ký tự:

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

83 ký tự:

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

Đó là các 86ký tự - dòng mới được tính là 2 ký tự. ( string-fifts.com/length.aspx )
TimTech

@Timtech: Trong R, bạn có thể thay thế các dòng mới trong mã bằng cách ;không có chúng chỉ được tính cho một ký tự. Nó có thể được viết:a=as.integer(charToRaw(scan(,"")));b=a%in%(65:90);a[b]=a[b]+32;rawToChar(as.raw(a))
plannapus

Vâng, bây giờ tôi nhận ra. Tôi đã đọc trên meta ... dường như chỉ trên Windows mà dòng mới có 2 ký tự (tôi đang sử dụng một chương trình để đo độ dài mã của mình).
Timtech



2

PHP (42)

Chạy từ dòng lệnh:

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

-R và các trích dẫn duy nhất không được tính.


Nếu bạn theo dõi giải pháp Peal của Gowtham, bạn sẽ chỉ đếm được 42 ký tự.
eisberg

1
@eisberg: Cập nhật điểm số, để lại phiên bản 43 ký tự trong lịch sử trong trường hợp có tranh chấp.
Vui lòng khởi động

str_ireplacekhông tìm kiếm trường hợp không nhạy cảm, đó là kéo dài các quy tắc, nếu không phá vỡ chúng.
ugoren

@ugoren Mình không nghĩ vậy. Như đã nói rõ rằng chỉ xây dựng chức năng thay đổi trường hợp là không được phép và điều này là bỏ qua trường hợp không thay đổi nó.
eisberg

2

PowerShell: 69 65 64

Tôi đã thử một nửa tá cách để Thay thế hoạt động theo cách tôi muốn mà không cần sử dụng lâu [regex]::Replace cú pháp , nhưng tôi không gặp may. Nếu bất cứ ai khác có ý tưởng về những gì có thể làm việc, xin vui lòng đề xuất nó.

Mã đánh gôn:

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

Thay đổi từ bản gốc:

  • Sắp xếp lại đối số cuối cùng để [int]không còn cần thiết, theo đề xuất trong các bình luận.

Giải trình:

(read-host) được đầu vào của người dùng.

[regex]::Replace(... )Nói với PowerShell sử dụng kết hợp RegEx để thực hiện các hoạt động thay thế trên chuỗi.

"[A-Z]" phù hợp với tất cả các chữ cái viết hoa.

{... }Nói với PowerShell sử dụng tập lệnh để xác định giá trị thay thế.

[char]"$args" lấy kết quả khớp hiện tại và nhập nó làm ký tự ASCII.

32+ chuyển đổi ký tự thành một số nguyên, biểu thị mã ASCII và tăng giá trị lên 32 - sẽ khớp với mã ASCII của chữ cái viết thường tương ứng.

[char](... )Lấy giá trị kết quả và chuyển đổi lại thành ký tự ASCII.

Bản demo của bản gốc:

nhập mô tả hình ảnh ở đây

(Phiên bản hiện tại đã được thử nghiệm - ảnh chụp màn hình chưa được đăng.)


1
Chưa kiểm tra làm thế nào để khắc phục điều đó [regex]::Replace, nhưng bạn có thể lưu 4 ký tự bằng cách thay đổi [int]thành+
goric

1
Trên thực tế, toàn bộ đối số cuối cùng có thể được sắp xếp lại {[char](32+[char]"$args")}, điều này loại bỏ sự cần thiết phải chuyển sang int và loại bỏ thêm một ký tự
goric

@goric Geez, tại sao tôi chưa nghĩ đến điều đó? Vẫn đang học, tôi đoán thế.
Iszi

2

k2, 15 byte

Tôi siêu muộn với cái này, nhưng dù sao thì tôi cũng thấy nó rất tuyệt.

{_ci 32+_ic x}'

Cũng thế:

Bình thường, 10 byte

Không thực sự được tính vì Pyth đã được tạo sau khi nó được đăng. Vẫn ngầu.

jkmC+32Cdw

2

05AB1E , 3 byte

u.š

Cổng của @ user8777 Python 3 trả lời .

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

Giải trình:

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

Nhưng không có bất kỳ nội dung thay đổi trường hợp nào:

05AB1E , 12 11 byte

ÇIS.u32*+çJ

-1 byte nhờ @Emigna .

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

Giải trình:

Ç            # 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*+çJlưu một byte trên phiên bản 12 byte của bạn.
Emigna

@Emigna À, thông minh. Tôi đã thử .u32*+cách tiếp cận như thế này: εÇy.u32*+ç]Jnhưng không may çbọc các ký tự trong danh sách, vì vậy cần thêm Jhoặc `sau khi ç..
Kevin Cruijssen

1

Javascript, 105

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

Trên thực tế không có hình thức đầu ra nào được chỉ định, vì vậy hãy chạy nó trong bảng điều khiển Yea, JavaScript thực sự dài dòng với chuỗi charcode <->


1
c.charCodeAt()- nó mặc định là 0nếu một chỉ mục bị bỏ qua. Ngoài ra, tôi tin rằng '@' tôi tin rằng (nó bị "hạ thấp" thành backtick)
FireFly

@FireFly Nice, Cảm ơn!, Ok tôi sẽ sửa nó =)
C5H8NNaO4

1

Hồng ngọc: 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));}}

Khoảng 70 cho cơ thể phương pháp.

Thêm 5 ký tự để bao gồm một LF / CR trong đầu ra:

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

Phiên bản LINQ sẽ ngắn hơn:

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) .. ngoại trừ việc nó yêu cầu using System.Linq;(tổng cộng: 121).


1

Haskell - 58

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

1

Trăn 3 - 70

Cập nhật cho những thay đổi của OP.

Tôi là người mới sử dụng Python, vì vậy mọi phê bình đều được chào đón.

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

Tôi xin lỗi, tôi phải nói rằng bạn không được phép sử dụng chức năng hạ thấp trên một ký tự. Câu hỏi cập nhật.
Chương trìnhFOX

1
Vui lòng xem nhận xét gần đây của tôi : mã của bạn chỉ hoạt động nếu chuỗi đầu vào chỉ chứa các ký tự in hoa, nhưng xin lưu ý rằng nó cũng chứa các ký tự ASCII khác như ký tự và số thường.
Chương trìnhFOX

Được rồi, sẽ cập nhật khi tôi về nhà
asteri

@ProgramFOX Cập nhật.
asteri

Jeff, hãy xem câu trả lời của @minitech . Cả hai bạn đều có cách tiếp cận rất giống nhau, vì vậy bạn sẽ có thể xem làm thế nào và tại sao câu trả lời của anh ấy ngắn hơn.

1

Perl, 9 + 1 (cho cờ -p) = 10

$_="\L$_"

\L được hỏi cụ thể và cho phép, bởi vì mặc dù nó được tích hợp sẵn nhưng nó không phải là một chức năng.


1

Powershell, 53 49 byte

-4 byte cảm ơn @AdmBorkBork

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

Kịch bản thử nghiệm:

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

Đầu ra:

True: hello world from powershell

mát mẻ! ¯\_(ツ)_/¯
mê mẩn

1

Mã máy 8086, 14 byte

Lắp ráp:

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

Danh sách chưa được phân loại:

 ; 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 

Thực hiện như một MACRO(về cơ bản là một chức năng). Chuỗi đầu vào trong SI, độ dài trongCX . Chuỗi đầu ra trongDI .

Đầu ra từ chương trình thử nghiệm PC DOS:

nhập mô tả hình ảnh ở đây

Tải về và kiểm tra chương trình ví dụ TOLOW.COM .


số lượng 14 byte đến từ đâu? đoạn mã dài hơn thế, thậm chí không có nhận xét ... là 14 byte chương trình được biên dịch?
Giô-na

1
@Jonah Opcode byte nằm trong cột bên trái AC 3C 41, v.v. Tôi sẽ thêm mã byte hex đã lắp ráp vào đầu để rõ ràng. codegolf.meta.stackexchange.com/a/12340/84624
640KB
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.