Введение
Я наткнулся на эту (бесполезную) схему на днях, когда смотрел телевизор. Я назвал его «паттерном 9», потому что первое число, которое использовало его, было 9. Суть его в том, что вы вводите число (скажем, х ), а затем вы возвращаетесь:
- Икс
- х + ( х / 3) [назовем это у ]
- две трети у [назовем это г ]
- z + 1
Итак, если бы я поместил внутри этого шаблона число 9 как х , это то, что получится:
- 9 ( 9 )
- 12 ( 9 + 9/3 ) [9 над 3 - это 3, а 9 + 3 - это 12]
- 8 ( 12 умножить на две трети) [треть из 12 - это 4, а 4 * 2 - это 8]
- 9 ( 8 + 1 - 9)
Вызов
Напишите мне функцию (на любом языке программирования), которая принимает число и выводит целочисленный массив, используя шаблон.
Примерно как этот псевдо-код:
function ninePattern(int myInt) returns IntegerArray {
int iterationA = myInt + (myInt / 3);
int iterationB = iterationA * (2 / 3);
int iterationC = iterationB + 1;
IntegerArray x = [myInt, iterationA, iterationB, iterationC];
return x;
}
Разъяснения
Обсуждения были вызваны в комментариях относительно спецификаций вопроса. Этот раздел предназначен для пояснения некоторых из них.
"лучше считать в байтах, чем в символах"
Я выбрал персонажей, потому что (по крайней мере для меня) было бы легче судить. Конечно, я не могу изменить это сейчас. (множество ответов уже опубликовано)
«Округление»
Округление следует за этой рифмой:
Если это 5 или больше, поднять счет
Если это 4 или меньше, пусть отдыхает
Проще говоря, если это что-то вроде 4,7 или 3,85, округлите их до 5 и 4 соответственно.
Примеры
Input => Result
9 => [9, 12, 8, 9]
8 => [8, 11, 7, 8]
6 => [6, 8, 5, 6]
23 => [23, 31, 21, 22]
159 => [159, 212, 141, 142]
Однако, если числа примерно такие же, как 2.3 или 10.435446, округлите их до 2 и 10 соответственно.
"языковая поддержка"
Вы можете не использовать функции и / или массивы, ЕСЛИ И ТОЛЬКО ЕСЛИ выбранный вами язык не поддерживает их. Если это так (даже если это увеличит количество ваших персонажей), вы должны их использовать .
источник
Ответы:
MarioLANG,
659621591582556543516458418401352308369 байтокругление довольно дорогое: /
Попробуйте онлайн
Ну, это было веселее, чем ожидалось, это, вероятно, не оптимально, но я думаю, я добираюсь туда
Время объяснения:
(для версии 352 байта)
сначала мы получаем аргумент и печатаем его:
достаточно просто
Затем мы переходим к основной части программы: разделение ввода / 3
который является слегка измененным преобразованием деления мозга
которые берут для ввода
и верну тебе
как только мы получили деление, мы используем его, чтобы получить сумму п и н / д и распечатать его
тогда нам нужно сделать еще одно деление: (2 * (n + n / d)) / 3
таким образом, мы получаем (2 * (н + н / д)
и положить его с 3 обратно в деление
в этот момент все взрывается, Марио застрял в бесконечном цикле, делая деление на большее и большее число, навсегда.
и чтобы установить, что нам нужен способ провести различие между первым и вторым делением, в конечном итоге, о радость, у нас есть способ
в основном мы смотрим, если х в
0, если это означает, что мы находимся на первом дивизионе
иначе мы находимся во втором делении, и мы просто печатаем результат деления, добавляем 1, затем печатаем его снова
и вуаля легко, как пирог.
источник
Emotinomicon 99 байтов, 33 символа
Объяснение:
источник
MATL, 14 байтов
Попробуйте онлайн
Довольно просто,
v
объединяет стек в массив.Xo
преобразуется в целочисленный тип данных, и все последующие операции являются целочисленными операциями.источник
Чеддер , 27 байт
$0
переменная с вводом. Чеддер просто не является языком игры в гольф ¯ \ _ (ツ) _ / ¯, и это не является конкуренцией, потому что входная функциональность Чеддера была сделана после этого испытания.Ungolfed:
источник
Ява,
86828485 символовБуква,
d
помещенная сразу после целого числа, делает целое число adouble
.Ungolfed:
Без класса (
class c{}
длиной 8 символов) он сокращается до 76 символов:Более точная версия в 110 символов (118 с перечислением) - она использует
float
s, потому что ни у кого нет места для приведенияMath#round(double)
:источник
I + (I / 3)
использует целочисленное деление, что означает, что дроби отбрасываются и, следовательно, результат не округляется должным образом.Ява,
5680 байтКак отметили некоторые пользователи, это решение (как и некоторые другие в java) неправильно округляет данные. Так что теперь я представляю немного более длинное решение, которое должно вернуть правильный результат.
или 60 байтов версия lamda
Гольф версияи без золота
или 36 байтов, определенных как лямбда
источник
Java, 64 байта
Ноты
Ungolfed
Выход с i = 9
источник
Царапина, 33 байта
Запрашивает ввод, устанавливает
a
округленный ввод, устанавливаетb
иc
вносит соответствующие изменения, затем произносит все четыре числа, разделенные запятыми.источник
Java 8 лямбда,
109817975 символовПотому что ... ты знаешь ... даже на Яве можно играть в гольф ...
Лямбда разгулялась в классе:
Я предполагаю, что мне разрешено использовать длинные, поскольку они также являются целочисленным типом. К сожалению, нужно правильно округлить целые числа, и поэтому «короткий» бросок не работает. Используя longs, нам не нужно приводить результаты округления к целым.Обновить
Используя симпатичный маленький +0,5 и трюк после чтения, мы сохраняем правильное округление и сохраняем 2 символа!
Кроме того, этот трюк больше не требует использования long, поэтому мы можем переключиться на бритье еще 4 символов.
источник
a->{
и окончательный вариант}
для -5 байтов.Mathematica - 21 байт
Только что получил Mathematica от моих братьев RPi, так что попробуйте его ради удовольствия, и что может быть лучше, чем вызов PPCG.
Определяет анонимную функцию. Попробуйте это как:
источник
Python 3, 45 байт
Посмотреть этот код работает на ideone.com
источник
Луа, 52 байта
Эта программа принимает число аргументом командной строки и возвращает соответствующий массив. Программы на языке lua технически являются функциями, поскольку интерпретатор всегда заключает их в функцию. Это также тот механизм, который используется, когда вы «вызываете» коды в других файлах (в основном он использует
loadfile
/dofile
).источник
На самом деле, 21 байт
Эта программа объявляет функцию, которая выполняет необходимые операции над значением верхнего стека.
Попробуйте онлайн! (дополнительный
.
в конце оценивает функцию и печатает результат)Объяснение:
источник
Mathcad, [tbd] байт
Эквивалентность байтов Mathcad codegolf еще не определена. Принимая подсчет клавиатуры в качестве грубого эквивалента, решение составляет около 40 байтов.
источник
05AB1E , 15 байтов
Код:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Пайк, 11 байт
Попробуй это здесь!
источник
Javascript, 50 байт
Я преобразовал свое решение Java в JavaScript и немного уменьшил его.
источник
C ++ 0x -
95102185189109129 символовDegolfed
источник
p+(p/3)*(2/3)
чтоp+(2*p/9)
вместо(p+(p/3))*(2/3)
Эрланг, 80 байт
Для запуска сохраните как f.erl , скомпилируйте и вызовите функцию. Он вернет список целых:
Обратите внимание, что Erlang автоматически конвертирует int в символы ASCII, если вы находитесь в диапазоне значений ASCII, потому что Erlang не имеет тип char . Вызов функции с 100 дает вам лучшую читаемость [100,133,88,89] .
Ungolfed:
источник
Эрланг, 46 байт
Ответ вдохновлен @ fxk8y (я не смог опубликовать комментарий к его ответу)
Также вы можете увидеть результаты с:
источник
Pyth, 20 байт
Объяснение:
Тест здесь
источник
Джольф, 17 байт
Определяет функцию
Ώ
. Он принимает ввод неявно, поэтому он также удваивается как полная программа. Попробуй это здесь!источник
Mathematica, 51 байт
Анонимная функция, соответствующая текущей (на момент публикации) версии публикации, которая подразумевает округление на каждом шаге.
FoldList
это типичная операция в программировании. Он вызывается какFoldList[f, list]
и применяет функцию с двумя аргументамиf
к результату (или к первому элементу списка в первой итерации), принимая следующий элемент списка в качестве второго аргумента.Ungolfed:
#2 @ # &
это анонимная функция, которая применяет свой второй аргумент к первому. Следовательно, аргумент спискаFoldList
состоит из последовательных функций, которые будут применены к входным данным.Поскольку входное значение является целым числом, а деления на 3, результата никогда не будет, как, например, 4.5, поэтому нет необходимости беспокоиться о правилах округления, когда последняя цифра является
5
: она всегда будет явно ближе к одному целому числу или другому.источник
Dyalog APL , 33 байта
источник
Desmos, 37 байт
Попробуйте онлайн
Yay для нетрадиционных языков!
источник
CJam, 21 байт
Обратная связь приветствуется
объяснение
qi__
- читать входные данные как целое число и дублировать его дважды3D/+mo
- Разделите один экземпляр ввода на 3, затем добавьте его ко второму экземпляру, чтобы сделать y_2d3/*i
- Дублируйте у, затем умножьте его на 0,6Изменить: Забыл сделать первые три двойной, поэтому программа была сломана. Исправлена.
источник
Аксиома, 59 байт
тестовое задание
источник
PHP, 60 байт
Попробуйте онлайн!
источник
PHP, 67 байт
источник