Я натолкнулся на этот вопрос, потому что, похоже, это очень распространенный вариант поиска уникальных символов в строке. Но что, если мы хотим избавиться от них?
Ввод содержит только строчные буквы. Используются только буквы от а до я. Длина ввода может быть от 1 до 1000 символов.
Пример:
вход: helloworld
выход: llool
Цель: выигрывает
самый короткий код Язык: любой из 20 лучших языков TIOBE
-CDS
опцией$1
с ,$&
и вы можете потерять пару пар скобок.(GolfScript,
1513 символов)GolfScript не входит в топ-20, но является Codegolf без GolfScript ... ( запустите его самостоятельно )
Предыдущая версия: ( запустить скрипт )
источник
:;
? Вы сознательно пытаетесь запутать новичков, не так ли? ;))
- это сделало бы это смайликом тогда:)
. К сожалению, я не нашел способа даже исключить цифру 1. (Примечание для новичков в GolfScript: вы можете заменить любое;
в коде наx
(или любую другую букву или цифру - или любой символ, не используемый в сценарии иным образом). В этом особом случае;
это просто имя переменной - и не имеет значения «pop and discard». В GolfScript почти все токены являются переменными в любом случае, и использование предопределенных символов - отличный способ сделать сценарии еще более нечитаемыми для посторонних ;-).):a{]a.@--,(},
J, 12 символов
Введя правильный Perl-ответ, вот неверный (язык не входит в топ-20 TIOBE).
Использование:
Объявляет глагол,
a
который выводит только не уникальные предметы.источник
GolfScript (14 символов)
Онлайн демо
Может не претендовать на победу, но полезно иметь критерий.
источник
Руби
464036источник
s
и используете$_
для второго появления (тогда место перед будет необязательным).Perl 44
Исполнение:
источник
К, 18
источник
1<#
вместо~1=#
Python 2,7 (
5251),Python 3 (52)Я не ожидал, что это будет так коротко.
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()
: сохранить ввод в виде строки (input()
=eval(raw_input())
)(Python 3.0:
input()
превращен вraw_input()
)filter(lambda x:a.count(x)>1,a)
: Отфильтровать все символы внутри,a
если они встречаютсяa
более одного раза (a.count(x)>1
).источник
input()
вместоraw_input()
. Хотя вы должны добавить один символ для закрывающей скобки, такprint
как это функция в Python 3.''.join(...)
sed и coreutils (128)
Конечно, это не часть списка TIOBE, но это весело (-:
Версия для игры в гольф:
объяснение
Первый sed преобразует ввод в один символ в строке. Второй sed находит персонажей, которые встречаются только один раз. Третий sed пишет скрипт sed, который удаляет уникальные символы. Последний sed выполняет сгенерированный скрипт.
источник
Brachylog (v2), 8 байт
Попробуйте онлайн!
Функция представления. Технически неконкурентный, потому что вопрос имеет ограничение на то, каким языкам разрешено конкурировать (однако, некоторые другие ответы уже проигнорировали это ограничение).
объяснение
источник
Japt ,
65 байт-1 байт благодаря @Oliver
Попробуйте онлайн!
источник
o@
:Æ
Python (56)
Вот еще одна (на несколько символов длиннее) альтернатива в Python:
Если вы принимаете вывод в виде списка (например
['l', 'l', 'o', 'o', 'l']
), то мы можем сократить его до 49 символов:источник
>1
это хорошая идея! Могу ли я включить это в свое решение?Mathematica
7263Хорошо, Mathematica не входит в число 20 лучших языков, но я все равно решил присоединиться к вечеринке.
x
является входной строкой.источник
Perl (55)
Читает со стандартного ввода.
источник
C # - 77 символов
Если вы примете вывод как массив, он сводится к 65 символам:
источник
Окамль,
139133Использует ExtLib's ExtString.String
Версия без гольфа
Функция
g
возвращает количество вхождений c в строку s. Функцияf
заменяет все символы либо пустой строкой, либо строкой, содержащей символ, в зависимости от числа вхождений. Изменить: я сократил код на 6 символов, злоупотребляя внутренним представлением bools :-)О, и ocaml 0 в индексе TIOBE ;-)
источник
PHP - 70
с предположением $ s = 'helloworld'.
источник
Java 8, 90 байт
Объяснение:
Попробуйте онлайн.
источник
PowerShell , 59 байт
Попробуйте онлайн!
Меньше гольфа:
Примечание:
$repeatedChars
это массив. По умолчанию Powershell объединяет элементы массива через пробел, а конвертирует массив в строку. Таким образом, регулярное выражение содержит пробелы (в этом примере[^l o]
). Пробелы не влияют на результат, потому что входная строка содержит только буквы.источник
APL (Dyalog Extended) , 8 байтов SBCS
Функция анонимного молчаливого префикса.
Попробуйте онлайн!
⍧⍨
подсчет количества селфи (подсчет вхождений элементов аргумента в самом аргументе)1<
Булева маска, где один меньше этого⊢⊆⍨
разделить аргумент по этой маске (начать новый раздел на 1 с и удалить на 0)∊
ε NLIST (Flatten)источник
JavaScript, 45 байт
источник
R 70 байт
Попробуйте онлайн!
Плохая попытка, даже из топ-20 языка TIOBE. Я знаю, что со второй половиной можно что-то сделать, но на данный момент любые гольфы избегают меня.
источник
JavaScript, 34 байта
Ввод в виде строки, вывод в виде массива символов.
Попробуйте онлайн!
источник
map
: tio.run/##BcExDoAgDADAvzgYOtjBHT9CTCSICqmUWKL8vt5l/…JavaScript (Node.js) , 82 байта
Попробуйте онлайн!
источник
.join``
вместо.join("")
.PHP - 137
Код
Нормальный код
источник
PHP -
8378Улучшенная версия:
Конечно, для этого нужно отключить уведомления
Изменить: улучшение, вдохновленное @hengky mulyono
Я так плох в Codegolf :)
источник
C ++, 139 байт
ungolfed:
источник