Skip to content

Instantly share code, notes, and snippets.

@tashima42
Last active July 26, 2021 18:48
Show Gist options
  • Select an option

  • Save tashima42/cbb2caafec9fda2934ce782e53f0a5ef to your computer and use it in GitHub Desktop.

Select an option

Save tashima42/cbb2caafec9fda2934ce782e53f0a5ef to your computer and use it in GitHub Desktop.
{
"sortingAlgorithms": [
{
"id": "ordenacao-1",
"subject": "Algoritmos de ordenação",
"text": "\nQuantas trocas são necessárias para que a sequência abaixo seja ordenada de modo crescente?\n```\n{sequencia=1:10:{6:10}}\n```\nUtilize o seguinte método de ordenação:\n```\n{metodo}\n```\n<metodo>\n <sort value=\"bubble\">void bubbleSort(int arr[], int n)</sort>\n <sort value=\"selection\">void selectionSort(int arr[], int n)</sort>\n <sort value=\"insertion\">void insertionSort(int arr[], int n)</sort>\n</metodo>\n---\nAlguma dúvida? Consulte a referência para esta questão [aqui](http://google.com.br).\n ",
"answer": "function (values, blocks) {\n const arr = [...values.sequencia];\n const metodo = blocks.metodo;\n const resp = [];\n let swapCounter = 0;\n\n switch (metodo) {\n case 'bubble':\n let swapped;\n\n do {\n swapped = false;\n\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] > arr[i + 1]) {\n swapCounter++; // incrementar a qtd de trocas feitas\n\n let tmp = arr[i];\n arr[i] = arr[i + 1];\n arr[i + 1] = tmp;\n swapped = true;\n }\n }\n } while (swapped);\n\n resp.push(swapCounter);\n break;\n\n case 'selection':\n for (let i = 0; i < arr.length; i++) {\n // Encontrar o menor numero no subarray\n let min = i;\n\n for (let j = i + 1; j < arr.length; j++) {\n if (arr[j] < arr[min]) {\n min = j;\n }\n }\n\n if (min != i) {\n // Trocar os elementos\n let tmp = arr[i];\n arr[i] = arr[min];\n arr[min] = tmp;\n swapCounter++; // incrementar a qtd de trocas feitas\n }\n }\n\n resp.push(swapCounter);\n break;\n\n case 'insertion':\n for (let i = 1; i < arr.length; i++) {\n // Escolhendo o primeiro elemento no subarray nao ordenado\n let current = arr[i]; // O ultimo elemento do array ordenado\n\n let j = i - 1;\n\n while (j > -1 && current < arr[j]) {\n arr[j + 1] = arr[j];\n j--;\n swapCounter++; // incrementar a qtd de trocas feitas\n }\n\n arr[j + 1] = current;\n }\n\n resp.push(swapCounter);\n break;\n\n default:\n resp.push(-1);\n break;\n }\n\n return resp;\n }",
"level": 2,
"keywords": [
"keyword1",
"keyword2"
]
},
{
"id": "ordenacao-2",
"text": "\nQuantas trocas são necessárias para que a sequência abaixo seja ordenada de modo crescente?\n```\n{sequencia=1:10:{6:10}}\n```\nUtilize o seguinte método de ordenação:\n```\n{metodo}\n```\n<metodo>\n <sort value=\"bubble\">void bubbleSort(int arr[], int n)</sort>\n <sort value=\"selection\">void selectionSort(int arr[], int n)</sort>\n <sort value=\"insertion\">void insertionSort(int arr[], int n)</sort>\n</metodo>\n---\nAlguma dúvida? Consulte a referência para esta questão [aqui](http://google.com.br).\n ",
"answer": "function (values, blocks) {\n const arr = [...values.sequencia];\n const metodo = blocks.metodo;\n const resp = [];\n let swapCounter = 0;\n\n switch (metodo) {\n case 'bubble':\n let swapped;\n\n do {\n swapped = false;\n\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] > arr[i + 1]) {\n swapCounter++; // incrementar a qtd de trocas feitas\n\n let tmp = arr[i];\n arr[i] = arr[i + 1];\n arr[i + 1] = tmp;\n swapped = true;\n }\n }\n } while (swapped);\n\n resp.push(swapCounter);\n break;\n\n case 'selection':\n for (let i = 0; i < arr.length; i++) {\n // Encontrar o menor numero no subarray\n let min = i;\n\n for (let j = i + 1; j < arr.length; j++) {\n if (arr[j] < arr[min]) {\n min = j;\n }\n }\n\n if (min != i) {\n // Trocar os elementos\n let tmp = arr[i];\n arr[i] = arr[min];\n arr[min] = tmp;\n swapCounter++; // incrementar a qtd de trocas feitas\n }\n }\n\n resp.push(swapCounter);\n break;\n\n case 'insertion':\n for (let i = 1; i < arr.length; i++) {\n // Escolhendo o primeiro elemento no subarray nao ordenado\n let current = arr[i]; // O ultimo elemento do array ordenado\n\n let j = i - 1;\n\n while (j > -1 && current < arr[j]) {\n arr[j + 1] = arr[j];\n j--;\n swapCounter++; // incrementar a qtd de trocas feitas\n }\n\n arr[j + 1] = current;\n }\n\n resp.push(swapCounter);\n break;\n\n default:\n resp.push(-1);\n break;\n }\n\n return resp;\n }",
"subject": "sortingAlgorithms",
"level": 3,
"keywords": [
"tag2"
]
}
],
"searchingAlgorithms": [
{
"id": "busca-1",
"subject": "Algoritmos de busca",
"text": "\nSuponha que você está realizando uma busca sequencial no vetor: `[{vet=3:13:+{6:11}}]`\n\nQuantas comparações serão realizadas se o valor buscado for **{valor=3:13}**?\n }",
"answer": "function (values) {\n const {\n vet,\n valor\n } = values;\n let answer = []; // resposta a ser retornada\n\n for (let i = 0; i < vet.length; i++) {\n if (vet[i] == valor) {\n answer.push(i + 1);\n return answer;\n }\n }\n\n answer.push(vet.length + 1);\n return answer;\n }",
"level": 1,
"keywords": [
"busca sequencial",
"busca"
]
},
{
"id": "busca-2",
"subject": "Algoritmos de busca",
"text": "Considere o método de busca sequencial em um vetor contendo os elementos: `[{vet=2:23:+{5:10}}]` \n \nQual deve ser o retorno da busca quando o usuário pesquisar pelo item **{valor=2:23}**?\n ",
"answer": "function (values) {\n const {\n vet,\n valor\n } = values;\n let answer = [];\n\n for (let i = 0; i < vet.length; i++) {\n if (vet[i] == valor) {\n answer.push(i);\n return answer;\n }\n }\n\n answer.push(-1);\n return answer;\n }",
"level": 1,
"keywords": [
"busca sequencial",
"busca"
]
},
{
"id": "busca-3",
"subject": "Algoritmos de busca",
"text": "\nSuponha que seja feita uma busca sequencial otimizada no vetor a seguir, o qual deve ser ordenado antes da busca. \n```\n[{vet=1:10:{5:10}}]\n``` \nQuantas comparações serão realizadas se o valor a ser buscado for **{valor=1:10}**?\n ",
"answer": "function (values) {\n const {\n vet,\n valor\n } = values;\n const answer = [];\n\n const BubbleSort = originalArray => {\n // Make a copy of the original array\n let arr = [...originalArray];\n let swapped;\n\n do {\n swapped = false;\n\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] > arr[i + 1]) {\n let tmp = arr[i];\n arr[i] = arr[i + 1];\n arr[i + 1] = tmp;\n swapped = true;\n }\n }\n } while (swapped);\n\n return arr;\n }; // Ordenar vetor usando Bubble Sort\n\n\n let sortedArray = BubbleSort(vet); // Realizar busca sequencial no vetor ordenado\n\n for (let i = 0; i < sortedArray.length; i++) {\n if (sortedArray[i] == valor) {\n answer.push(i + 1);\n return answer;\n }\n }\n\n answer.push(sortedArray.length);\n return answer;\n }",
"level": 1,
"keywords": [
"busca",
"busca otimizada",
"busca sequencial"
]
}
],
"stack": [
{
"id": "pilha-1",
"subject": "Pilha estática e dinâmica",
"text": "\nConsiderando a função a seguir que recebe um número como argumento e utiliza a pilha S para processá-lo.\n\nO que será impresso quando **fun({n=5:10})** for chamado?\n```\nvoid fun(int n) {\n stack S; \n while (n > 1) {\n push(&S, n%2);\n n = n/2;\n \\}\n while (!isEmpty(&S))\n printf(\"%d \", pop(&S));\n\\}\n```\n",
"answer": "function (values) {\n let {\n n\n } = values;\n let stack = []; // Armazenar o retorno de cada item removido da pilha que será usado para a resposta final da questão\n\n let poppedItems = [];\n\n while (n > 1) {\n stack.push(n % 2);\n n = n / 2;\n }\n\n while (stack.length) {\n poppedItems.push(stack.pop());\n }\n\n return poppedItems;\n }",
"level": 1,
"keywords": [
"pilha",
"simulação"
]
}
],
"queue": [
{
"id": "fila-1",
"subject": "Fila",
"text": "Se os elementos abaixo são adicionados a uma fila e são depois removidos da fila, em qual ordem eles serão removidos? `[{vet=1:10:{3:6}}]`",
"answer": "function (values) {\n const {\n vet\n } = values;\n let inputArr = [...vet]; // copiar o vetor\n\n let answer = []; // resposta a ser retornada\n\n while (inputArr.length) {\n answer.push(inputArr.shift());\n }\n\n return answer;\n }",
"level": 1,
"keywords": [
"ordem de remoção",
"fila"
]
}
],
"linkedList": [
{
"id": "lista-1",
"subject": "Lista encadeada",
"text": "\nA lista duplamente encadeada **l** possui os seguintes elementos:\n```\n{lista=1:10:5}\n```\nSabendo que a função **addNode** cria e insere um novo nó entre os nós **ant** e **prox** que são recebidos por parâmetro.\n```\nnode *addNode(node *ant, int valor, node *prox) {\n ...\n\\}\n```\nQual a nova sequência da lista, após a execução das seguintes instruções?\n``` \naddNode(l→first, {a=1:10}, l→first→prox);\naddNode(addNode(l->last->ant, {b=1:10}, l->last), {c=1:10}, l->last);\n``` \n ",
"answer": "function (values) {\n let {\n lista,\n a,\n b,\n c\n } = values;\n let _lista = [...lista]; // Simulate a Doubly Linked List behaviour using an Array\n // Simulate first instruction => addNode(l→first, \"a\", l→first→prox);\n\n _lista.splice(1, 0, a); // Simulate second instruction => addNode(addNode(l->last->ant, \"b\", l->last), \"c\", l->last);\n\n\n _lista.splice(_lista.length - 1, 0, b);\n\n _lista.splice(_lista.length - 1, 0, c);\n\n return _lista;\n }",
"level": 2,
"keywords": [
"lista",
"lista duplamente encadeada"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment