Na podstawie tego pytania z Code Review
Biorąc pod uwagę niepusty łańcuch drukowalnych znaków ASCII, wypisz drugi niepowtarzalny znak. Na przykład dla danych wejściowych DEFD
i wyjściowych F
.
Wejście
- Pojedynczy ciąg znaków w dowolnym odpowiednim formacie .
Wynik
- Drugi znak, który nie powtarza, podczas czytania od lewej do prawej, raz w odpowiednim formacie.
- Znak wyjściowy nie rozróżnia wielkości liter.
- Jeśli taki znak nie istnieje (np. Wszystkie znaki się powtarzają), wypisz pusty ciąg.
Zasady
- Algorytm powinien ignorować wielkość liter. Oznacza to
D
id
liczy się jako ta sama postać. - Dopuszczalny jest pełny program lub funkcja.
- Ciąg wejściowy będzie gwarantowany jako niepusty (tj. Co najmniej jeden znak długości).
- Łańcuch wejściowy to ASCII. Każdy prawidłowy znak może się powtarzać, nie tylko alfanumeryczny (obejmuje spacje).
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Przykłady
Dane wejściowe znajdują się w pierwszym wierszu, dane wyjściowe w drugim wierszu.
DEFD
F
FEED
D
This is an example input sentence.
x
...,,,..,,!@
@
ABCDefgHijklMNOPqrsTuVWxyz
B
AAAAAABBBBB
Thisxthis
This this.
.
Odpowiedzi:
MATL , 11 bajtów
Wychodzi to z błędem (domyślnie dozwolone), jeśli nie ma drugiego nie powtarzającego się znaku.
Wypróbuj online!
Wyjaśnienie
źródło
Siatkówka , 25 bajtów
Wypróbuj online! (Pierwszy wiersz umożliwia uruchomienie kodu na zestawie testowym złożonym z kilku danych wejściowych.)
Wyjaśnienie
To jest tylko jedno dopasowanie wyrażenia regularnego, przy czym wyrażenie:
Oznacza to, że dopasuj znak i upewnij się, że nie pojawi się on nigdzie indziej na wejściu. Reszta to konfiguracja:
i
aktywuje niewrażliwość na wielkość liter.!
mówi Retinie, aby wydrukowała mecze, a nie je liczyła.2=
mówi Retinie, aby wydrukowała tylko drugi mecz, a nie wszystkie.źródło
2=
.05AB1E,
1512 bajtówWyjaśniono
Wypróbuj online
Zaoszczędź 3 bajty dzięki @Adnan
źródło
l©v®y¢iy}}1@
:).Python 2,
5958 bajtówZwraca listę pojedynczego znaku lub pustą listę, jeśli nie ma danych wyjściowych. (Głupia nieuwzględnianie wielkości liter ...)
Wypróbuj online
źródło
Galaretka , 11 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Partia, 171 bajtów
Alternatywne sformułowanie, również 171 bajtów:
źródło
Pyth,
1615 bajtów1 bajt dzięki @ mbomb007
Zestaw testowy.
źródło
[1:2]
sztuczka.t<…2
zamiast:…1 2
. Można zapisać kolejny bajt przez przesunięcie=rz1
do pierwszego użycia, czy też zmienić1
sięZ
(dla małych liter zamiast wielkiej mocy)t<fq1/zT=rzZ2
.Właściwie 19 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
C #,
129128 bajtówdziała w porządku. Chciałbym nie musiałem wszystkiego pisać małymi literami
źródło
C # lambda z Linq, 63 bajty
źródło
.Skip(1).First()
z.ElementAt(1)
.ToList()[1]
C #, 141 bajtów
Bez przerwy (najmniejszy), 135 bajtów
Z dla (;;), 150 bajtów
Nie golfił z komentarzami
12 bajtów zapisanych przez TuukkaX (zmień liczbę na c).
3 bajty zapisane przez TuukkaX (zmień ciąg na var).
4 bajty zapisane przez TuukkaX w „With for (;;)” (zmienione podczas gdy (true) na for (;;)).
2 bajty zapisane przez TuukkaX (zmieniono c ++; if (c == 2) na if (++ c == 2)).
14 bajtów zapisanych przez Bryce Wagner (zmieniono x.ToCharArray () na x).
źródło
var
zamiaststring
i mając coś takiegoc
zamiastcount
.kod maszynowy x86, 43 bajty
W hex:
Funkcja pobiera wskaźnik do ciągu wejściowego w (E) SI i liczbę całkowitą w (E) DX i zwraca (E) DX-ty nie powtarzający się znak lub zero, jeśli nie ma takiego znaku. Jako efekt uboczny konwertuje ciąg na wielkie litery.
Demontaż:
źródło
APL, 32 bajty
Wypróbuj || Wszystkie przypadki testowe
Wyjaśnienie:
Właśnie miałem opublikować go z 16 bajtami, ale zdałem sobie sprawę, że musi być to bez uwzględniania wielkości liter ...
źródło
(⎕UCS ⍵)+32×⍵∊⎕A
→819⌶⍵
⌶
ogólnie i dla usługi 819 („819” ≈ „BIg”). Wypróbuj online!Retina,
4336 bajtówWypróbuj online!
źródło
Mathematica, 49 bajtów
Funkcja anonimowa. Pobiera na wejściu listę znaków. Zignoruj wszelkie wygenerowane błędy.
źródło
JavaScript (Firefox 48 lub wcześniejszy), 60 bajtów
Zwraca,
undefined
jeśli jest tylko zero lub jeden niepowtarzalny znak. Działa poprzez bez rozróżniania wielkości liter wszystkie wystąpienia znaków, które pojawiają się więcej niż jeden raz w ciągu. Opiera się na niestandardowym rozszerzeniu Firefoksa, które zostało usunięte w Firefoksie 49.11991-bajtowa wersja ES6:Rekurencyjnie wyszukuje wszystkie znaki, które pojawiają się co najmniej dwa razy w ciągu. Jeśli znak pojawia się dokładnie dwa razy, oba wystąpienia są usuwane, w przeciwnym razie usuwane jest tylko pierwsze wystąpienie (pozostałe wystąpienia zostaną usunięte później). Pozwala to na wystąpienie różnicy.
źródło
m[1]
z ES6, zastępując jąnew RegExp(`${m[1]}`,"gi")
J, 25 bajtów
Stosowanie
Wyjaśnienie
źródło
Bash, 58 bajtów
Uwaga: Tworzy to plik tymczasowy o nazwie t . Jeśli już istnieje, zostanie zastąpiony.
źródło
C 174 bajtów
To nie jest najkrótsza, ale dość wydajna implementacja. W gruncie rzeczy wykorzystuje podwójnie połączoną listę do utrzymania uporządkowanego zestawu znaków kandydujących i skanuje ciąg wejściowy tylko raz. Zwraca kod znaku lub zero, jeśli nie znaleziono.
Trochę nie golfowa wersja:
źródło
C #, 143 bajty
źródło
TSQL, 128 bajtów
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
Rubin, 53 bajty
Wejście to STDIN, wyjście to STDOUT. W Ruby pozycje poza indeksem w tablicy lub ciągu zwracają
nil
, który nie jest drukowany.String#count
jest dziwną funkcją w Rubim, ponieważ zamiast zliczać liczbę wystąpień dla ciągu, który został przekazany, zlicza liczbę wystąpień dla każdej litery w tym ciągu. Zazwyczaj jest to denerwujące, ale tym razem możemy go wykorzystać na naszą korzyść.String#swapcase
zamienia wielkie i małe litery.Stara wersja, która nie była bezpieczna dla znaków specjalnych, takich jak
.
- 46 bajtówźródło
Java 8,
172157 bajtów-15 bajtów .. Dang Byłem wtedy zły w golfa. ;)
Wyjaśnienie:
Wypróbuj tutaj.
źródło
R , 79 bajtów
Wypróbuj online!
Zdecydowanie czuję, że można tu grać w golfa. Ale naprawdę podobało mi się to wyzwanie.
Ta odpowiedź dzieli ciąg na wektor znaków, zamienia je wszystkie na małe litery i tabeluje je (zlicza). Znaki, które występują raz, są wybierane i porównywane ze znakami we wspomnianym wektorze, a następnie druga prawdziwa wartość jest zwracana jako wynik. Pusty ciąg lub ciąg bez powtarzających się znaków wyprowadza NA.
źródło
Perl 6 ,
3832 bajtów-6 bajtów dzięki nwellnhof poprzez zmianę
.comb
wyrażenia regularnego bez rozróżniania wielkości literWypróbuj online!
źródło
m:g:i/$^a/
dla 32 bajtów .K (oK) / K4 , 11 bajtów
Rozwiązanie:
Wypróbuj online!
Wyjaśnienie:
źródło
Galaretka, 15 bajtów
Wypróbuj online!
Sprawdź wszystkie przypadki testowe. (Nieznacznie zmodyfikowany, aby uwzględnić wszystkie przypadki testowe)
źródło
Perl, 75 bajtów
źródło
JavaScript (przy użyciu zewnętrznej biblioteki) (107 bajtów)
Zmiażdżyłem to za pomocą biblioteki, którą napisałem. Nie jestem pewien, czy muszę liczyć deklarację zmiennej „s”, która jest danym ciągiem.
Będzie to obsługiwać pusty ciąg znaków, dane wejściowe zawierające tylko jeden niepowtarzalny znak i dane wejściowe z ponad 2 niepowtarzającymi się znakami
źródło
s=> ...
)Clojure, 109 bajtów
Mam nadzieję, że jest bardziej zwięzły sposób.
źródło