Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

81
LINES

< > BotCompany Repo | #1000506 // LCombineTwoFunctions2 (learner)

JavaX fragment (include)

// extensive version (better results) with full search
    
static class LCombineTwoFunctions2 extends LearnerImpl {
  static boolean debug;
  static long instances;
  Stepper stepper;
  new List<O[]> examples;
  
  *() {
    ++instances; 
    if (debug)
      debug("Instances: " + instances);
  }
  public void finalize() {--instances; }
  
  public void processInOut(O in, O out) {
    examples.add(new O[] {in, out});
    
    if (stepper == null)
      stepper = new Stepper(allFunctions());

    while (!stepper.ended()) {
      long time = System.currentTimeMillis();
      boolean b = check(stepper.current());
      time = System.currentTimeMillis()-time;
      if (debug) debug("check time: " + time);
      if (b)
        ret; // ok, keep
      else
        stepper.step();
    }
    
    fail();
  }
  
  boolean check(Function[] fg) {
    if (debug) {
      debug("Examples: " + examples.size() + ", stepper size: " + stepper.functions.size());
      debug("Checking " + structure(fg));
    }
    for (O[] e : examples) {
      O o = tryProcess(fg[0], e[0]);
      if (o != null) {
        O x = tryProcess(fg[1], o);
        if (e[1].equals(x))
          continue; // example ok
      }
      ret false;
    }
    ret true; // all examples ok
  }
  
  public O processIn(O in) {
    Function[] fg = stepper.current();
    ret fg[1].process(fg[0].process(in));
  }
  
  static O tryProcess(Function f, O in) null on exception {
    ret f.process(in);
  }
  
  static class Stepper {
    List<Function> functions;
    int i1, i2;
    
    *(List<Function> *functions) {}
    
    boolean ended() {
      ret i1 >= functions.size();
    }
    
    Function[] current() {
      ret new Function[] {functions.get(i1), functions.get(i2)};
    }
    
    void step() {
      if (i2 < functions.size()-1) ++i2;
      else { ++i1; i2 = 0; }
    }
  }
}

Author comment

Began life as a copy of #1000500

download  show line numbers  debug dex  old transpilations   

Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

Comments [hide]

ID Author/Program Comment Date
913 #1000604 (pitcher) 2015-08-20 15:28:24
912 #1000610 Edit suggestion:
!636
!629

main {
static Object androidContext;
static String programID;

public static void main(String[] args) throws Exception {
// extensive version (better results) with full search

static class LCombineTwoFunctions2 extends LearnerImpl {
static boolean debug;
static long instances;
Stepper stepper;
new List<O[]> examples;

*() {
++instances;
if (debug)
debug("Instances: " + instances);
}
public void finalize() {--instances; }

public void processInOut(O in, O out) {
examples.add(new O[] {in, out});

if (stepper == null)
stepper = new Stepper(allFunctions());

while (!stepper.ended()) {
long time = System.currentTimeMillis();
boolean b = check(stepper.current());
time = System.currentTimeMillis()-time;
if (debug) debug("check time: " + time);
if (b)
ret; // ok, keep
else
stepper.step();
}

fail();
}

boolean check(F[] fg) {
if (debug) {
debug("Examples: " + examples.size() + ", stepper size: " + stepper.functions.size());
debug("Checking " + structure(fg));
}
for (O[] e : examples) {
O o = tryProcess(fg[0], e[0]);
if (o != null) {
O x = tryProcess(fg[1], o);
if (e[1].equals(x))
continue; // example ok
}
ret false;
}
ret true; // all examples ok
}

public O processIn(O in) {
F[] fg = stepper.current();
ret fg[1].process(fg[0].process(in));
}

static O tryProcess(F f, O in) null on exception {
ret f.process(in);
}

static class Stepper {
List<Function> functions;
int i1, i2;

*(List<Function> *functions) {}

boolean ended() {
ret i1 >= functions.size();
}

Function[] current() {
ret new Function[] {functions.get(i1), functions.get(i2)};
}

void step() {
if (i2 < functions.size()-1) ++i2;
else { ++i1; i2 = 0; }
}
}
}
}}
2015-08-20 01:43:10  delete 

add comment

Snippet ID: #1000506
Snippet name: LCombineTwoFunctions2 (learner)
Eternal ID of this version: #1000506/1
Text MD5: b5c33c61bcf156a6da83e68f13f209bc
Author: stefan
Category:
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2016-10-17 01:25:10
Source code size: 1937 bytes / 81 lines
Pitched / IR pitched: No / No
Views / Downloads: 837 / 1473
Referenced in: [show references]