Java (OpenJDK 8), Score: ??? (possibly 2^31)
This clocks in at 969980 bytes, since I had so much to work with I decided to make it a little more readable. Basically I'm generating all the possible programs for length n and iterating them for n*nn^x times for some x. Intuitively a smallfuck program length n which runs longer than n*n steps should be in an infinite loop since the tape x is currently 3 but it can be modified arbitrarily to any size, limited only contain Booleanby the limitation of the JVM's precission. This will work for arbitrarily large input values if x is increased, howeverbut I have not proven it. Without higher test cases I'm not sure where it fails set to generate all the possible outcomes, if ever. If all smallfuck programs of length n terminate within n*n steps, this will work3 for all positive ints java can handle, i.etio. 1 to 2^31-1
import java.util.*; public class Main{ public static void main(String[] args){ int i = new Scanner(System.in).nextInt(); int x = 3; l:for(int j=0;j<Math.pow(5, i);j++){ try { String s=""; for(int k=j;s.length()<i;k/=5) s="+<>][".charAt(k%5)+s; Stack<Integer>y=new Stack<Integer>(); Map<Integer,Integer>f=new HashMap<>(),b=new HashMap<>(); for(int m=0; m<s.length();m++){ char c=s.charAt(m); if(c=='[')y.push(m); if(c==']'){int n=y.pop();f.put(n, m);b.put(m, n);} } if(y.size()>0) continue; boolean[] t= new boolean[s.length()]; int l=0,n=0; for(long m=0;l<s.length()&m<(long)i*&m<Math.pow(longi,x)i;l++;l++,m++){ switch(s.charAt(l)){ case'+':t[n]=!t[n];break; case'>':n++;break; case'<':n--; if(n < 0)continue l;break; case'[':if(!t[n])l=f.get(l);break; case']':l=b.get(l)-1;break; } } if(l>=s.length()){ System.out.println(s); } } catch(Exception e){continue;} } } }