Update compress challenge

Add C Algorithm to resolve the compress string challenge
This commit is contained in:
eamanu 2017-04-12 16:37:01 -03:00
parent fcd4e52e91
commit d29f1ae528
2 changed files with 95 additions and 13 deletions

View File

@ -0,0 +1,52 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *compress (char *s);
char *_calc_partial_result (char p_char, char count);
int main ( ){
printf("%s\n",compress("AABBCC"));
return 0;
}
char *compress ( char *s){
char *result = (char*) malloc(strlen(s)); // result string
char prev_char; // previous char
int count = 0; // count defines
char *p_count;
int i;
if(sizeof(s) == 0)
return NULL;
prev_char = s[0];
for (i=0; i<strlen(s); i+=1){
if (s[i] == prev_char)
count+=1;
else{
asprintf(&p_count, "%i", count);
strcat(result, _calc_partial_result(prev_char, *p_count));
prev_char = s[i];
count = 1;
}
}
asprintf(&p_count, "%i", count);
strcat(result, _calc_partial_result(prev_char, *p_count));
if(strlen(result)<strlen(s))
return result;
else
return s;
}
char *_calc_partial_result (char p_char, char count){
char *buff;
int c = atoi(&count);
if(c > 1){
buff = (char*) malloc(sizeof(p_char) + sizeof(count));
strcpy(buff, &p_char);
strcat(buff, &count);
}else{
buff = (char*) malloc(sizeof(p_char));
strncpy(buff, &p_char, sizeof(p_char));
}
return buff;
}

View File

@ -2,21 +2,30 @@
"cells": [ "cells": [
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"This notebook was prepared by [Donne Martin](http://donnemartin.com). Source and license info is on [GitHub](https://github.com/donnemartin/interactive-coding-challenges)." "This notebook was prepared by [Donne Martin](http://donnemartin.com). Source and license info is on [GitHub](https://github.com/donnemartin/interactive-coding-challenges)."
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"# Solution Notebook" "# Solution Notebook"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"## Problem: Compress a string such that 'AAABCCDDDD' becomes 'A3BC2D4'. Only compress the string if it saves space.\n", "## Problem: Compress a string such that 'AAABCCDDDD' becomes 'A3BC2D4'. Only compress the string if it saves space.\n",
"\n", "\n",
@ -29,7 +38,10 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"## Constraints\n", "## Constraints\n",
"\n", "\n",
@ -46,7 +58,10 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"## Test Cases\n", "## Test Cases\n",
"\n", "\n",
@ -58,7 +73,10 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"## Algorithm\n", "## Algorithm\n",
"\n", "\n",
@ -84,7 +102,10 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"## Code" "## Code"
] ]
@ -93,7 +114,9 @@
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 1,
"metadata": { "metadata": {
"collapsed": false "collapsed": false,
"deletable": true,
"editable": true
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
@ -121,7 +144,10 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"deletable": true,
"editable": true
},
"source": [ "source": [
"## Unit Test" "## Unit Test"
] ]
@ -130,7 +156,9 @@
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 2,
"metadata": { "metadata": {
"collapsed": false "collapsed": false,
"deletable": true,
"editable": true
}, },
"outputs": [ "outputs": [
{ {
@ -172,7 +200,9 @@
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 3,
"metadata": { "metadata": {
"collapsed": false "collapsed": false,
"deletable": true,
"editable": true
}, },
"outputs": [ "outputs": [
{ {
@ -190,9 +220,9 @@
], ],
"metadata": { "metadata": {
"kernelspec": { "kernelspec": {
"display_name": "Python 3", "display_name": "Python 2",
"language": "python", "language": "python",
"name": "python3" "name": "python2"
}, },
"language_info": { "language_info": {
"codemirror_mode": { "codemirror_mode": {