Lucas Sousa-1

Membros
  • Total de itens

    20
  • Registro em

  • Última visita

Reputação

7 Neutro

Sobre Lucas Sousa-1

  • Rank
    1x1x1

Profile Information

  • Gender
    Male
  • Location
    Maranhão

Contact Methods

  • Skype
    lucassousa10

Previous Fields

  • Perfil WCA
    2014VITO01
  • YouTube
    /user/lucasalfare

Últimos Visitantes

834 visualizações
  1. Puzzle Open Fim de Ano

    Square-1 avg5: 14.92 -------------- Detalhes -------------- Generated By csTimer on 2016-12-29 solves/total: 5/5 single best: 11.45 worst: 26.01 mean of 3 current: 13.82 (σ = 2.05) best: 13.75 (σ = 2.00) avg of 5 current: 14.92 (σ = 0.13) best: 14.92 (σ = 0.13) Average: 14.92 (σ = 0.13) Mean: 16.45 Time List: 26.01, 14.77, 11.45, 15.03, 14.95
  2. Puzzle Open 4

    Square-1 avg5: 13.91 Detalhes: single best: 12.93 worst: 15.81 mean of 3 current: 14.14 (σ = 1.50) best: 14.14 (σ = 1.50) avg of 5 current: 13.91 (σ = 0.27) best: 13.91 (σ = 0.27) Average: 13.91 (σ = 0.27) Mean: 14.09 Time List: 14.20[p], 13.83[p], 15.81[p], 12.93, 13.67
  3. Puzzle Open

    Tempos no Square-1: 15.60p 11.17 12.44 10.60 12.39 Average: 12.00
  4. Olá! Bem, trabalhei numa ferramenta simples para espelhar algorítimos do square como se fosse no sentido de um "z2", onde, basicamente, a ferramenta pega o algoritmo de entrada e o inverte. Estive usando esta ferramenta para aprender mais casos de EPs (edge permutations) tanto de novos casos novos quanto de casos que sei, afinal é sempre bom poder evitar fazer um /(6,6)/! Como exemplo, vou deixar um algoritmo de U-perm aqui para vocês: Usando esta sequência como entrada / (3,0) / (1,0) / (0,-3) / (-1,0) / (-3,0) / (1,0) / (0,3) / (-1,0) obtêm-se: 1°) /(0,-3)/(0,-1)/(3,0)/(0,1)/(0,3)/(0,-1)/(-3,0)/(0,1); ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Imagem do programa: Download do arquivo via uploader do fórum (8kb): UD square-1 Algorithm Converter.jar Link de download via MediaFire: Mediafire link Código fonte do programa: Tool gist - GitHub
  5. Criação de Embaralhadores

    Bem, refiz a classe geradora de embaralhamentos para Square-1 em Python. Aproveitei e dei uma "otimizada" nos métodos, apesar de, diferentemente do Java, ainda estar consumindo MUITA memória ao ser executada...Segue o código: import random as r class Peca(object): pass class Edge(Peca): def __init__(self, name): self.name = name def getPieceName(self): return self.name def __str__(self): return self.name class Corner(Peca): def __init__(self, name): self.name = name def getPieceName(self): return self.name def __str__(self): return self.name class SquareOne(object): a = Edge('a') b = Corner('b') c = Edge('c') d = Corner('d') e = Edge('e') f = Corner('f') g = Edge('g') h = Corner('h') # i = Edge('i') j = Corner('j') k = Edge('k') l = Corner('l') m = Edge('m') n = Corner('n') o = Edge('o') p = Corner('p') posicoes = [ # Peças da camada U a, b, b, c, d, d, e, f, f, g, h, h, # Peças da camada D i, j, j, k, l, l, m, n, n, o, p, p] def U(self, movimento): TOOOOOOP_pieces = self.posicoes[0:12] ll = len(TOOOOOOP_pieces) if movimento > 0: for i in range(movimento): aux = [TOOOOOOP_pieces[ll - 1]] for j in range(ll): aux.append(TOOOOOOP_pieces[j]) if j is (ll - 1): break TOOOOOOP_pieces = aux elif movimento < 0: for i in range(movimento * (-1)): deleted = TOOOOOOP_pieces[0] TOOOOOOP_pieces.remove(deleted) TOOOOOOP_pieces.append(deleted) ultimos = self.posicoes[12:len(self.posicoes)] self.posicoes[0:12] = TOOOOOOP_pieces self.posicoes[12:24] = ultimos def D(self, movimento): botton_pieces = self.posicoes[12:24] ll = len(botton_pieces) if movimento > 0: for i in range(movimento): aux = [botton_pieces[ll - 1]] for j in range(ll): aux.append(botton_pieces[j]) if j is (ll - 1): break botton_pieces = aux elif movimento < 0: for i in range(movimento * (-1)): deleted = botton_pieces[0] botton_pieces.remove(deleted) botton_pieces.append(deleted) primeiros = self.posicoes[0:12] self.posicoes[0:12] = primeiros self.posicoes[12:24] = botton_pieces def barra(self): corte_de_U = self.posicoes[1:7] corte_de_D = self.posicoes[12:18] for i in range(6): aux = corte_de_U[i] aux2 = corte_de_D[i] corte_de_U[i] = aux2 corte_de_D[i] = aux self.posicoes[1:7] = corte_de_U self.posicoes[12:18] = corte_de_D def isTravado(self): aux = self.posicoes if aux[0] is aux[1] or aux[6] is aux[7] or aux[17] is aux[18] or aux[23] is aux[12]: return True return False def __str__(self): toPrint = '' for i in range(self.posicoes.__len__()): toPrint += self.posicoes[i].__str__() + " " if i is 11: toPrint += "\n\n" return toPrint class Embaralhador(object): moves = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6] sq1 = SquareOne() sorteadosOk = [] def embaralhar(self): u = r.choice(self.moves) d = r.choice(self.moves) self.sq1.U(u) self.sq1.D(d) if self.sq1.isTravado(): self.sq1.U(u*-1) self.sq1.D(d*-1) self.embaralhar() else: self.sq1.barra() self.sorteadosOk.append([u, d]) def scramble(self): for i in range(5): self.embaralhar() s = '' oks = self.sorteadosOk for i in range(len(oks)): s += '(' + str(oks[i][0]) + ',' + str(oks[i][1]) + ')/' return s print(Embaralhador().scramble())
  6. Cube timer aplicativo android

    Huahuaehaheuaa, realmente não. Basta umas horas pra aprender os conceitos e a sintaxe da linguagem que você vai usar para escrever o código e pronto.
  7. Cube timer aplicativo android

    Se você pretende criar um aplicativo de cronômetro para cubo mágico, você deve considerar que deverás não criar um, mas sim programar um. Se deseja programar um para que funcione em dispositivos Android, precisará de conhecimentos da linguagem de programação Java. Se já tem conhecimento de java, basta baixar o SDK do Android ("equivalente" ao JDK do Java), instala-lo e configura-lo em alguma IDE. Depois sua criatividade lhe guiará pela criação do timer.
  8. Fábrica da MoFangGe- Como é feito um cubo mágico.

    Imagina os escravos trabalhadores da ShengShou montando as peças dos bigs 8x8x8, 9x9x9...
  9. Criação de Embaralhadores

    Amigo, fico feliz por meus códigos terem aberto mais possibilidades lógicas em sua mente. Espero que eu possa continuar te ajudando. ^^ Pretendo fazer umas classes de Clock (na verdade já comecei alguns esboços), e quiser me ajudar tâmo aê.
  10. Aplicativos de Cubos Mágicos em Geral

    Tinha um aplicativo de Rubik's Clock pra Android, eu esqueci o nome dele. Era bacana, mesmo tendo só uma face do Clock. Se alguém achar, postem aí. ^^
  11. Criação de Embaralhadores

    Pra quem me conhece, square-1 é meu puzzle favorito. Dessa forma resolvi criar uma classe pra me dar scrambles para ele! /** * Created by lucas on 06/12/15. */ public enum TipoDaPeca { MEIO, CANTO; } /** * Created by lucas on 06/12/15. */ public enum Peca { A(TipoDaPeca.MEIO, "A"), B(TipoDaPeca.CANTO, "B"), C(TipoDaPeca.MEIO, "C"), D(TipoDaPeca.CANTO, "D"), E(TipoDaPeca.MEIO, "E"), F(TipoDaPeca.CANTO, "F"), G(TipoDaPeca.MEIO, "G"), H(TipoDaPeca.CANTO, "H"), I(TipoDaPeca.MEIO, "I"), J(TipoDaPeca.CANTO, "J"), K(TipoDaPeca.MEIO, "K"), L(TipoDaPeca.CANTO, "L"), M(TipoDaPeca.MEIO, "M"), N(TipoDaPeca.CANTO, "N"), O(TipoDaPeca.MEIO, "O"), P(TipoDaPeca.CANTO, "P"); String name; TipoDaPeca pieceType; Peca(TipoDaPeca pieceType, String name){ this.name = name; this.pieceType = pieceType; } public String getPieceName(Peca p){ //retorna o nome da peca return p.name; } public TipoDaPeca getPieceType(Peca p){ //retorna o tipo da peca return p.pieceType; } } /** * Created by lucas on 06/12/15. */ public class Posicao { private Peca piece; public Posicao(Peca piece){ this.piece = piece; } public Peca getPiece(){ return piece; } @Override public String toString() { return piece.getPieceName(piece); } } /** * Created by lucas on 06/12/15. */ public class Cubo { private Posicao[] posicoes = new Posicao[24]; public Cubo() { //Posicoes contendo as pecas da camada U posicoes[0] = new Posicao(Peca.A); posicoes[1] = new Posicao(Peca.; posicoes[2] = new Posicao(Peca.; posicoes[3] = new Posicao(Peca.C); posicoes[4] = new Posicao(Peca.D); posicoes[5] = new Posicao(Peca.D); posicoes[6] = new Posicao(Peca.E); posicoes[7] = new Posicao(Peca.F); posicoes[8] = new Posicao(Peca.F); posicoes[9] = new Posicao(Peca.G); posicoes[10] = new Posicao(Peca.H); posicoes[11] = new Posicao(Peca.H); //Posicoes contendo as pecas da camada D posicoes[12] = new Posicao(Peca.I); posicoes[13] = new Posicao(Peca.J); posicoes[14] = new Posicao(Peca.J); posicoes[15] = new Posicao(Peca.K); posicoes[16] = new Posicao(Peca.L); posicoes[17] = new Posicao(Peca.L); posicoes[18] = new Posicao(Peca.M); posicoes[19] = new Posicao(Peca.N); posicoes[20] = new Posicao(Peca.N); posicoes[21] = new Posicao(Peca.O); posicoes[22] = new Posicao(Peca.P); posicoes[23] = new Posicao(Peca.P); } public void fazerMovimentoU(int move) { for (int i = 0; i <= (11 - move); i++) { this.moverTopo(); } } /** * Esse metodo privado move o topo do square */ private void moverTopo() { Posicao[] uPositions = new Posicao[12]; for (int i = 0; i < uPositions.length; i++) { uPositions[i] = posicoes[i]; } for (int i = 0; i < uPositions.length; i++) { Posicao aux = uPositions[i]; uPositions[i] = uPositions[i + 1]; uPositions[i + 1] = aux; if (i == (uPositions.length - 2)) { break; } } for (int i = 0; i < uPositions.length; i++) { posicoes[i] = uPositions[i]; } } public void fazerMovimentoD(int move) { for (int i = 0; i <= (11 - move); i++) { this.moverBase(); } } /** * Esse metodo privado move a base do square */ private void moverBase() { Posicao[] dPositions = new Posicao[12]; for (int i = 0; i < dPositions.length; i++) { dPositions[i] = posicoes[i + 12]; } for (int i = 0; i < dPositions.length; i++) { Posicao aux = dPositions[i]; dPositions[i] = dPositions[i + 1]; dPositions[i + 1] = aux; if (i == (dPositions.length - 2)) { break; } } for (int i = 0; i < dPositions.length; i++) { posicoes[i + 12] = dPositions[i]; } } /** Esse metodo faz uma "barra" no square. A barra permuta as pecas contidas nas posicoes 1 a 6 com as posicoes de 12 a 17. */ public void fazerBarra() { Posicao[] udPositions = new Posicao[12]; Posicao[] uPositions = new Posicao[6], dPositions = new Posicao[6]; for (int i = 0; i < 6; i++) { uPositions[i] = posicoes[i + 1]; dPositions[i] = posicoes[i + 12]; } for (int i = 0; i < 6; i++) { udPositions[i] = uPositions[i]; udPositions[i + 6] = dPositions[i]; } for (int j = 0; j < 6; j++) { for (int i = 0; i < udPositions.length; i++) { Posicao aux = udPositions[i]; udPositions[i] = udPositions[i + 1]; udPositions[i + 1] = aux; if (i == (udPositions.length - 2)) { break; } } } for (int i = 0; i < 6; i++) { posicoes[i + 1] = udPositions[i]; posicoes[i + 12] = udPositions[i + 6]; if (i == 5) { posicoes[i + 1] = udPositions[i - 1]; } } } /*** * @return true se a linha esta bloqueada e false se esta tudo OK */ public boolean linhaPrincipalBloqueada() { if ((posicoes[0].getPiece().pieceType == TipoDaPeca.CANTO && posicoes[1].getPiece().pieceType == TipoDaPeca.CANTO) || (posicoes[6].getPiece().pieceType == TipoDaPeca.CANTO && posicoes[7].getPiece().pieceType == TipoDaPeca.CANTO || (posicoes[17].getPiece().pieceType == TipoDaPeca.CANTO && posicoes[18].getPiece().pieceType == TipoDaPeca.CANTO || (posicoes[23].getPiece().pieceType == TipoDaPeca.CANTO && posicoes[12].getPiece().pieceType == TipoDaPeca.CANTO)))) { Peca p1 = posicoes[0].getPiece(); Peca p2 = posicoes[1].getPiece(); Peca p3 = posicoes[6].getPiece(); Peca p4 = posicoes[7].getPiece(); Peca p5 = posicoes[17].getPiece(); Peca p6 = posicoes[18].getPiece(); Peca p7 = posicoes[23].getPiece(); Peca p8 = posicoes[12].getPiece(); if (p1.equals(p2) || p3.equals(p4) || p5.equals(p6) || p7.equals(p8)) { return true; } } return false; } @Override public String toString() { String retorno = "Camada U:\n"; for (int i = 0; i < posicoes.length; i++) { retorno += "A posicao " + (i + 1) + " contem a peca " + posicoes[i].toString() + "\n"; if (i == 11) { retorno += "\nCamada D:\n"; } } return retorno; } } import java.util.ArrayList; import java.util.Random; public class ClassePrincipal { private Cubo cubo = new Cubo(); private Random r = new Random(); private int[] movimentosDisponiveis = {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6}; private ArrayList<int[]> sorteadosOk = new ArrayList<>(); public ClassePrincipal(){ System.out.println(scramble()); } public void gerarSequencia(){ int u = movimentosDisponiveis[r.nextInt(12)]; int d = movimentosDisponiveis[r.nextInt(12)]; cubo.fazerMovimentoU(u); cubo.fazerMovimentoD(d); if (cubo.linhaPrincipalBloqueada()){ /* como a linha ficou bloqueada faz os movimentos contrarios pra voltar o cubo pra posicao inicial */ cubo.fazerMovimentoU(u * (-1)); cubo.fazerMovimentoD(d * (-1)); this.gerarSequencia(); // <- chamada recursiva } else { int[] xy = {u, d}; // <- se der certo adiciona o par de movimentos OK na lista sorteadosOk.add(xy); cubo.fazerBarra(); // <- como deu certo ai pode aplicar um "/" no square pra poder continuar } } public String scramble(){ for (int i = 0; i < 10; i++){ gerarSequencia(); } String retorno = ""; for (int i = 0; i < sorteadosOk.size(); i++){ retorno += "(" + sorteadosOk.get(i)[0] + "," + sorteadosOk.get(i)[1] + ")/"; } return retorno; } public static void main(String[] args) { new ClassePrincipal(); } } Escrevi em Java, mas pretendo escrever ele em Python também, vai ser bacana! Mesmo se você não escreve em Java espero que te ajude em algo, até porque lógica é comum a todas as linguagens. Qualquer duvida é só falar. ^^ Criei um gist das classes nesse link, se preferir: https://gist.github.com/LucasAlfare/910b35912a7c45811b4f
  12. Associação Brasileira de Cubo Mágico - Cadastro

    Primeiramente parabenizo a todos os responsáveis. É uma grande honra para nós, aqui do Brasil, podermos ter esta entidade criada em prol do Cubo Mágico, vai ser de grande importância a partir de agora. Em segundo lugar, ao navegar um pouco pelo novo site (que também ficou bem desenvolvido), vi que na aba "Eventos" não foi citado o campeonato que está por vir aqui no Maranhão (7-8/11). Não sei dos motivos que levaram a essa oclusão do mesmo. Porém, mais uma vez, fico feliz por termos avançado este grande passo, parabéns a todos.
  13. WR Square-1 single By: Bingliang Li

    Scramble muito tranquilo mesmo! Nem precisou usar CP parity! Cube Shape resolve com 3 barras, o caso de CO mais simples, de EO mais simples também, CP de adjacentes em cima e embaixo, EP O com opostos em cima! Se minha habilidade pra mexer o square fosse equivalente a eu mexendo o 3x3 eu faria em uns 10 segundos (meu look é muito zuado hahah).
  14. Metas para o Mundial 2015 do Brasil

    Com certeza minha meta é: Pegar todas as EPs sem paridade do square-1, melhorar meu square para não ter tantos pops e média contante sub 19s *-*