Рассмотрим следующий треугольник.
1 23 456 7891 01112 131415 1617181 92021222 324252627 2829303132 33343536373 839404142434 4454647484950 51525354555657 585960616263646 5666768697071727 37475767778798081
Как вы, наверное, заметили, первая строка имеет длину 1, а каждая последующая строка на 1 цифру длиннее предыдущей и содержит цифры сцепленных положительных целых чисел.
Вам будет дано целое число N . Ваша задача - найти сумму цифр, которые лежат в N- й строке вышеуказанного треугольника.
правила
Вы можете выбрать либо 0, либо 1 индексирование. Пожалуйста, укажите это в своем ответе.
Применяются стандартные лазейки .
Вы можете принимать и выводить данные любым стандартным способом и в любом разумном формате.
Это OEIS A066548 , и эта последовательность представляет собой сам треугольник (за исключением того, что мы не удаляем ведущие нули).
Это код-гольф , поэтому выигрывает самый короткий код в байтах (на каждом языке). Удачи в гольф!
Тестовые случаи
Input | Output
0 | 1
1 | 5
2 | 15
3 | 25
4 | 5
5 | 15
6 | 25
7 | 20
8 | 33
9 | 33
10 | 43
11 | 46
12 | 64
Обратите внимание, что вышеприведенные 0-индексированы. Если вы ищете тестовые примеры с 1 индексом, увеличьте ввод на 1.
На совершенно несвязанной ноте я недавно сменил фотографию в своем профиле, и это вдохновило меня на написание этой задачи.
n**2
естьn*n
.sum(range(n)) = ~-n*n/2 = (n - 1) * n / 2
Haskell , 57 байт
Попробуйте онлайн!
источник
05AB1E , 8 байтов
Попробуйте онлайн!
-1 спасибо Эмигне .
1 индексации.
источник
S
если заменитьJ
наS
.Perl 6 ,
474542 байтаПопробуйте онлайн!
1-индексированных
источник
Mathematica, 96 байт
Попробуйте онлайн! (для работы над математикой необходимо заменить «Тр» на «Тотал»)
источник
Желе , 11 байт
Попробуйте онлайн!
Использует индексирование на основе 1.
объяснение
источник
Haskell,
6964 байтаПопробуйте онлайн.
Сохранено 5 байтов благодаря Laikoni !
Вот менее гольф-версия:
источник
n%x=sum[read[d]|d<-take n x]:(n+1)%drop n x
на несколько байтов короче.splitOn
что сэкономит байты.R
1191091089388 байтначиная с гольфа .... 1-индексированный
спасибо @Zachary. ваше предположение верно :) побрил 1 байт tnx @Andrius и еще 15 tnx @ user2390246
@Giuseppe - tnx для strtoi. Новое для меня. 5 байт вниз :)
источник
y=
ни в , ни в скобках вокругn*(n-1)/2+1
, а название языка, по-видимому, не так[R]
.as.integer
наas.double
x
, использование , такF
как это уже инициализирована 0.1:n+a-1
дает так же, какa:(a+n-1)
. В этом случае вам не нужно определятьa
заранее, вы можете просто указать это прямо вfor
выражении. Это также позволит вам отменить + 1 / -1.substring
вместо,substr
так как на самом деле это просто сумма по индексам подстроки. Также всегда полезно добавить ссылку TIO для ваших решений :) +1, отличная работа.Emojicode , 182 байта
Определяет метод с именем ©, который принимает 🚂 и возвращает 🚂. 1-индексироваться.
Попробуйте онлайн!
Объяснение:
Замечания: большой выбор смайликов не имеет особого смысла в Emojicode 0.5. В конце концов, это 0.x 0.6 исправит это, поэтому, если вы хотите изучить это (потому что, кто бы не хотел), я рекомендую немного подождать.
Emojicode - это объектно-ориентированный язык программирования с обобщениями, протоколами, опциями и замыканиями, но эта программа не использует замыканий, и все обобщенные элементы и протоколы можно считать неявными.
Программа работает только с несколькими типами: 🚂 является целочисленным типом и 🔡 является строковым типом. Кроме того, conditions появляются в условиях, которые могут принимать значение 👍 (true) или 👎 (false).
В настоящее время в Emojicode нет операторов, поэтому сложение, сравнения и другие операции, которые обычно являются операторами, реализованы в виде функций, эффективно позволяя выражениям использовать префиксную нотацию . Операторы также запланированы в 0,6.
© принимает один вызванный
a
and и возвращает 🚂.Объявите фиксированное значение («константа»),
l
равное a-му треугольному числу (формула в префиксной записи). Это представляет длину строки чисел, которую мы должны сгенерировать.Присвойте переменную пустую строку
t
.Присвоить
i = 0
.В то время
l
как больше, чем длинаt
i += 1
Добавить текстовое представление
i
в базе 10 кt
.Конец цикла
Присвоить
s = 0
Возьмите подстроку,
t
начинающуюся сl - a
(a - 1
третьего треугольного числа) длины a, итерируйте по всем символамПреобразуйте символ в строку, проанализируйте целое число в base-10, разверните необязательный параметр (ничего не возвращается, если строка не является числом) и добавьте к
s
переменной.Конец цикла
Возврат с
Завершить метод.
источник
PHP, 66 + 1 байт
Запустите как трубу с
-nR
или попробуйте онлайн .требует PHP 5.4 или более поздней версии для индексации выражения.
источник
Pyth, 24 байта
Попробуйте это здесь: http://pyth.herokuapp.com/
источник
APL,
282625 байтИспользует индексирование на основе 1
Попробуйте онлайн!
Как?
⍳⍵×⍵
, 1 через вход в квадрате⍕¨
, превратить каждый элемент в строку∊,/
соединить их вместе(+/⍳⍵)↑
, возьмите строки до входа⍵↑⌽
, возьмите нужный ряд⍎¨
, превратить каждый элемент в число+/
, суммаисточник
Clojure v1.8, 154 байта
1-индексированных
Попробуйте онлайн!
объяснение
источник
Java 8,
11698 байт1-индексированных
-18 байт благодаря @Nevay
Объяснение:
Попробуй это здесь.
источник
n->{String r="";int i=0,x=0;for(;x++<n*n;r+=x);for(x=0;x<n;)i+=r.charAt(x+++~-n*n/2)-48;return i;}
.R,
99,105, 97 байт1-индексированных
негольфированная версия
Попробуй это здесь!
спасибо @Giuseppe за сохранение 8 байт
источник
strtoi
Perl 6 , 44 байта
Проверь это
Expanded:
источник
Желе , 16 байт
Попробуйте онлайн!
1-индексироваться.
источник
SOGL V0.12 ,
1513 байтПопробуй здесь!
1-индексироваться.
Работая над этим, я исправил ошибку, из-за которой
∑
не работали над числовыми массивами, и этоm
неправильно принимала неявный ввод.Объяснение:
источник
C ++, 180 байт
-17 байт благодаря Захари
Индекс начинается с 1
источник
int s(int n){++n;std::string t;int i=0,p=0;for(;i<=n;)p+=i++;for(i=0;t.size()<p;t+=std::to_string(++i));t=t.substr(0,p);t=t.substr(t.size()-n);i=0;for(auto&a:t)i+=a-48;return i;}
++n;
"0" identifier is unknown
в Visual Studio. То же самое дляto_string
иsize
. Вы можете увидеть это, если скопируете и вставите код в notepad ++ и конвертируете кодировку в ANSI, некоторые из них вы увидите??
в редактореPyth ,
15 1413 байтПопробуй это здесь! или проверить набор тестов.
13 байтов альтернативы:
Как?
источник
> <>, 141 + 2 байта
1-индексированные
+ 2b для флага -v
В последнее время Tio.run, похоже, не нравятся мои> <> программы ... Это можно проверить на https://fishlanguage.com Хотя . Ввод идет в «начальном стеке».
Редактировать: Оказывается, tio.run это не нравится, потому что он обрабатывает '[' и ']' иначе, чем fishlanguage.com. fishlanguage.com переворачивает стек при создании или удалении нового стека, но tio.run этого не делает.
источник
Perl 5 , 62 + 1 (-p) = 63 байта
Попробуйте онлайн!
Результат 1 проиндексирован.
Как?
Объедините более чем достаточно цифр вместе, затем пропустите ненужные цифры в начале (длина пропуска - это сумма целых чисел от 1 до
n-1
). Возьмите следующиеn
цифры, поместите+
перед каждым из них, а затем оцените это уравнение.источник
JavaScript (ES6),
7865 байт1-индексироваться. Изменить: 13 байтов сохранены благодаря @tsh.
источник
n=>eval([...(g=n=>n?g(n-1)+n:'')(n*n)].join<+>.substr(~-n*n-1,2*n))
join`+`
в конце ...