Konwertowanie łańcucha na małe litery (bez wbudowanych funkcji na małe litery!)


25

Celem tego code-golfa jest stworzenie kodu, który pozwoli użytkownikowi wprowadzić ciąg ASCII (zawierający tylko drukowane znaki ASCII ), a Twój program wyświetli wariant tego łańcucha pisany małymi literami.

Ważne: NIE wolno używać wbudowanej funkcji, która konwertuje ciąg (lub tylko jeden znak) na małe litery (np. ToLower()W .NET, strtolower()w PHP, ...)! Możesz jednak korzystać ze wszystkich innych wbudowanych funkcji.

Kolejna ważna uwaga: łańcuch wejściowy nie zawiera wyłącznie wielkich liter. Łańcuch wejściowy jest kombinacją wielkich i małych liter, cyfr i innych znaków drukowalnych ASCII .

Powodzenia!


4
niestety będę musiał zrezygnować. Nie jestem początkującym.
John Dvorak

@Jan: Cóż, dla początkujących miałem na myśli, że poziom umiejętności będzie „początkujący”, a nie tylko wstęp do gry. Usunąłem słowo „początkujący” i na pewno możesz wejść.
ProgramFOX,

1
Czy dozwolone są wyrażenia regularne? Tylko GolfScript mógł pokonać s/./\L\0/g.
manatwork

3
@manatwork: na pewno \Ljest wbudowany?
marinus

@manatwork: Tak, wyrażenie regularne jest dozwolone.
ProgramFOX,

Odpowiedzi:


21

Skorupa - 10

Tłumaczenie rozwiązania Perla @ Gowtham za pomocą /bin/tr.

tr A-Z a-z

Przykładowy przebieg:

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

Co sprawia, że ​​jest to akceptowana odpowiedź z ciekawości? Gowtham miał najpierw 10-znakowe rozwiązanie…
Ry- 10.10.13

1
Na podstawie dyskusji na temat meta wydaje się, że powodem jest to, że rozwiązanie Gowtham ma 11 znaków (ponieważ -pflaga liczy się jako jedna). Zgadzam się jednak, jego wydaje się, że zasługuje na więcej, aby zostać zaakceptowanym ..
FireFly 10.10.2013

Ach, dzięki - to ma sens. Będę pamiętała!
Ry-

53

Python 2.7 - 30 (z okropnym i nieszczerym naruszeniem zasad)

raw_input().upper().swapcase()

Jak zauważyła anonimowa edycja, możesz to zrobić w 2726 w Python 3 :

input().upper().swapcase()

Rażąco nadużywam tu zasad, ale ...

Ważne: NIE wolno używać wbudowanej funkcji, która konwertuje ciąg (lub tylko jeden znak) na małe litery (np. ToLower()W .NET, strtolower()w PHP, ...)! Możesz jednak korzystać ze wszystkich innych wbudowanych funkcji.

To bierze struny i zakrywa je wielkimi literami . Następnie w bardzo niepowiązanym wywołaniu metody odwraca wielkość łańcucha - tak, że małe litery stają się dużymi literami ... i zamienia wszelkie duże litery na małe .


1
Rozwiązanie Python 3 ma 26 znaków.
Timtech,

@Timtech nie mogę liczyć.

1
To nie jest po prostu niezwiązane. To jest bardzo niezwiązane.
Carter Pape,

1
Będzie to miało dziwne wyniki, gdy napotkasz tekst zawierający znaki ß.
FUZxxl,

33

Perl - 11 10 znaków.

y/A-Z/a-z/

y///jest taki sam jak tr///!

W akcji:

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

3
+1, za jedyny prawdziwy język, który pokonał wszystkie mniej (?) Prawdziwe.
Behrooz,

Właściwie to 11 znaków. -pOpcja jest liczony jako 1.
manatwork

@manatwork Lub należy to liczyć jako 2: -i p:)
Gowtham

1 jeśli założymy -e( perl -e-> perl -pe), 3 jeśli założymy skrypt ( perl-> perl -p).
nyuszika7h,

10

Befunge-98 - 26 22 21 19

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

Opiera się na fakcie, że dotyczy (c-39)/26to 1wyłącznie kodów znaków wielkich znaków ASCII (przy założeniu podziału na liczby całkowite). Dla każdej postaci cwydrukuj c + (((c-39)/26)==1)*' '.

Przykładowa sesja:

% 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()))

Czy możesz wyjaśnić, jak to działa? Naprawdę interesuje mnie poprawa w Pythonie. Nie rozumiem, jak map(ord,input())działa bit.
asteri

1
@JeffGohlke: mapstosuje funkcję (w tym przypadku ord) do interpable i zwraca iterowalność. To jest jak krótsza forma (ord(x) for x in input()).
Ry-

Rozumiem. Dziękuję za wyjaśnienie!
asteri

1
Twoja odpowiedź jest zgodna z duchem pytania, ale moja podąża za literą pytania ...

Bardzo dobrze. Pokonałem moje nieopublikowane rozwiązanie o długości 62 for c in input():print([c,(chr(ord(c)+32))]['@'<c<'['],end=''). Próbowałem trochę z map(ord,input())lewą, ale pominąłem pomnożenie wartości prawdy przez 32 i dodanie jej do sztuczki z kodem znaków. Bardzo dobrze.
Steven Rumbalski,

8

Ruby, 18 znaków

Nic naprawdę interesującego.

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

(działa w IRB)

Dla zabawy: myląca wersja:

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

Uruchom tak:

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

Wydajność

llamas are amazing!

7

J - 30

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

J jest czytany od prawej do lewej, więc aby to rozbić:

  1. Monituj użytkownika o wprowadzenie: 1!:1]1
  2. Wykonaj algorytm w przestrzeni kodu: &.(a.&i.)
  3. Określ zakres znaków dla każdej litery; znaki między codepoints „@” i „Z” są uważane za wielkie litery: 1=I..
  4. Do każdego wieloznacznego punktu kodowego dodaj 32: ]+32* ...
  5. Zauważ, że krok (2) tworzy domyślny krok (5): zaczęliśmy od projekcji z postaci do domeny liczb całkowitych, więc teraz, gdy jesteśmy skończeni, mapujemy te liczby całkowite z powrotem na znaki.

Oczywiście ta konkretna implementacja uwzględnia tylko ASCII; ale podejście to można rozszerzyć przynajmniej na podstawową płaszczyznę wielojęzyczną w Unicode.


1
Miły! Niestety wydaje się, że twoje rozwiązanie idzie w złym kierunku. ;-) Powinno to być łatwe do naprawienia. (Edytuj: '@Z'(]+32*1=I.)&.(a.&i.)1!:1]1powinien to zrobić)
FireFly,

Niezły chwyt, dzięki. Jestem również pod wrażeniem, że udało ci się samodzielnie naprawić kod: J nie jest obecnie najbardziej dostępnym językiem :)
Dan Bron

Ach, sam bawiłem się trochę z J. .. udało mi się wymyślić u:(a.i.x)+32*1='@Z'I.x=.1!:1]1, która pasuje do twojej długości, ale jest o wiele mniej interesująca (ponieważ nie korzysta z „under”). Mówiąc o tym, nie wiedziałem o dyadic I., więc dzięki za skorzystanie z tego. :-)
FireFly,

Fajne. Ale twoje rozwiązanie Befunge nadal ma J pokonane przez 4 znaki. Oczywiście nie mogę tego znieść :) Staram się sprawdzić, czy obniżymy rozwiązanie J, kierując się twoją wskazówką polegając wyłącznie na „@”, a nie na „@” i „Z”.
Dan Bron

(32(23)b.])&.(3&u:), powinien być o 5 bajtów krótszy.
FrownyFrog,

7

C 64 63 59 55 znaków

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

Naliczyłem tam tylko 63 znaki.
manatwork

Możesz stracić 9 znaków: upuść int i ,c>=0. Nie są tu potrzebne.
JoeFish,

potrzebujemy c> = 0, ponieważ getchar (EOF) wyniesie <0. Dzięki za inną sugestię.
Rozuur,

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

1
Nieznacznie mały błąd: wydaje się, że powinno być 65 zamiast 64. pastebin.com/Zc9zMx2W
manatwork

5

Golfscript - 17

Program:

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

Wyjaśnienie:

  1. {}% odwzorowuje kod wewnątrz na każdy znak w ciągu.
  2. .. kopiuje dwukrotnie stos (postać) dwa razy.
  3. 64> 1, jeśli kod znaku jest większy niż 64, w przeciwnym razie 0.
  4. \zamienia dwa elementy ze stosu (pobiera drugą kopię listu i przechowuje wynik z 64>pozycji drugiej).
  5. 91< sprawdza, czy kod znaku jest mniejszy niż 91. Podobnie jak w kroku 3.
  6. *mnoży wyniki z kroków 3 i 5 razem. Równa się tylko 1, jeśli oba kroki były prawdziwe.
  7. 32* mnoży wynik kroku 6 przez 32. Wyniesie 32, jeśli krok 6 miał wartość 1, w przeciwnym razie 0.
  8. + dodaj wynik (32 lub 0) do kodu znaku.

Przykładowe dane wyjściowe:

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

4

Perl: 24 znaki

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

Przykładowy przebieg:

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

Hem, dlaczego chr ord? Jestem pewien, że nie nauczysz się niczego czytając moją odpowiedź ;-)
F. Hauri

Niesamowita sztuczka @ F.Hauri!
manatwork

@ nyuszika7h, +1 to -pparametr wiersza poleceń, a nie nowy wiersz.
manatwork

No tak, przepraszam.
nyuszika7h,

3

Python (33)

W razie wątpliwości użyj powłoki.

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

Niestety, wciąż jest to dłuższe niż rozwiązanie Lego.


+1 To w rzeczywistości nie jest wbudowany Python, którego używasz. Działa tylko na Linuksie, ale wciąż jest bardzo zgięty!

@ LegoStormtroopr Działa wszędzie tam, gdzie jest trpolecenie (które robi właściwą rzecz) na ścieżce wywoływanej powłoki, jak sądzę.
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
To nie jest golf. Czy nie uważasz, że ten kawałek różni się bardzo od innych?
Ray

1
W @ray Golfing chodzi o jak najkrótszy kod. Delphi nie jest świetnym językiem do gry w golfa. Sam korzystam z Delphi i chociaż nie ma dużej szansy, że mogę wygrać w golfa z Delphi, wciąż fajnie jest samemu stawiać wyzwania.
Teun Pronk

3

JavaScript - 109 104 (ES6: 95)

Dziękuję niektórym za poprawioną wersję.

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

Poniższe działa, jeśli przeglądarka obsługuje wyrażenia funkcji ES6:

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

Pierwszy kod nie działa (testowany w FF i Chrome), ponieważ gdy próbujesz uzyskać znak po długości łańcucha, dostajesz, undefineda następnie c.charCodeAt()kończy się niepowodzeniem, ponieważ niezdefiniowany nie ma charCodeAt. Przykład roboczych 105 znaków:a=prompt();for(b=[i=0];c=a.charCodeAt(i);)b[i++]=String.fromCharCode(c|(c>64&&c‌​<91)*32);alert(b.join(''))
część

@ niektórzy ups, zastanawiam się, jak wymyśliłem ten fragment. Jestem pewien, że przetestowałem ten kod, może skopiowałem niedziałającą wersję lub coś w tym stylu. W każdym razie dzięki za korektę.
FireFly,

Używanie bitowej andzamiast logicznej ... fajnie!
niektóre

Jeszcze ES6 roztwór ( 79 ) L=s=>[String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)for(c of s)].join(''). Zastosowanie:L('SoMeTeXt')
Florent

Miły! Nie jestem jednak pewien, czy będzie to zwykła funkcja, ponieważ wszystkie inne rozwiązania są „odpowiednimi” programami. Mimo to bardzo miłe wykorzystanie for..ofniezależnie.
FireFly,

3

Perl 18

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

Coś jak:

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

i

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

W przypadku @FireFly :

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

Nie.

Bardziej ogólne: w każdym razie 18 znaków:

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

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

To nie zmieni niczego w stanie:

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

Wszystko w porządku pracy, ale zaletą zmiany |(lub) przez ^(xor) jest to, że ta sama składnia może być używany do toLower, toUpperlub swapCase:

toUpper:

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

i swapCase (18 + 1 = 19 znaków) :

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

Zapomniałem +1 za -pprzepraszam @manatwork
F. Hauri

Nie to przetłumaczyć @na lewy apostrof i [\]^_do {|}~DEL? I na tym polega trudna część ..
FireFly,

1
@FireFly Nie, $&muszą się zgadzać [A-Z].
F. Hauri,

Och, mój zły. A więc bardzo fajnie!
FireFly,

3

javascript 80

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

(76 jeśli usuniesz "X")

z prompti alert- 92

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

skrzypce

dzięki @FireFly @some @ C5H8NNaO4 i @minitech


Er, trzeba by zawinąć drugi argument do replacez function($){return ...}, nie? Nawiasem mówiąc, pierwszym parametrem funkcji zamiany jest dopasowany ciąg, więc możesz upuścić pareny w wyrażeniu regularnym.
FireFly,

Jak miałbym to zrobić?
C5H8NNaO4

@ C5H8NNaO4 str (kod tutaj)
matematyki

6
Myślę, że wszystkie (a przynajmniej większość) odpowiedzi tutaj czytane są ze standardowego wejścia i drukowane na standardowe wyjście. Z tego, co zbieram, konwencja dotyczy użycia prompti alertwe / wy w JS.
FireFly,

1
Aby /gflaga działała poprawnie, potrzebujesz flagi.
Ry-

2

R

71 znaków:

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

83 znaki:

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

To 86znaki - znaki nowej linii liczą się jako 2 znaki. ( string-functions.com/length.aspx )
Timtech

@Timtech: W R możesz zastąpić ;znaki nowej linii kodem, więc nie, liczą się one tylko dla jednego znaku. Można by napisać:a=as.integer(charToRaw(scan(,"")));b=a%in%(65:90);a[b]=a[b]+32;rawToChar(as.raw(a))
plannapus,

Tak, teraz zrozumiałem. Czytam na meta ... wydaje się, że tylko w systemie Windows znaki nowej linii mają 2 znaki (używałem programu do pomiaru długości mojego kodu).
Timtech



2

PHP (42)

Uruchom z wiersza poleceń:

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

-R a pojedyncze cudzysłowy nie są liczone.


Jeśli zastosujesz się do rozwiązania Peal Gowthama, policzysz tylko 42 znaki.
eisberg

1
@eisberg: Zaktualizowano wynik, pozostawiając 43-znakową wersję w historii na wypadek jakiegokolwiek sporu.
PleaseStand

str_ireplacewykonuje wyszukiwanie bez rozróżniania wielkości liter, które rozszerza reguły, jeśli ich nie łamie.
ugoren

@ugoren Nie wydaje mi się. Jak wyraźnie stwierdzono, że tylko wbudowana funkcja zmieniająca wielkość liter nie jest dozwolona, ​​a to ignoruje wielkość liter nie zmieniającą wielkości liter.
eisberg

2

PowerShell: 69 65 64

Próbowałem na pół tuzina sposobów, aby Replace działał tak, jak chcę bez długiej [regex]::Replaceskładni, ale nie miałem szczęścia. Jeśli ktokolwiek ma pojęcie o tym, co może zadziałać, proszę o sugestię.

Kod do gry w golfa:

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

Zmiany w stosunku do oryginału:

  • Zmieniono układ ostatniego argumentu, aby [int]nie był już potrzebny, zgodnie z sugestią w komentarzach.

Wyjaśnienie:

(read-host) pobiera dane wejściowe od użytkownika.

[regex]::Replace(... )mówi PowerShellowi, aby używał dopasowania RegEx do wykonania operacji zamiany na łańcuchu.

"[A-Z]" dopasowuje wszystkie wielkie litery.

{... }mówi PowerShellowi, aby użył skryptu do ustalenia wartości zastępczej.

[char]"$args" pobiera bieżące dopasowanie i wpisuje je jako znak ASCII.

32+ konwertuje znak na liczbę całkowitą reprezentującą kod ASCII i zwiększa wartość o 32 - co odpowiada kodowi ASCII odpowiedniej małej litery.

[char](... )przyjmuje wynikową wartość i konwertuje ją z powrotem na znak ASCII.

Demo oryginału:

wprowadź opis zdjęcia tutaj

(Aktualna wersja przetestowana - zrzut ekranu jeszcze nie opublikowany.)


1
Nie sprawdziłem, jak to obejść [regex]::Replace, ale możesz zaoszczędzić 4 znaki, zmieniając [int]na+
goric

1
Właściwie można przestawić cały ostatni argument {[char](32+[char]"$args")}, co eliminuje potrzebę jawnego rzucania na int i goli jeszcze jedną postać
goric

@goric Geez, dlaczego jeszcze o tym nie pomyślałem? Chyba wciąż się uczę.
Iszi

2

k2, 15 bajtów

Jestem bardzo późno do tego, ale uważam, że to fajna tak.

{_ci 32+_ic x}'

Również:

Pyth, 10 bajtów

Tak naprawdę nie ma znaczenia, ponieważ Pyth został utworzony po opublikowaniu tego. Nadal fajne.

jkmC+32Cdw

2

05AB1E , 3 bajty

u.š

Port odpowiedzi @ user8777 Python 3 .

Wypróbuj online.

Wyjaśnienie:

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

Ale bez wbudowanych poleceń zmieniających wielkość liter:

05AB1E , 12 11 bajtów

ÇIS.u32*+çJ

-1 bajt dzięki @Emigna .

Wypróbuj online.

Wyjaśnienie:

Ç            # 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*+çJzapisuje bajt w 12-bajtowej wersji.
Emigna

@Emigna Ah, sprytny. Próbowałem takiego .u32*+podejścia: εÇy.u32*+ç]Jale niestety çzawija postacie na liście, więc Jpo ç… było wymagane dodatkowe lub „
Kevin Cruijssen

1

JavaScript, 105

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

W rzeczywistości nie określono formy wyjściowej, więc uruchom ją w konsoli. Tak, JavaScript jest naprawdę pełny z charcode <-> ciągiem


1
c.charCodeAt()- ustawieniem domyślnym 0jest pominięcie indeksu. Ponadto, łamie się na „@”, jak sądzę (staje się „małe litery” w backtick)
FireFly

@FireFly Fajnie, dzięki !, ok, naprawię to =)
C5H8NNaO4


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

Około 70 za samą treść metody.

Dodaj 5 znaków, aby dołączyć LF / CR do wyniku:

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

Wersja LINQ byłaby krótsza:

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) .. tyle że wymaga using System.Linq;(łącznie: 121).



1

Python 3-70

Zaktualizowano o zmiany OP.

Jestem nowicjuszem w Pythonie, więc każda krytyka jest mile widziana.

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

Przepraszam, musiałem powiedzieć, że nie możesz używać funkcji obniżania wartości na jednym znaku. Pytanie zaktualizowane.
ProgramFOX,

1
Zobacz mój ostatni komentarz : twój kod działa tylko wtedy, gdy ciąg wejściowy zawiera tylko wielkie litery, ale pamiętaj, że zawiera również inne znaki ASCII, takie jak małe litery i cyfry.
ProgramFOX,

Dobra, zaktualizuję się, kiedy wrócę do domu
asteri

@ProgramFOX Zaktualizowano.
asteri

Jeff, sprawdź odpowiedź @minitechs . Obaj mają bardzo podobne podejście, więc powinieneś zobaczyć, jak i dlaczego jego odpowiedź jest krótsza.

1

Perl, 9 + 1 (dla flagi -p) = 10

$_="\L$_"

\L został specjalnie zapytany i dozwolony, ponieważ chociaż jest wbudowany, nie jest funkcją.


1

PowerShell, 53 49 bajtów

-4 bajty dzięki @AdmBorkBork

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

Skrypt testowy:

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

Wydajność:

True: hello world from powershell

fajne! ¯\_(ツ)_/¯
mazzy

1

Kod maszynowy 8086, 14 bajtów

Zmontowane:

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

Niezmontowany wykaz:

 ; 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 

Wdrożony jako MACRO (zasadniczo funkcja). Łańcuch wejściowy w SI, długość w CX. Łańcuch wyjściowy w DI.

Dane wyjściowe z programu testowego DOS na PC:

wprowadź opis zdjęcia tutaj

Pobierz i przetestuj przykładowy program TOLOW.COM .


skąd pochodzi 14 bajtów? fragment jest dłuższy, nawet bez komentarzy ... czy skompilowany program ma 14 bajtów?
Jonasz

1
@Jonah Kod bajtowy znajduje się w lewej kolumnie AC 3C 41itp. Dla większej przejrzystości dodam złożony bajt szesnastkowy. codegolf.meta.stackexchange.com/a/12340/84624
640KB
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.