Удаленные вопросы о переполнении стека иногда создают отличный материал для гольфа.
Напишите функцию, которая принимает неотрицательное целое число в качестве входных данных и возвращает true, если все цифры в базовом 10 представлении этого числа являются уникальными. Пример:
48778584 -> false
17308459 -> true
Количество символов включает только функцию.
Если вы решите ответить на C или C ++: нет макросов, нет неопределенного поведения; Поведение, определяемое реализацией, и предупреждения компилятора - это нормально.
Ответы:
Golfscript,
87 символов:`
- приведите аргумент в соответствие..
- клонировать дважды&
- пересекаются с собой (удаляют дубликаты)=
- проверить на равенство.если функция должна быть названа (
109 символов ):если программа достаточна (
54 символа ):источник
Python 2 (28)
(32)Обратные черты принимают строковое представление. Преобразование в набор удаляет дубликаты, и мы проверяем, уменьшает ли это длину, сравнивая с 10 ^ d, которое больше, чем все d-значные числа, но не (d + 1) -значные числа.
Старый код:
источник
n
наi
f=lambda _:len(`_`)==len(set(`_`))
lambda n:max(map('n'.count,'n'))<2
(одинарные кавычки - обратные кавычки), но это на два символа длиннее.APL (6)
Один из немногих случаев, когда молчаливый стиль укорочен и в APL.
Это 8 символов, чтобы дать ему имя,
но это не обязательно использовать его:
источник
Perl, 19 символов
источник
<>!~/(\d).*\1/
.\d
на.
.Rebmμ (10 символов)
Хитрость Ребму в том, что он не учитывает регистр, поэтому персонажи работают вместе. Всякий раз, когда дело переход к регистру, он разделяется на следующий токен. Используя переходы вместо вещей типа CamelCase, уникальный выбор, чтобы начать с капитального прогона, означает, что «заданное слово» сделано. (Хотя заданные слова могут использоваться для других целей в символьном программировании, по умолчанию они оцениваются как назначения).
Так что это "размешивает", чтобы:
Это пространство необходимо, потому что после того, как вы начали серию циклов чередующихся вариантов, вы не можете использовать этот трюк, чтобы получить сет-слово после первого, если не начнете новый цикл. Так
e?AtsAuqA
бы получил тебяe? a ts a uq a
... без назначения.(Примечание: по какой-то не очень веской причине я предпочитаю переосмыслить решения, чтобы не было пробелов, если количество символов одинаково. Так как скобки, скобки и строки неявно заканчивают символ ... часто встречаются количество возможностей для этого.)
В любом случае, когда сопоставляется с Rebol, он сокращается:
Добавьте несколько скобок, чтобы понять суть порядка оценки:
Таким образом, оператор равенства префикса применяется к двум аргументам: первый - результат присваивания
a
строковой версии самого себя, а второй - результатunique
запуска этой строки. Бывает так, что unique вернет вам элементы в том же порядке, в котором вы их передали ... так что уникальным для "31214" является, например, "3124".Запустите это с:
Там также немного статистики и отладочной информации:
Если требуется, чтобы была определена именованная / повторно используемая функция, вы можете создать «A-функцию», которая неявно принимает параметр с именем a
a|
. (B-функция будет создана сb|
использованием параметра с именем A, затем с именем B). Так что это добавит еще пять символов ... скажем, вы вызываете функцию "F""Ты смеешься! Они смеялись над Эйнштейном! Или подожди ... не так ли? Я ... не знаю".
источник
Reb moo
, но теперь я не уверен , что это должно бытьRebum mew
илиReb mew
или что - то другое.Fa|[e? AtsAugA]
какFalse? SomeGibberish
s
действительно разваливается[
в Nethack?REBmu
, вероятно, лучше. В любом случае, борода тугая ... она сдавливает. Думаю, вы получаете то, за что платите.ФРАКТРАН -
5338 фракцийИспользует деление для подсчета количества вхождений каждой цифры. Вызов, поместив n в регистр 2 и установив регистр 5 в 1, выдаст выходной сигнал в регистр 3 (0, если false, 1, если true). Также убедитесь, что остальная часть вашей программы использует только регистры> 71.
Edit 25/12/14: Прошло 7 месяцев, и с тех пор мы получили фрагменты стека, так что вот один из них, чтобы проверить код (используя мой, возможно, лучший интерпретатор здесь ).
Заменить
142857
на другой номер. Вывод должен быть,3^1
если истина,1 = 3^0
если ложь. Принимает некоторое время для больших чисел (ну, это является FRACTRAN ...).источник
JavaScript - 23 символа
Как функция (ECMAScript 6):
Или принимая ввод из приглашения (25 символов)
источник
C #
736059Первый гольф для меня ...
Может лишить другого персонажа путем конвертацииВот так ...uint
вint
, но я скорее воспринимаю задачу слишком буквально, чем наоборот.источник
i => (i + "").Distinct().SequenceEqual(i + "");
+""
вызовеToString()
под капот.Рубин (24 байта)
Используйте регулярное выражение для соответствия «некоторый символ, за которым следует ноль или более символов, затем тот же символ».
Если допустимые или ложные значения принимаются, а не литеральные
true
илиfalse
, то мы получаем 20 символов:источник
С (87)
Поскольку я не могу победить, я пойду на эффективность.
Код функции:
источник
Mathematica,
3525 символов(27, если функции нужно имя.)
РЕДАКТИРОВАТЬ: спас 8 символов благодаря Велисарию!
источник
Unequal @@ IntegerDigits@# &
мог бы сделать, я думаю≠
будет сравнивать несмежные элементы). Спасибо, это сильно укорачивает!Unequal@@IntegerDigits@#&
25 символов.R,
53514834 байтаПопробуйте онлайн!
Преобразовать в строку и разделить. Преобразовать в таблицу отсчетов минус 1, сумма и отрицаниеВдохновленный Самым распространенным ответом числа Алексом и предложением Хью.Пара спасена, благодаря @plannapus Еще один от @Gregor И пара, сделав это анонимной функцией
Теперь с замечательным отличием регулярных выражений благодаря @ J.Doe. Это ищет любой символ в номере, который совпадает с другим, где в строке. Команда
grepl
возвращает логическое значение, которое затем возвращается. Регулярные выражения в стиле Perl установлены в True.источник
paste0
instead oftoString
and save 2 characters.paste
instead ofpaste0
to save one more character.J (9)
Assumes the value to be tested is in variable
b
(I know this can be made into a function, but don't have a clue on how. J is confusing. Any help on this is appreciated)Thanks Marinus!Checks if the lenght of the string rep of the number with all the duplicates removed is the same as the lenght of the regular string rep.
источник
(-:~.)@":
.R (
70,60,53, 52)Thank you all for the useful comments! Your comments are incorporated in the answer.
источник
strsplit
why not coercing x to a character usingc(x,"")
?f=function(x)all(table(strsplit(c(x,""),"")[[1]])<2)
is 1 character shorter :)Mathematica (
2019)(
2221 if function needs a name)or
where | ist entered as [Esc]divides[Esc]
источник
Brachylog, 1 byte
Try it online!
источник
C99, 59 chars
источник
Groovy (36 chars)
Tested it using:
источник
0>1
is shorter.!1
instead.Haskell:
источник
Data.List
anyway I'd suggestnub
, which removes duplicates from a List.(\x->nub x==x).show
main = interact $ show . ap (==) nub . show
J (8)
Competely sepertae from my previous answer.
источник
R,
6665 charactersSeparate the digits using integer division and modulo, then check if they are duplicates.
Usage:
Or, as @MickyT suggested, for 63 characters:
источник
anyDuplicated
rather thansum
andduplicated
for 2 moreC, 58 bytes
Can keep a tally of up to 7 identical digits before rolling over.
in test program (it's easier to see how it works with the constant in octal)
If you happen to have a large power of 2 handy the constant can be calculated like
f&(1<<30)/7*6
источник
int main(int)
in your answer...Haskell, 34 bytes
Try it online!
источник
Javascript 73 chars
источник
Befunge 98, 17 bytes
This is a non-competing answer because Befunge does not have functions.
Prints a
1
if the number's digits are all unique; otherwise, it just ends.This works by accessing a cell in the Funge space whose
x
coordinate is the ASCII value of the character inputted (takes input character by character) and whosey
coordinate is1
. If the digit has not been seen before, the value of the cell is32
(space character). If that is so, I set the value to 1.As a bonus, this works for non-numbers as well.
источник
PowerShell - 26
источник
Perl 6 (19 bytes)
.comb
splits a string into characters (for example,42.comb
gives"4", "2"
)..uniq
removes all non-unique characters..comb
characters in string (originally I used.chars
, but.comb
is shorter).==
converts lists into number of elements in it, and compares the numbers. When.
is used without object before,$_
which is default function parameter is assumed.{}
are function literals.источник
C, 76
This is no where near winning, but I'll post it anyway just to show an alternative approach.
Prints a new line if false, prints nothing if true.
источник
int main(int, char **)
orint main(void)
.int main(int)
is not valid.main()
is ok then?main(void)
(when used in definition, in declaration it declares a function with unknown parameter list).POSIX sh and egrep (
47,43, 40)!
instead of-z
withtest
- Thanks DigitalTrauma`CODE`
instead of$(CODE)
- Thanks DigitalTraumafold -1
instead ofgrep -o .
1 - Thanks DigitalTrauma.If POSIX compliance is not important
echo PARAM |
can be replaced by<<<PARAM
, reducing the functions length to 37:Usage:
1 The
fold -N
notation is deprecated in some versions offold
.источник
f()(! [ `fold -1<<<$1|sort|uniq -d` ])
down to 38 by my counttest
croaks on it whenuniq -d
returns more than one line. So the shortest non-POSIX version is 40 characters. I know about the[ !
notation, but I am suprised that! [
also works, do you know why that is?Java (
1315957)57 characters:
removed ^ and $ as @n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ suggested
59 characters (works also with negative numbers!):
7978 characters (thanks @n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ ):Use for loop to save a few charachers and use int as a boolean array.
Use & instead of && to save 1 character (It turns out that java allows it).
131 characters (returns true for negative numbers):
with comments:
And answer that is technically correct (character count includes only the function, not global variables), but I think it's cheating, 29 characters:
m[] is boolean array that contains correct answers for all 32-bit integers.
источник
"^.*(.).*\\1.*$"
You can drop^
and$
. They are implied bymatches()
return!
in the shortest answer, you can get to 56 bytes.