Этот вызов был опубликован в подразделе DailyProgrammer, и я подумал, что он станет отличным кандидатом на участие в соревнованиях по коду. Определение баланса букв основывается на расстоянии от точки баланса и стоимости буквы. Значение буквы может быть определено либо принятием его позиции с одним индексом в алфавите, либо вычитанием 64 из его значения ASCII. Кроме того, ценность буквы умножается на ее расстояние от точки баланса. Давайте посмотрим на пример STEAD
:
STEAD -> 19, 20, 5, 1, 4 ASCII values
This balances at T, and I'll show you why!
S T EAD -> 1*19 = 1*5 + 2*1 + 3*4
Each set of letters on either side sums to the same value, so
T is the anchor.
Однако следует отметить, что не все слова сбалансированы. Например, слово WRONG
не балансирует в любой конфигурации. Кроме того, слова должны балансировать на букве, а не между двумя буквами. Например, SAAS
было бы баланс, если бы была буква в середине двух A
с, но так как нет ни одного, это не балансирует.
Задание
Вы должны создать программу или функцию , которая принимает в качестве заглавного слова в качестве входных или функциональных аргументов , а затем производит один из двух выходов:
Если слово балансирует, то слово должно быть напечатано с левой стороны, пробелом, буквой привязки, другим пробелом и правой стороной.
function (STEAD) -> S T EAD
Если слово не сбалансировано, вы должны распечатать слово, а затем
DOES NOT BALANCE
function (WRONG) -> WRONG DOES NOT BALANCE
Вы можете предполагать, что все вводимые данные будут в верхнем регистре и будут только альфа-символы.
Пример ввода / вывода
function (CONSUBSTANTIATION) -> CONSUBST A NTIATION
function (WRONGHEADED) -> WRO N GHEADED
function (UNINTELLIGIBILITY) -> UNINTELL I GIBILITY
function (SUPERGLUE) -> SUPERGLUE DOES NOT BALANCE
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
function (A)
->A
вместо -> `A`?BALANCE DOES NOT BALANCE
Ответы:
Pyth, 49 байтов
Демонстрация.
Объяснение:
источник
Чистый bash (без coreutils или других утилит), 125
Стандартный расчет центра масс с использованием моментов о происхождении:
Тестовый вывод:
источник
Питон 3, 124
Этот код не проверяет потенциальные точки опоры, а скорее находит «центр масс» и проверяет, является ли оно целым числом. Это делается путем суммирования общей массы
a
и взвешенной по положению массыb
, чтобы найти центр массm=b/a
. Затем он печатает либо строку, разделенную в позицииm
, либо строку плюс"DOES NOT BALANCE"
, выбранную с помощью[_::2]
трюка с вырезанием списка.источник
CJam, 57 байтов
Это все еще можно немного поиграть в гольф.
Попробуйте онлайн здесь
источник
'@fm
короче64f-:i
.JavaScript (ES6),
211200160 байтПредыдущая попытка, 200 байт
Спасибо edc56 и nderscore за помощь в этом
демонстрация
Firefox и Edge только пока, так как это ES6
источник
j=0
внутрь звонкаcharCodeAt
:)С
236198192188180173 байтаРасширен с помощью main ():
Проверка:
источник
i,l=1,j;g(char*v){for(;v[i]&&l;++i)for(j=l=0;v[j];++j)l+=(i-j)*(v[j]-64);l?printf("%s DOES NOT BALANCE",v):printf("%.*s %c %s",--i,v,v[i],v+i+1);}
Примечание: используется неопределенное поведение :)CJam, 50 байтов
Используя интерпретатор Java, он завершается с ошибкой STDERR для несбалансированных слов.
Если вы попробуете код в интерпретаторе CJam , просто проигнорируйте все, кроме последней строки вывода.
идея
Моя «оригинальная идея» оказалась таким же подходом @xnor опубликовал несколько часов до меня. Тем не менее, здесь это идет:
Учитывая список значений (v 0 ,… v n ) , мы имеем, что v_t является якорем списка, если и только если выполняется любое из следующих эквивалентных условий:
tv 0 +… + 1v t-1 == 1v t + 1 +… tv n
(0 - t) v 0 +… + (n - t) v n == 0
0v 0 +… + nv n == t (v 0 +… + v n )
t: = (0v 0 +… + nv n ) / (v 0 +… + v n ) - целое число.
Код
В этой части мы начинаем немного веселиться с перегруженными операторами.
Для частного это происходит:
Для строки это происходит:
В этот момент происходит ошибка во время выполнения, так
""
как не имеет последнего символа. Стек печатается, и выполнение немедленно прерывается.источник
Юлия, 122 байта
Это создает безымянную функцию, которая принимает строку в качестве входных данных и возвращает строку. Чтобы назвать его, дайте ему имя, например
f=s->...
.Мы рассматриваем слово как одномерную систему, для которой нам нужно найти центр масс. Центр масс вычисляется как произведение масс масс на их местоположения, деленное на общую массу системы. Если вычисляемый центр является целым числом, он соответствует одной из букв в слове. В противном случае слово не сбалансировано.
Ungolfed + объяснение:
Примеры:
источник
PHP,
249174 байтаПринимает один аргумент командной строки.
Начальная попытка:
источник
Haskell,
161135 байтовПример использования:
Как это работает:
f
вызывает вспомогательную функцию,!
которая принимает два параметра, левую и правую часть слова в заданной позиции. Он останавливается, если обе части имеют одинаковый вес (функциюv
), или рекурсивно вызывает себя, когда первая буква правой части перемещается влево. Он заканчиваетсяDOES NOT BALANCE
сообщением, если правая часть пуста.источник
C,
183134 байтаНовая версия объяснила:
Как и две другие записи, он использует постоянное сложение с одной стороны и вычитание с другой, чтобы надеяться достичь нуля, что является показателем баланса. Мой первоначальный вывод повторно используется из первого ответа, хотя и немного изменен.
Старая версия объяснила:
Первый цикл (h) является основным итератором для длины строки. Второй цикл (i) накапливает (b), пока h == i. Как только это происходит, (b) сохраняется в (a), сбрасывается в 0 и затем продолжается до тех пор, пока не будет достигнут конец строки, где (a) сравнивается с (b). Если есть совпадение, цикл основного итератора прерывается, и вывод печатается.
источник
Рубин 175
Протестируйте это онлайн: http://ideone.com/G403Fv
Это довольно простая реализация Ruby. Вот читаемая программа:
источник
R 190 байт
Как неназванная функция. Я думаю, что смогу получить еще немного, но это подождет.
Немного разгулялся с кратким объяснением
Это не ставит новую строку в конце.
Тестовый забег
источник
C, 142 байта
Благодарим какого-то пользователя за то, что он меня избил :)
источник
Java, 240 байт
источник