Wyzwanie jest proste:
Napisz funkcję lub program, który pobiera dane wejściowe x
i wypisuje małe litery alfabetu, jeśli x
jest częścią alfabetu małych liter, wypisuje alfabet wielkich liter, jeśli x
jest częścią alfabetu wielkich liter, i wypisuje tylko, x
jeś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
a
lubA
. - 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 N
jest 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
import Random
a następnie używaćRandom.randint
(oczywiście nie dla tego wyzwania, ale nadal)?import string
liczone, 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.Odpowiedzi:
TeaScript , 5 bajtów
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
1 bajtowa alternatywa
Jeśli moglibyśmy wyprowadzać
0123456789
cyfry, to mogłoby to być:źródło
Pyth, 10 bajtów
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.źródło
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.
źródło
Haskell, 48 bajtów
Przykład użycia:
Weź wszystkie listy ['a' .. 'z'], ['A' .. 'Z'] oraz listę singletonów z charakterem wejściowym
c
gdziec
element jest. W przypadku liter zawsze mamy dwa dopasowania, więc wybieramy pierwszy.źródło
JavaScript (ES6), 79 bajtów
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.
Test
Pokaż fragment kodu
źródło
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
jest bardzo nieodpowiednia do gry w golfa, ale czasami jest to jedyny sposób!String.fromCharCode
i.toUpperCase
(Głupi i Głupszy), aletoUpperCase
wygrywax=>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\w
prac na wszystko z wyjątkiem_
. Twoje rozwiązanie wydaje się być możliwie najkrótsze.ABC...abc...?
bez prawdziwejfor
pętli: (trochę[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R,
9075 bajtówDzięki Giuseppe .
Stara wersja (90 bajtów):
Wygląda brzydko, ale
cat
nie można ich zlecić na zewnątrz, IMHO.źródło
scan
może być dowolny obiekt typu znak, więc możeszletters
zamiast''
.Python 3,
92848274 bajtyAktualna wersja: 74, dzięki isaacg i wnnmaw!
Niegolfowany: (dla pewnej definicji niegolfowanego
Pierwsza wersja: 92
Druga wersja: 82, dzięki isaacg! :)
źródło
lambda c:
) zamiast jawnej definicji (def f(c):print(
) i zaoszczędzić trochę bajtów. Ponadto nie potrzebujesz miejsca przedfor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
. Dzięki!"
do funkcji potrzebujesz\"
zamiast tego.Python 3,
118105989783 bajtówProste rozwiązanie. EDYCJA: Grał w golfa dzięki sugestii Erika Golfer.
Nie golfowany:
źródło
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682bajtówPHP ma się teraz dobrze:
Pobiera dane z wiersza poleceń, takie jak:
Edycje
91>ord($x)
jeZ<$x
. Sposób na skomplikowane. Dzięki manatwork .strtoupper
i zbudowanie żądanego zakresu.źródło
ord()
źle to wygląda. SpróbowaćZ<$x?$a:strtoupper($a)
.' '&$x^A
zrobić 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;
Perl,
463433 bajtówzawiera +2 dla
-nE
Uruchom jako
for
i używając słów kluczowych, dzięki @Dom Hastings .-E
isay
zamiastprint
.źródło
for
: - /. Próbowaliśmy kilka podejść, (-p
z$"='';$_="@_"
, nawet$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
, ale wszystko jest już ...$_=
zamiastprint
ing i użyjesz-p
flagi zamiast tego-n
, możesz uratować kolejne dwa ... Nadal nie mogę wymyślić żadnych innych sposobów na zaoszczędzenie do tej pory ...$_
listy (o której wiem). Musiałby być interpolowany ($_="@_"
), ale wykorzystuje spację jako separator, więc musiałbym to zrobić$"=''
(lub użyć ajoin'',
), co wydłuża go. Nie ma tu zbyt wiele miejsca na poruszanie się!say
zamiastprint
!Rubin, 41 + 1 = 42
Z włącznikiem
-p
uruchomTo generuje ciąg
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:
-p
Flaga ma zasadniczo[*?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
.scan
znajdzie 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
źródło
CJam, 18 bajtów
'[,65>
wypycha wielkie litery,_el
małe litery ir:R
ciągi jednoznakowe, które są odczytywane ze STDIN i przypisywane do zmiennejR
. Są one zawinięte w tablicę (]
) iR
wybierany jest pierwszy, który ma dowolne znaki wspólne z{R&}=
.źródło
_el
to małe litery?el
oznacza „przekonwertuj na małe litery”. Właśnie wypchnąłem alfabet, więc teraz powielam go_
, a następnie wywołujęel
wynikową kopię.Siatkówka, 62 bajty
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.
źródło
Python 2.7.10,
959379 bajtówTo jest mój pierwszy raz nawet próba gry w golfa, więc proszę, każda pomoc lub rada są bardzo mile widziane!
Dzięki Morgan Thrapp za pomoc!
źródło
False == 0
iTrue == 1
do indeksowania w krotki. Najpierw sprawdza, czy jest to literaisalpha
, a jeśli tak, zwraca,1
a następnie sprawdza, czy ma małe litery i robi to samo.Ruby,
4643 znaków(Kod 42 znaków + opcja wiersza poleceń 1 znak)
Dzięki:
===
magii (-3 postacie)Przykładowy przebieg:
źródło
MATL , 22 bajty
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
Wyjaśnienie
źródło
Java, 165 znaków
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.
źródło
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 bajty
Obejmuje +2, aby
-nE
(zamiast normalnego +1) było sprawiedliwe w stosunku do innego rozwiązania perlaUruchom z danymi wejściowymi na STDIN bez końcowego znaku nowej linii:
Tylko kod:
źródło
Lua,
9897 bajtówNiestety nie znalazłem rozwiązania o długości mniejszej niż 26 bajtów do ustawienia
a
z 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
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.
źródło
c=io.read()a="abcdefghijklmnopqrstuvwyz"
zamiast, c = ...Mathematica, 75 bajtów
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
ToCharacterCode
iFromCharacterCode
.źródło
C (funkcja), 71 bajtów
ź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.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
dla 62 bajtówPython, 81 bajtów
Jest to w zasadzie tłumaczenie odpowiedzi Pyth. Definiuje funkcję,
f
która przyjmuje jako argument znak i zwraca wynik.źródło
if z in k
, prawda? Ponadtof=
jest domyślnie opcjonalny.f=
, uczyń funkcję anonimową. -2Jolf , 17 bajtów
Wypróbuj tutaj.
źródło
MATLAB:
7168 bajtów(dzięki OP za oszczędność 3 bajtów)
Test:
Objaśnienie: Wielkie litery zajmują
65:90
znaki ASCII. Małe litery są w97:122
ASCII.b=i<65|i>122|(i>90&i<97)
Sprawdza więc, czy znak wejściowyi
NIE jest alfabetyczny. Jeśli tak, zwracane są dane wejściowe. Wielkie litery są zwracane, jeślib==1
ii<97
(wielkie litery). Jeślib==1
ii>96
32 dodaje się65:90
, że odpowiada97:122
- małej litery alfabetu.źródło
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,'']
zamiastchar([1,2,3])
.SpecBAS, 111 bajtów
Przeszedłem przez kilka wersji tego, 111 wydaje się być najlepszym, jaki mogę zarządzać.
Wiersz 2 używa
?
skrótuPRINT
i zagnieżdżonego w wierszuIF
instrukcjiWyjaśnienie pseudokodu
źródło
["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 =)Swift 2, 142 bajtów
Bez golfa
źródło
05AB1E ,
1916 bajtów-3 bajty dzięki
else
Jak to działa
Wypróbuj online!
źródło
¹
(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 ).Java SE 8,
7169 bajtówGra w golfa:
Nie golfowany:
Pierwotnie wdrożyłem następujące
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ę
źródło
a<91
powinien działać, czy ...?Scala, 91 znaków
Bez golfa
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:
źródło
Japt, 9 bajtów
Uruchom to online
źródło