g | x | w | all
Bytes Lang Time Link
047Ruby250427T172137ZJordan
097JavaScript Node.js230703T073803Zl4m2
002Nekomata230701T020650Zalephalp
046Arturo230212T074458Zchunes
036Factor + grouping.extras210811T220154Zchunes
024K ngn/k201215T190004Zcoltim
065R201215T124804ZDominic
056R201215T161611ZGiuseppe
004Japt g201215T113930ZShaggy
088PowerShell for Windows201215T100916Zmazzy
00505AB1E201215T074218Zovs
005Jelly201215T071848Zcaird co
004Husk201215T061808ZRazetime
069Perl 5 MListUtil=pairkeys190528T224729ZXcali
006Brachylog190528T091533ZUnrelate
204C#160501T200557Zdownrep_
065Clojure161226T203714ZNikoNyrh
031J160704T203245Zmiles
025APL160624T125953Zlstefano
074Retina160502T092706ZLeaky Nu
113JavaScript ES6160502T105622ZNeil
106JavaScript ES6160502T095835Zedc65
120Python 2160502T081114Zuser4594
016Jelly160501T161014ZLeaky Nu
nanPyth160501T161451ZFryAmThe
015MATL160502T002853ZDavid
303Python 2.x160501T222501Zhyperneu
038Haskell160501T195116Znimi
024Mathematica160501T155850ZLegionMa

Ruby, 47 bytes

->a{a.slice_when(&:!=).group_by(&:size).min[1]}

Attempt This Online!

JavaScript (Node.js), 97 bytes

x=>eval(`[[${x}]]`.replace(/\b(\d+),(?!\1\b)/g,'$1],[')).filter((t,_,x)=>!x.some(y=>t[y.length]))

Try it online!

Nekomata, 2 bytes

ĉş

Attempt This Online!

ĉ       Split the input into chunks of equal elements
 ş      Find the shortest chunk

Arturo, 46 bytes

$=>[c:chunk&=>[&]select c=>[=size&size min c]]

Try it

Factor + grouping.extras, 36 bytes

[ [ ] group-by values all-shortest ]

Try it online!

[ stable-slices all-shortest ] would work except it doesn't have the right behavior for 1-element inputs.

K (ngn/k), 24 bytes

{{x=&/x:#'x}#(&~=':x)_x}

Try it online!

R, 70 65 bytes

Edit: -5 bytes thanks to Giuseppe

function(x)(y=split(x,diffinv(!!diff(x))))[min(l<-lengths(y))==l]

Try it online!

This feels rather clunky, so I won't be surprised if there's a much slicker R way to do this... Edit: there is...

function(x)             # x is vector of values;
(y=                     # define y as
  split(x,              # groups of values of x that share the same
          cumsum(       # cumulative sum of
          x!=c(0,x))))  # 1 if different to the next element;
[                       # now, get element(s) of y
 (l=lengths(y))         # whose length(s)
        ==min(l[l>0])]  # equal the smallest non-zero lengths of y

R, 56 bytes

function(x,r=rle(x),l=min(r$l))lapply(r$v[r$l==l],rep,l)

Try it online!

-2 bytes thanks to Dominic van Essen. Uses rle and rep to collapse and reconstruct the array.

Japt -g, 4 bytes

Outputs a 2D-array.

òÎüÊ

Try it

òÎüÊ     :Implicit input of array
ò        :Partition between elements where
 Î       :  The sign of their difference is truthy (not 0)
  ü      :Group and sort by
   Ê     :  Length
         :Implicit output of first element

PowerShell for Windows, 88 bytes

$h=@{}
$args|%{$i+=$p-ne$_;$h.+$i+=,$p=$_}
($g=@($h|% v*|sort c*))|? c*t -eq $g[0].count

Try it online!

The script uses the Powershell alias sort that should be sort-object with Linux.

Less golfed:

$hashTable=@{}
$args|foreach-object{
    $i += ($prev -ne $_)
    $prev = $_
    $hashTable.+$i += ,$prev
}
$groups=@($hashTable|foreach-object Values|sort-object Count)
$groups|where-object count -eq $groups[0].count

05AB1E, 5 bytes

γé¬gù

Try it online!

Commented:

γ      # split into chunks of equal adjacent elements
 é     # sort the chunks by length
  ¬    # get the shortest (first) chunk without popping the list
   g   # take the length of that chunk
    ù  # keep all chunks with this length

Try it with step-by-step output!

Jelly, 5 bytes

ŒgLÐṂ

Try it online!

Husk, 4 bytes

←kLg

Try it online!

Perl 5 -MList::Util=pairkeys,min -a, 69 bytes

map$r{y/ //}.="[ $_]",pairkeys"@F "=~/((\d+ )\2*)/g;say$r{min keys%r}

Try it online!

Brachylog, 6 bytes

ḅlᵒlᵍh

Try it online!

Input through the input variable and output through the output variable.

ḅ         The list of runs of consecutive equal elements of
          the input
 lᵒ       sorted by length
   lᵍ     and grouped by length
          has the output variable
     h    as its first element.

Although, unlike , groups non-consecutive equal elements, the lᵒ is still necessary to find the group with the shortest lengths, and it works because the order of groups in the output from is determined by the position of the first element of each group, so that ᵍhᵐ could function as sort of a deduplicate by pseudo-metapredicate.

C#, 204 bytes

void f(string o){var r=Regex.Matches(o,@"([0-9])\1{0,}").Cast<Match>().OrderBy(x=>x.Groups[0].Value.Length);foreach(var s in r){foreach(var z in r)if(s.Length>z.Length)return;Console.WriteLine(s.Value);}}

I don't know if using a string is fair considering all the golfing esolangs get their input in the same way but he requested array input.

thats how it looks

ungolfed:

    public static void f(string inp)
    {

        var r = Regex.Matches(inp, @"([0-9])\1{0,}").Cast<Match>().OrderBy(x => x.Groups[0].Value.Length);

        foreach (Match s in r)
        {
            foreach (Match z in r)
                if (s.Length > z.Length)
                    return;

        Console.WriteLine(s.Value);
        }


    }

I need a way to get the smallest matches for the match array, most of my bytes are wasted there, help appreciated. I'm trying to get into LINQ and lambda stuff.

Clojure, 65 bytes

#(let[G(group-by count(partition-by + %))](G(apply min(keys G))))

Uses + as identity function as (+ 5) is 5 :) The rest should be obvious, G is a hash-map used as a function and given a key it returns the corresponding value.

J, 31 bytes

[:(#~[:(=<./)#@>)]<;.1~1,2~:/\]

Input is an array of values. Output is an array of boxed arrays.

Usage

   f =: [:(#~[:(=<./)#@>)]<;.1~1,2~:/\]
   f 1 1 2 2 3 3 4
┌─┐
│4│
└─┘
   f 3 3 3 4 4 4 4 5 5 4 4 3 3 4 4
┌───┬───┬───┬───┐
│5 5│4 4│3 3│4 4│
└───┴───┴───┴───┘

Explanation

[:(#~[:(=<./)#@>)]<;.1~1,2~:/\]  Input: s
                              ]  Identity function, get s
                         2       The constant 2
                             \   Operate on each overlapping sublist of size 2
                          ~:/      Check if each pair is unequal, 1 if true else 0
                       1,        Prepend a 1 to that list
                 ]               Identity function, get s
                  <;.1~          Using the list above, chop s at each true index
[:(             )                Operate on the sublists
             #@>                 Get the length of each sublist
     [:(    )                    Operate on the length of each sublist
         <./                     Get the minimum length
        =                        Mark each index as 1 if equal to the min length else 0
   #~                            Copy only the sublists with min length and return

APL, 25 chars

{z/⍨(⊢=⌊/)≢¨z←(1,2≠/⍵)⊂⍵}

In English:

Retina, 91 85 80 79 77 76 75 74 bytes

M!`\b(\d+)(,\1\b)*
(,()|.)+
$#2:$&
O#`.+
s`^(.*\b(.+:).*)¶(?!\2).+
$1
.+:
<empty-line>

Try it online!

Explanation

The input is 1,1,10,10,10,100,100.

The first line matches groups with same terms:

M!`\b(\d+)(,\1\b)*

The input becomes:

1,1
10,10,10
100,100

The following two lines prepend the number of commas to the line:

(,()|.)+
$#2:$&

The input becomes:

1:1,1
2:10,10,10
1:100,100

Then they are sorted by this line, which looks for the first number as index:

O#`.+

The input becomes:

1:1,1
1:100,100
2:10,10,10

Then these two lines find the place where the length is different, and remove everything onwards:

s`^(.*\b(.+:).*)¶(?!\2).+
$1

The input becomes:

1:1,1
1:100,100

Then the numbers are removed by these two lines:

.+:
<empty-line>

Where the input becomes:

1,1
100,100

JavaScript (ES6), 113 bytes

a=>a.map(n=>n==c[0]?c.push(n):b.push(c=[n]),c=b=[])&&b.sort((a,b)=>a[l]-b[l],l='length').filter(e=>e[l]==b[0][l])

JavaScript (ES6), 106

a=>(a.map((v,i)=>v==a[i-1]?g.push(v):h.push(g=[v]),h=[]),h.filter(x=>!x[Math.min(...h.map(x=>x.length))]))

Test

f=a=>(a.map((v,i)=>v==a[i-1]?g.push(v):h.push(g=[v]),h=[]),h.filter(x=>!x[Math.min(...h.map(x=>x.length))]))

console.log=x=>O.textContent+=x+'\n'

;[[1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1]
, [3, 3, 3, 4, 4, 4, 4, 5, 5, 4, 4, 3, 3, 4, 4]
, [1, 1, 2, 2, 3, 3, 4]
, [1]
, [1, 1, 10, 10, 10, 100, 100]]
.forEach(t=>console.log(t+' -> '+f(t).join` `))
<pre id=O></pre>

Python 2, 120 bytes

import re
r=[x.group().split()for x in re.finditer(r'(\d+ )\1*',input())]
print[x for x in r if len(x)==min(map(len,r))]

Takes input as a string of space-separated integers with a trailing space, and outputs a list of lists of strings. The strategy is to find groups using the regex (\d+ )\1* (which matches one or more space-separated integers, with a trailing space), then split them on spaces into lists of integers, and print those groups whose length is equal to the minimum group length.

Try it online

Jelly, 22 17 16 bytes

I0;œṗ¹L=¥ÐfL€Ṃ$$

Try it online!

I0;œṗ¹L=¥ÐfL€Ṃ$$     Main link. List: z = [a,b,c,...]

I                    Compute [b-a, c-b, d-c, ...]
 0;                  Concatenate 0 in front: [0, b-a, c-b, d-c, ...]
   œṗ                Split z where the corresponding item in the above array is not zero.
      L=¥Ðf          Filter sublists whose length equal:
           L€Ṃ$      the minimum length throughout the list.

     ¹         $     (grammar stuffs)

Pyth, 14 12 11

mM_MmhbrQ8

Test Suite

2 bytes thanks to Jakube! And 1 byte thanks to isaacg!

Unfortunately, run length decoding doesn't quite do what we want it to do, but it will work with a minor workaround, but that makes it slightly longer than the manual implementation:

mr]d9.mhbrQ8

Credit to Jakube for finding this out.

MATL, 15 bytes

Y'tX<tb=bw)wTX"

Try it online

Input is a vector, like [1 2 3 4], and output is a matrix where each column is one of the smallest groups, e.g.:

1 100
1 100

for the third test case.

Explanation:

Y'    %// Run length encoding, gives 2 vectors of group-lengths and values
t     %// Duplicate group lengths
X<    %// Minimum group length
tb    %// Duplicate and get vector of group lengths to the top
=     %// Find which group lengths are equal to the minimum
bw)   %// And get the values of those groups
wTX"  %// Repeats the matrix of minimum-length-group values by the minimum group length

Python 2.x, 303 bytes

x=input()
r=[q[2]for q in filter(lambda l:(len(l[2])>0)&((l[0]<1)or(x[l[0]-1]!=x[l[0]]))&((l[1]>len(x)-1)or(x[l[1]]!=x[l[1]-1]))&(len(filter(lambda k:k==l[2][0],l[2]))==len(l[2])),[(a,b,x[a:b])for a in range(0,len(x))for b in range(0,len(x)+1)])]
print filter(lambda k:len(k)==min([len(s)for s in r]),r)

Ugliest. Code. Ever.

Input: An array in the format r'\[(\d,)*(\d,?)?\]'
In other words, a python array of numbers

Output: An array of arrays (the smallest groups), in the order that they appear in the input array

Additional Coincidental Features (Features that I did not intend to make):

Haskell, 38 bytes

import Data.Lists
argmins length.group

Usage example: argmins length.group $ [3,3,3,4,4,4,4,5,5,4,4,3,3,4,4] -> [[4,4],[3,3],[4,4],[5,5]].

Build groups of equal elements and find those with minimal length.

Mathematica, 24 bytes

MinimalBy[Length]@*Split

This is a composition of two functions that can be applied to a list. Split takes all groups of consecutive numbers, and MinimalBy[Length] selects those with minimal length.