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!
code-golf
printable-ascii
ProgramFOX
quelle
quelle
s/./\L\0/g
.\L
eingebaut?Antworten:
Schale - 10
Übersetzung von @ Gowthams Perl-Lösung mit
/bin/tr
.Probelauf:
quelle
-p
Flagge als eins zählt). Ich stimme jedoch zu, es scheint, dass es mehr verdient, akzeptiert zu werden.Python 2.7 - 30 (mit schrecklichem und nicht entschuldigendem Regelmissbrauch)
Wie eine anonyme Bearbeitung hervorhob, können Sie dies in ausführen
2726 in Python 3 :Ich missbrauche hier offen die Regeln, aber ...
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 .
quelle
Perl -
1110 Zeichen.y///
ist das gleiche wietr///
!In Aktion:
quelle
-p
Option wird als 1-
undp
:)-e
(perl -e
->perl -pe
), 3, wenn Sie ein Skript annehmen (perl
->perl -p
).Befunge-98 -
26 22 2119Beruht auf der Tatsache , das
(c-39)/26
ist1
nur für die Zeichencodes Groß ASCII - Zeichen (unter der Annahme ganzzahlige Division). Für jedes Zeichenc
ausdruckenc + (((c-39)/26)==1)*' '
.Beispielsitzung:
quelle
Python 3, 58
quelle
map(ord,input())
Stück funktioniert.map
eine Funktion (in diesem Fallord
) auf eine Interable an und gibt eine Iterable zurück. Es ist wie eine kürzere Form von(ord(x) for x in input())
.for c in input():print([c,(chr(ord(c)+32))]['@'<c<'['],end='')
. Ich habe einige mit demmap(ord,input())
Trick ausprobiert , aber es ist mir entgangen, den Wahrheitswert mit 32 zu multiplizieren und zum Zeichencode-Trick hinzuzufügen. Sehr schön.Ruby, 18 Zeichen
Nichts wirklich interessantes.
(im IRB laufen)
Nur zum Spaß: eine verwirrende Version:
Laufen Sie wie folgt:
Ausgabe
quelle
J - 30
J wird von rechts nach links gelesen, um dies aufzuschlüsseln:
1!:1]1
&.(a.&i.)
1=I.
.]+32* ...
Offensichtlich berücksichtigt diese spezielle Implementierung nur ASCII. Der Ansatz könnte jedoch zumindest auf die mehrsprachige Basisebene in Unicode ausgeweitet werden.
quelle
'@Z'(]+32*1=I.)&.(a.&i.)1!:1]1
sollte es tun)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 DyadicI.
, also danke, dass du das benutzt hast . :-)(32(23)b.])&.(3&u:)
sollte 5 Bytes kürzer sein.C
64 63 5955 Zeichenquelle
int
und,c>=0
. Sie sind hier nicht notwendig.~(c=getchar())
2.c-64u<27
Golfscript - 17
Programm:
Erläuterung:
{}%
Ordnet den Code in jedem Zeichen in einer Zeichenfolge zu...
kopiert die Oberseite des Stapels (das Zeichen) zweimal.64>
1, wenn der Zeichencode größer als 64 ist, sonst 0.\
tauscht die beiden Gegenstände auf dem Stapel aus (erhält die zweite Kopie des Briefes und speichert das Ergebnis von64>
an Position zwei).91<
prüft, ob der Zeichencode kleiner als 91 ist. Ähnlich wie in Schritt 3.*
multipliziert die Ergebnisse aus den Schritten 3 und 5 miteinander. Nur gleich 1, wenn beide Schritte zutreffen.32*
multipliziert das Ergebnis von Schritt 6 mit 32. Wird 32 sein, wenn Schritt 6 1 war, sonst 0.+
Addiere das Ergebnis (entweder 32 oder 0) zum Zeichencode.Beispielausgabe:
quelle
Perl: 24 Zeichen
Probelauf:
quelle
chr ord
? Ich bin mir ziemlich sicher, dass Sie beim Lesen meiner Antwort nichts lernen werden ;-)-p
Befehlszeilenparameter, kein Zeilenumbruch.Python (33)
Verwenden Sie im Zweifelsfall die Shell.
Leider ist dies immer noch länger als Legos Lösung.
quelle
tr
Befehl (der das Richtige tut) auf dem Pfad der aufgerufenen Shell gibt, nehme ich an.DELPHI
quelle
JavaScript -
109104 (ES6: 95)Vielen Dank an einige für die korrigierte Version.
Folgendes funktioniert, wenn der Browser ES6-Funktionsausdrücke unterstützt:
quelle
undefined
und dann einc.charCodeAt()
Fehler auftritt, weil nicht definiert nicht vorhanden istcharCodeAt
. 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(''))
and
anstelle einer logischen ... schön!L=s=>[String.fromCharCode(c.charCodeAt()|(c>"@"&c<"[")*32)for(c of s)].join('')
. Verwendung:L('SoMeTeXt')
for..of
.Perl 18
So etwas wie:
und
Für @FireFly :
Nein.
Allgemeiner: 18 Zeichen:
Dies wird nichts am Zustand ändern:
Alle Arbeiten in Ordnung, aber der Vorteil der Änderung
|
(oder) durch^
(xor) ist , dass die gleiche Syntax für verwendet werden könntetoLower
,toUpper
oderswapCase
:toUpper:
und SwapCase (18 + 1 = 19 Zeichen) :
quelle
-p
sorry @manatwork@
Graviszeichen und[\]^_
zu{|}~DEL
? Und darin liegt der schwierige Teil ..$&
muss passen[A-Z]
.Javascript 80
(76, wenn Sie entfernen
"X"
)mit
prompt
undalert
- 92Geige
danke an @FireFly @some @ C5H8NNaO4 und @minitech
quelle
replace
mit "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.prompt
undalert
für I / O in JS verwendet werden./g
Flagge, damit dies ordnungsgemäß funktioniert.R
71 Zeichen:
83 Zeichen:
quelle
86
Zeichen - Zeilenumbrüche zählen als 2 Zeichen. ( string-functions.com/length.aspx );
, 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))
Q, 18
.....
quelle
Q (16)
.......
quelle
PHP (42)
Führen Sie von der Befehlszeile aus:
-R
und die einfachen Anführungszeichen werden nicht gezählt.quelle
str_ireplace
Suche ohne Berücksichtigung der Groß- / Kleinschreibung, wodurch die Regeln erweitert werden, wenn sie nicht verletzt werden.PowerShell:
696564Ich habe ein halbes Dutzend Mal versucht, Replace so zu machen, wie ich es möchte, ohne die lange
[regex]::Replace
Syntax zu verwenden, aber ich hatte kein Glück. Wenn jemand eine Idee hat, was funktionieren könnte, schlagen Sie sie bitte vor.Golf Code:
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:
(Aktuelle Version getestet - Screenshot noch nicht gepostet.)
quelle
[regex]::Replace
, aber Sie können 4 Zeichen speichern , indem Sie[int]
auf+
{[char](32+[char]"$args")}
, was die Notwendigkeit beseitigt , um explizit zu gieße int und Rasuren aus einem mehr Charakterk2, 15 Bytes
Ich bin super spät dran, aber ich fand das trotzdem cool.
Ebenfalls:
Pyth, 10 Bytes
Zählt nicht wirklich, weil Pyth erstellt wurde, nachdem dies gepostet wurde. Trotzdem cool.
quelle
05AB1E , 3 Bytes
Port von @ user8777 Python 3 Antwort .
Probieren Sie es online aus.
Erläuterung:
Aber ohne die Groß- und Kleinschreibung zu ändern:
05AB1E ,
1211 Bytes-1 Byte dank @Emigna .
Probieren Sie es online aus.
Erläuterung:
quelle
ÇIS.u32*+çJ
Speichert ein Byte in Ihrer 12-Byte-Version..u32*+
Ansatz wie folgt ausprobiertεÇy.u32*+ç]J
:,ç
bricht aber leider die Zeichen in eine Liste ein, soJ
dass nach dem ein zusätzliches oder `erforderlich warç
..Javascript, 105
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 <->
quelle
c.charCodeAt()
- Standardmäßig0
wird kein Index angegeben. Auch bricht auf "@", glaube ich (es wird in Backtick "verkleinert")Rubin: 66
quelle
C # - 108
Über 70 für nur den Methodenkörper.
Fügen Sie 5 Zeichen hinzu, um einen LF / CR in die Ausgabe aufzunehmen:
Eine LINQ-Version wäre kürzer:
(103) .. mit der Ausnahme, dass es erfordert
using System.Linq;
(gesamt: 121).quelle
Haskell - 58
quelle
Python 3 - 70
Aktualisiert für OP Änderungen.
Ich bin ein Python-Neuling. Kritik ist also willkommen.
quelle
Perl, 9 + 1 (für -p Flag) = 10
\L
wurde speziell gefragt und zugelassen, da es sich zwar um eine integrierte Funktion handelt, es jedoch keine Funktion ist.quelle
Powershell,
5349 Bytes-4 Bytes danke @AdmBorkBork
Testskript:
Ausgabe:
quelle
¯\_(ツ)_/¯
8086 Maschinencode, 14 Bytes
Gebaut:
Zerlegte Auflistung:
Implementiert als
MACRO
(im Wesentlichen eine Funktion). Eingabe String inSI
, Länge inCX
. Ausgabezeichenfolge inDI
.Ausgabe vom PC-DOS-Testprogramm:
Laden Sie das Beispielprogramm TOLOW.COM herunter und testen Sie es .
quelle
AC 3C 41
usw. füge ich den zusammengestellten Hex-Byte-Code oben hinzu. codegolf.meta.stackexchange.com/a/12340/84624