Natknąłem się na to pytanie, ponieważ wydaje się, że bardzo częstym przypadkiem jest znajdowanie unikatowych znaków w łańcuchu. Ale co, jeśli chcemy się ich pozbyć?
Dane wejściowe zawierają tylko małe litery. Używane są tylko litery od a do z. Długość wejściowa może wynosić od 1 do 1000 znaków.
Przykład:
input: helloworld
output: llool
Cel: Wygrywa najkrótszy kod
Język: Jeden z 20 najlepszych języków TIOBE
-CDS
opcją$1
z$&
i można stracić kilka par nawiasów.(GolfScript,
1513 znaków)GolfScript nie jest jednym z 20 najlepszych, ale golfem bez GolfScript ... ( uruchom go sam )
Poprzednia wersja: ( uruchom skrypt )
źródło
:;
? Celowo próbujesz zmylić początkujących, prawda? ;))
- to uczyniłoby to buźkę:)
. Niestety nie znalazłem sposobu na wyeliminowanie cyfry 1. (Uwaga dla początkujących w GolfScript: możesz zamienić dowolny;
kod w kodzie nax
(lub dowolną inną literę lub cyfrę - lub dowolny znak, który nie zostałby użyty w skrypcie w inny sposób). W tym szczególnym przypadku;
jest to tylko nazwa zmiennej - i nie ma ona znaczenia „pop and discard”. W GolfScript prawie wszystkie tokeny i tak są zmienne, a użycie predefiniowanych symboli jest świetnym sposobem na uczynienie skryptów jeszcze bardziej nieczytelnymi dla osób postronnych ;-).):a{]a.@--,(},
J, 12 znaków
Po wprowadzeniu prawidłowej odpowiedzi w Perlu, oto niepoprawna (język nie znajduje się w pierwszej 20 TIOBE).
Stosowanie:
Deklaruje czasownik,
a
który wyświetla tylko nie unikalne elementy.źródło
GolfScript (14 znaków)
Demo online
Może nie kwalifikuje się do wygrania, ale warto mieć miernik.
źródło
Rubinowy
464036źródło
s
i użyjesz$_
dla drugiego wyglądu (wówczas miejsce przedtem jest wtedy zbędne).Perl 44
Wykonanie:
źródło
K, 18 lat
źródło
1<#
zamiast~1=#
Python 2.7 (
5251),Python 3 (52)Nie spodziewałem się, że będzie tak krótki.
2.7:
a=raw_input();print filter(lambda x:a.count(x)>1,a)
3.0:a=input();print''.join(i for i in a if a.count(x)>1)
raw_input()
: przechowuj dane wejściowe jako ciąg (input()
=eval(raw_input())
)(Python 3.0:
input()
został przekształconyraw_input()
)filter(lambda x:a.count(x)>1,a)
: Filtruj wszystkie znaki znajdujące się wewnątrz,a
jeśli występują wa
więcej niż jeden raz (a.count(x)>1
).źródło
input()
zamiastraw_input()
. Chociaż musisz dodać jeden znak do nawiasu zamykającego, ponieważprint
jest to funkcja w python 3.''.join(...)
sed i coreutils (128)
To prawda, że nie jest to część listy TIOBE, ale jest zabawne (-:
Wersja bez golfa:
Wyjaśnienie
Pierwszy sed przekształca dane wejściowe w jeden znak w wierszu. Drugi sed znajduje znaki, które występują tylko raz. Trzeci sed pisze skrypt sed, który usuwa unikalne znaki. Ostatni sed wykonuje wygenerowany skrypt.
źródło
Brachylog (v2), 8 bajtów
Wypróbuj online!
Podanie funkcji. Technicznie niekonkurencyjne, ponieważ pytanie ma ograniczenia dotyczące tego, jakie języki mogą konkurować (jednak kilka innych odpowiedzi już zignorowało to ograniczenie).
Wyjaśnienie
źródło
Japt ,
65 bajtów-1 bajt dzięki @Oliver
Wypróbuj online!
źródło
o@
:Æ
Python (56)
Oto kolejna (kilka znaków dłuższa) alternatywa w Pythonie:
Jeśli zaakceptujesz wynik jako listę (np.
['l', 'l', 'o', 'o', 'l']
), Możemy sprowadzić go do 49 znaków:źródło
>1
to dobry pomysł! Czy mogę to włączyć do mojego rozwiązania?Mathematica
7263Ok, Mathematica nie należy do 20 najpopularniejszych języków, ale i tak zdecydowałem się dołączyć.
x
jest łańcuchem wejściowym.źródło
Perl (55)
Czyta ze standardowego.
źródło
C # - 77 znaków
Jeśli zaakceptujesz wynik jako tablicę, sprowadza się on do 65 znaków:
źródło
Ocaml,
139133Używa ExtString.String ExtLib
Wersja bez golfa
Funkcja
g
zwraca liczbę wystąpień c w ciągu s. Ta funkcjaf
zastępuje wszystkie znaki albo pustym łańcuchem, albo łańcuchem zawierającym znak, w zależności od liczby wystąpień. Edycja: Skróciłem kod o 6 znaków, nadużywając wewnętrznej reprezentacji booli :-)Aha, a ocaml ma wartość 0 w indeksie TIOBE ;-)
źródło
PHP - 70
z założeniem $ s = „helloworld”.
źródło
Java 8, 90 bajtów
Wyjaśnienie:
Wypróbuj online.
źródło
PowerShell , 59 bajtów
Wypróbuj online!
Mniej golfa:
Uwaga:
$repeatedChars
jest tablicą. Domyślnie Powershell łączy elementy tablicy za pomocą spacji podczas konwertowania tablicy na ciąg. Zatem wyrażenie regularne zawiera spacje (w tym przykładzie[^l o]
). Odstępy nie wpływają na wynik, ponieważ ciąg wejściowy zawiera tylko litery.źródło
APL (Dyalog Extended) , 8 bajtów SBCS
Anonimowa ukryta funkcja prefiksu.
Wypróbuj online!
⍧⍨
odliczanie selfie (policz wystąpienia elementów argumentu w samym argumencie)1<
Maska boolowska, w której jeden jest mniejszy⊢⊆⍨
podziel argument za pomocą tej maski (rozpoczęcie nowej partycji na 1s i usunięcie na 0s)∊
ε nlist (spłaszczyć)źródło
JavaScript, 45 bajtów
źródło
R , 70 bajtów
Wypróbuj online!
Słaba próba, nawet z 20 najlepszych języków TIOBE. Wiem, że coś można zrobić w drugiej połowie, ale w tej chwili wszelkie golfy mi uciekają.
źródło
JavaScript, 34 bajty
Dane wejściowe jako ciąg znaków, dane wyjściowe jako tablica znaków.
Wypróbuj online!
źródło
map
: tio.runJavaScript (Node.js) , 82 bajty
Wypróbuj online!
źródło
.join``
zamiast.join("")
.PHP - 137
Kod
Normalny kod
źródło
PHP -
8378Poprawiona wersja:
Oczywiście wymaga to wyłączenia powiadomień
Edycja: Ulepszenie inspirowane przez @hengky mulyono
Jestem taki zły w codegolf :)
źródło
C ++, 139 bajtów
bez golfa:
źródło