Мы говорим, что строка недискриминационная, если каждый из символов строки появляется одинаковое количество раз и, по крайней мере, дважды.
Примеры
"aa!1 1 !a !1"
является недискриминационным , так как каждый из символов!
,a
и1
появляется три раза."abbaabb"
это не недискриминационный , потому чтоb
появляется чащеa
."abc"
также не является недискриминационным, потому что символы не появляются по крайней мере дважды.
задача
Напишите недискриминационную программу или функцию, которая возвращает истинное значение, если заданная строка не является дискриминационной , и ложное значение в противном случае.
То есть программа, запущенная из собственного исходного кода, должна возвращать истинное значение.
Каждая отправка должна иметь возможность обрабатывать непустые строки, содержащие печатный ASCII , а также все символы, присутствующие в исходном коде отправления.
Тестовые случаи
Truthy:
<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"
Falsy:
"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"
Ответы:
Брахилог , 10 байт
Попробуйте онлайн!
объяснение
источник
Java 8,
198192186174168165160 байт (число символов65)Попробуйте онлайн.
Код, используемый для проверки вхождений персонажей , который был моим ответом на этот вызов .
-5 байт благодаря @ OlivierGrégoire снова, избавившись от комментария и устроив беспорядок. ;)
Старый 168 байт (char-count 6) ответ :
Попробуйте онлайн.
Код, используемый для проверки вхождений символов за исключением комментария , который был моим ответом на этот вызов .
-6 байтов благодаря @ OliverGrégoire удаления
<
путем замены чеков>
.Объяснение базовой программы игры в гольф (98 байт):
попробуйте онлайн.
Некоторые вещи, которые я сделал, чтобы уменьшить количество используемых символов:
o
,w
,u
,f
,r
, иe
были выбраны с целью повторного использования символов мы уже имели (но не более 6).2222
используется вместо256
.e>0&u!=e|u<2
чтобы!(e<2|u==e)|u<2
удалить 6х&
.f
, и мы возвращаемся , является ли она по- прежнему-в конце (это означало , что я мог удалить 6йby
изbyte
теперь , что мы используем толькоn
вint
6 раз , а не 8).e<2
иu<2
изменил на2>e
и2>u
удалить 6x<
.Что я сделал, чтобы уменьшить количество символов от 6 до 5:
int
кbyte
такому количествуn
используется 4 вместо 6.x[0]
вместо новой переменной,f=0
поэтому=
используется 5 вместо 6.2222
чтобы3333
таким образом количество2
использованного 2 вместо 6.f
иr
снова, так что они больше не 6.Что @ OlivierGrégoire сделал, чтобы избавиться от комментария, и поэтому 5x
/
:,i,fe,fi,w;
.s:w:no0r3sswwyyy:
.|2>2
{}
циклы for и ifs и добавляем неиспользуемый{}
блок.!
на!!!
.|
на||
.333
чтобы+333-3|2
избавиться от оставшихся арифметических операторов+-|
и2
.!(x[0]>0)
на!!(0>--x[0])
.источник
<
на>
.Желе ,
18161210 байтПопробуйте онлайн!
Как это устроено
источник
Брахилог ,
1412 байтПопробуйте онлайн!
объяснение
Альтернативное 12-байтовое решение, которое повторно использует
t
вместоᵐ
:источник
T-SQL, 320 байтов (32 символа x 10 каждый)
Ввод осуществляется через уже существующую таблицу
FILL
с полем varcharSTEW
, в соответствии с нашими стандартами ввода-вывода .Я никогда не был более доволен, но в ужасе, кусок кода.
Должен запускаться на сервере или в базе данных, для которой задано сопоставление с учетом регистра. Есть 10 из 32 различных символов, включая верхний и нижний регистр
E
(команды SQL нечувствительны к регистру, поэтому при необходимости переворачивают несколько символов), пробелы и табуляции (для удобства чтения табуляции показаны как разрывы строк в приведенном выше коде).Я нашел способы включить 10 других символов
+ = ,
в код, но, к сожалению, не смог найти способ сделать это<
, поэтому мне пришлось добавить символ комментария-
.Вот отформатированный код, прежде чем я втиснул во все лишние наполнители:
Верхняя строка представляет собой рекурсивный CTE, который генерирует таблицу чисел
b
, которую мы присоединяем к исходной строке для разделения по символам. Эти символы сгруппированы и подсчитаны, иIIF
оператор возвращает 0 или 1 в зависимости от того, является ли входная строка недискриминационной.источник
C (gcc) ,
333168 байтСпасибо @Kevin Cruijssen за сохранение 9 байтов и спасибо @Laikoni за сохранение 45 байтов!
Попробуйте онлайн!
C 333 байта
Даже bytecount не дискриминирует!
Попробуйте онлайн!
источник
128
к222
так8
можно опустить.i
,v
,S
,s
иL
к персонажам , которые уже появляются в ключевых словахchar
,for
иreturn
: Try его в Интернете!05AB1E ,
20181614 байтовПопробуйте онлайн!
Программа по существу делится на 2 части, где цель первой части состоит в том, чтобы выполнить реальную задачу, а цель второй части состоит в том, чтобы использовать те же функции, что и в первой части, без изменения результата.
Пояснение (первая часть)
Пояснение (вторая часть)
источник
{γ€gDË*P≠qq{γ€gDË*P≠
это еще за 20;).¢
... хорошая идея, чувак, и я рад, что это≠
было так же полезно, как я думал, это может быть, ха-ха!Шелуха , 14 байт
Попробуйте онлайн!
объяснение
Две короткие строки не имеют значения, так как основная функция никогда не вызывает их.
источник
m
также встречается дважды: в первой и во второй. Объяснение не включает две короткие строки, потому что они не влияют на поведение программы.Python 2 ,
7569 байтВывод через наличие или отсутствие ошибки. Это ошибка ValueError (один или несколько символов встречаются только один раз) или NameError (количество символов неодинаковое).
Попробуйте онлайн!
источник
{{e.dil:-tu,r.dil:-tu,}}
Боже мой, что это?a
и все сломалось. Не могли бы вы объяснить подробнее, пожалуйста?or
. Я добавлю объяснение, когда я за компьютером.Brachylog v2, 8 байт (в наборе символов Brachylog)
Попробуйте онлайн!
Похоже, в Brachylog идет игра в гольф по этому вопросу, поэтому я решил присоединиться, сэкономив пару байтов для следующего лучшего ответа.
Это полная программа, которая принимает ввод в виде списка кодов символов. (Это отчасти потому, что в Brachylog, похоже, есть некоторые очень странные ошибки, связанные с обратным слешем в строках, и частично потому, что
\
команда не работает со списками строк.)объяснение
В
koḅ
конце не имеет значения;k
всегда будет иметь элемент действовать на иo
иḅ
не может потерпеть неудачу , если данный список в качестве входных данных.Причина старта
oḅ
должна быть ясна; он разбивает входной список по значению, например[1,2,1,2,4,1]
станет[[1,1,1],[2,2],[4]]
. Чтобы каждый символ появлялся одинаковое количество раз, каждый из этих списков должен иметь одинаковую длину, то есть результирующий список представляет собой прямоугольник. Мы можем утверждать эту прямоугольность, используя\
, который также транспонирует строки и столбцы как побочный эффект.Теперь у нас есть текущее значение, состоящее из нескольких копий набора символов, например, если бы входное значение было
[4,2,1,2,4,1]
текущим, оно будет[[1,2,4],[1,2,4]]
. Если мы удалим копию, полученная матрица будет по-прежнему прямоугольной, поэтому мы можем повернуть ее обратно, используя\
. Однако, если причина , по которой матрица была прямоугольной в том , что все входные символы были различны, то результирующая матрица не будет иметь никаких оставшихся элементов, а\
вовсе не лечить матрицу «0 × 0» в виде прямоугольных (скорее, он терпит неудачу). Такoḅ\k\
эффективно утверждает, что каждый символ, который появляется на входе, появляется одинаковое количество раз, и это число не равно 1.Вот и вся функциональность нашей программы (как полная программа, мы получаем,
true
если не было ошибок подтверждения,false
если некоторые это сделали). Тем не менее, мы должны соблюдать ограничение макета исходного кода, поэтому я добавил дополнительный,koḅ
который не имеет цели, но который не может потерпеть неудачу (в отличие от него\
,o
иḅ
мы рады действовать в пустых списках).источник
Python 2 ,
8480 байтПопробуйте онлайн!
источник
JavaScript (Node.js) ,
144...10096 байтПопробуйте онлайн!
24 разных персонажа * 6 раз каждый28 разных персонажей * 5 раз каждый27 разных персонажей * 5 раз каждый27 разных персонажей * 4 раза каждый26 разных персонажей * 4 раза каждый25 разных персонажей * 4 раза каждый24 разных персонажа * 4 раза каждый
объяснение
источник
PowerShell , 104 байта
Попробуйте онлайн!
Это было очень весело для гольфа. Было ограничение
$
, которого нам нужно минимум четыре (один для ввода$args
, один для назначения результата вычисления$qe
, один для проверки последнего символа$qe[-1]
и один для проверки первого символа$qe[0]
, так что это было максимальное рабочее число символов).Оттуда, это было вопросом игры в гольф (а не игры в гольф, как наличие двухбуквенного имени переменной), чтобы программа делилась на четыре. Обратите внимание, что у нас есть небольшой комментарий (все, что следует за
#
), чтобы учесть некоторые недостающие элементы, но я постарался сделать комментарий как можно меньше.источник
Haskell,
907572 байтаКаждый персонаж появляется 6 раз. Входная строка берется как одноэлементный список .
Попробуйте онлайн!
Для справки, старые версии:
75 байтов, каждый символ 5 раз
Попробуйте онлайн!
90 байтов, каждый символ 3 раза:
Попробуйте онлайн!
источник
Python 2 ,
1081049288 байт-12 байтов благодаря Роду
-4 байта благодаря Кевину Круйссену
Попробуйте онлайн!
источник
s=input();c=s.count;print[all(c(s[[]>[1]])>=c(o)>1. for o in s)];aaafffillpprrtuu=1.>1.;
88 байтов , избавившись от комментария.aaabb
кажется, уступаетTrue
MATL , 12 байт
Входные данные - это строка, заключенная в одинарные кавычки. Одиночные кавычки в строке экранируются путем дублирования.
Вывод представляет собой непустую матрицу, которая верна, если она не содержит нулей, и ложна, если она содержит хотя бы ноль.
Попробуйте онлайн! Или для удобства проверьте все контрольные примеры , включая стандартный тест на достоверность / ложность.
Как это устроено
Утверждения, помеченные
(*)
как, не являются ни необходимыми, ни вредными, и были включены только для того, чтобы сделать исходный код недискриминационным.источник
Perl 5 ,
-p
57 байтКаждый персонаж появляется 3 раза. Только один
1
ничего не делает12 байтов добавлены к базовому 45-символьному решению, чтобы сделать его недискриминационным
Попробуйте онлайн!
источник
R , 90 байт
Попробуйте онлайн!
Выходы
TRUE
для недискриминационной строки иFALSE
для распознающей строки. Я написал много уродливого кода для задач на этом сайте, но я думаю, что это самый уродливый на данный момент.45 символов, используются дважды каждый (в том числе несколько в комментарии). Предыдущий лучший ответ R был 116 байтов с 29 символами, использованными 4 раза каждый; Я публикую это отдельно, поскольку это существенно отличается.
Код эквивалентен
который преобразует входные данные в вектор целых чисел, вычисляет таблицу сопряженности
y
значений, а затем проверяет, что все значения в этой таблице равны первому числу и что первое число больше 1.Первоначальная сложность заключалась в использовании только 2 пар скобок. Это достигается путем переопределения унарных функций
!
и?
бытьutf8ToInt
иprod
соответственно. (Я не могу использовать,all
потому что мне нужноa
). Есть четыре задания: два с=
и два с<-
. Это означает, что критерий равенства междуy
иz
не может использоватьy==z
ниy-z
;y%in%z
приходит на помощь.Определение этих функций использует все возможные цитаты: две двойные кавычки, две одинарные кавычки, и я буду нуждаться в двух кавычку в следующем абзаце, так что мне пришлось прибегнуть к
readLines()
вместоscan(,"")
. (Другие варианты, такие какscan(,letters)
илиscan(,month.abb)
все, использовали драгоценный камень,t
который я не мог сэкономить.)В этот момент у меня было большинство строительных блоков:
utf8ToInt
,prod
,table
,readLines
,%in%
. Три символа появляется три раза в этих именах:ent
. Во-первых, я обнаружил, чтоtable(foo)
эквивалентноxtabs(~foo)
сохранениюe
. Я могу спастиn
иt
с помощью трюка с шестнадцатеричным / восьмеричным кодом ; самое лучшее решение - использоватьu\164f8ToI\x6Et
(в кавычках) дляutf8ToInt
.источник
NA
это не считается истинным значением (в R, если (NA) x иначе y вызывает ошибку, тоNA
есть не является ни правдивым, ни ложным) )Брахилог , 18 байт
Попробуйте онлайн!
К сожалению, я не могу удалить переводы строки, так как
ḅ
на число вызывает сбой.источник
Рубин ,
8778 байт26 символов повторяются 3 раза каждый
Попробуйте онлайн!
источник
gets
и;
. Поменял его, короче лямбда все равноR
132116 байтОн также не содержит никаких комментариев или лишних строк, хотя, вероятно, это будет мой единственный раз, когда я вызываю функцию в коде
crudcardounenforceableuploads
.Там, вероятно, есть отличная анаграмма где-то для имени функции!Спасибо Джону Двораку за то, что он указал на хороший решатель анаграмм, который я использовал для названия.Таблица символов:
Примеры:
источник
>
s, переключив сравнение сf
. Также можно использовать=
вместо<<-
.strsplit
Вероятно, это неизбежно, что является источником большинства других символов.utf8ToInt
вместоstrsplit
, но не уверены, поможет ли это. Также, возможно, включить ссылку на TIO?.
кажется лишним.BASH 144 байта
Эта строка кода принимает строку ввода в качестве ввода. "grep -o." помещает каждый символ в новую строку. "uniq -c" подсчитывает использование каждой главы. Сценарий awk создает массив с каждым использованием в качестве отдельного элемента и выводит значение true, если существует только 1 индекс массива, а значение равно как минимум 2. Каждый символ используется 4 раза, поэтому этот источник возвращает значение true
источник
Stax ,
262418 байтПопробуйте онлайн!
Самоекороткоерешение на данный момент, которое использует только печатные ASCIIs, побитые MATL.Думаю, я подошел к проблеме неправильно. Повторение рабочего блока не является ни гольфом, ни интересным. Теперь, по крайней мере, выглядит лучше ...
объяснение
:u{m*
производит мусор, который не влияет на вывод.источник
#
и две:
, ты прочитал мой ответ во второй строке? Вы только что пропустили первый абзац в моем "Объяснении"?Пип , 22 байта
Попробуйте онлайн!
объяснение
Каждый персонаж встречается дважды.
Альтернативная 22-байтовая версия с меньшим числом операций без операций:
источник
SmileBASIC,
164152148140 байт35 разных персонажей, повторяется 4 раза каждый.
Комментарии не использовались (но выражение после
neXT
фактически никогда не оценивается)Скрипт для проверки ответов:
Показать фрагмент кода
источник
Сетчатка 0.8.2 ,
16890 байтВывод будет пустым, если false, или непустым, если true.
Попробуйте онлайн
Основная программа (39 байт)
объяснение
Вся основная программа находится в беззвучном цикле. Первый этап сортирует входные данные. Второй этап напечатает текущую строку, если она состоит из последовательных пар разных символов. Третий этап удаляет последнее вхождение каждого символа (удаление одного из каждого символа в строке).
По поводу барахла наверху: порядок важен. В дополнение к необходимости быть синтаксически допустимым, точка с запятой должна быть после звездочек и перед обратными галочками, если она
*
находится в строке конфигурации, чтобы она не печаталась.источник
CoffeeScript 1 ,
969390 байтПопробуйте онлайн!
Начал с моего ответа ES6, но вернулся к использованию
Array.every
.323130 жетонов @ 3 каждыйисточник
Pyth, 30 байт
Ведущие пробелы необходимы.
Попробуйте онлайн!
Актуальная программа просто
&q1lJ{hMrSz8<1hJ
. Я просто добавил строку,"&8<MQSlqr{"
чтобы она не отличалась. Но чтобы строка не печаталась сама, мне пришлось добавить пробел, поэтому я добавил 2 пробела.length_encode
здесь (r <any> 8
) принимает последовательность и выводит длину каждого цикла одного и того же символа, например"aaabbcc"
становится[[3, "a"], [2, "b"], [2, "c"]]
.Таким образом, он принимает входные данные, сортирует их для кодирования длины и берет первый элемент каждого списка в результирующем списке (например, предыдущий пример станет
[3, 2, 2]
). Это дает счетчик того, сколько раз встречаются символы. Затем он дедуплицируется (предыдущий пример станет[3, 2]
), и J устанавливается на это.Затем он проверяет, равна ли длина 1, т. Е. Существует только 1 уникальное число раз, когда символ встречается, и если это> 1, то есть> = 2.
Там может быть встроенный, чтобы заменить
rSz8
или,hMrSz8
но я не могу найти один.источник
C (gcc) , 153 байта
Попробуйте онлайн!
Возвращает адрес строки как истинное значение и ноль как ложное значение.
источник
Perl 6 ,
5857 байтПопробуйте онлайн!
Оказывается, трехсимвольная версия немного короче двухсимвольной.
источник