Die Herausforderung ist einfach:
Schreiben Sie eine Funktion oder ein Programm, das eine Eingabe annimmt x
und das Kleinbuchstaben-Alphabet ausgibt, wenn x
es Teil des Kleinbuchstaben-Alphabets ist, das Großbuchstaben-Alphabet ausgibt, wenn x
es Teil des Großbuchstaben-Alphabets ist, und nur ausgibt, x
wenn es nicht Teil von beidem ist.
Regeln:
- Die Eingabe kann ein Funktionsargument oder eine Eingabe von STDIN sein
- Die Eingabe besteht aus einem der druckbaren ASCII-Zeichen von 32 bis 126 (Leerzeichen bis Tilde).
- Die Eingabe kann in Anführungszeichen sein,
'x'
oder"x"
, aber denken Sie daran , dass'
und"
sind gültige Eingabe und sollte unterstützt werden. - Bei der Eingabe kann es sich um einen beliebigen Buchstaben des Alphabets handeln, dh Sie können nicht davon ausgehen, dass dies der Fall ist
a
oderA
. - Die Ausgabe sollte nur eines der Alphabete oder das einzelne Symbol sein, aber nachfolgende Zeilenumbrüche sind in Ordnung.
- Die Buchstaben im Alphabet sollten nicht durch Leerzeichen, Kommas oder andere Zeichen getrennt werden.
Einige Beispiele:
F
ABCDEFGHIJKLMNOPQRSTUVWXYZ
z
abcdefghijklmnopqrstuvwxyz
"
"
<- Input: Space
<- Output: Space
Kürzester Code in Bytes gewinnen.
Optional, aber erwünscht: Wenn Ihre Sprache über einen Online-Dolmetscher verfügt, posten Sie bitte auch einen Link, damit er problemlos von anderen getestet werden kann.
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
import Random
und dann verwendenRandom.randint
(natürlich nicht für diese Herausforderung, aber trotzdem)?import string
werden die zu schreibenden Bytes gezählt. Daher ist es oft besser, Abhilfemaßnahmen zu treffen. Beachten Sie, dass das Paket vorhanden sein muss, bevor die Herausforderung gesendet wird. Viele Herausforderungen haben etwas wie: "Verwenden von Paketen, die dies tun, ist nicht zulässig", aber das ist in dieser Herausforderung nicht der Fall.Antworten:
TeaScript , 5 Bytes
TeaScript hat dafür (fast) eine eingebaute: D
Probieren Sie es online aus (Hinweis: Der Online-Interpreter wurde auf TeaScript v3 aktualisiert. In diesem Fall ist dies der Fall.
N0
)Probieren Sie alle Testfälle aus
TeaScript 3 , 2 Bytes [nicht konkurrierend]
Bei Verwendung von TeaScript 3 kann dies zu 2 Byte werden. Dies ist nicht konkurrierend, da TeaScript 3 nach dieser Herausforderung erstellt wurde
1 Byte Alternative
Wenn wir
0123456789
für Ziffern ausgeben könnten , könnte dies sein:quelle
Pyth, 10 Bytes
Testsuite
Wir beginnen mit der Erstellung einer Liste mit drei Elementen: dem Kleinbuchstaben, dem Großbuchstaben und der Eingabe. (
[GrG1z
) Anschließend filtern wir diese Liste nach der Anzahl der Erscheinungen der Eingabe in den Elementen, die ungleich Null sind. (/#z
) Schließlich nehmen wir das erste Element der gefilterten Liste.quelle
LabVIEW, 23 LabVIEW-Grundelemente
Der Selektor (das? In der cse-Struktur) ist mit einem vi verbunden, der als Lexical Class bezeichnet wird. Je nach Eingabe werden Zahlen von 1 bis 6 ausgegeben, 5 ist Kleinbuchstaben, 4 ist Großbuchstaben.
Die for-Schleife erstellt 26 Mal ein Alphabet oder gibt das Symbol einmal weiter.
quelle
Haskell, 48 Bytes
Anwendungsbeispiel:
Nehmen Sie alle Listen von ['a' .. 'z'], ['A' .. 'Z'] und die Singleton-Liste mit dem Eingabezeichen,
c
in demc
sich das Element von befindet. Für Buchstaben haben wir immer zwei Übereinstimmungen, also wählen wir die erste aus.quelle
JavaScript (ES6), 79 Byte
Erläuterung
JavaScript vergleicht den Code jedes Zeichens beim Vergleichen von Zeichenfolgen alphabetisch, sodass der Code der in den Vergleichen verwendeten Zeichen 1 unter und über dem erforderlichen Zeichenbereich liegt.
Prüfung
Code-Snippet anzeigen
quelle
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
ist sehr ungeeignet zum Golfen, aber manchmal ist es der einzige Weg!String.fromCharCode
und.toUpperCase
(Dumb and Dumber), abertoUpperCase
der Gewinnerx=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")
tut, ist aber ein Byte länger. Das Ändern[A-Z]
zu\w
funktioniert für alles außer_
. Ihre Lösung scheint die kürzeste zu sein.ABC...abc...?
ohne eine echtefor
Schleife zu generieren : (etwas Auffüllen)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R
9075 BytesVielen Dank an Giuseppe .
Alte Version (90 Bytes):
Sieht hässlich aus, aber diese
cat
können nicht an Funktionen ausgelagert werden, IMHO.quelle
scan
kann ein beliebiges Objekt vom Typ character sein, Sie können alsoletters
statt''
.Python 3,
92848274 BytesAktuelle Version: 74, dank isaacg und wnnmaw!
Ungolfed: (für eine Definition von ungolfed
Erste Version: 92
Zweite Version: 82, danke an isaacg! :)
quelle
lambda c:
) anstelle einer expliziten Definition (def f(c):print(
) verwenden und einige Bytes speichern. Außerdem brauchen Sie keinen Platz vor demfor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
. Vielen Dank!"
in die Funktion\"
stattdessen Folgendes benötigen .Python 3,
118105989783 BytesEinfache lösung. EDIT: Golfen dank des Vorschlags von Erik the Golfer.
Ungolfed:
quelle
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682BytesPHP geht es jetzt gut:
Nimmt eine Eingabe von der Kommandozeile, wie:
Bearbeitungen
91>ord($x)
mitZ<$x
. Nachdenklich zu kompliziert. Dank der Handarbeit .strtoupper
.quelle
ord()
sieht dort schlecht aus. Versuchen Sie esZ<$x?$a:strtoupper($a)
.' '&$x^A
, Groß- und Kleinschreibung a und z zu machen. Das heißt, Ihr Code wird<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Perl,
463433 Bytesbeinhaltet +2 für
-nE
Rennen wie
for
dank @Dom Hastings 12 Bytes durch Weglassen und Verwenden von Barewords .-E
undsay
anstelle vonprint
.quelle
for
: - /. Versuchte eine Reihe von Ansätzen, (-p
mit$"='';$_="@_"
, auch$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
aber alles ist länger ...$_=
anstattprint
die-p
Flagge zu setzen, und stattdessen die Flagge verwenden-n
, können Sie zwei weitere speichern ... Ich kann mir noch keine anderen Möglichkeiten vorstellen, um mehr zu sparen ...$_
auf eine Liste festlegen (die mir bekannt ist). Es müsste interpoliert werden ($_="@_"
), aber das verwendet Leerzeichen als Trennzeichen, also müsste ich es auch tun$"=''
(oder a verwendenjoin'',
), was es länger macht. Nicht viel Spielraum auf diesem!say
von bekommstprint
!Rubin, 41 + 1 = 42
Mit Schalter
-p
laufenDies erzeugt den String
und prüft jeden zusammenhängenden Block von "Wortzeichen", die zufällig nur aus Klein- und Großbuchstaben und dem Unterstrich bestehen. Wenn zwischen Z und a mehrere aufeinanderfolgende Wortzeichen stünden, würde dieser Trick nicht funktionieren.
Auf Anfrage zur Erläuterung bearbeitet:
Die
-p
Flagge tut im Wesentlichen[*?A..?z]
ist das Array von Zeichen zwischen Großbuchstaben A und Kleinbuchstaben Z in ASCII-Reihenfolge. Dies sind das Großbuchstaben-, einige Nichtbuchstaben- und das Kleinbuchstaben-Alphabet.*''
Fügt das Array zu einem String zusammen, damit wir es aufrufen.scan
können.scan
findet jede Übereinstimmung des regulären Ausdrucks/\w+/
, füllt die magische Variable$&
damit und ruft den Block auf. Bei jeder Iteration des Blocks wird geprüft, ob die übereinstimmende Zeichenfolge eine solche enthält,$_
und die Ausgabe wird in diesem Fall auf diese Zeichenfolge festgelegt. Wenn also $ _ entweder in Groß- oder Kleinbuchstaben enthalten ist, wird es entsprechend geändert, andernfalls bleibt es unverändert.Die ungolfed Version würde ungefähr so aussehen
quelle
CJam, 18 Bytes
'[,65>
drückt das Großbuchstaben-,_el
das Kleinbuchstaben- undr:R
eine einzelne Zeichenfolge, die aus STDIN gelesen und der Variablen zugewiesen wirdR
. Diese werden in ein Array (]
) eingeschlossen und das erste, mit dem Zeichen gemeinsam sind, wird mitR
ausgewählt{R&}=
.quelle
_el
das Kleinbuchstaben ist?el
bedeutet "in Kleinbuchstaben umwandeln". Ich habe gerade das Großbuchstaben gedrückt, also dupliziere ich es jetzt mit_
und rufe dannel
die resultierende Kopie auf.Netzhaut, 62 Bytes
Die beiden kurzen Zeilen sind der zu vergleichende reguläre Ausdruck. Wenn die Eingabe in Kleinbuchstaben (im Bereich
[a-z]
) erfolgt, wird dieses Zeichen (in diesem Fall die gesamte Eingabe) durch das Kleinbuchstabenalphabet ersetzt. Der Vorgang ist für Großbuchstaben ähnlich. Wenn es sich nicht um einen Brief handelt, werden keine Ersetzungen vorgenommen und der Brief wird unberührt ausgegeben.Probieren Sie es online aus.
quelle
Python 2.7.10,
959379 BytesIch versuche zum ersten Mal, Golf zu spielen. Bitte, jede Hilfe oder jeder Rat ist sehr willkommen!
Vielen Dank an Morgan Thrapp für die Hilfe!
quelle
False == 0
undTrue == 1
in Tupel indizieren. Es wird also zuerst geprüft, ob es sich um einen Buchstabenisalpha
handelt.1
Wenn dies der Fall ist, wird er zurückgegeben und anschließend überprüft, ob er in Kleinbuchstaben geschrieben ist.Ruby,
4643 Zeichen(42 Zeichen Code + 1 Zeichen Befehlszeilenoption)
Dank an:
===
Magie (-3 Zeichen)Probelauf:
quelle
MATL , 22 Bytes
Dies verwendet die aktuelle Version (3.1.0) der Sprache.
EDIT (15. September 2017): Probieren Sie es bei MATL Online! (mit einer neueren Version der Sprache).
Beispiele
Erläuterung
quelle
Java, 165 Zeichen
Erzeugt die erforderliche Ausgabe an stdout (anstatt sie zurückzugeben). Die Eingabe erfolgt über die Laufzeitargumente.
Wie es funktioniert.
1) Richten Sie einige ganzzahlige Variablen ein.
C = der ASCII-Wert des ersten Zeichens des ersten Parameters der Laufzeitargumente.
d = c in ASCII-Kleinbuchstaben umgewandelt (durch ODER-Verknüpfung mit 32)
b = Berechnung, um festzustellen , ob d ein Buchstabe ist. Wird bei einem Buchstaben <0 sein.
e = Das Startzeichen für die Ausgabe. Wenn der ASCII-Wert in d ein Buchstabe ist (siehe b), wird er auf 'A' gesetzt (oder 'a' durch Hinzufügen von c UND 32 zu 'A' ASCII-Wert), andernfalls wird er auf den ursprünglichen Wert von c gesetzt.
f = Anzahl der auszugebenden Zeichen. Wenn es sich nicht um einen Buchstaben handelt (siehe b), wird dieser auf 1 gesetzt, ansonsten auf 26.
2) Schleife von e nach e + f, wobei jedes Zeichen an stdout ausgegeben wird.
quelle
void f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}
.Perl, 23 Bytes
Beinhaltet +2, damit
-nE
(anstelle der normalen +1) die anderen Perl-Lösungen gerecht werdenFühren Sie mit der Eingabe auf STDIN ohne Zeilenumbruch aus:
Nur der Code:
quelle
Lua,
9897 BytesLeider habe ich keine Lösung gefunden, die kürzer als 26 Byte ist und
a
mit dem Alphabet festgelegt werden kann. Tatsächlich habe ich nicht weniger als 32 gefunden.Edit: spare 1 Byte dank @ATaco, habe diesen Fehler viel gemacht, als ich mit Lua: p angefangen habe
Sie können es online auf der offiziellen Website oder auf ideone testen . Wenn Sie die erstere verwenden, funktioniert die Eingabe nicht (deaktiviert). Verwenden Sie daher die folgende Quelle, in der sie in eine Funktion eingebunden ist.
quelle
c=io.read()a="abcdefghijklmnopqrstuvwyz"
anstelle von a, c = ...Mathematica, 75 Bytes
Ziemlich gute Punktzahl für eine nicht-golfende Sprache ... Alle Lösungen, die die Zeichencodeverarbeitung verwenden, würden aufgrund der Kosten von
ToCharacterCode
und mehr Bytes benötigenFromCharacterCode
.quelle
C (Funktion), 71 Bytes
quelle
f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}
Speichert ein Byte.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
für 62 BytesPython, 81 Bytes
Dies ist im Grunde eine Übersetzung der Pyth-Antwort. Es definiert eine Funktion
f
, die das Zeichen als Argument verwendet und das Ergebnis zurückgibt.quelle
if z in k
, richtig? Außerdemf=
ist optional standardmäßig.f=
, machen Sie die Funktion anonym. -2Jolf , 17 Bytes
Probieren Sie es hier aus.
quelle
MATLAB:
7168 Bytes(Danke an OP für das Speichern von 3 Bytes)
Prüfung:
Erläuterung: Großbuchstaben belegen
65:90
ASCII-Zeichen. Kleinbuchstaben sind in97:122
ASCII geschrieben. Prüft also,b=i<65|i>122|(i>90&i<97)
ob das eingegebene Zeicheni
NICHT alphabetisch ist. In diesem Fall wird die Eingabe zurückgegeben. Das Großbuchstaben wird zurückgegeben, wennb==1
undi<97
(Großbuchstaben). Wennb==1
undi>96
, wird 32 hinzugefügt65:90
, was97:122
- dem Kleinbuchstaben entspricht.quelle
i=input('')
wenn es sich bei der Übermittlung um ein Skript handelt, oder als Funktionsargument, wenn es sich um eine Funktion handelt@(i)i^2
.i='a'
wird generell nicht akzeptiert. Sie können[1,2,3,'']
stattdessen auch 3 Bytes einsparenchar([1,2,3])
.SpecBAS, 111 Bytes
Ich habe mehrere Versionen davon durchlaufen, 111 scheint das Beste zu sein, was ich schaffen kann.
Zeile 2 verwendet die
?
Verknüpfung fürPRINT
und verschachtelte Inline-IF
AnweisungenErklärung des Pseudocodes
quelle
["a" TO "z","A" TO "Z"]
einen Pseudocode so aussehen zu lassen , wie er es bereits tut."a".."z","A".."Z"
sieht zumindest in meinen Augen eher wie ein "echter Code" aus ... Beide sind jedoch sehr leicht zu verstehen =)Swift 2, 142 Bytes
Ungolfed
quelle
05AB1E ,
1916 Bytes-3 Bytes dank
else
Wie es funktioniert
Probieren Sie es online!
quelle
¹
(erste Eingabe) bereits vorhanden war, als Sie Ihre Antwort gepostet haben, aber Sie können 2 Bytes damit spielen:A¹åiAëAu¹åiAuë
( Probieren Sie es online oder in einer Testsuite aus ).Java SE 8,
7169 BytesGolf gespielt:
Ungolfed:
Ich hatte ursprünglich folgendes implementiert
Es ist eleganter, aber leider ein Byte größer. Dies setzt voraus, dass das Verhalten für Nicht-Alpha-Zeichen undefiniert ist und der String "" vor der Ausführung auf "" initialisiert wird. Sei vorsichtig, es ist mein erster Beitrag.
edit: 2 Bytes durch Ändern von Stewie Griffin gespeichert
quelle
a<91
sollte funktionieren, oder ...?Scala, 91 Zeichen
Nicht golfen
Wenn ich ein anfängliches veränderliches Ergebnis habe, anstatt einen unveränderlichen Wert aus 3 verschiedenen Blöcken zurückzugeben, habe ich 2 Zeichen gespart, obwohl ich es hasse.
Scala-Thonic-Methode
Eine bessere Methode für Scala wäre etwa so:
quelle
Japt, 9 Bytes
Führen Sie es online aus
quelle