Skip to content

Instantly share code, notes, and snippets.

@LucasAlfare
Created October 29, 2016 18:17
Show Gist options
  • Save LucasAlfare/1745ce11e35f97a5625bdefdfd57ec30 to your computer and use it in GitHub Desktop.
Save LucasAlfare/1745ce11e35f97a5625bdefdfd57ec30 to your computer and use it in GitHub Desktop.
Tentando criar uma coisa aqui..
package com.main;
/**
* Created by familia on 19/10/16.
*/
public class Clock {
private RelogioPequeno[] relogiosPequenos;
private int[] pinos = {0, 0, 0, 0};
public Clock() {
relogiosPequenos = new RelogioPequeno[9];
for (int i = 0; i < relogiosPequenos.length; i++){
relogiosPequenos[i] = new RelogioPequeno(i);
}
}
public void moverSlotsAfetados(int para){
if (temPinoLevantado()){
for (int i = 0; i < pinos.length; i++){
if (pinoLevantado(i)){
for (int x : slotsAfetadosByPino(i)){
relogiosPequenos[x].moverPonteiro(para);
}
}
}
} else {
for (int i = 0; i <= 6; i += 2){
relogiosPequenos[i].moverPonteiro(para);
}
}
}
public int[] slotsAfetadosByPino(int pino){
int[] r;
switch (pino){
case 0:
//System.out.println("switch " + pino);
return new int[]{0,1,7,8};
case 1:
//System.out.println("switch " + pino);
return new int[]{1,2,3,8};
case 2:
//System.out.println("switch " + pino);
return new int[]{3,4,5,8};
case 3:
//System.out.println("switch " + pino);
return new int[]{5,6,7,8};
}
return null;
}
public boolean temPinoLevantado(){
boolean r = false;
for (int x : pinos){
if (x == 1){
r = true;
break;
}
}
return r;
}
public void baixarTodosOsPinos(){
pinos = new int[]{0,0,0,0};
}
public void levantarTodosOsPinos(){
pinos = new int[]{1,1,1,1};
}
public boolean pinoLevantado(int pino){
return pinos[pino] == 1;
}
public void pressionarPino(int pino){
pinos[pino] = pinos[pino] == 0 ? 1 : 0;
}
public RelogioPequeno[] getRelogiosPequenos() {
return relogiosPequenos;
}
public int[] getPinos() {
return pinos;
}
@Override
public String toString() {
String r = "";
for (int i = 0; i < relogiosPequenos.length; i++){
r += relogiosPequenos[i].toString() + "\n";
}
return r;
}
}
package com.main;
/**
* Created by familia on 19/10/16.
*/
public class ClockSolver {
private Clock clock;
public ClockSolver(Clock clock) {
this.clock = clock;
clock.baixarTodosOsPinos();
}
public Clock resolverCruz(){
Clock r = this.clock;
int posiçãoAlvo;
posiçãoAlvo = r.getRelogiosPequenos()[1].posiçãoPonteiro();
r.pressionarPino(2);
r.moverSlotsAfetados(posiçãoAlvo);
r.pressionarPino(2);
posiçãoAlvo = r.getRelogiosPequenos()[7].posiçãoPonteiro();
r.pressionarPino(1);
r.moverSlotsAfetados(posiçãoAlvo);
r.pressionarPino(1);
posiçãoAlvo = r.getRelogiosPequenos()[5].posiçãoPonteiro();
r.pressionarPino(0);
r.moverSlotsAfetados(posiçãoAlvo);
posiçãoAlvo = r.getRelogiosPequenos()[3].posiçãoPonteiro();
r.pressionarPino(3);
r.moverSlotsAfetados(posiçãoAlvo);
/*
for (int i = 0; i < sequenciaSlotsCruz().length; i++){
if (i < 2){
posiçãoAlvo = r.getRelogiosPequenos()[sequenciaSlotsCruz()[i]].posiçãoPonteiro();
r.pressionarPino(sequenciaPinosCruz()[i]);
r.moverSlotsAfetados(posiçãoAlvo);
r.pressionarPino(sequenciaPinosCruz()[i]);
} else {
posiçãoAlvo = r.getRelogiosPequenos()[sequenciaSlotsCruz()[i]].posiçãoPonteiro();
r.pressionarPino(sequenciaPinosCruz()[i]);
r.moverSlotsAfetados(posiçãoAlvo);
}
}
*/
//r.levantarTodosOsPinos();
//r.moverSlotsAfetados(0);
return r;
}
private int[] sequenciaSlotsCruz(){
return new int[]{1, 7, 5, 3};
}
private int[] sequenciaPinosCruz(){
return new int[]{2, 1, 0, 3};
}
public Clock getClock() {
return clock;
}
}
package com.main;
import java.util.Arrays;
import java.util.Random;
/**
* Created by familia on 19/10/16.
*/
public class Main {
public static void main(String[] args) {
Clock clock = new Clock();
clock.pressionarPino(1);
clock.moverSlotsAfetados(8);
clock.pressionarPino(1);
clock.pressionarPino(3);
clock.moverSlotsAfetados(2);
clock.pressionarPino(3);
/*
clock.pressionarPino(1);
clock.moverSlotsAfetados(8);
clock.pressionarPino(1);
clock.pressionarPino(3);
clock.moverSlotsAfetados(2);
clock.pressionarPino(3);
clock.pressionarPino(3);
clock.moverSlotsAfetados(3);
clock.pressionarPino(3);
clock.pressionarPino(2);
clock.moverSlotsAfetados(1);
clock.pressionarPino(2);
clock.pressionarPino(3);
clock.moverSlotsAfetados(1);
clock.pressionarPino(3);
*/
System.out.println(clock);
}
/*
pressionando o pino 1...
movendo slots afetados para 8...
pressionando o pino 3...
movendo slots afetados para 2...
pressionando o pino 3...
movendo slots afetados para 3...
pressionando o pino 2...
movendo slots afetados para 1...
pressionando o pino 3...
movendo slots afetados para 1...
slot 0: - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
slot 1: - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 -
slot 2: - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 -
slot 3: - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
slot 4: - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
slot 5: - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
slot 6: - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
slot 7: - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
slot 8: - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 -
*/
}
package com.main;
import java.text.SimpleDateFormat;
/**
* Created by familia on 19/10/16.
*/
public class RelogioPequeno {
private int[] marcações = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
private int ID;
public RelogioPequeno(int ID) {
this.ID = ID;
}
@Deprecated
public void moverPonteiro(int paraOnde){
//TODO corrigir este metodo!
marcações[posiçãoPonteiro()] = 0;
marcações[paraOnde] = 1;
}
public int posiçãoPonteiro(){
int r = 0;
for (int i = 0; i < marcações.length; i++){
r = i;
if (marcações[i] == 1){
break;
}
}
return r;
}
public int[] getMarcações() {
return marcações;
}
public int getID() {
return ID;
}
@Override
public String toString() {
String r = "slot " + ID + ": - ";
for (int marcação : marcações) {
r += marcação + " - ";
}
return r;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment