Напишите программу, которая принимает одно строчное слово в качестве входных данных и выводит количество пар букв, которые имеют одинаковое количество букв между ними в слове и в алфавите.
Например, в слове «природа» у нас есть 4 пары:
- nr: так как внутри слова есть три буквы (a, t, u) и три буквы между ними в алфавите (o, p, q)
- ae: поскольку внутри слова есть три буквы между ними (t, u, r) и три буквы между ними в алфавите (b, c, d)
- tu: так как между ними нет букв внутри слова и между ними нет букв в алфавите
- tr: поскольку внутри слова (u) между ними есть одна буква, а в алфавите (-ах) - одна буква
Поскольку существует четыре пары, выход в этом случае должен быть 4.
rjjjnfffr
? Это будет одна пара (nr
) или две пары (nr
иrn
)? А как насчетabzab
? Это две парыab
или одна?Ответы:
Pyth, 19 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
R, 110 байт
Degolfed:
источник
Октава, 41 байт
источник
CJam, 36 байт
Попробуйте онлайн.
источник
J, 27 байт
Использование:
Объяснение:
Попробуйте это онлайн здесь.
источник
CJam, 25 байтов
Попробуйте онлайн
Объяснение:
источник
JavaScript (ES6), 98 байт
использование
объяснение
источник
Python 2, 91 символ
источник
MATLAB, 84 байта
Эта строка запрашивает строку в качестве ввода. Затем он создает все возможные пары букв и делает то же самое для их соответствующих индексов. Затем мы определяем, соответствует ли (абсолютная) разность значений, чтобы в итоге суммировать все случаи, где это происходит. Результат отображается в командном окне.
источник
JavaScript ES7, 93
Используя понимание массива . ES6 с
.map.map.map
на 2 байта длиннее.Попробуйте запустить фрагмент ниже с Firefox
источник
PowerShell,
114100 байтДовольно просто, но использует пару трюков.
param(..)
принимает наш вклад, сохраняет его$a
.$b
для.length
нашего ввода. Это сохраняет байт позже.0..($b-1)|%{..}
является эквивалентомfor($i=0;$i-le($b-1);$i++){..}
цикла, но намного короче.$i
, чтобы сохранить это в ...($_+1)..$b|%{..}
следующийfor
цикл, так$_
как позиционируется только на внутренний цикл.+
для сохранения группы байтов)-eq
с позиционной разницей в массиве. Поскольку мы явно вводим строчные буквы, нам не нужно выполнять преобразование регистра. Это утверждение вернет либоTrue
илиFalse
.$o
, поэтомуTrue
добавим 1, аFalse
добавим 0.$o
. Обратите внимание, что нам нужно сделать то же самое tricksy-cast-to-int,+
чтобы избежать печати,False
если совпадений не было.источник
Руби, 74
Ничего супер интересного здесь. Я хотел бы использовать,
eval("s[i].#{["succ"]*(j-i)*?.}")
но ... казалось слишком долго.источник
Matlab
(94)(80)Биноминальная функция выдает глупое исключение, когда k больше n, и я не могу перехватить исключения внутриКому нужна встроенная функция ??arraycell
функции, в противном случае я мог бы играть в нее больше.Теперь я мог просто сделать это вручную, упрощая биномиальное (n, 2) = n / (2 (n-2)!) = N (n-1) / 2. Заметьте, что это последнее значение представляет собой сумму целых чисел от 1 до n-1, это не вызывает каких-либо исключений в matlab, благослови Бог математику.
PS: этот метод отличается от slvrbld
выполнение
источник