Geben Sie das Alphabet, das ALPHABET oder nur ein Zeichen aus


49

Die Herausforderung ist einfach:

Schreiben Sie eine Funktion oder ein Programm, das eine Eingabe annimmt xund das Kleinbuchstaben-Alphabet ausgibt, wenn xes Teil des Kleinbuchstaben-Alphabets ist, das Großbuchstaben-Alphabet ausgibt, wenn xes Teil des Großbuchstaben-Alphabets ist, und nur ausgibt, xwenn 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 aoder A.
  • 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 Nist 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


Dürfen wir Pakete wie zum Beispiel in Python importieren: import Randomund dann verwenden Random.randint(natürlich nicht für diese Herausforderung, aber trotzdem)?
Daniel

Ja, Sie können Pakete importieren. Zum Beispiel import stringwerden 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.
Stewie Griffin

Ich gehe davon aus, dass mit "Anführungszeichen sind gültige Eingaben und müssen unterstützt werden" gemeint ist, dass wenn Ihre Eingabemethode Anführungszeichen erfordert, Anführungszeichen als Eingabe
ausgeblendet

Dürfen wir eine REPL-Umgebung annehmen?
Katze

Antworten:


22

TeaScript , 5 Bytes

xN(0)

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

N0

1 Byte Alternative

Wenn wir 0123456789für Ziffern ausgeben könnten , könnte dies sein:

°

TeaScript 3 ist gültig. Sie können es also benutzen!
User75200

27

Pyth, 10 Bytes

h/#z[GrG1z

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.


6
Im Ernst, gibt es etwas, das Sie mit ein paar Bytes Pyth nicht lösen können? Ich muss wirklich diese Sprache lernen ..
Hexaholic

25
Welche Sprache lernen? ... Sie haben zwei mit Namen erwähnt. : P
Quintopia

2
@quintopia Nun, warum nicht beide? :)
Hexaholic

15

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.


4
Als jemand, der vor vielen Jahren das Privileg hatte, in LabVIEW zu arbeiten, bringen Ihre Antworten ein Lächeln in meinen Alltag. =)
corsiKa

12

Haskell, 48 Bytes

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

Anwendungsbeispiel:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

Nehmen Sie alle Listen von ['a' .. 'z'], ['A' .. 'Z'] und die Singleton-Liste mit dem Eingabezeichen, cin dem csich das Element von befindet. Für Buchstaben haben wir immer zwei Übereinstimmungen, also wählen wir die erste aus.


11

JavaScript (ES6), 79 Byte

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

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.

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

Prüfung


Ist das eigentlich der kürzeste Weg, eine Zeichenkette mit dem gesamten Alphabet in Javascript zu erzeugen? Wenn Sie den gesamten druckbaren ASCII-Bereich benötigen, müssen Sie dann jedes einzelne Zeichen eingeben?
Stewie Griffin

1
@ StewieGriffin Leider ist es. Der einzige andere Weg wäre so etwas wie: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodeist sehr ungeeignet zum Golfen, aber manchmal ist es der einzige Weg!
User81655

4
In diesem Fall ist der Kontostand zwischen String.fromCharCodeund .toUpperCase(Dumb and Dumber), aber toUpperCaseder Gewinner
edc65

Nett! Ich habe ein paar verschiedene Möglichkeiten ausprobiert, aber keine gefunden, die funktioniert. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")tut, ist aber ein Byte länger. Das Ändern [A-Z]zu \wfunktioniert für alles außer _. Ihre Lösung scheint die kürzeste zu sein.
ETHproductions

Hier ist eine der kürzesten Möglichkeiten, ABC...abc...?ohne eine echte forSchleife zu generieren : (etwas Auffüllen)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
ETHproductions

8

R 90 75 Bytes

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

Vielen Dank an Giuseppe .

Alte Version (90 Bytes):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

Sieht hässlich aus, aber diese catkönnen nicht an Funktionen ausgelagert werden, IMHO.



73 Bytes : Der 2. Parameter von scankann ein beliebiges Objekt vom Typ character sein, Sie können also lettersstatt ''.
Robin Ryder

7

Python 3, 92 84 82 74 Bytes

Aktuelle Version: 74, dank isaacg und wnnmaw!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed: (für eine Definition von ungolfed

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

Erste Version: 92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

Zweite Version: 82, danke an isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c

Hallo und willkommen bei PPCG! Gute Antwort. Hier ist ein Golf-Vorschlag: Sie können einen Lambda-Ausdruck ( lambda c:) anstelle einer expliziten Definition ( def f(c):print() verwenden und einige Bytes speichern. Außerdem brauchen Sie keinen Platz vor dem for.
isaacg

Ah, ich ging davon aus, dass "Ausgabe" "Drucken" bedeutet und nicht nur "Zurück" lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Vielen Dank!
Koneke

Ja, die Standarddefinition der Ausgabe auf der Site ermöglicht die Rückkehr von Funktionen, sodass Sie die neue Version in Ihre Antwort einfügen können. Ein weiterer Vorteil ist, dass die Klammern nicht erforderlich sind - die Funktion funktioniert ohne sie genauso, als Generatorverständnis anstelle eines Listenverständnisses.
isaacg

Ah, ich habe noch nie ein Generatorverständnis benutzt, um neue Dinge zu lernen!
Nochmals vielen

Beachten Sie, dass Sie beim Eingeben "in die Funktion \"stattdessen Folgendes benötigen .
Daniel

6

Python 3, 118 105 98 97 83 Bytes

Einfache lösung. EDIT: Golfen dank des Vorschlags von Erik the Golfer.

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

Ungolfed:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

1
Könnten Sie einen ternären Operator verwenden, um ein paar Bytes zu sparen? So etwas wie return a.lower() if s.islower() else a.
David Robertson

@DavidRobertson Ich bin mir nicht sicher, ob Sie meine Lösung, also die oberste Codezeile, richtig lesen, aber genau das mache ich.
Sherlock9

Ah! Ich habe die ungolfed version gelesen. Das tut mir leid!
David Robertson

@ DavidRobertson Kein Problem
Sherlock9

Golfen:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik der Outgolfer

5

PHP, 62 76 82 Bytes

PHP geht es jetzt gut:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

Nimmt eine Eingabe von der Kommandozeile, wie:

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

Bearbeitungen

  • Gespeicherte 6 Bytes durch den Austausch 91>ord($x)mit Z<$x. Nachdenklich zu kompliziert. Dank der Handarbeit .
  • Durch direktes Entfernen und Erstellen des erforderlichen Bereichs wurden 14 Byte eingespart strtoupper.

Das ord()sieht dort schlecht aus. Versuchen Sie es Z<$x?$a:strtoupper($a).
Handarbeit

@manatwork Haha, ich habe viel zu kompliziert in diesem zweiten Teil gedacht. Dank es darauf hinzuweisen.
insertusernamehere

Versuchen Sie ' '&$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;
Ismael Miguel

@IsmaelMiguel Dies hat genau die gleiche Byteanzahl.
insertusernamehere

1
Mach dir keine Sorgen - und es ist immer noch ein guter Weg, um zu verschleiern. ;)
insertusernamehere

5

Perl, 46 34 33 Bytes

beinhaltet +2 für -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

Rennen wie

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • update 34 spart fordank @Dom Hastings 12 Bytes durch Weglassen und Verwenden von Barewords .
  • Update 33 1 Byte speichern mit -Eund sayanstelle von print.

@DomHastings Danke! Hätte wissen sollen, dass dort Barewörter erlaubt waren - und ich hätte das sehen sollen for: - /. Versuchte eine Reihe von Ansätzen, ( -pmit $"='';$_="@_", auch $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'aber alles ist länger ...
Kenney

Denken Sie darüber nach, wenn Sie setzen, $_=anstatt printdie -pFlagge 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 ...
Dom Hastings

@DomHastings Ich habe das versucht, kann mich aber nicht $_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 verwenden join'',), was es länger macht. Nicht viel Spielraum auf diesem!
Kenney

Na klar! Du hast sogar gesagt, dass ich (wenn ich den Kommentar noch einmal lese, nachdem ich nicht in der Kneipe war ...) weiter darüber nachdenke, aber du bist vielleicht der kürzeste, den du ohne Verwendung sayvon bekommst print!
Dom Hastings

5

Rubin, 41 + 1 = 42

Mit Schalter -plaufen

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

Dies erzeugt den String

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

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 -pFlagge tut im Wesentlichen

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?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 .scankönnen. scanfindet 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

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end

Kannst du eine nicht golfene Version posten? Ich verstehe immer noch nicht ganz, wie das funktioniert.
Shelvacu

Klar, einen gepostet.
Histokrat

4

CJam, 18 Bytes

'[,65>_elr:R]{R&}=

'[,65>drückt das Großbuchstaben-, _eldas Kleinbuchstaben- und r:Reine einzelne Zeichenfolge, die aus STDIN gelesen und der Variablen zugewiesen wird R. Diese werden in ein Array ( ]) eingeschlossen und das erste, mit dem Zeichen gemeinsam sind, wird mit Rausgewählt {R&}=.


Ich versuche zu verstehen, wie man CJam macht, aber ich verstehe mich zwischen dem offiziellen Dokument und dem, was ich hier lese. Kann mir jemand zum Beispiel eine Seite geben, wo ich verstehen kann, warum _eldas Kleinbuchstaben ist?
Erdal G.

Ah, elbedeutet "in Kleinbuchstaben umwandeln". Ich habe gerade das Großbuchstaben gedrückt, also dupliziere ich es jetzt mit _und rufe dann eldie resultierende Kopie auf.
Lynn

1
Ich habe ein nettes PDF mit (fast) allen CJam-Befehlen erstellt.
Lynn

4

Netzhaut, 62 Bytes

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

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.


4

Python 2.7.10, 95 93 79 Bytes

Ich versuche zum ersten Mal, Golf zu spielen. Bitte, jede Hilfe oder jeder Rat ist sehr willkommen!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

Vielen Dank an Morgan Thrapp für die Hilfe!


1
@MorganThrapp, das scheint nicht zu funktionieren. Sind Sie sicher, dass es in Python 2.7.10 funktioniert?
Daniel

Es funktioniert in 2.7.8. Was geht nicht
Morgan Thrapp

@MorganThrapp, könntest du bitte zuerst genau erklären, wie das funktioniert? Vielleicht verstehe ich es einfach nicht und mache etwas falsch.
Daniel

Sicher, es nutzt die Tatsache, dass False == 0und True == 1in Tupel indizieren. Es wird also zuerst geprüft, ob es sich um einen Buchstaben isalphahandelt. 1Wenn dies der Fall ist, wird er zurückgegeben und anschließend überprüft, ob er in Kleinbuchstaben geschrieben ist.
Morgan Thrapp

1
Kein Problem! Ich liebe Golf und freue mich immer, jemandem zu helfen, der neu ist!
Morgan Thrapp

4

Ruby, 46 43 Zeichen

(42 Zeichen Code + 1 Zeichen Befehlszeilenoption)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

Dank an:

Probelauf:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@

4

MATL , 22 Bytes

jtt1Y2XIm~Iw?km?Ik]]1$

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

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

Erläuterung

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing

3

Java, 165 Zeichen

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

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.


2
Sie wissen, dass die Lösung für die meisten Herausforderungen entweder als komplettes Programm oder als Funktion angeboten werden kann? Angesichts der enormen Menge an Boilerplate-Code in Java kann eine Funktion kürzer sein.
Manatwork

1
Anwenden von ein paar kleinen Tricks, ohne die Logik zu ändern, habe ich dies: 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++);}.
manatwork

3

Perl, 23 Bytes

Beinhaltet +2, damit -nE(anstelle der normalen +1) die anderen Perl-Lösungen gerecht werden

Führen Sie mit der Eingabe auf STDIN ohne Zeilenumbruch aus:

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

Nur der Code:

say/\pL/?a&$_|A..Z:$_

Gute Verwendung der Tatsache, dass die Eingabe auf 7-Bit-Zeichen beschränkt ist.
msh210

3

Lua, 98 97 Bytes

Leider habe ich keine Lösung gefunden, die kürzer als 26 Byte ist und amit 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

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

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.

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))

Sie sind nicht der einzige, der keinen kürzeren Weg gefunden hat , um das Alphabet in Lua zu generieren. :(
Handarbeit

@manatwork haha, genau das gleiche, außer dass ich es nicht drucken musste, sondern verketten musste ^^. Zumindest bedeutet das, dass es keinen versteckten Trick gibt, von dem ich nicht wusste, dass ich ihn machen soll ^^ '.
Katenkyo

Sie können ein Byte mit c=io.read()a="abcdefghijklmnopqrstuvwyz"anstelle von a, c = ...
ATaco 29.09.16

2

Mathematica, 75 Bytes

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

Ziemlich gute Punktzahl für eine nicht-golfende Sprache ... Alle Lösungen, die die Zeichencodeverarbeitung verwenden, würden aufgrund der Kosten von ToCharacterCodeund mehr Bytes benötigen FromCharacterCode.


2

C (Funktion), 71 Bytes

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}

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.
Kenney

1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}für 62 Bytes
Gastropner

2

Python, 81 Bytes

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

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.


1
Du meinst if z in k, richtig? Außerdem f=ist optional standardmäßig.
Donnerstag,

@xnor Ja. Anscheinend habe ich ein Ctrl-C verpasst.
PurkkaKoodari

2
Entfernen Sie f=, machen Sie die Funktion anonym. -2
Erik der Outgolfer

2

Jolf , 17 Bytes

Probieren Sie es hier aus.

? hpLipl? hpUipui
?                  if
  hpL               the lowercase alphabet (array) contains
     i               the input
      pl            return the lowercase alphabet (string)
        ?          else if
          hpU       the uppercase alphabet (array) contains
             i       the input
              pu    return the uppercase alphabet (string)
                i  otherwise, return the input
                   implicit: print the result

2

MATLAB: 71 68 Bytes

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(Danke an OP für das Speichern von 3 Bytes)

Prüfung:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Erläuterung: Großbuchstaben belegen 65:90ASCII-Zeichen. Kleinbuchstaben sind in 97:122ASCII geschrieben. Prüft also, b=i<65|i>122|(i>90&i<97)ob das eingegebene Zeichen iNICHT alphabetisch ist. In diesem Fall wird die Eingabe zurückgegeben. Das Großbuchstaben wird zurückgegeben, wenn b==1und i<97(Großbuchstaben). Wenn b==1und i>96, wird 32 hinzugefügt 65:90, was 97:122- dem Kleinbuchstaben entspricht.


Nizza Vorlage. Zwei Kommentare: Es ist üblich, entweder zu verwenden, 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 einsparen char([1,2,3]).
Stewie Griffin

Ok, bearbeitet. Danke für den Vorschlag!
Brainkz

2

SpecBAS, 111 Bytes

Ich habe mehrere Versionen davon durchlaufen, 111 scheint das Beste zu sein, was ich schaffen kann.

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

Zeile 2 verwendet die ?Verknüpfung für PRINTund verschachtelte Inline- IFAnweisungen

Erklärung des Pseudocodes

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF

Es ist schwer, ["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 =)
Stewie Griffin

2
Spec was ????
Bassdrop Cumberwubwubwub

2

Swift 2, 142 Bytes

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

Ungolfed

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}

2

05AB1E , 19 16 Bytes

-3 Bytes dank else

DAsåiAëDAusåiAuë

Wie es funktioniert

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

Probieren Sie es online!


Ich bin mir nicht sicher, ob ¹(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 ).
Kevin Cruijssen

2

Java SE 8, 71 69 Bytes

Golf gespielt:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

Ungolfed:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

Ich hatte ursprünglich folgendes implementiert

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

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

a - 91 < 0 to a < 91

2
Willkommen auf der Seite! :)
DJMcMayhem

1
Vielen Dank! Ich lauere jetzt seit ein paar Jahren und bin sehr interessiert zu sehen, ob ich konkurrierende Java / C ++ Antworten machen kann :)
jfh

1
a<91sollte funktionieren, oder ...?
Stewie Griffin

2

Scala, 91 Zeichen

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

Nicht golfen

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

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:

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}

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.