Теперь, когда мы знаем, как правильно поставить квадрат и треугольник , мы научимся распараллеливать одно. Чтобы распараллелить число, мы сначала упорядочиваем его как параллелограмм, укладывая его поверх себя число раз, равное количеству имеющихся у него цифр, и добавляя пробелы, чтобы сделать его параллелограммом. Так 123
бы сформировалось:
123
123
123
Теперь мы берем каждое горизонтальное и вертикальное число и добавляем их 123+123+123+1+12+123+23+3
, что равно 531
, что является параллелограммом 123
.
Твое задание:
Напишите программу или функцию, которая при задании числа в качестве входного сигнала возвращает параллелограмм числа.
Входные данные:
Неотрицательное целое число или неотрицательное целое число, представленное строкой.
Выход:
Параллелограмм целого числа.
Тестовые случаи:
1234567 -> 10288049
123 -> 531
101 -> 417
12 -> 39
Подсчет очков:
Это код-гольф , выигрывает самая низкая оценка в байтах!
Ответы:
MATL , 12 байт
Ввод - это строка. Попробуйте онлайн!
объяснение
Рассмотрим ввод
'123'
в качестве примера.Код дублирует input (
t
) и создает единичную матрицу (Xy
) размером вдвое больше длины ввода (nE
):затем переворачивает его вверх ногами (
P
):Входная строка, интерпретируемая как ASCII-коды цифр, эквивалентна числовому вектору строки.
Полноразмерная двумерная свертка (
Y+
) указанного вектора и матрицы даетИнтерпретация этих чисел обратно в виде ASCII-кодов (
c
) дает следующую матрицу символов с символом 0, представленным в виде пробела:Transposition (
!
) превращает это вИнтерпретация каждой строки как числа (
U
) дает вектор числового столбцаи суммирование (
s
) дает окончательный результат531
.источник
Сетчатка , 22 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Пояснение: Первый этап разбивает входной номер на каждую цифру и включает все исключительные префиксы и включающие суффиксы, давая вертикальные числа, а также исходный номер ввода, повторяемый для каждой цифры, давая горизонтальные числа. Остальные этапы просто суммируют полученные числа.
источник
05AB1E ,
12 118 байтЯ
уверен,знал,что этоможетбыть в гольфе дальше - советы приветствуются!-1 байт благодаря Эрику Outgolfer (избегайте переносов, но используя конкатенацию),
а затем ...
-3 больше байтов благодаря Аднану (избегайте умножения на длину-1 путем векторизации сложения и вычитания ввода в конце)
Попробуйте онлайн!
Как?
источник
«
для объединения суффиксов и префиксов:g<*¹.s¹η«O+
.s¹η++Oα
должно работать на 8 байтовHaskell ,
9078767164635957 байтПопробуйте онлайн!
источник
g x=sum[x+div x a+mod x a|(a,_)<-zip((10^)<$>[1..])$show x]
,g x=sum[x+div x(10^a)+mod x(10^a)|(a,_)<-zip[1..]$show x]
еще короче волосыg x=sum[x+x`div`10^a+x`mod`10^a|(a,_)<-zip[1..]$show x]
,Шелуха ,
1312 байтПопробуйте онлайн!
объяснение
источник
Neim , 7 байт
Осторожно. Содержит змей:
S𝐬𝕤
Попробуйте онлайн!
источник
S𝐬𝕤
" Лол ..𝐗𝔻
Python 3 ,
8570 байтДля ввода 12345:
Суммирует фрагменты ввода 1 + 2345 + 12345, 12 + 345 + 12345, 123 + 45 + 12345, 1234 + 5 + 12345, используя индексацию строки до index (r) = 1,2,3,4 перед приведением к целому числу и добавляет к 12345 * 2
Особая благодарность:
-14 байт @ Джонатан Аллен
-1 байт @ovs
Попробуйте онлайн!
источник
(len(n)+1)
может быть добавлено-~len(n)
(~x
есть-1-x
), и тогда это может сохранить другой байт с помощью-i(n)*~len(n)
. Тогда вы можете сделать все это анонимной функцией:lambda n,i=int:sum(i(n[:r])+i(n[r:])for r in range(1,len(n)))-i(n)*~len(n)
(74 байта)f=lambda n,r=1,i=int:n[r:]and i(n[r:])+i(n[:r])+f(n,r+1)or-i(n)*~len(n)
Japt ,
1511 байт-4 байта благодаря @Shaggy.
Принимает ввод как строки.
Попробуйте онлайн!
объяснение
Разбить входной массив на digits (
¬
) и отобразить с помощью (£
) следующую функцию, где Y - индекс.["1", "2", "3"]
Входное значение (неявное) с
Y
пробелами (ç
) вставлено (i
) в начале. Это назначеноU
.["123", " 123", " 123"]
Объедините, что с собой повернуло на 90 ° вправо (
1
время). Тогда сумма (x
).["123", " 123", " 123", " 1", " 12", "123", "23 ", "1 "]
->531
.источник
Джапт ,
3118 байт-13 байт благодаря @ETHproductions
Этот подход не работает хорошо с использованием Japt. Решение Джастина намного лучше.
Объяснение:
Попробуйте онлайн!
источник
Ul
: PU
s в функциях, а средний элемент в массиве может быть сжат, доUå+ x
которого, я думаю, вы получите 23 байта.mx x
наxx
? :-)Руби ,
6155 + 1 = 56 байтИспользует
-n
флаг. Ввод из STDIN.Попробуйте онлайн!
источник
102033
ваша программа печатает728714
при правильном значении729702
.02033
была проблема)JavaScript,
7774 байтаСохранено 3 байта благодаря Value Ink
источник
Pyth ,
2019 байтовМой нынешний подход к префиксам (будем надеяться, дальше в гольф).
Test Suite или попробуйте альтернативный подход с тем же количеством байтов .
объяснение
Чтобы лучше понять концепцию, возьмем, к примеру, пример
"123"
.Сначала мы получаем префиксы ввода. Те есть
['1', '12', '123']
.Затем мы получаем префиксы обратного ввода, то есть:
['3', '32', '321']
и инвертируем каждый, следовательно, мы получаем['3', '23', '123']
.Мы объединяем два списка и конвертируем каждый элемент в целое число, поэтому получаем
[3, 23, 123, 1, 12, 123]
.Суммируя список, получим результат
285
.Произведение
P
- это длина ввода - 1 (т. Е.2
), Умноженная на его целочисленное представление (2 * 123 = 246
).В итоге мы суммируем два результата:
285 + 246
отсюда получаем531
, что это правильный результат.Pyth , 20 байтов
Тестирование.
объяснение
Объяснение, чтобы прийти после дальнейшего игры в гольф.Мне пока не удалось сыграть в гольф дальше (хотя у меня есть идеи).источник
q / kdb +, 34 байта
Решение:
Примеры:
Объяснение:
источник
Желе , 18 байт
Попробуйте онлайн!
источник
Swift 3 , 213 байтов
Не может быть проверено в Интернете, потому что это медленно и время ожидания. Вы можете попробовать это в Swift Playgrounds, если вы хотите проверить это.
Пробный прогон
Входные данные:
Выход:
источник
Желе , 12 байт
Попробуйте онлайн!
Принимает ввод в виде строки. Создает «параллелограмм» как матрицу символов, затем оценивает каждую строку и столбец, чтобы получить суммы для суммирования.
объяснение
источник
C (gcc) ,
958481 байт (78 +-lm
флаг компилятора)Здравствуй! Это моя первая подача, надеюсь, я не нарушил никаких правил.
Попробуйте онлайн!
Неуправляемый, без предупреждения:
источник
-lm
для математических функций требуется только для некоторых сред выполнения C, напримерglibc
. Компиляция, например, с MinGW (используя Microsoftmsvcrt.dll
), не понадобится. Так не уверен, что это необходимо добавить сюда? В любом случае, если вы добавите его, то получится 3 байта;)-lm
необходим дляpow()
функции с gcc. Я пытался работать без него, но не смог найти решение, используя менее 6 байт (pow + флаг компилятора). Я не смог найти правила о том, как включить флаги в bytecount, и я знаю, что я сделал неверное предположение о том, что-
персонаж не учитывается. Я добавляю +1 байт прямо сейчас.-lm
не требуется,gcc
но факт, чтоglibc
не включает математические функции в основную библиотеку.msvcrt.dll
делает, поэтому компиляция на windows сgcc
работами без-lm
. Это придирки, и я не совсем уверен, что на самом деле должны сказать правила об этом.Java 8,
147137126116114 байт-13 байтов (137 → 126 и 116 → 114) благодаря @ OlivierGrégoire .
Объяснение:
Попробуй это здесь.
источник
n->{Integer l=(n+"").length(),s=n*l,i=0;for(;++i<l*2;)s+=l.valueOf((n+"").substring(l<i?i-l:0,i<l?i:l));return s;}
. Это скользящее окно с min-max, чтобы уменьшить количество звонков для дорогихnew Integer(....substring(...))
Math.max(0,i-l)
к0>i-l?0:i-l
иMath.min(i,l)
кi>l?l:i
. Изменяя это сейчас. Ах, я вижу, что вы отредактировали свой комментарий после того, как я скопировал 126-байтовый ответ. ;)R ,
168162103 байт-6 байт, не используя c ()
-59 байт благодаря @Giuseppe
Попробуйте онлайн!
Принимает ввод в виде строки.
Я абсолютно уверен, что необходимо внести улучшения, в первую очередь, используя все сильные стороны R ... но в задаче, которая в основном заключается в манипуляциях со строками, я изо всех сил пытаюсь понять, как это сделать.
Изменить: гораздо лучше, теперь, когда я не повторяю плохую идею!
источник
substr
явного вместо цикла, что сэкономило бы несколько байтов.Perl 5 , 53 + 1 (-n) = 54 байта
Попробуйте онлайн!
источник
Mathematica, 77 байтов
источник