Вызов
Учитывая строку, как показано Hello World!
, разбить его на его символьные значения: 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33
.
Затем вычислить разность между каждой последовательной парой символов: 29, 7, 0, 3, -79, 55, 24, 3, -6, -8, -67
.
И, наконец, подвести их и напечатать конечный результат: -39
.
правила
- Применяются стандартные лазейки
- Не используйте готовые функции, которые выполняют эту задачу
- Творческие решения поощряются
- Веселиться
- Это помечено как code-golf , самый короткий ответ в байтах выигрывает, но не будет выбран.
code-golf
string
number
arithmetic
array-manipulation
dkudriavtsev
источник
источник
Ответы:
Python, 29 байт
Сумма разностей образует телескопический ряд, поэтому большинство слагаемых сокращают и
(s 1 - s 0 ) + (s 2 - s 1 ) +… + (s n-1 - s n-2 ) + (s n - s n-1 ) = s n - s 0 .
Если разрешено использование байтовой строки в качестве входных данных
будет работать также на 19 байтов .
Проверьте оба на Ideone .
источник
MATL , 2 байта
Попробуйте онлайн!
Объяснение:
d
получает разницу между последовательными символами иs
суммирует полученный массив. Затем значение сверху стека печатается неявно. Больше нечего сказать по этому поводу.Интересно, что даже несмотря на то, что Деннис обнаружил потрясающий ярлык, его использование в MATL будет значительно дольше.
источник
Желе , 3 байта
Попробуйте онлайн!
Возьмите
O
rdinals символов входной строки, затемI
nrrements этого списка, затемS
um этого списка.источник
MATLAB, 16 байтов
Это создает анонимную функцию с именем ,
ans
которое можно назвать как:ans('Hello world!')
.Вот онлайн-демонстрация в Octave, которая требует дополнительного байта
+
для явного преобразования входной строки в числовой массив перед вычислением разницы между элементамиисточник
Python, 63 байта
Идео это!
источник
Cubix , 13 байт
Cubix - это двумерный язык, обернутый вокруг куба.
Проверьте это онлайн! Это соответствует следующей сети кубов:
Где IP (указатель инструкции) начинается в верхнем левом углу крайней левой грани.
Как это устроено
Сначала IP попадает в зеркало,
/
которое перенаправляет его наi
верхнюю поверхность. Верхняя грань представляет собой цикл, который непрерывно вводит коды, пока не будет достигнут EOF. Когда вход пуст, результатi
равен -1; IP поворачивается влево от?
, нажимая/
на крайнее правое лицо и выполняя следующие команды:;
- Поп верхний элемент (-1).#
- толкать длину стека.t
- Взять верхний элемент и получить элемент по этому индексу в стеке. Это подтягивает нижний предмет.-
- вычесть.O
- Вывести в виде целого числа./
- Отклоняет IP до того@
, на котором заканчивается программа.источник
C #, 22 байта
Полный исходный код с тестовым примером:
C # с LINQ, 17 байт
Более короткая версия, использующая LINQ, благодаря hstde :
Тем не менее, дополнительный импорт необходим:
источник
s=>s.Last()-s[0];
будет только 17 байтРубин, 23 байта
Присвоить переменную like
f=->s{s[-1].ord-s[0].ord}
и вызвать likef["Hello World!"]
Использует наблюдения Денниса о телескопических сериях.
источник
$><<
.сетчатый, 12 байтов
Попробуйте онлайн!
Используя наблюдения Денниса , мы можем сократить итерационный процесс до более простого.
источник
Brain-Flak , 51 байт
48 байтов кода плюс три байта для
-a
флага, который позволяет ввод ASCII (но десятичный вывод. Насколько удобно.: D)Попробуйте онлайн!
Это немного сложнее, чем мой другой ответ, хаха. Пройдемся по нему.
источник
05AB1E , 3 байта
Попробуйте онлайн!
Использует кодировку CP-1252.
объяснение
источник
Брахилог , 7 байт
Попробуйте онлайн!
объяснение
Поскольку вычитание работает только для ввода двух целых чисел, оно выполнится успешно, как только выбран префикс
[33, 72]
.источник
Haskell, 32 байта
источник
R
69 4332 байтаОчень неконкурентный ответ, хотя я думал, что было бы весело продемонстрировать возможное решение в R.
Единственный интересный аспект этого ответа - использование
sapply
иcharToRaw
. Сначала я разбил строку на вектор символов, которые я хочу преобразовать в целочисленные представления ASCII.charToRaw
Функция не векторизована в R и вместо цикла по каждому значению в вышеупомянутом векторе I использовании ,sapply
которые эффективно векторизацию функции. Затем возьмите 1-ую разницу и затем сумму.Редактировать: Оказывается,
charToRaw
преобразовать строку в вектор, где каждый элемент является необработанным представлением каждого символа, следовательно, нет необходимости использоватьstrsplit
иsapply
Edit2: Оказывается, есть еще лучший способ, функция
utf8ToInt(x)
делает именно то,strtoi(charToRaw(x),16)
что означает, что мы можем сохранить еще несколько байтов (идея взята из ответа @ rturnbull на другой вопрос):источник
Perl, 19 байт
Включает +1 для
-p
Дайте ввод на STDIN без окончательного перевода строки
slope.pl
:Если вы уверены, что входная строка содержит как минимум 2 символа, эта 17-байтовая версия также работает:
источник
NodeJS, 82 байта
Объяснение:
JavaScript, 79 байт
Та же идея, что и выше, с вводом функции вместо аргумента.
источник
x
что это вход. Вы должны на самом деле получить вход.f=x=>{...;return t}
чтобы сохранить 2 байта;)JavaScript ES6,
4239 байтИспользование @Dennis наблюдения о суммах телескопов.
Я думаю, что в этом случае тривиальное решение является самым коротким.Сэкономили 3 байта, избавившись от
charCodeAt
повторения, как предложено @Neil.источник
s=>s.slice(-1).charCodeAt()-s.charCodeAt()
что оказалось такой же длины.charCodeAt
это довольно долго, вероятно, есть способ сохранить байты, избегая повторения.f=s=>(s[1]?-f(s.slice(-1)):0)-s.charCodeAt()
Далее 28 байт
Принимает список символов в стеке (стандартный метод Forth для получения параметров.) Символы берутся так, что верхняя часть стека является первым символом строки. Я перемещаю нижнюю часть стопки вверх, меняю местами, затем вычитаю и печатаю. Мусор остается в стеке, а вывод выводится на стандартный вывод.
Если бы каждый символ помещался в стек по порядку, а не в обратном порядке, программа была бы на 2 байта короче. Не уверен, что это разрешено, потому что обычно вы выдвигаете аргументы в обратном порядке.
Попробуйте онлайн
Вызывается так:
источник
Ява, 42
Ungolfed:
Объяснение:
Это использует тот же принцип, что и телескопирование:
Обобщенный для любой последовательности символов длины
n
, ответ состоит в том,c[n-1] - c[0]
что все содержимое в середине сокращается.источник
PHP 7.1,
3331 байтИспользует отрицательные смещения строк, реализованные в PHP 7.1.
Запустите так:
Tweaks
$argn
источник
RProgN , 142 байта, неконкурентный
Неконкурентный, так как команда 'tostack' была добавлена после обнаружения этой проблемы (даже при том, что у нее ужасный счетчик байтов)
Тестовые случаи
объяснение
RProgN - эзотерический язык, над которым я работаю, имея в виду обратную польскую нотацию. В настоящее время он довольно многословен, с назначением переменной из 4 символов, но я планирую добавить немного синтетического сахара.
Кроме того, RProgN неявно обращается к аргументам из стека и возвращает их таким же образом. Любые строковые данные, оставленные в стеке после завершения программы, печатаются неявно.
источник
~{bid☼[+
и это немного восхитительно.PHP, 36 байт
→ сумма различий == разница между первым и последним символом
ord()
в PHP работает с первым символом строки→ нет необходимости явно сокращать его до одного символа
источник
Brain-Flak ,
3432 + 3 = 35 байт+3 из-за
-a
флага, необходимого для режима ascii.Попробуйте онлайн
Странно, но на самом деле более эффективно использовать определение, используемое в спецификациях, а не «хитрость» вычитания первого из последнего.
Это работает именно так.
источник
CJam ,
85 байтовБольшое спасибо Деннису за два предложения, которые удалили 3 байта
Попробуйте онлайн!
объяснение
Вычисляет последнее значение минус первое значение.
источник
)
вместоW=
, вам не нужно_
. Такжеc
как ярлык для0=
.Haskell, 36 байт
использование:
Haskell (Lambdabot), 31 байт
источник
sum.(tail>>=zipWith(-)).map fromEnum
например, это функция.Zsh , 22 байта
Попробуйте онлайн!
В арифметическом режиме
#name
получает код символа первого символа вname
. Мы устанавливаемc
последний символ и берем разницу между первым и последним кодами.источник
Haskell , 30 байт
Попробуйте онлайн!
Вычитает порядковый номер последнего символа из первого.
источник
Haskell, 61 байт
источник
Java 7,
10096 байтUngolfed & тестовый код:
Попробуй это здесь.
Выход:
-39
источник
Clojure, 31 байт
Кто-то свел задачу уже к одной операции.
источник