-
Total de itens
20 -
Registro em
-
Última visita
Reputação
7 NeutroSobre 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
-
Puzzle Open Fim de Ano
Lucas Sousa-1 respondeu ao tópico de Ícaro Pereira em Desafios, Jogos e Competições Online
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 -
Puzzle Open 4
Lucas Sousa-1 respondeu ao tópico de Ícaro Pereira em Desafios, Jogos e Competições Online
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 -
Puzzle Open
Lucas Sousa-1 respondeu ao tópico de Ícaro Pereira em Desafios, Jogos e Competições Online
Tempos no Square-1: 15.60p 11.17 12.44 10.60 12.39 Average: 12.00 -
Lucas Sousa-1 começou a seguir [Tool] UD square-1 Algorithm Converter
-
[Tool] UD square-1 Algorithm Converter
Lucas Sousa-1 postou um tópico no fórum Assuntos Diversos (sobre o mundo do cubo)
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-
- ferramenta
- suqare-1
- (e 7 mais)
-
Criação de Embaralhadores
Lucas Sousa-1 respondeu ao tópico de Nicolas Omori em Assuntos Diversos (sobre o mundo do cubo)
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())- 17 respostas
-
1
-
- scramble
- embaralhamento
- (e 2 mais)
-
Cube timer aplicativo android
Lucas Sousa-1 respondeu ao tópico de mateusfiereck em Assuntos Diversos (sobre o mundo do cubo)
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.- 30 respostas
-
- timer
- aplicativo
-
(e 2 mais)
Tags:
-
Cube timer aplicativo android
Lucas Sousa-1 respondeu ao tópico de mateusfiereck em Assuntos Diversos (sobre o mundo do cubo)
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.- 30 respostas
-
1
-
- timer
- aplicativo
-
(e 2 mais)
Tags:
-
Fábrica da MoFangGe- Como é feito um cubo mágico.
Lucas Sousa-1 respondeu ao tópico de João Victor Andrade em Assuntos Diversos (sobre o mundo do cubo)
Imagina os escravos trabalhadores da ShengShou montando as peças dos bigs 8x8x8, 9x9x9... -
Criação de Embaralhadores
Lucas Sousa-1 respondeu ao tópico de Nicolas Omori em Assuntos Diversos (sobre o mundo do cubo)
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ê.- 17 respostas
-
- scramble
- embaralhamento
- (e 2 mais)
-
Aplicativos de Cubos Mágicos em Geral
Lucas Sousa-1 respondeu ao tópico de Antonio Bill em Assuntos Diversos (sobre o mundo do cubo)
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í. ^^ -
Criação de Embaralhadores
Lucas Sousa-1 respondeu ao tópico de Nicolas Omori em Assuntos Diversos (sobre o mundo do cubo)
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- 17 respostas
-
2
-
- scramble
- embaralhamento
- (e 2 mais)
-
Associação Brasileira de Cubo Mágico - Cadastro
Lucas Sousa-1 respondeu ao tópico de Pedro em Speedcubing
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.- 15 respostas
-
1
-
- associaçao
- associação
-
(e 2 mais)
Tags:
-
WR Square-1 single By: Bingliang Li
Lucas Sousa-1 respondeu ao tópico de Tiago Oliveira em Galeria de Vídeos
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). -
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 *-*
