Имея некоторый конечный список, вернуть список всех его префиксов, включая пустой список, в порядке возрастания их длины.
(В основном реализация функции Haskell inits
.)
Детали
- Список ввода содержит числа (или другой тип, если это более удобно).
- Вывод должен быть списком списков .
- Представление может, но не обязательно должно быть функцией, любой ввод / вывод по умолчанию может быть использован.
- Есть ответ CW для всех тривиальных решений .
пример
[] -> [[]]
[42] -> [[],[42]]
[1,2,3,4] -> [[], [1], [1,2], [1,2,3], [1,2,3,4]]
[4,3,2,1] -> [[], [4], [4,3], [4,3,2], [4,3,2,1]]
Ответы:
Haskell , 20 байтов
Изменить: еще байта короче с совершенно другим сканированием.
Анонимная функция немного превосходит тривиальный импорт.
Попробуйте онлайн!
=<<
для сокращения(scanr(\_->init)=<<id) l = scanr(\_->init) l l
.l
справа налево, собирая промежуточные результаты с помощью функции\_->init
.init
к начальному значению сканирования, которое такжеl
.источник
Брейкфук ,
2112 байт-9 байт благодаря Арно, предложившему разделитель
ÿ
вместо новых строкПопробуйте онлайн!
Принимает байты через STDIN без нулевых байтов и печатает серию префиксов, разделенных
ÿ
символом с начальнымÿ
символом. Например, для вводаPrefixes
, выходÿÿPÿPrÿPreÿPrefÿPrefiÿPrefixÿPrefixeÿPrefixes
.Для удобства чтения, вот версия с переводом строки .
Объяснение:
источник
JavaScript (ES6), 33 байта
Попробуйте онлайн!
Как?
источник
CW для всех тривиальных записей
чистый , 19 байт
Версия на Haskell работает и в Clean.
Попробуйте онлайн!
Haskell , 22 байта
Попробуйте онлайн!
Пролог (SWI) , 6 байт
Попробуйте онлайн!
источник
Желе , 3 байта
Попробуйте онлайн!
Как это работает
источник
Japt, 4 bytes
Try it online!
Explanation:
источник
Perl 6, 13 bytes
Try it online!
To explain:
In Perl 6 you can wrap an operator in square brackets as an alternate way to write a list reduction.
[+] @array
returns the sum of the elements in@array
,[*] @array
returns the product, etc. You can also precede the operator with a backslash to make a "triangular" reduction, which some languages call "scan." So[\+] @array
returns a list consisting of the first element of@array
, then the sum of the first two elements, then the sum of the first three elements, etc.Here
[\,] @_
is a triangular reduction over the input array@_
using the list construction operator,
. So it evaluates to a lists of lists: the first element of@_
, the first two elements of@_
, etc. That's almost what's needed, but the problem calls for a single empty list first. So the first element of the return list is a literal empty list(),
, then the reduction over the input list is flattened into the rest of the return list with|
.источник
Python 2, 32 bytes
Try it online!
источник
R,
4039 bytesTry it online!
-1 byte thanks to digEmAll
The output of R's
list
type is a bit weird; it uses sequential indexing, so for instance, the output forlist(1,2)
isTaking input as a vector instead gives a neater output format, although then the inputs are not technically
list
s.источник
JavaScript, 36 bytes
Try it online!
источник
Mathematica,
2221 bytes-1 byte thanks to Misha Lavrov!
Pure function. Takes a list as input and returns a list of lists as output. I believe this is the shortest possible solution.
источник
{}~FoldList@Append~#&
.Husk, 2 bytes
Gets all the
ḣ
eads and then prependsΘ
(in this case[]
):Try it online!
(needs type annotation for empty list: Try it online!)
источник
J, 5 bytes
Try it online!
источник
PowerShell, 65 bytes
Try it online!
PowerShell helpfully unrolls lists-of-lists when the default
Write-Output
happens at program completion, so you get one item per line. Tack on a-join','
to see the list-of-lists better, by converting the inner lists into strings.(Ab)uses the fact that attempting to output an empty array (e.g.,
@()
) results in no output, so an empty array input just has''
as the output, since the$a[0..$_]
will result in nothing. It will also throw out some spectacular error messages.источник
K (ngn/k), 8 bytes
Try it online!
источник
,\(,()),
in K4. Joining enlisted null along enlisted input? howsitwork?()
is an empty list.(,()),x
prepends it tox
. finally,\
does a concat-scan. thex
is omitted to form a composition. note that the trailing,
is dyadic, so it's "concat", not "enlist".1_',\0,
но мой парсер не достаточно умен, чтобы справиться с этим ...Common Lisp , 39 байт
Попробуйте онлайн!
объяснение
источник
F #, 53 байта
На самом деле у меня есть два довольно похожих ответа, оба одинаковой длины. Они оба принимают общую последовательность
s
as a parameter.Первое решение:
Попробуйте онлайн!
Seq.take
занимает первыеn
элементы последовательности.Seq.init
создает новую последовательность с количеством (в данном случае) длины последовательностиs
плюс 1, и для каждого элемента в последовательности принимает первыеn
элементы вs
.Второе решение:
Similar to before, except it creates a sequence from 0 to the length of
s
. Then takes that number of elements froms
.Try this online too!
источник
fun s->Seq.map(fun n->Seq.take n s){0..Seq.length s}
saves 1 byteMATL,
1512 bytes3 bytes saved thanks to @Giuseppe
Try it at MATL Online.
Due to the way that MATL displays the output, you can't explicitly see the empty array in the cell array. Here is a version that shows the output a little more explicitly.
Explanation
источник
v
instead of[]
. And doesn't:
use1
as the default first argument? So this could bevin:"G@:)]Xh
for 12 bytes.SWI PROLOG 22 bytes
i(X,Y):-append(X,_,Y).
источник
Charcoal, 6 bytes
Try it online! Link is to verbose version of code. Explanation:
It's possible at a cost of 1 byte to ask Charcoal to print an
n+1
-element array which includes the input as its last element, but the output is the same, although the cursor position would be different if you then went on to print something else.источник
05AB1E, 3 bytes
Explanation:
Try it online!
источник
RAD, 7 bytes
Try it online!
This also works in Dyalog APL as a function.
How?
This works the same for both APL and RAD, given their close relation.
(⊂⍬)
the empty array,
prepended to,\
the prefixes (which exclude the empty array.)источник
Groovy, 37 bytes
Try it online!
источник
{it.inits().reverse()}
will work once we get groovy 2.5 on TIOJapt, 5 bytes
Try it online!
источник
brainfuck, 43 bytes
Take a list of non-null characters as input and returns all prefixes separated by newline. Requires double-infinite or wrapping tape.
Try it online!
источник
C# (Visual C# Interactive Compiler), 39 bytes
Try it online!
источник
System.Linq;
in your bytecount. And it seems some of your output logic is in your outputting of the arrays. Because empty array just returns empty array.System.Linq
, I don't have to include this in the byte count. My submission would be considered a different language than say.NET Core
. github.com/dotnet/roslyn/wiki/C%23-Interactive-Walkthrough - You mention printing which is a separate issue, I'd like to get clarity on this first.Array
vsIList
vsIEnumerable
.F# (Mono), 45 bytes
Try it online!
I am not totally sure if this is valid, but it seems like it follows the same "anonymous lambda" syntax that I've seem used in several other languages.
источник
Java 8+,
8677 bytes-9 bytes thanks to Kevin Cruijssen (getting rid of the import)!
Try it online!
Alternative, 65 bytes
The following will print the results to stdout (due to Olivier Grégoire):
Try it online
источник
java.util.stream.IntStream
directly and drop the import.x->{for(int i=0;i<=x.size();)System.out.println(x.subList(0,i++));}
(67 bytes). This prints instead of using streams. Printing is usually the shortest way to output complex structures.System.out.print
since the output is still unambiguous.Brachylog, 9 bytes
Try it online!
Explanation
источник
Ruby,
3129 bytesTry it online!
Explanation:
источник