Biorąc pod uwagę ciąg wejściowy tylko zawierający znaki A-Z
, a-z
oraz pomieszczenia, usunąć wszystkie wystąpienia wersje wielkich i małych pierwszego znaku łańcucha (jeśli pierwszym znakiem jest A
usunąć wszystkie A
S i a
S, jeśli pierwszy znak (spacja) usuń wszystkie spacje) i wydrukuj wynik.
Przykładowe przypadki:
Testing Testing One Two Three
->esing esing One wo hree
Programming Puzzles and Code Golf
->rogramming uzzles and Code Golf
How much wood would a woodchuck chuck if a woodchuck could chuck wood
->ow muc wood would a woodcuck cuck if a woodcuck could cuck wood
{space}hello world
->helloworld
welcome to WATER WORLD
->elcome to ATER ORLD
To jest code-golf , wygrywa najkrótszy kod w bajtach!
Uwagi:
- Dane wejściowe zawsze będą mieć co najmniej 2 prawidłowe znaki.
- Wyjście nigdy nie będzie pustym ciągiem.
Odpowiedzi:
Pyth, 7 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Miły. Nowy operator bifurkatów (mający zaledwie 8 dni) pomaga tutaj uratować jeden znak. Myślę, że to pierwszy kod korzystający z tej funkcji.
Wyjaśnienie
źródło
pieprzenie mózgu, 219 bajtów
(Wymaga taśmy, która pozwala wskaźnikowi przejść do negatywów lub zapętla się do końca, jeśli spróbuje. Wymaga również
,
zwrócenia wartości 0 w EOF. Z mojego doświadczenia wynika , że większość tłumaczy domyślnie spełnia te wymagania.)To faktycznie okazało się dość łatwe! Nie zdziwiłbym się, gdyby grał w golfa (mam pojęcie, gdzie mogą być zmarnowane bajty, ale nie jestem pewien, czy to się potoczy). Jednak sprawienie, by działało, wcale nie było wyzwaniem.
Ten kod traktuje wszystko o wartości ASCII poniżej 97 jako wielkich liter. Jeśli pierwszym znakiem jest spacja, spróbuje usunąć wszelkie wystąpienia „małej litery” (
chr(32+32)
tj.@
) Z ciągu. To jest w porządku, ponieważ zawsze będą obecne tylko litery i spacje.Z komentarzami:
źródło
Perl, 13 bajtów
Licząc shebang jako jeden, dane wejściowe są pobierane ze standardowego wejścia.
Przykładowe użycie
źródło
substr
ale oczywiście wpadłeś na lepszy sposób!perl -p script.pl
. Opcje wiersza poleceń są zwykle liczone jako jeden bajt, przynajmniej w tej witrynie.CJam, 8 bajtów
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
~
.)Pyth, 8 bajtów
Wypróbuj online
Używa wersji Pythona w Pythonie
str.title
do dwukrotnego przekształcenia ciągu pierwszej litery w formę"<Upper><Lower>"
. Następnie usuwa każdy element z danych wejściowych znajdujących się w tym ciągu. Przestrzenie działają dobrze, ponieważ nie mają na nie wpływustr.title
.źródło
MATLAB, 28 bajtów
źródło
JavaScript (ES6),
3836 bajtówNie zależy to od
flags
parametru specyficznego dla Mozilli.CoffeeScript,
3937 bajtówPo raz pierwszy jest krótszy w JS niż CoffeeScript!
źródło
new
opcja jest opcjonalna, więcRegExp(x[0],'gi')
jest krótsza.PHP, 41 bajtów
Bierze jeden argument wiersza polecenia . Krótkie otwarte tagi muszą być włączone dla PHP <5.4.
źródło
$argv[1]
:<?=str_ireplace(($a=$argv[1])[0],'',$a);
Perl, 27 bajtów
Jest to kompletny program, chociaż opiera się na 2 wyrażeniach regularnych, które prawdopodobnie można skopiować do programu Retina w celu zapisania bajtów we / wy.
Edycja: Wygląda na to, że ktoś już skorzystał z tej
-p
opcji. Aha i używanie$&
zamiast$1
.źródło
#!perl -p
to wciąż jest o dwa bajty krótszy niż$_=<>;print
.-p
robi opcja. Naprawdę nie ma żadnych zmian, które mogę wprowadzić do mojej odpowiedzi, nie czyniąc jej identyczną z twoją.Minkolang 0,9 ,
2333 bajtówNie ma mowy, żeby to wygrało, ale eh, jest fajnie!
Wypróbuj tutaj.
Wyjaśnienie
(Może się to nie udać w niektórych przypadkach krawędzi, np. Jeśli pierwszy znak jest symbolem).
źródło
TECO ,
1514 bajtówEdytujesz tekst? W razie wątpliwości skorzystaj z edytora tekstu i edytora tekstu!
Po wielu próbach i błędach (głównie błąd), myślę, że jest to najkrótszy ogólny program TECO, który wykona zadanie.
Lub w formie czytelnej dla człowieka
$
reprezentuje klawisz Escape i^E
reprezentuje sekwencjęCTRL
+E
. W zależności od smaku używanego TECO może on rozpoznać te substytucje ASCII lub nie.Zgodnie z instrukcją niektóre dialekty TECO akceptują tę 13-bajtową wersję (zamiast polecenia oddzielnego „znajdź” i „usuń”):
źródło
Pip, 8 bajtów
Bierze ciąg jako argument wiersza poleceń (będzie musiał być cytowany, jeśli zawiera spacje). Wyjaśnienie:
To rozwiązanie ma dodatkową zaletę pracy z łańcuchami zawierającymi dowolne znaki ASCII, które można wydrukować. (
X
Operator odwrotny ukośnik unika wszystkiego, co nie jest alfanumeryczne.)źródło
Python, 66 znaków
źródło
Julia, 34 bajty
Tworzy to nienazwaną funkcję, która akceptuje ciąg i zwraca ciąg. Konstruuje wyrażenie regularne bez rozróżniania wielkości liter od pierwszego znaku na wejściu i zastępuje wszystkie jego wystąpienia pustym łańcuchem.
źródło
Mathematica, 47 bajtów
źródło
R, 43 bajty
Jest to pełny program, który odczytuje wiersz ze STDIN i zapisuje zmodyfikowany wynik do STDOUT.
Nie golfowany:
źródło
Rubin, 25 bajtów
Funkcja anonimowa:
Pełny prgram, 29 bajtów:
źródło
Python, 61 bajtów (zdecydowanie za dużo)
Wyobrażam sobie, że jest lepszy sposób na zrobienie tego, ale nie mogę tego znaleźć. Wszelkie pomysły na usunięcie
"".join(...)
?źródło
x[0]+x[0].swapcase()
.(x[0]*2).title()
.lambda x:x.replace(x[0].upper(),'').replace(x[0].lower(),'')
- 60 bajtówOuroboros , 61 bajtów
Hej, jest krótszy niż C ++! Ha.
W Ouroboros każda linia programu przedstawia węża z ogonem w pysku. Przepływ kontroli odbywa się poprzez zjadanie lub regurgitację odcinków ogona, ze wspólnym stosem do synchronizacji między wężami.
Snake 1
i.
odczytuje znak z wejścia i kopiuje go..91<\64>*32*
wypycha,32
jeśli znak był wielką literą, w0
przeciwnym razie.+
ing to znak konwertuje wielkie litery na małe, pozostawiając małe litery i spacje bez zmian. Wszystko to miało miejsce na stosie węża 1, więc teraz przekazujemy wartość do wspólnego stosu (m
), aby wąż 2 mógł przetworzyć. Wreszcie1(
zjada ostatnią postać ogona węża 1. Ponieważ tam znajduje się wskaźnik instrukcji, wąż umiera.Snake 2
)
nie ma wpływu za pierwszym razem.L!34*
wypycha,34
jeśli wspólny stos jest pusty, w0
przeciwnym razie. Następnie.
oszukujemy i(
zjadamy tyle postaci.(
jak właśnie wykonaliśmy. Dlatego kontroluj pętle z powrotem na początek wiersza, gdzie)
regurgituje znaki, które właśnie zjedliśmy (wcześniej wypchnął dodatkową kopię34
) i powtórz test długości stosu.0
, a wykonywanie jest kontynuowane:Si
przełącza na wspólny stos i wprowadza inny znak..1+!24*
wypycha,24
jeśli ten znak to -1 / EOF, w0
przeciwnym razie. Na EOF(
połyka 24 znaki - w tym adres IP - i wąż umiera. W przeciwnym razie wykonywanie będzie kontynuowane.Y
wyrywa kopię wierzchu wspólnego stosu (postać, którą właśnie przeczytaliśmy), aby przejąć własny stos 2 do przyszłego użytku. Następnie.@@.@=@.@32-=\@+2*
oblicza, czy nowy znak jest równy pierwszemu znakowi, czy pierwszemu znakowi minus 32, naciskając,2
jeśli tak, a0
jeśli nie. Mamy.
powielać i(
jeść tyle znaków:(
regurgituje 2 postacie, które właśnie zjedliśmy, a egzekucja przebiega z następną postacią.y
odbijamy postać od stosu węża 2,o
wypisujemy ją, a następnie zapętlamy.Zobacz to w akcji
Pokaż fragment kodu
źródło
C, 60 bajtów
n,c,d;main(){for(;read(0,&c-n,1);n=2)d-c&31&&n&&putchar(d);}
Edycja: Naprawiono błąd, który powodował, że bajt zerowy był drukowany na początku
źródło
Python 2, 43
Jest to nieco oparte na mojej odpowiedzi Pyth, ale jest również związane z niektórymi komentarzami ThomasKwa i xnor stąd . Głównie publikowanie, ponieważ chciałem, aby ta odpowiedź istniała.
źródło
Vim, 30 klawiszy
Przepraszam, że odkryłem, ale nie widzę żadnej odpowiedzi Vima D:
Wyjaśnienie:
If<Right>xh@x.<Esc>
Napisz (rekurencyjne) makro wokół pierwszego znaku.
Przesunięcie w lewo (
h
) jest konieczne, aby pozostać na lewo od następnego nieprzeczytanego znaku.Dodawanie dowolnego znaku (
.
) na końcu jest konieczne na wypadek, gdyby drugi musiał zostać usunięty"xy0
Skopiuj makro do rejestrux
7|
Przejdź do 7. znaku@x
Uruchom makro zx
2|~
Zmień wielkość liter pierwszego znaku (właściwie na 2 pozycji)0"xd7|
Wytnij makro w rejestrzex
@x
Uruchom makro zx
0x
Usuń element zastępczy.
źródło
:D
Zawsze głosuję vim!Haskell, 52 bajty
źródło
r(h:s)=[c|c<-s,t c/=t h]
.TI-BASIC, 164 bajty
Do kalkulatorów graficznych serii TI-83 + / 84 +.
TI-BASIC jest wyraźnie niewłaściwym narzędziem do tego zadania.
Nie jestem w 100% pewien, ale spędziłem na tym ponad sześć godzin i wydaje się, że jest to najkrótsze możliwe rozwiązanie.
Aby to przetestować przy użyciu danych niewypełnionych dużymi literami (lub wpisać go do kalkulatora), stwórz inny program z zawartością
AsmPrgmFDCB24DEC9
i uruchom go,Asm([whatever you named it]
aby włączyć tryb pisania małymi literami.źródło
Lua,
9378 bajtówźródło
Common Lisp, 77
Przeklinaj te długie nazwy funkcji (i nawiasy (ale nadal je kocham (: 3))).
źródło
C,
6561 bajtówKompiluje z ostrzeżeniami. Odczytuje ciąg z
argv[1]
. Przykład onlineźródło
main(int c,char**v)
domain(c,v)char**v;
i(**v-c)%32
do**v-c&31
.C ++,
1009998 bajtówJeszcze jeden bajt, aby dostać się poniżej 100.
getchar()
zwraca,-1
gdy czyta koniec strumienia, więc dlatego~
jest wfor
cyklu. (~-1 == 0
)Bez golfa
źródło
&&putchar(c)
zamiast?putchar(c):0
?f-c&31
tak jak w odpowiedzi C?AppleScript,
209201 bajtówMoją jedyną pociechą jest to, że pokonałem Brainfuck.
Działa to tak, że pobieram dane wejściowe
a
, uzyskuję długość,a
zaznaczam ją jakon
i ustawiam zmienną wyjściowąo
. Dla każdego znalezionego znaku, który nie zawiera pierwszego znaku (a's character 1
), konkatenuję goo
. Drukowana jest ostatnia liniao
.Uwaga: To automatycznie obsługuje wszystkie Unicode. do:
źródło
My only consolation is that I beat Brainfuck.
wygląda na to, że lepiej zacznę grać w golfa;)Siatkówka , 16 bajtów
Zapisz kod za pomocą końcowego kanału i uruchom go z
-s
flagą.Jak to działa: trax linefeed czyni ten etap zastępowania, tak że wszelkie dopasowania podanego wyrażenia regularnego są zastępowane pustym ciągiem. Do
i
włącza tryb bez uwzględniania wielkości liter, które również sprawia wsteczne wielkości liter. W końcu wyrażenie regularne po prostu dopasowuje i przechwytuje pojedyncze znaki, a następnie sprawdza, czy pierwszy znak w ciągu jest taki sam (w zależności od wielkości liter), używając odwołania wstecznego.źródło