Skip to content

Instantly share code, notes, and snippets.

@nihilismus
Created October 6, 2015 04:28
Show Gist options
  • Save nihilismus/13f0d850529cac3e80b1 to your computer and use it in GitHub Desktop.
Save nihilismus/13f0d850529cac3e80b1 to your computer and use it in GitHub Desktop.
var E = (function() {
var _f1 = function(v) {
var vocal_siguiente = {
"a": "e",
"e": "i",
"i": "o",
"o": "u",
"u": "a"
};
if (vocal_siguiente[v] === undefined) {
return v;
}
return vocal_siguiente[v];
};
var _f2 = function(v, n) {
var arr_salida = [];
if (n <= 0) {
return arr_salida;
}
arr_salida.push( _f1( v ) );
for (var i = 1; i < n; i++) {
arr_salida.push( _f1( arr_salida[arr_salida.length - 1] ) );
}
return arr_salida;
};
var _f3 = function(v1, v2) {
var arr_salida = [];
var siguientes_diez = _f2( v1, 10 );
for (var i = 0; i < siguientes_diez.length; i++) {
if (siguientes_diez[i] === v2) {
break;
}
arr_salida.push( siguientes_diez[i] );
}
return arr_salida;
};
var _f4 = function(s1) {
var s2 = "";
var es_vocal = function(v) {
return _f1( v ) !== v;
};
for (var i = 0; i < s1.length; i++) {
if ( es_vocal( s1[i] ) ) {
s2 += _f2( s1[i], 3 )[2];
} else {
s2 += s1[i]
}
}
return s2;
};
var _f5 = function(s1) {
var s2 = "";
var vocal_descifrada = function(v) {
var original_nueva = {
"o": "a",
"u": "e",
"a": "i",
"e": "o",
"i": "u"
};
if (original_nueva[v] === undefined) {
return v;
}
return original_nueva[v];
}
for (var i = 0; i < s1.length; i++) {
s2 += vocal_descifrada( s1[i] );
}
return s2;
};
return {
"f1": _f1,
"f2": _f2,
"f3": _f3,
"f4": _f4,
"f5": _f5
};
})();
/*
* E.f1 : Dada una letra vocal V, regresar la siguiente letra vocal a esta
* de una secuencia ordenada de letras vocales donde la siguiente letra
* a la 'u' es la 'a'
*
* Si el argumento dado no es una vocal, regresar el mismo argumento.
*
*/
QUnit.test("E.f1", function(assert) {
assert.equal(E.f1('a'), 'e');
assert.equal(E.f1('e'), 'i');
assert.equal(E.f1('i'), 'o');
assert.equal(E.f1('o'), 'u');
assert.equal(E.f1('u'), 'a');
assert.equal(E.f1(''), '');
assert.equal(E.f1('@'), '@');
assert.equal(E.f1('hola'), 'hola');
assert.equal(E.f1(123), 123);
});
/*
*
* E.f2 : Dada una letra vocal V y un número entero N, regresar un arreglo
* con las siguientes N letras vocales a V de una secuencia ordenada
* ciclica ('infinita') de letras vocales.
*
* Secuencia ordenada ciclica: a, e, i, o, u, a, e, i, o, u, ..., a, e, i, o, ...
*
*/
QUnit.test("E.f2", function(assert) {
assert.deepEqual(E.f2('i', 0), []);
assert.deepEqual(E.f2('u', -2), []);
assert.deepEqual(E.f2('e', 3), ['i', 'o', 'u']);
assert.deepEqual(E.f2('a', 1), ['e']);
assert.deepEqual(E.f2('o', 5), ['u','a','e','i','o']);
assert.deepEqual(E.f2('i', 10), ['o', 'u', 'a', 'e', 'i', 'o', 'u', 'a', 'e', 'i']);
});
/*
* E.f3 : Dada dos letras vocales, V1 y V2, regresar un arreglo con las letras vocales
* entre V1 y V2 (la más inmediata a V1) de una secuencia ordenada ciclica ('infinita')
* de letras vocales.
*
* Secuencia ordenada ciclica: a, e, i, o, u, a, e, i, o, u, ..., a, e, i, o, ...
* Ejemplos:
* Entre la 'i' y la 'o' no existe alguna letra, por lo tanto se regresa []
* Entre la 'i' y la 'u' se encuenta la 'o', por lo tanto se regresa ['o']
* Entre la 'i' y la 'a' se encuenta la 'o' y la 'u', por lo tanto se regresa ['o', 'u']
*
*/
QUnit.test("E.f3", function(assert){
assert.deepEqual(E.f3('a', 'e'), []);
assert.deepEqual(E.f3('i', 'o'), []);
assert.deepEqual(E.f3('u', 'a'), []);
assert.deepEqual(E.f3('a', 'i'), ['e']);
assert.deepEqual(E.f3('i', 'u'), ['o']);
assert.deepEqual(E.f3('u', 'e'), ['a']);
assert.deepEqual(E.f3('a', 'o'), ['e', 'i']);
assert.deepEqual(E.f3('i', 'a'), ['o', 'u']);
assert.deepEqual(E.f3('u', 'i'), ['a', 'e']);
assert.deepEqual(E.f3('e', 'a'), ['i', 'o', 'u']);
assert.deepEqual(E.f3('o', 'i'), ['u', 'a', 'e']);
assert.deepEqual(E.f3('a', 'u'), ['e', 'i', 'o']);
assert.deepEqual(E.f3('a', 'a'), ['e', 'i', 'o', 'u']);
assert.deepEqual(E.f3('i', 'i'), ['o', 'u', 'a', 'e']);
assert.deepEqual(E.f3('u', 'u'), ['a', 'e', 'i', 'o']);
});
/*
* E.f4 : Dada una cadena de caracteres S1, regresar una cadena de caracteres S2
* donde las letras vocales en S1 sean sustituidas por la 3a. siguiente letra
* vocal de una secuencia ordenada ciclica ('finita') de letras vocales.
*
* Secuencia ordenada ciclica: a, e, i, o, u, a, e, i, o, u, ..., a, e, i, o, ...
* Ejemplo de sustituciones: o => e, e => u, u => i
*
* ¡CIFRADO!
*
*/
QUnit.test("E.f4", function(assert){
assert.equal(E.f4(""), "");
assert.equal(E.f4("#"), "#");
assert.equal(E.f4("1x2y3z4"), "1x2y3z4");
assert.equal(E.f4("hola mundo feliz!"), "helo minde fulaz!");
assert.equal(E.f4("[email protected]"), "[email protected]");
});
/*
* E.f5 : Dada una cadena de caracteres S1, generada a partir de E.f4,
* descifrarla.
*
* ¡DESCIFRADO!
*/
QUnit.test("E.f5", function(assert){
assert.equal(E.f5(""), "");
assert.equal(E.f5("#"), "#");
assert.equal(E.f5("1x2y3z4"), "1x2y3z4");
assert.equal(E.f5("helo minde fulaz!"), "hola mundo feliz!");
assert.equal(E.f5("[email protected]"), "[email protected]");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment