задача
Ваша задача - создать строку, содержащую средние символы строки. Первый символ результата будет средним символом первого символа (который является первым символом) и вторым символом среднего двух первых символов и так далее.
Что такое средний характер?
Строки - это массивы байтов. Средний символ строки можно найти, рассчитав среднее значение ASCII символов в строке и приняв соответствующий символ ASCII.
Например, строка "Hello!"
может быть записана как последовательность байтов 72 101 108 108 111 33
. Среднее значение ascii равно 533/6 = 88.833 ... и когда оно округляется до ближайшего целого числа, мы получаем 89, что является кодом ascii для заглавной буквы Y
.
правила
- Вы можете предположить, что ввод содержит только печатные символы ASCII
- Входные данные могут быть прочитаны из стандартного ввода или как аргументы командной строки или как аргументы функции
- Выход должен быть стандартным. Если ваша программа является функцией, вы также можете вернуть строку, которую вы иначе напечатаете.
- Это должна быть целая программа или функция, а не фрагмент
- Применяются стандартные лазейки
- Целые числа округляются по функции
floor(x+0.5)
или аналогичной функции.
Как мне победить?
Это код-гольф , поэтому самый короткий ответ (в байтах) за выигрыш.
Примеры
Hello!
→HW^adY
test
→tmop
42
→43
StackExchange
→Sdccd_ccccddd
Ответы:
Brainfuck 106 байт
Это мое первое участие в код-гольфе, пожалуйста, будьте осторожны! Это работает, но brainfuck не может обрабатывать числа с плавающей точкой (не то, что я знаю), поэтому округленное значение всегда является нижним (может исправить мой алгоритм позже).
Кроме того, алгоритм усредняет значения 2 на 2, что означает, что он может быть неточным в некоторых местах. И мне нужно исправить ошибку, которая печатает число в конце вывода тоже.
источник
Pyth, 16 байт
Довольно просто. Используется
s+.5
вместо округления, потому что по какой-то причинеround(0.5, 0)
0 в Python.источник
0.5
округлено должно быть1
.Q,
1512 байт12 байтов как выражение
или 15 байт как функция
использует в своих интересах
источник
"c"$avgs"i"$
? Я не думаю, что решение может стать намного более простым, чем это. :)"c"
`c"i"
и` i.CJam, 19 байтов
Попробуйте онлайн в интерпретаторе CJam .
источник
Perl:
3130 символов(29 символов кода + 1 символ командной строки.)
Образец прогона:
источник
C #
189 135 134106 байтМожно увидеть здесь
Первый раз игрок в гольф
источник
К, 36 байт
Использование:
_ci
а также_ic
преобразовать ASCII в символы и наоборот, соответственно.{(+/x)%#x}
это классическая идиома для вычисления среднего. Довольно просто в целом.Редактировать: о, неправильно прочитал спецификацию. `0: необходимо для вывода результата в стандартный вывод. Жду разъяснений по поводу ввода ре. Вопрос Денниса
источник
{[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}
.`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
`c$_.5+{(+\x)%+\~^x}`i$
для 24. Это может быть короче (`c$`i${(+\x)%+\~^x}`i$
), но ваш REPL ( johnearnest.github.io/ok/index.html ) не округляется правильно при приведении от float к int. С тех пор я бы не стал называть это решением ak,_ci
и_ic
, насколько я могу судить, нигде в спецификации K50:
нигде не печатается на стандартный вывод, а вместо этого читает txt-файл с диска._ci
и_ic
полностью заменены в K5 такими формами`c$
. Изложенное мной оригинальное решение совместимо с Kona, основанным на K2 / K3. Я обычно стараюсь не публиковать решения с помощью ОК, потому что семантика все еще меняется и частично неточна.`0:_ci_0.5+{(+\x)%1.+!#x}_ic
Mathematica, 75 байт
источник
Юлия,
8581 байтЭто создает безымянную функцию, которая принимает строку и создает вектор ее кодовых точек ASCII. Средство берется для каждой последовательной группы, округляется до целых чисел, преобразуется в символы, объединяется в строку и печатается в STDOUT.
источник
Руби, 46
ideone .
С извинениями перед w0lf мой ответ оказался настолько отличным, что казалось, что его стоит опубликовать.
$<.bytes
перебирает каждый байт в stdin, поэтому мы печатаем скользящее среднее в каждом цикле. «% c» преобразует число с плавающей точкой в символ, округляя и беря ASCII, поэтому все, что нам нужно сделать, это добавить 0,5, чтобы сделать его округленным правильно.$.
это магическая переменная, которая начинается с нуля - она должна хранить счетчик строк, но, поскольку здесь нам нужно количество байтов, мы просто увеличиваем его вручную.источник
Mathcad, 60 "байтов"
Mathcad - это математическое приложение, основанное на двухмерных рабочих листах, состоящих из «областей», каждая из которых может быть текстом, математическим выражением, программой, графиком или компонентом со скриптом.
Математическая или программная инструкция выбирается из панели инструментов палитры или вводится с помощью сочетания клавиш. В целях игры в гольф под операцией («байтом») понимается количество операций клавиатуры, необходимых для создания имени или выражения (например, чтобы установить для переменной a значение 3, мы бы написали a: = 3. Оператор определения : = это одно нажатие клавиши «:», а являются и 3 дает в общей сложности 3 «байт» программированию. для оператора требует ввода CTL-shft- # (или одним нажатием кнопки на панели инструментов программирования) , чтобы снова эквивалентно 1 байт
В Mathcad пользователь вводит команды языка программирования, используя сочетания клавиш (или выбирая их на панели инструментов программирования), а не записывая их в тексте. Например, при вводе ctl-] создается оператор цикла while, который имеет два «заполнителя» для ввода условия и одну строку тела соответственно. Тип = в конце выражения Mathcad заставляет Mathcad вычислить выражение.
(Количество байтов). Рассматривая его с точки зрения пользовательского ввода и приравнивая одну операцию ввода Mathcad (обычно клавиатура, щелчок мыши на панели инструментов, если нет ярлыка kbd) к символу и интерпретируя его как байт. csort = 5 байт, поскольку он набирается символ за символом, как и другие имена переменных / функций. Оператор for - это специальная конструкция, которая занимает 11 символов (включая 3 пустых "заполнителя" и 3 пробела), но вводится с помощью ctl-shft- #, следовательно, = 1 байт (аналогично токенам в некоторых языках). Ввод '(цитата) создает сбалансированные скобки (обычно), поэтому считается 1 байт. Индексирование v = 3 байта (тип v [k).
источник
Python 3, 66 байт
Если я использую
round()
вместоint(.5+
и т. Д., Он сохраняет один символ, но технически не соответствует задаче: Pythonround()
раунды делятся пополам до ближайшего четного числа, а не вверх. Тем не менее, он работает правильно на всех входах образца.Я также чувствую себя немного грязно из-за того, что не заканчиваю вывод новой строкой, но для этого не нужно ...
источник
print(end=chr(int(...))
чтобы сохранить несколько байтовJavaScript (ES6), 75 байт
Я не могу поверить, что пока нет ответа JS с этой техникой ...
источник
Python 2, 71
С каждым новым символом обновляется сумма символов
s
и количество символовi
для вычисления и добавления среднего символа.источник
print
. Будет ли это работать с Python 2? Я только сейчас забыл, как подавить переносы вprint
выражении ... запятая делает его пробелом вместо этого, верно?)print _,
оставить пробел, а не перевод строки, но нет хорошего способа пропустить пробел. Хороший вызов сend
аргументом Python 3 , я забыл об этом.print'\b'+_,
Рубин 59
61Тест: http://ideone.com/dT7orT
источник
c+=1;(s/c)
→(s/c+=1)
ideone.com/H2tB9WЯва, 100
Как и многие другие ответы здесь, я суммирую и усредняю в цикле. Просто здесь, чтобы представлять Java :)
Мой оригинальный код 97, но он возвращает только измененный,
char[]
а не распечатывает его:Теперь это просто достаточно долго для скроллинга появляться для меня, так вот версия с некоторыми разрывами строк, только потому , что:
источник
test
что это массив символов, просто используйтеf(test);
. Если это объект String, то вы бы использовалиf(test.toCharArray());
. Строковые литералы в порядке , как это тоже:f("Hello!".toCharArray());
toCharArray()
Я глупый, я пытался нарушить это с некоторым кастингом. Спасибо.C 62 байта
(ссылка идеально)
Результаты немного отличаются от примеров OP, но только потому, что этот код округляет 0.5 вместо повышения. Уже нет!
источник
R
135127 байтЭто стало очень быстро, и я действительно ошибся с первого раза :) Нужно правильно прочитать вопросы.
Тестовый забег
источник
utf8ToInt
поможет! У меня есть 68-байтовый гольф этого, если вы хотите обновить его.Perl 5, 41 байт
беги как
источник
TSQL, 118 байт
Возвращение символов по вертикали
источник
> <> , 30 байт
&
регистрВы можете попробовать его на онлайн-переводчике, но затем вам нужно будет использовать следующую версию, потому что онлайн-переводчик помещает поле кода в прямоугольник и применяется
?
к пробелам.источник
05AB1E , 15 байт [Не конкурирует?]
Попробуйте онлайн!
источник
D
и}
, и заменяяs
наy
..p
теперь тоже 1 байтη
xDJapt , 13 байт (не конкурирует)
Проверьте это онлайн!
Как это работает
источник
Japt , 11 байт
Попытайся
источник
PHP , 176 байт
Пример:
Самое большое решение на данный момент, но я думаю, что на основе php оно не может быть намного короче. 2 байта можно сохранить, удалив символы новой строки.
источник
JavaScript ES7, 122 байта
В основном все происходит в этом бите
Остальное зацикливание / преобразование кодов символов
Разделить:
Если функции не разрешены:
133 байта
Фрагмент ES5:
источник
Python 2, 106 байт
Это не достаточно коротко. Поскольку это python, он слишком многословен, вы даже можете прочитать, что он делает, посмотрев код. Но это работает.
источник
Матлаб, 43
Использование анонимной функции:
Примеры:
источник
JavaScript ES6, 111 байт
Это очень долго, отчасти благодаря JavaScript
String.fromCharCode
иcharCodeAt
функциям JavaScript . Фрагмент стека содержит некомментированный, прокомментированный, тестируемый код.источник
Фактор, 80 байтов
источник