Postagem em destaque

WSL: Backup e Restauração

Imagem
Às vezes você tem um drive mais rápido (SSD) que o outro (HD). É o meu caso: meu drive C, é um SSD de 256 GB e meu drive D, é um HD de 512 GB. Um é pequeno e rápido; outro é grande e lento.  Meu drive C, por ser pequeno, acabou ficando sem espaço. Então fui pesquisar por grandes arquivos (usei o excelente TreeSize Free para isso) e descobri um tal de ext4.vhdx que tinha 29 GB. Esse arquivo é a imagem do disco do WSL no Windows e é normal ficar grande. O problema é que mesmo você apagando arquivos ele não diminui. E quando você usa o Docker, a situação se agrava rapidamente. Então, descobri uma maneira de compactar esse arquivo/disco. É um comentário da KarolineWss numa issue do WSL. Funciona maravilhosamente bem. Tanto que consegui diminuir praticamente pela metade o arquivo.  Mas para fazer isso, claro, pesquisei como fazer backup (e restauração). Esse artigo é sobre isso. E com um bônus, esse o arquivo fica numa localização meio complicada para humanos, mas fazendo um backup e uma

Arrays: elementos repetidos e número de ocorrências

Problema: dado um determinado array, como contar quais os elementos repetidos e o número de ocorrências de cada elemento?

Existem diversas maneiras de se conseguir isso, até porque algumas linguagens possuem uma extensa biblioteca para utilização com arrays. Mas, para treinar um pouco, vou mostrar uma solução em C++. O código já está comentado.

#include <stdio.h>
#include <string.h>
#include <iostream>
 
using namespace std;
 
// estrutura que contem o valor do número e a quantidade de ocorrências
struct number { 
  int value;
  int count;
};
 
// tamanho definido arbitrariarmente (para facilitar o exemplo)
#define MAX 8
 
// array de entrada
int a[MAX] = {5, 3, 5, 1, 1, 1, 2, 1};

// array com estrutura do número
number n[MAX];

int used = -1;
int found = 0;
const int NUL = -1;
 
int main(){
  int i, j;
 
  // inicializa array
  for(i=0; i<MAX; i++){
    n[i].value = NUL;
    n[i].count = NUL;
  }
 
  for(i=0; i<MAX; i++){
    found = 0;
    
    for(j=0; j<used; j++){
      // encontrou, incrementa e sair fora
      if (a[i] == n[j].value){
        n[j].count++;
        found = 1;
        break;
      }
    }
 
    // não encontrou o número, armazena
    if (not found) {
      used++;
      n[used].value = a[i];
      n[used].count = 1;
    }
  }
 
  // inicializa array
  for(i=0; i<used; i++){
    cout << i << " "<< n[i].value << " " << n[i].count << "\n\r";
  }
 
  getchar();
  return 0;
}

Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Google Hacking

FTP não funciona no PHP