Wypisz alfabet, alfabet lub tylko znak

49

Wyzwanie jest proste:

Napisz funkcję lub program, który pobiera dane wejściowe xi wypisuje małe litery alfabetu, jeśli xjest częścią alfabetu małych liter, wypisuje alfabet wielkich liter, jeśli xjest częścią alfabetu wielkich liter, i wypisuje tylko, xjeśli nie jest częścią żadnego z nich.

Zasady:

  • Dane wejściowe mogą być argumentem funkcji lub z STDIN
  • Wejściowy będzie dowolny z drukowalnych znaków ASCII od 32 do 126 (spacja do tyldy).
  • Dane wejściowe mogą znajdować się w cudzysłowie 'x'lub "x", ale pamiętaj o tym 'i "są poprawnymi danymi wejściowymi i powinny być obsługiwane.
  • Dane wejściowe mogą być dowolnymi literami alfabetu, tzn. Nie możesz założyć, że będzie to alub A.
  • Wynik powinien być tylko jednym z alfabetów lub pojedynczego symbolu, ale końcowe znaki nowej linii są w porządku.
  • Litery alfabetu nie powinny być oddzielane spacjami, przecinkami ani niczym innym.

Kilka przykładów:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

Najkrótszy kod w bajtach wygrywa.


Opcjonalne, ale mile widziane: Jeśli Twój język ma tłumacza online, opublikuj również link, aby inni mogli go łatwo przetestować.


Tabela liderów

Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

## Perl, 43 + 2 (-p flag) = 45 bytes

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

Stewie Griffin
źródło
Czy możemy importować pakiety takie jak na przykład w Pythonie: import Randoma następnie używać Random.randint(oczywiście nie dla tego wyzwania, ale nadal)?
Daniel
Tak, możesz importować paczki. ale bajty do zapisu są na przykład import stringliczone, dlatego często lepiej jest obejść ten problem. Pamiętaj, że pakiet musi istnieć przed wysłaniem wyzwania. Wiele wyzwań ma coś takiego: „Używanie pakietów, które to robi, jest niedozwolone”, ale nie jest tak w przypadku tego wyzwania.
Stewie Griffin,
Zakładam, że przez „cudzysłowy są poprawnymi danymi wejściowymi i muszą być obsługiwane” masz na myśli to, że jeśli twoja metoda wprowadzania wymaga cudzysłowów, wówczas cytaty jako dane wejściowe zostaną
usunięte
Czy możemy założyć środowisko REPL?
kot

Odpowiedzi:

22

TeaScript , 5 bajtów

xN(0)

TeaScript ma (prawie) wbudowaną funkcję: D

Wypróbuj online (uwaga: interpreter online został zaktualizowany do wersji TeaScript v3, więc w tej wersji N0)

Wypróbuj wszystkie przypadki testowe


TeaScript 3 , 2 bajty [niekonkurencyjny]

W przypadku TeaScript 3 może to być 2 bajty. Jest to niekonkurencyjne, ponieważ TeaScript 3 powstał po tym wyzwaniu

N0

1 bajtowa alternatywa

Jeśli moglibyśmy wyprowadzać 0123456789cyfry, to mogłoby to być:

°
Downgoat
źródło
TeaScript 3 jest prawidłowy. Więc możesz go użyć!
user75200
27

Pyth, 10 bajtów

h/#z[GrG1z

Zestaw testowy

Zaczynamy od zbudowania listy zawierającej 3 elementy: małe litery, wielkie litery i dane wejściowe. ( [GrG1z) Następnie filtrujemy tę listę według liczby wystąpień danych wejściowych w elementach niezerowych. ( /#z) Na koniec bierzemy pierwszy element filtrowanej listy.

isaacg
źródło
6
Poważnie, czy jest coś, czego nie można rozwiązać kilkoma bajtami Pytha? Naprawdę muszę nauczyć się tego języka ..
Heksaholic
25
Uczysz się, który język? ... wymieniłeś dwa z imienia. : P
kwintopia,
2
@quintopia Cóż, dlaczego nie jedno i drugie? :)
Heksaholic
15

LabVIEW, 23 Prymitywy LabVIEW

Selektor (? W strukturze cse) jest podłączony do vi, który nazywa się Klasa leksykalna. Wypisuje liczby od 1-6 w zależności od danych wejściowych, 5 to małe litery 4 to duże litery.

Pętla for idzie 26 razy, aby utworzyć alfabet lub raz, aby przekazać symbol.

Eumel
źródło
4
Jako ktoś, kto miał (przywilej? Nieszczęście? Ty decydujesz) pracę w LabVIEW wiele lat temu, twoje odpowiedzi wywołują uśmiech na mój dzień. =)
corsiKa
12

Haskell, 48 bajtów

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

Przykład użycia:

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

Weź wszystkie listy ['a' .. 'z'], ['A' .. 'Z'] oraz listę singletonów z charakterem wejściowym cgdzie celement jest. W przypadku liter zawsze mamy dwa dopasowania, więc wybieramy pierwszy.

nimi
źródło
11

JavaScript (ES6), 79 bajtów

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

Wyjaśnienie

JavaScript porównuje kod każdego znaku alfabetycznie podczas porównywania ciągów, więc kody znaków używanych w porównaniach znajdują się 1 poniżej i powyżej wymaganego zakresu znaków.

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
)

Test

użytkownik 81655
źródło
Czy to w rzeczywistości najkrótszy sposób na utworzenie ciągu z całym alfabetem w Javascript? Jeśli chciałbyś mieć cały zakres ASCII do wydrukowania, czy musiałbyś wpisać każdy pojedynczy znak?
Stewie Griffin,
1
@StewieGriffin Niestety tak jest. Jedynym innym sposobem byłoby coś takiego: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodejest bardzo nieodpowiednia do gry w golfa, ale czasami jest to jedyny sposób!
user81655,
4
W tym przypadku saldo jest pomiędzy String.fromCharCodei .toUpperCase(Głupi i Głupszy), ale toUpperCasewygrywa
edc65
Miły! Wypróbowałem kilka różnych sposobów gry w golfa, ale nie znalazłem takiego, który działa. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")robi, ale jest o jeden bajt dłużej. Zmiana [A-Z]do \wprac na wszystko z wyjątkiem _. Twoje rozwiązanie wydaje się być możliwie najkrótsze.
ETHproductions
Oto jeden z najkrótszych sposobów generowania ABC...abc...?bez prawdziwej forpętli: (trochę [for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
paddingu
8

R, 90 75 bajtów

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

Dzięki Giuseppe .

Stara wersja (90 bajtów):

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

Wygląda brzydko, ale catnie można ich zlecić na zewnątrz, IMHO.

Andreï Kostyrka
źródło
75 bajtów
Giuseppe,
73 bajty : drugim parametrem scanmoże być dowolny obiekt typu znak, więc możesz letterszamiast ''.
Robin Ryder
7

Python 3, 92 84 82 74 bajty

Aktualna wersja: 74, dzięki isaacg i wnnmaw!

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

Niegolfowany: (dla pewnej definicji niegolfowanego

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

Pierwsza wersja: 92

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

Druga wersja: 82, dzięki isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c
Koneke
źródło
Cześć, witamy w PPCG! Niezła odpowiedź. Oto sugestia gry w golfa: Możesz użyć wyrażenia lambda ( lambda c:) zamiast jawnej definicji ( def f(c):print() i zaoszczędzić trochę bajtów. Ponadto nie potrzebujesz miejsca przed for.
isaacg
Ach, zakłada „wydajność” oznacza drukiem, a nie po prostu wrócić :) Neat, jeśli o to chodzi to w dół do 84, lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c. Dzięki!
Koneke
Tak, standardowa definicja danych wyjściowych w witrynie umożliwia powrót z funkcji, dzięki czemu możesz edytować nową wersję w odpowiedzi. Innym golfem jest to, że nawiasy klamrowe nie są konieczne - funkcja działa bez nich dokładnie tak samo, jak rozumienie generatora zamiast rozumienia listy.
isaacg,
Ach, nigdy wcześniej nie korzystałem ze zrozumień generatora, ucząc się nowych rzeczy!
Jeszcze
Zauważ, że podczas wprowadzania "do funkcji potrzebujesz \"zamiast tego.
Daniel
6

Python 3, 118 105 98 97 83 bajtów

Proste rozwiązanie. EDYCJA: Grał w golfa dzięki sugestii Erika Golfer.

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

Nie golfowany:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s
Sherlock9
źródło
1
Czy możesz użyć operatora trójskładnikowego, aby zaoszczędzić kilka bajtów? Coś jak return a.lower() if s.islower() else a.
David Robertson,
@DavidRobertson Nie jestem pewien, czy poprawnie czytasz moje rozwiązanie, które jest górną linią kodu, ale właśnie to robię.
Sherlock9,
Ach! Czytałem wersję bez golfa. Przepraszam za to!
David Robertson,
@DavidRobertson Nie ma problemu
Sherlock9
Grał w golfa:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
Erik the Outgolfer
5

PHP, 62 76 82 bajtów

PHP ma się teraz dobrze:

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

Pobiera dane z wiersza poleceń, takie jak:

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

Edycje

  • Zaoszczędzono 6 bajtów , zastępując 91>ord($x)je Z<$x. Sposób na skomplikowane. Dzięki manatwork .
  • Oszczędność 14 bajtów poprzez bezpośrednie usunięcie strtoupperi zbudowanie żądanego zakresu.
wstawić nazwę tutaj
źródło
Tam ord()źle to wygląda. Spróbować Z<$x?$a:strtoupper($a).
manatwork
@manatwork Haha, pomyślałem o skomplikowaniu tej drugiej części. Dzięki, aby to podkreślić.
inserttusernamehere
Spróbuj ' '&$x^Azrobić wielkie i małe litery ai z. Oznacza to, że kod staje się<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
Ismael Miguel
@IsmaelMiguel Będzie miał dokładnie taką samą liczbę bajtów.
inserttusernamehere
1
Nie martw się - i wciąż jest to dobry sposób na zaciemnienie. ;)
inserttusernamehere
5

Perl, 46 34 33 bajtów

zawiera +2 dla -nE

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

Uruchom jako

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

  • aktualizacja 34 zapisz 12 bajtów, pomijając fori używając słów kluczowych, dzięki @Dom Hastings .
  • aktualizacja 33 zapisz 1 bajt używając -Ei sayzamiast print.
Kenney
źródło
@DomHastings Thanks! Powinienem był wiedzieć, że dozwolone są tam słowa kluczowe - i powinienem był to zobaczyć for: - /. Próbowaliśmy kilka podejść, ( -pz $"='';$_="@_", nawet $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_', ale wszystko jest już ...
Kenney
Zastanowiłem się nad tym, jeśli ustawisz $_=zamiast printing i użyjesz -pflagi zamiast tego -n, możesz uratować kolejne dwa ... Nadal nie mogę wymyślić żadnych innych sposobów na zaoszczędzenie do tej pory ...
Dom Hastings
@DomHastings Próbowałem tego, ale nie mogę ustawić $_listy (o której wiem). Musiałby być interpolowany ( $_="@_"), ale wykorzystuje spację jako separator, więc musiałbym to zrobić $"=''(lub użyć a join'',), co wydłuża go. Nie ma tu zbyt wiele miejsca na poruszanie się!
Kenney,
Hah, oczywiście! Powiedziałeś nawet, że (kiedy ponownie przeczytam komentarz po nieobecności w pubie ...) zastanowię się nad tym, ale możesz być najkrótszy, jaki dostaniesz bez użycia sayzamiast print!
Dom Hastings,
5

Rubin, 41 + 1 = 42

Z włącznikiem -puruchom

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

To generuje ciąg

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

i sprawdza każdy ciągły blok „znaków słownych”, którym są tylko małe i wielkie litery oraz znak podkreślenia. Gdyby między Z a a znajdowało się wiele następujących po sobie znaków, ta sztuczka nie działałaby.

Edytowane w celu dodania wyjaśnienia na żądanie:

-pFlaga ma zasadniczo

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

[*?A..?z]to tablica znaków między dużymi literami A i małymi literami Z, w kolejności ASCII. To jest wielkie litery, niektóre znaki nieliterowe i małe litery. *''łączy tablicę w ciąg, abyśmy mogli ją wywołać .scan. scanznajdzie każde dopasowanie wyrażenia regularnego /\w+/, wypełni zmienną magiczną$& i blok. Za każdym razem, gdy blok jest iterowany, sprawdza, czy dopasowany ciąg zawiera $_i ustawia wynik dla tego ciągu, jeśli tak jest. Więc jeśli $ _ jest zawarty w wielkiej lub małej litery, zostanie odpowiednio zmodyfikowany, w przeciwnym razie pozostanie niezmieniony.

Wersja bez golfa wyglądałaby podobnie

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end
histocrat
źródło
Czy możesz opublikować wersję bez gry w golfa? Nadal nie rozumiem w pełni, jak to działa.
Shelvacu
Jasne, wysłałem jeden.
histocrat
4

CJam, 18 bajtów

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

'[,65>wypycha wielkie litery, _elmałe litery i r:Rciągi jednoznakowe, które są odczytywane ze STDIN i przypisywane do zmiennej R. Są one zawinięte w tablicę ( ]) i Rwybierany jest pierwszy, który ma dowolne znaki wspólne z {R&}=.

Lynn
źródło
Próbuję zrozumieć, jak CJam, ale zagubiłem się między oficjalnym dokumentem a tym, co tutaj czytam. Czy ktoś może mi na przykład podać stronę, na której mogę zrozumieć, dlaczego jest _elto małe litery?
Erdal G.,
Ach, eloznacza „przekonwertuj na małe litery”. Właśnie wypchnąłem alfabet, więc teraz powielam go _, a następnie wywołuję elwynikową kopię.
Lynn
1
Zrobiłem ładny plik pdf zawierający (prawie) wszystkie polecenia CJam.
Lynn
4

Siatkówka, 62 bajty

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

Dwie krótkie linie są wyrażeniem regularnym do dopasowania. Jeśli dane wejściowe są pisane małymi literami (w zakresie [a-z]), zastępują ten znak (w tym przypadku jest to cały wpis) alfabetem małych liter. Proces jest podobny dla wielkich liter. Jeśli nie jest to litera, nie są dokonywane żadne zamiany i jest ona wyprowadzana nietknięta.

Wypróbuj online.

NinjaBearMonkey
źródło
4

Python 2.7.10, 95 93 79 bajtów

To jest mój pierwszy raz nawet próba gry w golfa, więc proszę, każda pomoc lub rada są bardzo mile widziane!

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

Dzięki Morgan Thrapp za pomoc!

Daniel
źródło
1
@MorganThrapp, to nie wydaje się działać. Czy na pewno działa w Pythonie 2.7.10?
Daniel
Działa w wersji 2.7.8. Co nie działa?
Morgan Thrapp,
@MorganThrapp, czy mógłbyś najpierw wyjaśnić dokładnie, jak to działa? Może po prostu nie rozumiem, więc robię coś złego.
Daniel
Jasne, wykorzystuje to False == 0i True == 1do indeksowania w krotki. Najpierw sprawdza, czy jest to litera isalpha, a jeśli tak, zwraca, 1a następnie sprawdza, czy ma małe litery i robi to samo.
Morgan Thrapp,
1
Nie ma problemu! Uwielbiam grać w golfa, więc zawsze chętnie pomogę komuś nowemu!
Morgan Thrapp,
4

Ruby, 46 43 znaków

(Kod 42 znaków + opcja wiersza poleceń 1 znak)

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

Dzięki:

  • Jordan dla ===magii (-3 postacie)

Przykładowy przebieg:

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]*""}'
@
człowiek w pracy
źródło
4

MATL , 22 bajty

jtt1Y2XIm~Iw?km?Ik]]1$

Używa bieżącej wersji (3.1.0) języka.

EDYCJA (15 września 2017 r.): Wypróbuj w MATL Online! (z nowszą wersją języka).

Przykłady

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

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

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

Wyjaśnienie

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
Luis Mendo
źródło
3

Java, 165 znaków

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

Generuje wymagane wyjście na standardowe wyjście (zamiast go zwracać). Dane wejściowe pochodzą z argumentów środowiska wykonawczego.

Jak to działa.

1) Ustaw niektóre zmienne całkowite
c = wartość ASCII pierwszego znaku pierwszego parametru argumentów środowiska wykonawczego.
d = c konwertowane na małą wartość ASCII (przez ORing jej 32)
b = obliczenie, aby zobaczyć, czy d jest literą. Wyniesie <0, jeśli litera.
e = znak początkowy wyjścia. Jeśli wartość ASCII w d jest literą (patrz b), wówczas jest ona ustawiana na „A” (lub „a” poprzez dodanie c AND 32 do wartości ASCII „A”), w przeciwnym razie jest ustawiona na pierwotną wartość c.
f = liczba znaków do wydrukowania. Jeśli nie jest to litera (patrz b), to jest ustawiona na 1, w przeciwnym razie jest ustawiona na 26
2) Pętla od e do e + f wypisuje każdy znak na standardowe wyjście.

Minimalny
źródło
2
Czy wiesz, że w przypadku większości wyzwań rozwiązanie może być dostarczone jako kompletny program lub funkcja? Biorąc pod uwagę ogromną liczbę kodu typu „kocioł” w Javie, funkcja może być krótsza.
manatwork
1
Stosując kilka małych sztuczek, bez zmiany logiki, mam to: 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 bajty

Obejmuje +2, aby -nE(zamiast normalnego +1) było sprawiedliwe w stosunku do innego rozwiązania perla

Uruchom z danymi wejściowymi na STDIN bez końcowego znaku nowej linii:

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

Tylko kod:

say/\pL/?a&$_|A..Z:$_
Ton Hospel
źródło
Fajne wykorzystanie faktu, że dane wejściowe są ograniczone do znaków 7-bitowych.
msh210,
3

Lua, 98 97 bajtów

Niestety nie znalazłem rozwiązania o długości mniejszej niż 26 bajtów do ustawienia az alfabetem. W rzeczywistości nie znalazłem mniej niż 32.

Edycja: zapisz 1 bajt dzięki @ATaco, często robił ten błąd, gdy zaczynałem od Lua: p

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

Możesz to przetestować online na oficjalnej stronie lub na ideone . Jeśli użyjesz tego pierwszego, dane wejściowe nie będą działać (wyłączone), więc skorzystaj z następującego źródła, w którym jest ono umieszczone w funkcji.

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"))
Katenkyo
źródło
Nie jesteś jedynym, który nie znalazł krótszego sposobu na wygenerowanie alfabetu w Lua. :(
manatwork
@manatwork haha, dokładnie to samo, tyle że nie musiałem go drukować, ale żeby go połączyć ^^. Przynajmniej oznacza to, że nie ma ukrytej sztuczki, której nie wiedziałem, aby to zrobić ^^ '.
Katenkyo
Możesz zapisać bajt za pomocą c=io.read()a="abcdefghijklmnopqrstuvwyz"zamiast, c = ...
ATaco
2

Mathematica, 75 bajtów

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

Całkiem dobry wynik dla języka nie golfowego ... Wszelkie rozwiązania wykorzystujące przetwarzanie kodu znaków zajęłyby więcej bajtów, ze względu na koszty ToCharacterCodei FromCharacterCode.

LegionMammal978
źródło
2

C (funkcja), 71 bajtów

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}
Cyfrowa trauma
źródło
f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}zapisuje bajt.
Kenney,
1
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}dla 62 bajtów
gastropner
2

Python, 81 bajtów

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

Jest to w zasadzie tłumaczenie odpowiedzi Pyth. Definiuje funkcję, fktóra przyjmuje jako argument znak i zwraca wynik.

PurkkaKoodari
źródło
1
Masz na myśli if z in k, prawda? Ponadto f=jest domyślnie opcjonalny.
xnor
@ xnor Tak. Najwyraźniej brakowało mi Ctrl-C.
PurkkaKoodari,
2
Usuń f=, uczyń funkcję anonimową. -2
Erik the Outgolfer
2

Jolf , 17 bajtów

Wypróbuj tutaj.

? 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
Conor O'Brien
źródło
2

MATLAB: 71 68 bajtów

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

(dzięki OP za oszczędność 3 bajtów)

Test:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Objaśnienie: Wielkie litery zajmują 65:90znaki ASCII. Małe litery są w 97:122ASCII. b=i<65|i>122|(i>90&i<97)Sprawdza więc, czy znak wejściowy iNIE jest alfabetyczny. Jeśli tak, zwracane są dane wejściowe. Wielkie litery są zwracane, jeśli b==1i i<97(wielkie litery). Jeśli b==1i i>9632 dodaje się 65:90, że odpowiada 97:122- małej litery alfabetu.

Brainkz
źródło
Miłe poddanie się. Dwa komentarze: Często stosuje się albo, i=input('')jeśli przesłanie jest skryptem, albo jako argument funkcji, jeśli jest funkcją @(i)i^2. i='a'zasadniczo nie jest akceptowane. Możesz także zapisać 3 bajty, wykonując [1,2,3,'']zamiast char([1,2,3]).
Stewie Griffin,
Ok, edytowane. Dzięki za sugestie!
brainkz
2

SpecBAS, 111 bajtów

Przeszedłem przez kilka wersji tego, 111 wydaje się być najlepszym, jaki mogę zarządzać.

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

Wiersz 2 używa ?skrótu PRINTi zagnieżdżonego w wierszuIF instrukcji

Wyjaśnienie pseudokodu

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
Brian
źródło
Trudno sprawić, by ["a" TO "z","A" TO "Z"]wyglądał bardziej jak pseudo kod niż już to robi. "a".."z","A".."Z"wygląda bardziej jak „prawdziwy kod”, przynajmniej w moich oczach ... Oba są jednak bardzo łatwe do zrozumienia =)
Stewie Griffin
2
Spec what ????
Bassdrop Cumberwubwubwub
2

Swift 2, 142 bajtów

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}

Bez golfa

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
}
Jojodmo
źródło
2

05AB1E , 19 16 bajtów

-3 bajty dzięki else

DAsåiAëDAusåiAuë

Jak to działa

                   # 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

Wypróbuj online!

Neil A.
źródło
Nie jestem pewien, czy ¹(pierwsze wejście) już istniało, kiedy opublikowałeś swoją odpowiedź, ale możesz zagrać w nią 2 bajty: A¹åiAëAu¹åiAuë( Wypróbuj online lub pakiet testowy ).
Kevin Cruijssen
2

Java SE 8, 71 69 bajtów

Gra w golfa:

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

Nie golfowany:

(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

Pierwotnie wdrożyłem następujące

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

Jest bardziej elegancki, ale niestety jest o jeden bajt większy. Zakłada się, że zachowanie znaków innych niż alfa jest niezdefiniowane, a łańcuch s jest inicjowany przed wykonaniem. Bądź łagodny, to mój pierwszy post.

edycja: 2 bajty zapisane przez Stewie Griffin przez zmianę

a - 91 < 0 to a < 91
jfh
źródło
2
Witamy na stronie! :)
DJMcMayhem
1
Dzięki! Czaję się już od kilku lat i naprawdę interesuje mnie, czy uda mi się znaleźć konkurencyjne odpowiedzi w Javie / C ++ :)
jfh
1
a<91powinien działać, czy ...?
Stewie Griffin
2

Scala, 91 znaków

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

Bez golfa

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
}

Mając początkowy zmienny wynik, zamiast zwracać niezmienną wartość z 3 różnych, jeśli w innym przypadku bloki zaoszczędziły mi 2 znaki, mimo że go nienawidzę.

Metoda skalalaoniczna

Lepszą metodą dla Scali byłoby coś takiego:

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
    }
}
sprague44
źródło