Finite tilings in one dimension
JavaScript (ES6), 74 73 70 bytes
Takes input as an array of 32-bit integers. Returns a boolean.
f=([n,...a],x)=>n?[...f+''].some(_=>n&&!(x&n)&f(a,x|n,n<<=1)):!(x&-~x)
Or 66 bytes with inverted truthy/falsy values:
f=([n,...a],x)=>n?[...Array(32)].every(_=>x&n|f(a,x|n,n*=2)):x&-~x
Test cases
f=([n,...a],x)=>n?[...f+''].some(_=>n&&!(x&n)&f(a,x|n,n<<=1)):!(x&-~x)
console.log('[Truthy]')
console.log(f([0b1]))
console.log(f([0b111]))
console.log(f([0b1,0b1]))
console.log(f([0b11,0b111,0b1111]))
console.log(f([0b101,0b11,0b1]))
console.log(f([0b101,0b11,0b101]))
console.log(f([0b10001,0b11001,0b10001]))
console.log(f([0b100001,0b1001,0b1011]))
console.log(f([0b10010001,0b1001,0b1001,0b101]))
console.log(f([0b10110101,0b11001,0b100001,0b1]))
console.log(f([0b110111,0b100001,0b11,0b101]))
console.log(f([0b1001101,0b110111,0b1,0b11,0b1]))
console.log('[Falsy]')
console.log(f([0b101]))
console.log(f([0b101,0b11]))
console.log(f([0b1,0b1001]))
console.log(f([0b1011,0b1011]))
console.log(f([0b11011,0b1001101]))
console.log(f([0b1001,0b11011,0b1000001]))
console.log(f([0b1001,0b11011,0b1000001,0b10101]))
How?
f = ( // f = recursive function taking:
[n, ...a], // n = next integer, a = array of remaining integers
x // x = solution bitmask, initially undefined
) => //
n ? // if n is defined:
[... f + ''].some(_ => // iterate 32+ times:
n && // if n is not zero:
!(x & n) // if x and n have some bits in common,
& // force invalidation of the following result
f( // do a recursive call with:
a, // the remaining integers
x | n, // the updated bitmask
n <<= 1 // and update n for the next iteration
) // end of recursive call
) // end of some()
: // else (all integers have been processed):
!(x & -~x) // check that x is a continuous chunk of 1's
Jelly, 15 bytes
+"FṢIP
FSṗLç€ċ1
Takes a list of indices and returns a positive integer (truthy) or 0 (falsy).
Try it online! or verify most test cases.
Husk, 16 bytes
V§=OŀF×+ṠṀṪ+oŀṁ▲
Takes a list of lists of 1-based indices. Try it online!
Explanation
V§=OŀF×+ṠṀṪ+oŀṁ▲ Implicit input, say x=[[1,3],[1]]
ṁ▲ Sum of maxima: 4
oŀ Lowered range: r=[0,1,2,3]
ṠṀ For each list in x,
Ṫ+ create addition table with r: [[[1,3],[2,4],[3,5],[4,6]],
[[1],[2],[3],[4]]]
F×+ Reduce by concatenating all combinations: [[1,3,1],[1,3,2],...,[4,6,4]]
V 1-based index of first list y
ŀ whose list of 1-based indices [1,2,...,length(y)]
§= is equal to
O y sorted: 2