Skip to content

Instantly share code, notes, and snippets.

@JPBM135
Last active April 29, 2024 08:53
Show Gist options
  • Save JPBM135/60d1bc0e4698efdc1bd94dae75a9ed8f to your computer and use it in GitHub Desktop.
Save JPBM135/60d1bc0e4698efdc1bd94dae75a9ed8f to your computer and use it in GitHub Desktop.
Ordenação por id anterior

Sorting by Previous ID

This specification details how the graph should behave with:

  • Changes in position
  • Archiving
  • Unarchiving

1. Structure

interface Base {
  id: number | string,
  previous_id: null | number | string
}

Every object in the graph should contain at least these two columns.

Constraints

  • There can only be one node that depends on null
  • A node cannot depend on itself
  • A node cannot have more than one unarchived dependent
  • An archived node cannot be a parent to any other node

2. Demonstration

For demonstration, I will use the following graph with 5 nodes:

Note

Website used to simulate the graph: https://csacademy.com/app/graph_editor/

image

In which, the node 1 has the previous_id set to null.

Archived nodes will have the suffix -a

image

3. Archiving Nodes

To archive a node, we need to isolate it from the normal graph and connect the dependent of the node being archived to the node that the archived node originally depended on:

Observe our original graph:

image

Now we will archive node 2, the graph should look like this:

image

If node 3 is archived, we should make node 4 depend on node 1:

image

4. Unarchiving Nodes

To unarchive a node, we need to find the direct dependent of the parent of the node being unarchived, where "direct" in this context means unarchived.

We will use the previous example:

image

Now let's unarchive node 2, the graph should look like this:

image

If we were to unarchive node 3, the graph should look like this:

image

5. Changing Node Positions Within the Graph

To change the position of a node within the graph, we must perform two operations:

  • If any node depends on the node being updated, we must update it to depend on the node that the node being updated originally depended on.
  • If any node depends on the node that the updated node will depend on, we must update that node to depend on the node that is being updated.

Using the original graph, let's update the position of node 4 to depend on node 1:

image

As we can see, we performed the following operations:

  • Node 4 now depends on node 1
  • Node 2 now depends on node 4
  • Node 5 now depends on node 3

Ordenação por id anterior

Essa especificação se trata de como o gráfico deve se comportar com:

  • Mudanças de posição
  • Arquivar
  • Desarquivar

1. Estrutura

interface Base {
  id: number | string,
  previous_id: null | number | string
}

Todo o objeto no gráfico deve conter no mínimo essas duas colunas.

Restrições

  • Pode apenar existir um node que depende de null
  • Um node nunca pode depender dele mesmo
  • Um node não pode ter mais de um dependente desarquivado
  • Um node arquivado não pode ser parente de nenhum outro node

2. Demonstração

Como demonstração, vou usar o seguinte gráfico com 5 nodes:

Note

Site usado para simular o gráfico: https://csacademy.com/app/graph_editor/

image

No qual, o node 1 tem o previous_id nulo

Nodes aquivados, vão conter o sufixo -a

image

3. Arquivando nodes

Para aquiver um node, teremos que isolar ele do gráfico normal e juntar o dependente do node que vai ser arquivado com o node que o arquivado dependia originalmente:

Observe nosso gráfico original:

image

Agora vamos arquivar o node 2, o gráfico deve ficar assim:

image

Caso a o node 3 seja arquivado, devemos colocar o node 4 para depender do node 1:

image

4. Desarquivando nodes

Para desarquivar um node, devemos pegar o dependente direto do node do parente do node que esta sendo desarquivado, direto nesse contexto significa não arquivado

Usaremos o exemplo anterior:

image

Agora vamos desarquivar o node 2, o gráfico deve ficar assim:

image

Caso a gente vá desarquivar o node 3, o gráfico deve ficar assim:

image

5. Mudar a posição de nodes dentro do gráfico

Para mudarmos a posição de um node dentro do gráfico, devemos realizar duas operações:

  • Se algum node depender do node que está sendo atualizado, devemos atualiza-lo para depender do node no qual o node que está sendo atualizado dependia originalmente
  • Se algum node depender do node no qual o que está sendo atualizado for depender, devemos atualizar esse node para depender do node que está sendo atualizado

Usando o gráfico original, vamos atualizar a posição do node 4 para depender do node 1:

image

Como podemos ver, realizamos as seguintes operações:

  • O node 4 agora depende do node 1
  • O node 2 agora depende do node 4
  • O node 5 agora depende do node 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment