Учитывая (любыми средствами) два разных натуральных числа (любого разумного размера), выведите (любыми средствами) квадрат их суммы, как в примерах ниже:
Учитывая 4 и 3, вывод:
12 12 12 12 9 9 9
12 12 12 12 9 9 9
12 12 12 12 9 9 9
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
Учитывая 1 и 3, вывод:
3 9 9 9
3 9 9 9
3 9 9 9
1 3 3 3
Пробелы могут варьироваться в пределах разумного, но столбцы должны быть выровнены по левому краю, выровнены по правому краю или (псевдо) центрированы.
Завершающий перевод строки хорош, но стандартные лазейки - нет.
Это код-гольф, поэтому включите заголовок, как # LanguageName, 123
в вашем ответе, где число - это символы (байты для языков, которые не основаны на тексте). Упаковка кода в большие символы Unicode не допускается.
Бонус: -3, если ваш код выводит только один квадрат, когда одно из чисел равно 0; например, учитывая 0 и 3, вывод:
9 9 9
9 9 9
9 9 9
Ответы:
J 9 байт - 3 = 6
Вдохновленный ответом APL @ NBZ , обыгравшимся @randomra. Это определяет глагол, который принимает массив чисел. Используется следующим образом:
Я также требую 3-байтовый бонус, так как ввод 0 производит субматрицы нулевого размера:
объяснение
У J есть определенное преимущество в этом вызове. Помимо проблем с манипулированием массивами на завтрак, он печатает 2D-матрицы в правильном формате по умолчанию.
источник
table flipper
смайлика ASCII (╯ ° □ °) ╯︵ ┻━┻Октава, 45 байт - 3 = 42
объяснение
Это создает два вектора (предположим
m = 4
иn = 3
):ones(n, 1)
создает массив размером одинn x 1
, поэтому умножим их наn
:Затем векторы умножаются поэлементно, с автоматическим расширением широковещания, так что векторы из 7 элементов создают матрицу из 7х7 элементов:
Например, умножение первой строки
a
наb
дает:И аналогично для остальных рядов
a
.Выход:
Вы можете попробовать это здесь на Ideone
источник
s=
. У нас есть соглашение, что анонимные функции / лямбды не должны храниться в переменной.Дьялог АПЛ , 10-3 = 7
Вдохновлен * этим ответом, где аргументы реплицируются, а затем используются в таблице умножения:
⎕
Вызывает prompt (⎕:
) и оценивает любое введенное выражение. (По соображениям безопасности, это не работает на TryAPL но он работает на NGN / APL .)/⍨
Репликация свой аргумент сам раз (/⍨4 3
⇔3 3 3 4 4 4 4
)∘.×⍨
Создает таблицу умножения.⊖
Переворачивает с ног на голову.Это работает на любой длине ввода (ввод с отступом 6 пробелов, вывод на левом поле):
* Изначально я имел в виду другое решение: каждый прямоугольник создается отдельно путем создания таблицы умножения для каждой комбинации двух аргументов. Затем четыре квадрата соединяются по вертикали и горизонтали. Это выглядит так:
⎕
Подскажите, как указано выше.,⍴×<
Объедините (,
) аргументы и используйте их для формирования (⍴
) прямоугольника, заполненного их произведением (×
).∘.(
...)⍨
Создайте таблицу, в которой каждая ячейка соответствует тому, что указано в(
...)
⊖
Отразить по вертикали.⍪⌿
Объедините ячейки по вертикали.,/
Объединить клетки по горизонтали.источник
(|.*/])@#~
R 31 - 3 = 28
Объяснение:
Это также работает для более чем двух номеров. Например, вывод для (5,3,2) выглядит так:
источник
cat
илиwrite
для того, чтобы это было правильным ответом.Haskell,
153125 байт - 3 = 122Половина кода предназначена для форматирования вывода. Это работает для произвольных больших целых чисел. Пример вывода:
Иногда между числами есть дополнительный пробел, потому что я вычисляю необходимое пространство , например,
x*x+y*y
вместоmax (x*x) (y*y)
Но это не более одного пробела.
источник
Mathematica 56-3 = 53
Обновление : я добавил второй метод, точно такого же размера кода, который использует именованную функцию. Он использует
Array
скорее, чем,Table
но следует той же логике. (Увидеть ниже.)Способ 1
Это составляет таблицу продуктов, факторы которой зависят от строки, значения столбца. Пара чисел вводится как список целых чисел. Анонимные функции, такие как следующие, наиболее полезны, если они используются в программе только один раз. В противном случае имеет смысл использовать именованную функцию.
Каждый фактор является оператором If-then:
If[r>#2,#,#2]
означает «Если номер строки больше, чем второй вход, используйте первый вход в качестве коэффициента, в противном случае используйте второй вход.If[c>#,#2,#]
означает «Если номер столбца больше, чем первый вход, используйте второй вход в качестве коэффициента, в противном случае используйте первый вход.Пример 1
Пример 2
Метод 2 (также 56-3 = 53)
Это работает аналогично методу 1. Но при вызове требуется меньше кода. И ячейки являются адресуемыми, в отличие от ячеек в таблице. Этот метод лучше использовать, если функция будет использоваться более одного раза.
Приведенные выше примеры производятся следующим образом:
Пример 1:
Пример 2:
источник
Октава, 34 - 3 = 31
Примеры:
источник
repelems
существует. Потрясающе!CJam, 27 байтов - 3 = 24
Принимает ввод как массив стиля CJam. Он использует немного больше промежутков, чем необходимо, но я думаю, что это «в пределах разумного», и он всегда правильно выровнен.
Проверьте это здесь.
объяснение
источник
Функция C (с использованием glibc), 122 байта - 3 = 119
В основном простая реализация с 2 циклами. Я ожидаю, что есть некоторые возможности для игры в гольф, которые я упустил здесь:
Входные данные передаются в первых двух параметрах функции, остальные два являются пустышками. Столбцы выровнены по правому краю.
Обратите внимание, что glibc
puts()
всегда, кажется, возвращает количество записанных байтов, включая неявный завершающий перевод строки, что нам и нужно. Нет гарантий, что это будет работать с любым другим libc.В полной программе:
Компилировать как
gcc sqrbin.c -o sqrbin
(илиmake sqrbin
). Предупреждения можно смело игнорировать.Пример вывода:
источник
puts()
зависит от машины. Это 10 на моем, например. Кроме того, вот совет: вы можете обычно сжимать два цикла в один, если вы условно увеличиваете счетчик во внешнем цикле. Мое решение демонстрирует, как это можно сделать.puts()
код возврата гарантированно будет только + ve для успеха. Однако мое тестирование с использованием glibc, похоже, показывает, что возвращаемое значение - это число записанных байтов. Что касается консолидации цикла - да, я знаю об этом методе и попробовал это здесь, пока без сокращения в этом случае.Рубин, (133 - 3) = 130 байтов
для 4,3
для 1,3
за 0,3
источник
1
и большом числе, как9999
. Чемs
получится4
, так что вы дополняете до ширины,s+3 = 7
но9999^2
нужно 8 цифр. Вы можете использовать2*s
вместо этого.rjust
прежде чем делатьljust
. Вы можете сократитьprint
до$><<
(и избавиться от места после него).ARGV
имеет псевдоним$*
. Вы можете избежать этогоflatten
, построив свой массив с помощью чего-то вроде этого: codegolf.stackexchange.com/a/19493/8478 . Кроме того, ответы только для функций определенно разрешены здесь (даже безымянные функции), так что функция может принимать целые числа в качестве входных данных, и вам не придется ничего делать.to_i
.Python 2, 176 байт - 3 = 173
Это использует строковые функции Python для создания сетки символов, затем заменяет символы целыми числами и печатает форматированный вывод.
источник
Матлаб, 58 - 3 = 55
Использование анонимной функции:
Пример:
(Старое решение) 59 - 3 = 56
Использование анонимной функции:
источник
C, (125 - 3) байта
Ввод принимается как два целых числа через пробел в одной строке. Каждая ячейка дополняется пробелами до двойной длины входной строки.
источник
Пиф, 39 - 3 = 36
Pyth не имеет встроенного матричного форматирования, что значительно увеличивает размер, так как приходится вручную дополнять выходные числа. Вот что я придумал.
Попробуйте онлайн.
источник
Блоки , 51 байт
52628287(не конкурирующие)Ungolfed:
Попытайся
источник