Bir dizgiyi küçük harfe dönüştürme (dahili-küçük işlevler olmadan!)


25

Bu kod golfünün amacı, kullanıcının bir ASCII dizesi girmesini sağlayan (yalnızca yazdırılabilir ASCII karakterleri içeren) bir kod oluşturmaktır ve programınız bu dizenin küçük harf değişkenini çıkarır.

Önemli: dizgiyi (veya yalnızca bir karakteri) küçük harfe dönüştüren dahili bir işlev kullanamazsınız (örneğin ToLower(), .NET, strtolower()PHP, ...)! Bununla birlikte, diğer tüm yerleşik işlevleri kullanmanıza izin verilir.

Başka bir önemli not: Giriş dizesi sadece büyük harf içermiyor . Giriş dizesi, büyük harf, küçük harf, sayı ve diğer ASCII yazdırılabilir karakterlerin bir karışımıdır .

İyi şanslar!


4
ne yazık ki, vazgeçmem gerekecek. Ben acemi değilim.
John Dvorak

@Jan: Aslında, yeni başlayanlarla aslında bunun beceri seviyesinin 'yeni başlayan' olacağını, sadece yeni başlayanların girmesine izin verilmeyeceğini kastettim. Acemi kelimesini kaldırdım ve kesinlikle girmenize izin verildi.
ProgramFOX

1
Düzenli ifadelere izin verilir mi? Sadece GolfScript yenebilirdi s/./\L\0/g.
Manatwork

3
@ yönetimsel: kesinlikle \Lyerleşiktir?
marinus

@ yönetim: Evet, bir regex izin verilir.
ProgramFOX

Yanıtlar:


21

Kabuk - 10

@ Gowtham Perl çözümü kullanarak çeviri /bin/tr.

tr A-Z a-z

Örnek çalışma:

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

Meraktan, bu kabul edilen cevabı nedir? Gowtham ilk önce 10 karakterlik bir çözüme
kavuştu

1
Meta konusundaki tartışmaya dayanarak , mantığın, Gowtham'ın çözümünün 11 karakter olması gerektiği anlaşılıyor ( -pbayrak tek olarak sayılıyor). Yine de katılıyorum, onun kabul edilmeyi daha fazla hak ediyor gibi görünüyor ..
FireFly

Ah, teşekkürler - bu mantıklı. Bunu aklımda tutacağım!
Ry

53

Python 2.7 - 30 (korkunç ve unapologetic kural suistimali ile)

raw_input().upper().swapcase()

Anonim bir düzenlemenin işaret ettiği gibi, içinde yapabilirsiniz. 27Python 3'te 26 :

input().upper().swapcase()

Buradaki kuralları şiddetle kötüye kullanıyorum, ama ...

Önemli: dizgiyi (veya yalnızca bir karakteri) küçük harfe dönüştüren dahili bir işlev kullanamazsınız (örneğin ToLower(), .NET, strtolower()PHP, ...)! Bununla birlikte, diğer tüm yerleşik işlevleri kullanmanıza izin verilir.

Bu , dizeleri alır ve büyük harfe dönüştürür . Daha sonra çok ilgisiz bir yöntem çağrısında dizgenin harfini tersine çevirir - böylece küçük harfler büyük harfler olur ... ve büyük harfleri küçük harfler ile değiştirir .


1
Python 3 çözümü 26 karakterdir.
Timtech

@Timtech sayamıyorum.

1
Bu sadece alakasız değil. Çok alakasız.
Carter Pape

1
Bu, ß karakterlerini içeren metinlerle karşılaşıldığında garip sonuçlar doğuracaktır.
FUZxxl

33

Perl - 11 10 karakter.

y/A-Z/a-z/

y///aynıdır tr///!

Eylemde:

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

3
+1, tüm daha az (?) Gerçek olanları yenen tek gerçek dil için.
Behrooz

Aslında bu 11 karakterdir. -pOpsiyon 1. olarak sayılır
manatwork

@ manatwork Veya 2: -ve p:) olarak sayılmalıdır
Gowtham

1 varsayalım -e( perl -e-> perl -pe), 3 ise bir senaryo varsayalım ( perl-> perl -p).
nyuszika7h

10

Befunge-98 - 26 22 21 19

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

Gerçeğine dayanır (c-39)/26olup 1sadece büyük ASCII karakter (Tamsayı bölme varsayılarak) karakter kodlarının. Her karakter için cyazdırın c + (((c-39)/26)==1)*' '.

Örnek oturum:

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

9

Python 3, 58

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

Bunun nasıl çalıştığını açıklayabilir misiniz? Python'da daha iyi olmakla gerçekten ilgileniyorum. map(ord,input())İşlerin nasıl yürüdüğünü anlamadım .
asteri

1
@JeffGohlke: mapbir islevseline (bu durumda ord) bir islevsel uygular ve bir tekrarlanabilirlik döndürür. Daha kısa bir şekli gibi (ord(x) for x in input()).
Ry

Anladım. Açıklama için teşekkürler!
asteri

1
Cevabınız sorunun ruhunu takip ediyor , ama benimki sorunun mektubunu izliyor ...

Çok hoş. Gönderilmemiş 62 uzunluk çözümümü yendi for c in input():print([c,(chr(ord(c)+32))]['@'<c<'['],end=''). map(ord,input())Hile ile biraz denedim , ancak doğruluk değerini 32 ile çarpmayı ve karakter kodu numarasına katmayı özledim. Çok hoş.
Steven Rumbalski

8

Yakut, 18 karakter

Gerçekten ilginç bir şey yok.

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

(IRB'de çalıştır)

Sadece eğlence için: kafa karıştırıcı bir sürüm:

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

Bu şekilde koş:

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

Çıktı

llamas are amazing!

7

J - 30

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

J sağdan sola okunur, bu nedenle, aşağı kırmak için:

  1. Giriş için kullanıcı istemi: 1!:1]1
  2. Kod-uzayda algoritma gerçekleştirin: &.(a.&i.)
  3. Her harf için karakter aralığını tanımla; codepoints "@" ve "Z" arasındaki karakterler büyük harf olarak kabul edilir: 1=I..
  4. Her büyük harf kod noktası için 32: ]+32* ...
  5. (2) numaralı adımın (5) gizli bir adım oluşturduğunu unutmayın: karakterden tamsayı etki alanına yansıtma yaparak başladık, bu yüzden artık bittiğimiz için bu tamsayıları tekrar karakterlere eşliyoruz.

Açıkçası, bu özel uygulama yalnızca ASCII'yi dikkate almaktadır; ancak yaklaşım, Unicode'daki en azından temel çok dilli düzleme genişletilebilir.


1
Güzel! Ne yazık ki, çözümünüz YANLIŞ YOLDA gidiyor gibi görünüyor. ;-) Ancak kolay bir düzeltme olmalı. (Düzenleme: '@Z'(]+32*1=I.)&.(a.&i.)1!:1]1yapmalı)
FireFly

Güzel yakala, teşekkürler. Ayrıca, kodu kendiniz düzeltebildiğiniz için de etkilendim: J, şu anda erişilebilecek en hızlı dil değil :)
Dan Bron

Ah, bazılarını J ile birlikte oynamıştım. Uzunluğa uyan u:(a.i.x)+32*1='@Z'I.x=.1!:1]1ama daha az ilginç olan ('under' ifadesinden faydalanmadığı için) gelmeyi başardım . Bunlardan bahsetmişken, didik hakkında hiçbir şey bilmiyordum I., kullandığınız için teşekkürler. :-)
FireFly

Güzel. Fakat Befunge çözümünüz hala 4 karakter atıyor. Belli ki bu duruşa izin veremem :) Kurşunu takip ederek J çözümünü kısıp kısmadığınızı görmeye çalışıyorum, hem '@' hem de 'Z' yerine yalnızca '@' 'ye güveniyor.
Dan Bron,

(32(23)b.])&.(3&u:), 5 bayt daha kısa olmalıdır.
FrownyFrog

7

C 64 63 59 55 karakter

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

Orada sadece 63 karakter sayıyorum.
Manatwork

9 karakter kaybedebilir: damla int ve ,c>=0. Burada gerekli değiller.
JoeFish

c> = 0 'a ihtiyacımız var çünkü getchar (EOF) <0 olacak. Diğer öneri için teşekkürler.
Rozuur

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

1
Önemsiz küçük hata: yerine 64. 65 olmalıdır görünüyor pastebin.com/Zc9zMx2W
manatwork

5

Golf Betiği - 17

Programı:

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

Açıklama:

  1. {}% İçindeki kodu dizedeki her karaktere eşler.
  2. .. yığının üstünü (karakter) iki kez kopyalar.
  3. 64> Karakter kodu 64'ten büyükse 1, başka bir 0 ise.
  4. \yığındaki iki öğeyi değiştirir (mektubun ikinci kopyasını alır ve sonucu 64>iki konumda saklar ).
  5. 91< karakter kodunun 91'den küçük olup olmadığını kontrol eder. 3. adıma benzer.
  6. *3. ve 5. adımdaki sonuçları bir araya getirir. Her iki adım da doğruysa yalnızca 1'e eşit.
  7. 32* 6. adımın sonucunu 32 ile çarpın. 6. adım 1, 0 ise 32 olur.
  8. + sonucu (32 veya 0) karakter koduna ekleyin.

Örnek çıktı:

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

4

Perl: 24 karakter

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

Örnek çalışma:

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

Hem, neden chr ord? Cevabımı okumakta hiçbir şey öğrenmeyeceğinize eminim ;-)
F. Hauri

İnanılmaz numara, @ F.Hauri!
Manat çalışması

@ nyuszika7h, +1, -pyeni bir satır değil , komut satırı parametresidir.
Manatwork

Ah doğru, özür dilerim.
nyuszika7h

3

Python (33)

Şüpheniz varsa, kabuğu kullanın.

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

Ne yazık ki, bu hala Lego'nun çözümünden daha uzun.


+1 Bu gerçekten kullandığınız bir Python değil. Sadece Linux üzerinde çalışır, ancak yine de çok kurallara uygun !!!

@LegoStormtroopr Her yerde çalışıyor tr, çağrılan kabuğun yolunda bir komut (doğru olanı yapan) var sanırım.
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
Bu golf değil. Bu parçanın diğerlerine göre çok farklı olduğunu düşünmüyor musunuz?
Ray

1
@ ray Golf, kodunuzu olabildiğince kısa sürede almakla ilgilidir. Delphi golf oynamak için harika bir dil değil. Kendimi delphi kullanıyorum ve delphi ile golf kazanma şansım olmasa da, kendinize meydan okumak için hala eğlenceli.
Teun Pronk

3

JavaScript - 109 104 (ES6: 95)

Düzeltilmiş sürüm için bazı teşekkürler.

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

Tarayıcı ES6 işlev ifadelerini destekliyorsa aşağıdakiler çalışır:

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

İlk kod çalışmıyor (FF ve Chrome'da test edilmiştir) çünkü dizginin uzunluğundan sonra bir karakter almaya çalışırken, tanımsız olduğunuz için başarısız olur undefinedve sonra c.charCodeAt()başarısız olur charCodeAt. Bir çalışma örneği 105 karakter:a=prompt();for(b=[i=0];c=a.charCodeAt(i);)b[i++]=String.fromCharCode(c|(c>64&&c‌​<91)*32);alert(b.join(''))
Bazı

Bir kaç ay, bu kod parçasını nasıl bulduğumu merak ediyorum. Bu kodu test ettiğime eminim, belki çalışmayan bir sürümü başka bir yere kopyaladım. Neyse, düzeltme için teşekkürler.
FireFly

andMantıksal yerine bitsel olarak kullanmak ... hoş!
bazı

Bir daha ES6 çözeltisi ( 79 ): L=s=>[String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)for(c of s)].join(''). Kullanım:L('SoMeTeXt')
Florent

Güzel! Diğer tüm çözümler "uygun" programlar olduğundan, bunu sadece bir işlev yapmaktan emin değilim. Yine de, for..ofne olursa olsun çok güzel kullanımı .
FireFly

3

Perl 18

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

Gibi bir şey:

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

ve

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

İçin @FireFly :

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

yok hayır.

Daha genel: Yine de 18 karakter:

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

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

Bu durumdaki hiçbir şeyi değiştirmeyecek:

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

Tüm çalışmalar güzel, ama değişen avantajı |ile (veya) ^(xor) aynı sözdizimi için kullanılabilecek olmasıdır toLower, toUpperya da swapCase:

toUpper:

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

ve takasCase (18 + 1 = 19 karakter) :

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

-pÜzgünüm @manatwork için + 1'i unuttum
F. Hauri

Bu çevirmez @backtick ve [\]^_hiç {|}~DEL? Ve orada zor kısmı yatıyor ..
FireFly

1
@FireFly Hayır, $&eşleşmek zorunda [A-Z].
F. Hauri

Ah benim hatam. Çok havalı o zaman!
FireFly,

3

javascript 80

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

(76 kaldırırsanız "X")

ile promptve alert- 92

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

keman

@FireFly @some @ C5H8NNaO4 ve @minitech sayesinde


Ee, ikinci argüman kaydırmak gerekiyordu replaceile function($){return ...}hayır? Bu arada, değiştirme işlevine ilk param eşleşen dizgedir, böylece parenleri regex'e bırakabilirsiniz.
FireFly

Bu şekilde nasıl koşardım?
C5H8NNaO4

@ C5H8NNaO4 str (burada kod)
Math chiller

6
Sanırım buradaki tüm cevaplar (veya en azından çoğu) stdin'den basıp stdout'a yazdırıyor. Anladığım kadarıyla kongre kullanmaktır promptve alertJS I / O için.
FireFly

1
Bunun /gdüzgün çalışması için bir bayrağa ihtiyacınız var .
Ry-

2

R,

71 karakter:

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

83 karakter:

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

Bu 86karakterler - yeni satırlar 2 karakter olarak sayılır. ( string-functions.com/length.aspx )
42'de Timtech

@Timtech: R kodunda yeni satırları ;sadece bir karakter için saymazlar . a=as.integer(charToRaw(scan(,"")));b=a%in%(65:90);a[b]=a[b]+32;rawToChar(as.raw(a))
Yazılabilir

Evet, şimdi farkettim. Meta okudum ... sadece Windows'ta yeni satırların 2 karakterden oluştuğunu gösteriyor (kodumun uzunluğunu ölçmek için bir program kullanıyordum).
Timtech



2

PHP (42)

Komut satırından çalıştır:

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

-R ve tek tırnaklar sayılmaz.


Gowtham Peal çözümünü izlerseniz, sadece 42 karakter sayarsınız.
eisberg,

1
@eisberg: Herhangi bir anlaşmazlık durumunda, tarihte 43 karakterlik bir sürüm bırakarak puanı güncellendi.
Lütfen

str_ireplaceKurallara uymayan, onları ihlal etmiyorsa, duyarsız arama yapar.
ugoren

@ugoren Sanmıyorum. Açıkça belirtildiği gibi, sadece davayı değiştirme işlevinde yapılamaya izin verilmez ve bu durum davayı değiştirmemeyi göz ardı eder.
eisberg

2

PowerShell: 69 65 64

Uzun [regex]::Replacesözdizimini kullanmadan istediğim şekilde çalışması için Replace'i almanın yarım düzine yolunu denedim , ancak hiç şansım olmadı. Başka birinin ne işe yarayabileceği konusunda bir fikri varsa, lütfen bunu önerin.

Golf kodu:

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

Orijinalden gelen değişiklikler:

  • Son tartışma yeniden düzenlendi, böylece [int]yorumlarda öneri başına artık gerek kalmadı.

Açıklama:

(read-host) kullanıcı girişi alır.

[regex]::Replace(... )PowerShell'e, bir dizgede değiştirme işlemi yapmak için RegEx eşleşmesini kullanmasını söyler.

"[A-Z]" tüm büyük harflerle eşleşir.

{... }PowerShell'e değiştirme değerini belirlemek için bir komut dosyası kullanmasını söyler.

[char]"$args" Geçerli eşleşmeyi alır ve ASCII karakteri olarak yazar.

32+ karakteri, bir ASCII kodunu temsil eden bir tamsayıya dönüştürür ve değeri, ilgili küçük harfli ASCII koduyla eşleşecek şekilde 32'ye yükseltir.

[char](... )elde edilen değeri alır ve tekrar bir ASCII karakterine dönüştürür.

Orijinalin demosu:

görüntü tanımını buraya girin

(Geçerli sürüm test edildi - ekran görüntüsü henüz yayınlanmadı.)


1
O etrafında nasıl kontrol etmedin [regex]::Replace, ancak değiştirerek 4 karakter kaydedebilirsiniz [int]için+
goric

1
Aslında, tüm son argüman için yeniden düzenlenebilir {[char](32+[char]"$args")}açıkça bir daha karakterin kapalı int ve tıraş eder yayın yapmak için gerek kaldırır
goric

@ Goric Geez, neden zaten bunu düşünmedim? Hala öğreniyorum sanırım.
Iszi

2

k2, 15 bayt

Buna çok geç kaldım ama yine de çok havalı buldum.

{_ci 32+_ic x}'

Ayrıca:

Pyth, 10 bayt

Gerçekten sayılmaz, çünkü Pyth yayınlandıktan sonra oluşturuldu. Hala havalı.

jkmC+32Cdw

2

05AB1E , 3 bayt

u.š

@ User8777 Bağlantı Noktası Python 3 cevap .

Çevrimiçi deneyin.

Açıklama:

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

Ancak, durum değiştiren herhangi bir yerleşik olmadan:

05AB1E , 12 11 bayt

ÇIS.u32*+çJ

@Emigna sayesinde -1 bayt .

Çevrimiçi deneyin.

Açıklama:

Ç            # 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 bayt sürümünüze bayt kaydeder.
Emigna

@Emigna Ah, akıllı. .u32*+Bu yaklaşımı bu şekilde denedim : εÇy.u32*+ç]Jama ne yazık ki çbir listedeki karakterleri sarar, bu yüzden ek bir Jya da `sonra gerekliydi ç..
Kevin Cruijssen

1

Javascript, 105

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

Aslında hiçbir çıktı formu belirtilmedi, bu yüzden Yea konsolunda çalıştırın , JavaScript gerçekten <-> dizgesiyle ayrıntılı


1
c.charCodeAt()- 0Bir indeks ihmal edilirse varsayılan olarak belirlenir . Ayrıca, '@' kırılmalarına inanıyorum (geri dönme hareketi "" küçük harflerle "oluyor)
FireFly

@FireFly Güzel, Teşekkürler!, Tamam ben düzelteceğim =)
C5H8NNaO4

1

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

Sadece yöntem gövdesi için yaklaşık 70.

Çıkışa LF / CR eklemek için 5 karakter ekleyin:

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

Bir LINQ versiyonu daha kısa olacaktır:

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) .. gerektirmesi dışında using System.Linq;(toplam: 121).


1

Haskell - 58

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

1

Python 3 - 70

OP’nin değişiklikleri için güncellendi.

Ben bir Python acemiyim, bu yüzden herhangi bir eleştiriye açığız.

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

Üzgünüm, bir karaktere indirgeme işlevini kullanma izniniz olmadığını söylemek zorunda kaldım. Soru güncellendi.
ProgramFOX

1
Lütfen son yorumuma bakın : kodunuz yalnızca giriş dizesi yalnızca büyük harf karakterler içeriyorsa çalışır, ancak küçük harf karakterler ve sayılar gibi diğer ASCII karakterlerini de içerdiğini unutmayın.
ProgramFOX

Tamam, eve geldiğimde güncellenecek
asteri

@ProgramFOX Güncelleme.
asteri

Jeff, @minitech'in cevabını kontrol et . İkinizin de benzer yaklaşımları var, bu yüzden nasıl ve neden cevaplarının daha kısa olduğunu görebilmelisiniz .

1

Perl, 9 + 1 (-p bayrağı için) = 10

$_="\L$_"

\L Özel olarak istendi ve izin verildi, çünkü bir yerleşik olmasına rağmen, bir işlev değil.


1

Powershell, 53 49 bayt

-4 bayt teşekkürler @AdmBorkBork

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

Test komut dosyası:

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

Çıktı:

True: hello world from powershell

güzel! ¯\_(ツ)_/¯
mazzy

1

8086 makine kodu, 14 bayt

Birleştirilmiş:

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

Demonte listeleme:

 ; 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 

Bir olarak uygulanan MACRO(temel bir işlevi). Girdi dizgisi SI, uzunluğu gir CX. Çıktı dizesi DI.

PC DOS test programından çıktı:

görüntü tanımını buraya girin

TOLOW.COM örnek programını indirin ve test edin .


14 bayt sayısı nereden geliyor? snippet bundan daha uzun, yorum yapmadan bile ... derlenen programın 14 baytı mı?
Jonah

1
@Jonah Bayt opkodu sol sütunda, AC 3C 41vb. Bulunur. Netlik için toplanmış onaltılık byte kodunu ekleyeceğim. codegolf.meta.stackexchange.com/a/12340/84624
640KB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.