Konvertieren eines Strings in Kleinbuchstaben (ohne eingebaute Kleinbuchstaben-Funktionen!)


25

Das Ziel dieses Codegolfs ist es, einen Code zu erstellen, mit dem der Benutzer eine ASCII-Zeichenfolge eingeben kann (die nur druckbare ASCII-Zeichen enthält ), und Ihr Programm gibt die Kleinbuchstabenvariante dieser Zeichenfolge aus.

Wichtig: Sie dürfen KEINE eingebaute Funktion verwenden, die die Zeichenfolge (oder nur ein Zeichen) in Kleinbuchstaben umwandelt (z. B. ToLower()in .NET, strtolower()in PHP, ...)! Sie können jedoch alle anderen integrierten Funktionen verwenden.

Ein weiterer wichtiger Hinweis: Die Eingabezeichenfolge enthält nicht nur Großbuchstaben. Die Eingabezeichenfolge ist eine Mischung aus Großbuchstaben, Kleinbuchstaben, Zahlen und anderen druckbaren ASCII- Zeichen.

Viel Glück!


4
leider muss ich mich abmelden. Ich bin kein Anfänger.
John Dvorak

@Jan: Nun, mit Anfänger habe ich eigentlich gemeint, dass der Schwierigkeitsgrad "Anfänger" ist und nicht, dass nur Anfänger teilnehmen dürfen. Ich habe das Wort "Anfänger" gestrichen und Sie dürfen mit Sicherheit eintreten.
ProgramFOX

1
Sind reguläre Ausdrücke erlaubt? Nur GolfScript konnte schlagen s/./\L\0/g.
Manatwork

3
@manatwork: ist sicher \Leingebaut?
Marinus

@manatwork: Ja, ein regulärer Ausdruck ist zulässig.
ProgramFOX

Antworten:


21

Schale - 10

Übersetzung von @ Gowthams Perl-Lösung mit /bin/tr.

tr A-Z a-z

Probelauf:

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

Was macht dies aus Neugier zur akzeptierten Antwort? Gowtham hatte zuerst eine 10-Zeichen-Lösung…
Ry-10.10.13

1
Basierend auf der Diskussion über Meta scheint die Argumentation zu sein, dass Gowthams Lösung aus 11 Zeichen besteht (weil die -pFlagge als eins zählt). Ich stimme jedoch zu, es scheint, dass es mehr verdient, akzeptiert zu werden.
FireFly

Ah, danke - das macht Sinn. Ich merke es mir!
Ry

53

Python 2.7 - 30 (mit schrecklichem und nicht entschuldigendem Regelmissbrauch)

raw_input().upper().swapcase()

Wie eine anonyme Bearbeitung hervorhob, können Sie dies in ausführen 2726 in Python 3 :

input().upper().swapcase()

Ich missbrauche hier offen die Regeln, aber ...

Wichtig: Sie dürfen KEINE eingebaute Funktion verwenden, die die Zeichenfolge (oder nur ein Zeichen) in Kleinbuchstaben umwandelt (z. B. ToLower()in .NET, strtolower()in PHP, ...)! Sie können jedoch alle anderen integrierten Funktionen verwenden.

Dadurch werden die Zeichenfolgen in Großbuchstaben umgewandelt . In einem sehr unabhängigen Methodenaufruf wird die Groß- / Kleinschreibung der Zeichenfolge umgekehrt, sodass alle Kleinbuchstaben zu Großbuchstaben werden ... und alle Großbuchstaben gegen Kleinbuchstaben ausgetauscht werden .


1
Die Python 3-Lösung besteht aus 26 Zeichen.
Timtech

@ Timtech Ich kann nicht zählen.

1
Es hat nicht nur nichts zu tun. Es ist sehr verwandt.
Carter Pape

1
Dies führt zu seltsamen Ergebnissen, wenn Sie auf Text stoßen, der die Zeichen β enthält.
FUZxxl

33

Perl - 11 10 Zeichen.

y/A-Z/a-z/

y///ist das gleiche wie tr///!

In Aktion:

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

3
+1, für die einzige reale Sprache, die umso weniger (?) Reale schlägt.
Behrooz

Eigentlich sind das 11 Zeichen. Die -pOption wird als 1
gewertet.

@manatwork Oder es sollte als 2 gezählt werden: -und p:)
Gowtham

1, wenn Sie annehmen -e( perl -e-> perl -pe), 3, wenn Sie ein Skript annehmen ( perl-> perl -p).
Nyuszika7h

10

Befunge-98 - 26 22 21 19

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

Beruht auf der Tatsache , das (c-39)/26ist 1nur für die Zeichencodes Groß ASCII - Zeichen (unter der Annahme ganzzahlige Division). Für jedes Zeichen causdrucken c + (((c-39)/26)==1)*' '.

Beispielsitzung:

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

Können Sie erklären, wie das funktioniert? Ich bin wirklich daran interessiert, bei Python besser zu werden. Ich verstehe nicht, wie das map(ord,input())Stück funktioniert.
Asteri

1
@JeffGohlke: Wendet mapeine Funktion (in diesem Fall ord) auf eine Interable an und gibt eine Iterable zurück. Es ist wie eine kürzere Form von (ord(x) for x in input()).
Ry

Ich habs. Danke für die Erklärung!
Asteri

1
Ihre Antwort folgt dem Geist der Frage, aber meine folgt dem Buchstaben der Frage ...

Sehr schön. Schlage meine Lösung mit 62 Längen for c in input():print([c,(chr(ord(c)+32))]['@'<c<'['],end=''). Ich habe einige mit dem map(ord,input())Trick ausprobiert , aber es ist mir entgangen, den Wahrheitswert mit 32 zu multiplizieren und zum Zeichencode-Trick hinzuzufügen. Sehr schön.
Steven Rumbalski

8

Ruby, 18 Zeichen

Nichts wirklich interessantes.

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

(im IRB laufen)

Nur zum Spaß: eine verwirrende Version:

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

Laufen Sie wie folgt:

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

Ausgabe

llamas are amazing!

7

J - 30

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

J wird von rechts nach links gelesen, um dies aufzuschlüsseln:

  1. Benutzer zur Eingabe auffordern: 1!:1]1
  2. Algorithmus im Code-Punkt-Raum ausführen: &.(a.&i.)
  3. Identifizieren Sie den Zeichenbereich für jeden Buchstaben. die Zeichen zwischen Codepoints „@“ und „Z“ werden als Großbuchstaben: 1=I..
  4. Fügen Sie für jeden Codepunkt in Großbuchstaben 32 hinzu: ]+32* ...
  5. Beachten Sie, dass in Schritt (2) ein impliziter Schritt (5) erstellt wird: Wir haben zunächst von der Zeichen- in die Ganzzahldomäne projiziert, und jetzt, da wir fertig sind, ordnen wir diese Ganzzahlen wieder den Zeichen zu.

Offensichtlich berücksichtigt diese spezielle Implementierung nur ASCII. Der Ansatz könnte jedoch zumindest auf die mehrsprachige Basisebene in Unicode ausgeweitet werden.


1
Nett! Leider scheint es, dass Ihre Lösung den falschen Weg geht. ;-) Sollte aber eine einfache Lösung sein. (Edit: '@Z'(]+32*1=I.)&.(a.&i.)1!:1]1sollte es tun)
FireFly

Netter Fang, danke. Ich bin auch beeindruckt, dass Sie den Code selbst korrigieren konnten: J ist nicht die am schnellsten zugängliche Sprache :)
Dan Bron

Ah, ich habe mit J selbst herumgespielt. Ich habe es geschafft, etwas zu finden u:(a.i.x)+32*1='@Z'I.x=.1!:1]1, das Ihrer Länge entspricht, aber viel weniger interessant ist (da es kein "Unter" verwendet). Apropos, ich wusste nichts über Dyadic I., also danke, dass du das benutzt hast . :-)
FireFly

Cool. Aber Ihre Befunge-Lösung hat immer noch 4 Zeichen Vorsprung. Offensichtlich kann ich das nicht ausstehen lassen :) Ich versuche herauszufinden, ob die J-Lösung reduziert werden kann, indem Sie Ihrem Beispiel folgen, indem Sie sich ausschließlich auf '@' und nicht auf '@' und 'Z' verlassen.
Dan Bron

(32(23)b.])&.(3&u:)sollte 5 Bytes kürzer sein.
FrownyFrog

7

C 64 63 59 55 Zeichen

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

Ich zähle dort nur 63 Zeichen.
Manatwork

Du kannst 9 Zeichen verlieren: drop int und ,c>=0. Sie sind hier nicht notwendig.
JoeFish

Wir brauchen c> = 0, da getchar (EOF) <0 ist. Vielen Dank für andere Vorschläge.
Rozuur

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

1
Unbedeutend kleiner Fehler: Anscheinend sollte es 65 statt 64 geben. Pastebin.com/Zc9zMx2W
manatwork

5

Golfscript - 17

Programm:

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

Erläuterung:

  1. {}% Ordnet den Code in jedem Zeichen in einer Zeichenfolge zu.
  2. .. kopiert die Oberseite des Stapels (das Zeichen) zweimal.
  3. 64> 1, wenn der Zeichencode größer als 64 ist, sonst 0.
  4. \tauscht die beiden Gegenstände auf dem Stapel aus (erhält die zweite Kopie des Briefes und speichert das Ergebnis von 64>an Position zwei).
  5. 91< prüft, ob der Zeichencode kleiner als 91 ist. Ähnlich wie in Schritt 3.
  6. *multipliziert die Ergebnisse aus den Schritten 3 und 5 miteinander. Nur gleich 1, wenn beide Schritte zutreffen.
  7. 32* multipliziert das Ergebnis von Schritt 6 mit 32. Wird 32 sein, wenn Schritt 6 1 war, sonst 0.
  8. + Addiere das Ergebnis (entweder 32 oder 0) zum Zeichencode.

Beispielausgabe:

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

4

Perl: 24 Zeichen

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

Probelauf:

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

Hem, warum chr ord? Ich bin mir ziemlich sicher, dass Sie beim Lesen meiner Antwort nichts lernen werden ;-)
F. Hauri

Erstaunlicher Trick, @ F.Hauri!
manatwork

@ nyuszika7h, +1 ist der -pBefehlszeilenparameter, kein Zeilenumbruch.
Handarbeit

Oh richtig, sorry.
Nyuszika7h

3

Python (33)

Verwenden Sie im Zweifelsfall die Shell.

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

Leider ist dies immer noch länger als Legos Lösung.


+1 Das ist in der Tat kein eingebautes Python, das Sie verwenden. Funktioniert nur unter Linux, aber immer noch sehr kurvenreich !!!

@LegoStormtroopr Funktioniert überall dort, wo es einen trBefehl (der das Richtige tut) auf dem Pfad der aufgerufenen Shell gibt, nehme ich an.
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
Das ist kein Golf. Glauben Sie nicht, dass dieses Stück im Vergleich zu anderen ganz anders ist?
Ray

1
Bei @ray Golfing geht es darum, Ihren Code so kurz wie möglich zu halten. Delphi ist keine großartige Sprache zum Golfen. Ich benutze Delphi selbst und obwohl es keine große Chance gibt, mit Delphi ein Golf zu gewinnen, macht es immer noch Spaß, sich selbst herauszufordern.
Teun Pronk

3

JavaScript - 109 104 (ES6: 95)

Vielen Dank an einige für die korrigierte Version.

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

Folgendes funktioniert, wenn der Browser ES6-Funktionsausdrücke unterstützt:

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

Der erste Code funktioniert nicht (in FF und Chrome getestet), da beim Versuch, ein Zeichen nach der Länge der Zeichenfolge abzurufen, undefinedund dann ein c.charCodeAt()Fehler auftritt, weil nicht definiert nicht vorhanden ist charCodeAt. Ein Arbeitsbeispiel mit 105 Zeichen:a=prompt();for(b=[i=0];c=a.charCodeAt(i);)b[i++]=String.fromCharCode(c|(c>64&&c‌​<91)*32);alert(b.join(''))
Einige

@some oops, ich frage mich, wie ich auf dieses Snippet gekommen bin. Ich bin mir ziemlich sicher, dass ich diesen Code getestet habe. Vielleicht habe ich eine nicht funktionierende Version in oder so kopiert. Trotzdem danke für die Korrektur.
FireFly

Verwenden Sie eine bitweise andanstelle einer logischen ... schön!
Etwa

Eine noch größere ES6 - Lösung ( 79 ): L=s=>[String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)for(c of s)].join(''). Verwendung:L('SoMeTeXt')
Florent

Nett! Ich bin mir nicht sicher, ob ich es zu einer bloßen Funktion machen soll, da alle anderen Lösungen "richtige" Programme sind. Trotzdem sehr nett von Nutzen for..of.
FireFly

3

Perl 18

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

So etwas wie:

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

und

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

Für @FireFly :

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

Nein.

Allgemeiner: 18 Zeichen:

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

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

Dies wird nichts am Zustand ändern:

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

Alle Arbeiten in Ordnung, aber der Vorteil der Änderung |(oder) durch ^(xor) ist , dass die gleiche Syntax für verwendet werden könnte toLower, toUpperoder swapCase:

toUpper:

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

und SwapCase (18 + 1 = 19 Zeichen) :

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

Ich habe +1 für -psorry @manatwork
F. Hauri

Ist das nicht übersetzen @Graviszeichen und [\]^_zu {|}~DEL? Und darin liegt der schwierige Teil ..
FireFly

1
@FireFly Nein, $&muss passen [A-Z].
F. Hauri

Oh mein Schlechtes. Sehr cool also!
FireFly

3

Javascript 80

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

(76, wenn Sie entfernen "X")

mit promptund alert- 92

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

Geige

danke an @FireFly @some @ C5H8NNaO4 und @minitech


Ähm, müssen Sie das zweite Argument replacemit " function($){return ...}Nein" abschließen? Übrigens ist der erste Parameter für die Ersetzungsfunktion die übereinstimmende Zeichenfolge, sodass Sie die Parens in der Regex ablegen können.
FireFly

Wie würde ich vorgehen, um es so laufen zu lassen?
C5H8NNaO4

@ C5H8NNaO4 str (Code hier)
Math Chiller

6
Ich denke, dass alle (oder zumindest die meisten) Antworten hier von stdin und print bis stdout gelesen werden. Soweit ich weiß, soll die Konvention promptund alertfür I / O in JS verwendet werden.
FireFly

1
Sie benötigen eine /gFlagge, damit dies ordnungsgemäß funktioniert.
Ry

2

R

71 Zeichen:

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

83 Zeichen:

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

Das sind 86Zeichen - Zeilenumbrüche zählen als 2 Zeichen. ( string-functions.com/length.aspx )
Timtech

@Timtech: In R können Sie Zeilenumbrüche durch solche ersetzen ;, die nicht nur für ein Zeichen gelten. Es könnte geschrieben werden:a=as.integer(charToRaw(scan(,"")));b=a%in%(65:90);a[b]=a[b]+32;rawToChar(as.raw(a))
Plannapus

Ja, jetzt wurde mir klar. Ich habe auf Meta nachgelesen ... scheint, dass nur unter Windows die Zeilenumbrüche 2 Zeichen umfassen (ich habe ein Programm verwendet, um die Länge meines Codes zu messen).
Timtech



2

PHP (42)

Führen Sie von der Befehlszeile aus:

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

-R und die einfachen Anführungszeichen werden nicht gezählt.


Wenn Sie Gowthams Peal-Lösung folgen, würden Sie nur 42 Zeichen zählen.
Eisberg

1
@eisberg: Die Punktzahl wurde aktualisiert, sodass im Falle eines Streits eine Version mit 43 Zeichen im Verlauf verbleibt.
PleaseStand

str_ireplace Suche ohne Berücksichtigung der Groß- / Kleinschreibung, wodurch die Regeln erweitert werden, wenn sie nicht verletzt werden.
Ugoren

@ugoren glaube ich nicht. Wie es klar ist, ist es nicht erlaubt, nur die eingebaute Funktion zu ändern, und dies ignoriert den Fall, ohne ihn zu ändern.
Eisberg

2

PowerShell: 69 65 64

Ich habe ein halbes Dutzend Mal versucht, Replace so zu machen, wie ich es möchte, ohne die lange [regex]::ReplaceSyntax zu verwenden, aber ich hatte kein Glück. Wenn jemand eine Idee hat, was funktionieren könnte, schlagen Sie sie bitte vor.

Golf Code:

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

Änderungen gegenüber dem Original:

  • Das letzte Argument wurde neu angeordnet, sodass [int]es nicht mehr benötigt wird. Dies wurde in Kommentaren vorgeschlagen.

Erläuterung:

(read-host) Ruft die Benutzereingabe ab.

[regex]::Replace(... )weist PowerShell an, RegEx-Matching zu verwenden, um Ersetzungsvorgänge an einer Zeichenfolge durchzuführen.

"[A-Z]" stimmt mit allen Großbuchstaben überein.

{... }weist PowerShell an, ein Skript zu verwenden, um den Ersatzwert zu ermitteln.

[char]"$args" Nimmt die aktuelle Übereinstimmung und gibt sie als ASCII-Zeichen ein.

32+ konvertiert das Zeichen in eine Ganzzahl, die den ASCII-Code darstellt, und erhöht den Wert um 32, was dem ASCII-Code des entsprechenden Kleinbuchstabens entspricht.

[char](... )nimmt den resultierenden Wert und konvertiert ihn zurück in ein ASCII-Zeichen.

Demo des Originals:

Bildbeschreibung hier eingeben

(Aktuelle Version getestet - Screenshot noch nicht gepostet.)


1
Haben Sie nicht überprüft, wie das umgehen zu [regex]::Replace, aber Sie können 4 Zeichen speichern , indem Sie [int]auf+
GORIC

1
Tatsächlich kann das ganze letzte Argument neu angeordnet werden {[char](32+[char]"$args")}, was die Notwendigkeit beseitigt , um explizit zu gieße int und Rasuren aus einem mehr Charakter
Gorić

@goric Geez, warum habe ich das nicht schon gedacht? Ich glaube, ich lerne noch.
Iszi

2

k2, 15 Bytes

Ich bin super spät dran, aber ich fand das trotzdem cool.

{_ci 32+_ic x}'

Ebenfalls:

Pyth, 10 Bytes

Zählt nicht wirklich, weil Pyth erstellt wurde, nachdem dies gepostet wurde. Trotzdem cool.

jkmC+32Cdw

2

05AB1E , 3 Bytes

u.š

Port von @ user8777 Python 3 Antwort .

Probieren Sie es online aus.

Erläuterung:

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

Aber ohne die Groß- und Kleinschreibung zu ändern:

05AB1E , 12 11 Bytes

ÇIS.u32*+çJ

-1 Byte dank @Emigna .

Probieren Sie es online aus.

Erläuterung:

Ç            # 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*+çJ Speichert ein Byte in Ihrer 12-Byte-Version.
Emigna

@Emigna Ah, klug. Ich hatte den .u32*+Ansatz wie folgt ausprobiert εÇy.u32*+ç]J:, çbricht aber leider die Zeichen in eine Liste ein, so Jdass nach dem ein zusätzliches oder `erforderlich war ç..
Kevin Cruijssen

1

Javascript, 105

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

Tatsächlich wurde kein Ausgabeformular angegeben. Führen Sie es in der Konsole aus. Ja, JavaScript ist wirklich ausführlich und enthält den Zeichencode <->


1
c.charCodeAt()- Standardmäßig 0wird kein Index angegeben. Auch bricht auf "@", glaube ich (es wird in Backtick "verkleinert")
FireFly

@FireFly Schön, danke !, ok, ich werde es reparieren =)
C5H8NNaO4

1

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

Über 70 für nur den Methodenkörper.

Fügen Sie 5 Zeichen hinzu, um einen LF / CR in die Ausgabe aufzunehmen:

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

Eine LINQ-Version wäre kürzer:

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) .. mit der Ausnahme, dass es erfordert using System.Linq;(gesamt: 121).


1

Haskell - 58

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

1

Python 3 - 70

Aktualisiert für OP Änderungen.

Ich bin ein Python-Neuling. Kritik ist also willkommen.

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

Es tut mir leid, ich musste sagen, dass Sie für ein Zeichen keine niedrigere Funktion verwenden dürfen. Frage aktualisiert.
ProgramFOX

1
Bitte beachten Sie meinen jüngsten Kommentar : Ihr Code funktioniert nur, wenn die Eingabezeichenfolge nur Großbuchstaben enthält. Beachten Sie jedoch, dass sie auch andere ASCII-Zeichen wie Kleinbuchstaben und Zahlen enthält.
ProgramFOX

Okay, wird aktualisiert, wenn ich nach Hause
komme

@ProgramFOX Aktualisiert.
Asteri

Jeff, schau dir die Antwort von @minitechs an . Sie haben beide sehr ähnliche Ansätze, also sollten Sie in der Lage sein zu sehen, wie und warum seine Antwort kürzer ist.

1

Perl, 9 + 1 (für -p Flag) = 10

$_="\L$_"

\L wurde speziell gefragt und zugelassen, da es sich zwar um eine integrierte Funktion handelt, es jedoch keine Funktion ist.


1

Powershell, 53 49 Bytes

-4 Bytes danke @AdmBorkBork

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

Testskript:

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

Ausgabe:

True: hello world from powershell

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

1

8086 Maschinencode, 14 Bytes

Gebaut:

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

Zerlegte Auflistung:

 ; 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 

Implementiert als MACRO(im Wesentlichen eine Funktion). Eingabe String in SI, Länge in CX. Ausgabezeichenfolge in DI.

Ausgabe vom PC-DOS-Testprogramm:

Bildbeschreibung hier eingeben

Laden Sie das Beispielprogramm TOLOW.COM herunter und testen Sie es .


Woher kommt die 14-Byte-Zählung? das schnipsel ist länger als das, auch ohne kommentare ... sind 14 bytes das kompilierte programm?
Jonah

1
@Jonah Der Byte-Opcode befindet sich in der linken Spalte. AC 3C 41 usw. füge ich den zusammengestellten Hex-Byte-Code oben hinzu. codegolf.meta.stackexchange.com/a/12340/84624
640 KB,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.