Ir al contenido principal

Tutu.ru

Al resolver la tarea, no se puede usar frameworks y componentes listos. Nos interesa ver cómo puedes resolver tareas similares y crear algo desde cero.

Tareas de Fizz-buzz

Tarea №1

Escribir una función dscount que cuente la cantidad de veces que los caracteres s1 y s2 aparecen consecutivamente en la cadena, sin considerar mayúsculas y minúsculas. La función debe pasar al menos las siguientes pruebas:


"use strict";

// Yor code here ...
// Tu código de implementación de la función dscount
// ... //

// Para mayor comodidad, puedes usar estas pruebas:
try {
    test(dscount, ['ab___ab__', 'a', 'b'], 2);
    test(dscount, ['___cd____', 'c', 'd'], 1);
    test(dscount, ['de_______', 'd', 'e'], 1);
    test(dscount, ['12_12__12', '1', '2'], 3);
    test(dscount, ['_ba______', 'a', 'b'], 0);
    test(dscount, ['_a__b____', 'a', 'b'], 0);
    test(dscount, ['-ab-аb-ab', 'a', 'b'], 2);
    test(dscount, ['aAa', 'a', 'a'], 2);

    console.info("¡Congratulations! All tests passed.");
} catch(e) {
    console.error(e);
}

// Función simple de prueba
function test(call, args, count, n) {
    let r = (call.apply(n, args) === count);
    console.assert(r, `Found items count: ${count}`);
    if (!r) throw "¡Test failed!";
}

 

  • El código dado es un ejemplo y no es obligatorio usarlo tal cual. Se pueden hacer modificaciones.
  • Presta atención al rendimiento de tu solución. La solución debe ser compacta.
  • La solución debe ser simple, caber en un solo archivo y contener no más de 20 líneas de código.
  • El tiempo ideal para resolver la tarea es de no más de 15 minutos (la tarea se puede resolver en 5 minutos).

Tarea №2

Implementar una función checkSyntax(string) que verifique la corrección sintáctica de la secuencia de paréntesis. La tarea no se reduce a una simple verificación del balance de paréntesis. También se debe tener en cuenta su secuencia (anidación).

  • Presta atención al rendimiento de tu solución.
  • La solución debe ser compacta.
  • La solución debe ser simple, caber en un solo archivo y contener de 20 a 30 líneas de código o menos.
  • El tiempo ideal para resolver la tarea es de no más de 30 minutos (la tarea se puede resolver en 10 minutos).

Muestra la solución si es necesario verificar el siguiente conjunto de paréntesis: <,[,{,(

¿Cambiaría tu solución si solo necesitas verificar este conjunto de paréntesis: <,[,{

  • En caso de error, devuelve 1.

  • En todos los demás casos, devuelve 0.

Pruebas para el primer conjunto:

checkSyntax("---(++++)----") == 0
checkSyntax("") -> 0
checkSyntax("before ( middle []) after ") == 0
checkSyntax(") (") == 1
checkSyntax("} {") == 1
checkSyntax("<(   >)") == 1
checkSyntax("(  [  <>  ()  ]  <>  )") == 0
checkSyntax("   (      [)") == 1
// y etc...


Algoritmos

Tarea №1

  • Hay 2 sartenes para panqueques, cada una de las cuales puede contener exactamente 1 panqueque a la vez.
  • Hay 3 panqueques que necesitan ser cocinados.
  • Una cara del panqueque se cocina en 1 minuto.
  • Los panqueques deben ser cocinados por ambos lados.


Se considera una iteración el proceso de cocinar un lado de 2 panqueques en 2 sartenes. ¿Cuánto tiempo (iteraciones) se necesita para cocinar 3 panqueques con una distribución óptima?
Implemente su algoritmo en forma de código.

Puede ser código orientado a objetos, funcional o incluso procedimental. Justifica tu elección del enfoque.


Describe necesariamente el algoritmo, cómo resolvería esta tarea en el mundo físico (en qué momento y cómo cocinaría estos panqueques).


Refactorización

Tareas para trabajar con código ajeno.

Tarea  №1

Mira el código:

¿Qué se puede mejorar? ¿Cómo lo reescribirías?

function func(s, a, b) {

	if (s.match(/^$/)) {
		return -1;
	}
	
	var i = s.length -1;
	var aIndex =     -1;
	var bIndex =     -1;
	
	while ((aIndex == -1) && (bIndex == -1) && (i > 0)) {
	    if (s.substring(i, i +1) == a) {
	    	aIndex = i;
    	}
	    if (s.substring(i, i +1) == b) {
	    	bIndex = i;
    	}
	    i = i - 1;
	}
	
	if (aIndex != -1) {
	    if (bIndex == -1) {
	        return aIndex;
	    }
	    else {
	        return Math.max(aIndex, bIndex);
	    }
	}
	
	if (bIndex != -1) {
	    return bIndex;
	}
	else {
	    return -1;
	}
}

Tarea №2

function drawRating(vote) {
	if (vote >= 0 && vote <= 20) {
    	return '★☆☆☆☆';
	}
	else if (vote > 20 && vote <= 40) {
		return '★★☆☆☆';
	}
	else if (vote > 40 && vote <= 60) {
		return '★★★☆☆';
	}
	else if (vote > 60 && vote <= 80) {
		return '★★★★☆';
	}
	else if (vote > 80 && vote <= 100) {
		return '★★★★★';
	}
}

// Verificación del resultado del trabajo
console.log(drawRating(0) ); // ★☆☆☆☆
console.log(drawRating(1) ); // ★☆☆☆☆
console.log(drawRating(50)); // ★★★☆☆
console.log(drawRating(99)); // ★★★★★

¿Qué se puede mejorar? ¿Cómo reescribirías la función drawRating suponiendo que la función drawRating recibe una variable vote, que contiene un valor de 0 a 100? Nos interesa específicamente la lógica de implementación de la función, no la representación visual de las estrellas.


Практические

Tareas задачи

Prácticas

ЗадачаTarea №1

Реализуйте

Es функциюnecesario parseUrl(string),desarrollar котораяun будетcomponente парситьen URLJavaScript строкуpara иordenar возвращатьtablas объектcon с распарсенными данными. Пример:

let a = parseUrl('http://tutu.ru:8080/do/any.php?a=1&b[]=a&b[]=b#foo')

// Вернет объект, в котором будут следующие свойства:
console.log( a.href == "http://tutu.ru:8080/do/any.php?a=1&b[]=a&b[]=b#foo" )
console.log( a.hash == "#foo" )
console.log( a.port == "8080" )
console.log( a.host == "tutu.ru:8080" )
console.log( a.protocol == "http:" )
console.log( a.hostname == "tutu.ru" )
console.log( a.pathname == "/do/any.php" )
console.log( a.origin == "http://tutu.ru:8080" )

datos.

Желательно задачу решить как можно меньшим числом строк кода и затратив на реализацию минимум времени. Подсказка: JS-ninja может решить эту задачу за 1 минуту и написать 1 строчку кода. Дерзайте =)

Задача №2

Необходимо разработать javascript-компонент для сортировки таблиц с данными.

ФункционалFuncionalidad

  • Сортировка

    Ordenación поpor столбцамcolumnas: приal нажатииhacer наclic названиеen столбцаel строкиnombre таблицыde сортируютсяla поcolumna, возрастанию,las приfilas повторномde кликеla -tabla поse убыванию.ordenan Графическимen элементомorden илиascendente; текстовымal сообщениемhacer указываетсяclic направлениеnuevamente, сортировки.

    se ordenan en orden descendente. Un elemento gráfico o un mensaje de texto indicará la dirección de la ordenación.

  • Клиентская

    Paginación пагинацияdel lado del cliente: данныеlos необходимоdatos отображатьdeben постранично,mostrarse максимумpor páginas, con un máximo de 50 элементовelementos наpor страницу.página. НеобходимоSe предоставитьdebe пользовательскуюproporcionar навигациюuna дляnavegación переходаpara поque страницам.

    el usuario pueda moverse entre las páginas.

  • Фильтрация

    Filtrado: компонентel предоставляетcomponente текстовоеdebe поле,proporcionar вun котороеcampo пользовательde можетtexto ввестиen текстel иque строкиel таблицы,usuario данныеpueda которыхintroducir неtexto, содержатy подстроку,las введённуюfilas пользователем,de скрываютсяla tabla cuyos datos no contengan la subcadena introducida por el usuario se ocultarán. El filtrado se realizará al presionar el botón "Buscar". Перефильтрация осуществляется по нажатию на кнопку Найти.

  • По

    Visualización кликеde наdetalles: строкуal таблицыhacer значенияclic полейen выводятсяuna вfila дополнительномde блокеla подtabla, таблицей.

    los valores de los campos se mostrarán en un bloque adicional debajo de la tabla.

  • Данные

    Carga вde таблицуdatos загружаютсяdesde сel сервера.servidor: Способlos загрузкиdatos сse сервераcargarán наen вашla выбор.

    tabla desde el servidor. El método de carga desde el servidor es a tu elección.

Для

 демонстрации

работы

Para компонентаdemostrar необходимоel сделатьfuncionamiento простуюdel componente, es necesario crear una página HTML страницу.sencilla. ПользователюSe предлагаетсяle выбратьofrecerá наборal данных:usuario маленькийelegir илиun большой.conjunto Приde выбореdatos: набораpequeño данныхo онgrande. загружаетсяAl сseleccionar сервераel иconjunto поde даннымdatos, строитсяeste таблица.se cargará desde el servidor y se construirá la tabla con los datos. 

Formato de datos del servidor

Формат

El данныхservidor отdevolverá сервера

un

Серверarray возвращаетJSON JSON-массивde данных.datos. ПримерEjemplo данных:

de datos:


[
	{
		id: 101,
		firstName: "Sue",
		lastName: "Corson",
		email: "DWhalley@in.gov",
		phone: "(612)211-6296",
		adress: {
			streetAddress: "9792 Mattis Ct",
			city: "Waukesha",
			state: "WI",
			zip: "22178"
		},
		description: "et lacus magna dolor..."
	}
}

Маленький

El объемpequeño данныхvolumen беретсяde поdatos ссылкеse obtiene mediante un enlace. http://www.filltext.com/?rows=32&id={number|1000}&firstName={firstName}&lastName={lastName}&email={email}&phone={phone|(xxx)xxx-xx-xx}&adress={addressObject}&description={lorem|32}

Большой

El объемgrande данныхvolumen беретсяde поdatos ссылкеse obtiene mediante un enlace. http://www.filltext.com/?rows=1000&id={number|1000}&firstName={firstName}&delay=3&lastName={lastName}&email={email}&phone={phone|(xxx)xxx-xx-xx}&adress={addressObject}&description={lorem|32}

Замечания

Observaciones

  • Особое

    Rendimiento: вниманиеDebes следуетprestar уделитьespecial скоростиatención работы.a Зависаниеla интерфейсаvelocidad приde выполненииfuncionamiento. операцийNo загрузкиse данных,permite фильтрации,que сортировкиla недопустимо.

    interfaz se congele durante la carga de datos, filtrado o ordenación.

  • Во

    Indicador времяde загрузкиcarga: данныхDurante стоитla показатьcarga какой-тоde индикатор

    datos, se debe mostrar algún tipo de indicador.

  • Разрешённые

    Bibliotecas библиотекиpermitidas: jQuery, Lodash/Underscore, Backbone, самописный.o Ноcódigo вамpropio. придетсяSin объяснитьembargo, выборtendrás иque причинуexplicar использования.tu Использованиеelección стороннихy библиотекla будетrazón плюсомde толькоsu вuso. случаеEl еслиuso этоde оправданноbibliotecas иde выterceros сможетеserá объяснитьun причинуplus выбора.solo Показавsi своиes знанияjustificable вy грамотномpuedes примененииexplicar стороннихla готовыхrazón решений,de выsu имеетеelección. шансDemostrando повыситьtu своюconocimiento профессиональнуюen привлекательностьla дляaplicación нас.

    adecuada de soluciones existentes, tendrás la oportunidad de aumentar tu atractivo profesional para nosotros.

  • Пишите

    Calidad кодdel так,código: какEscribe быel выcódigo егоcomo писалиsi вfuera работеpara -un внутренностиproyecto заданияde будутtrabajo. оцениватьсяLa дажеcalidad тщательней,interna чемdel внешнееcódigo соответствиеserá заданию.evaluada Кодincluso долженmás бытьmeticulosamente организованque так,el чтобыcumplimiento егоexterno можноde былоla зановоtarea. использовать.

    El código debe estar organizado de manera que pueda ser reutilizado.

  • Помните

    Manejo проde обработкуerrores: ошибок!

    Recuerda manejar adecuadamente los errores.

  • Верстка

    Maquetación: можетLa бытьmaquetación самаяpuede простая.ser Визуализациюla иmás украшениеsimple. делаетеLa наvisualización вашy вкус.el Мыdiseño неquedan противa использованияtu gusto. No tenemos inconveniente en que uses http://getbootstrap.com/ илиu похожегоotro framework de UI фреймворк,similar, ноpero толькоsolo дляpara UIla представленияrepresentación de la interfaz (нельзяno использоватьse permite usar código JS кодdel дляframework решенияpara задачи,resolver ноla можноtarea, использоватьpero для оформительскихse эффектов(анимацииpuede иusar томуpara подобное))!

    efectos de presentación como animaciones y similares).

Дополнительным плюсомPlus будет:adicional

  • Uso

    Использованиеde TypeScript илиo ES6+ (babel).

Схема

Esquema визуальногоde представленияrepresentación данных

visual de los datos

 

+------+------------+-----------------+-----------------+---------------+
| id ▲ | firstName ▼| lastName      ▼ | email          ▼| phone        ▼|
+------+------------+-----------------+-----------------+---------------+
| 101  | Sue        | Corson          | DWhalley@in.gov | (612)211-6296 |
+------+------------+-----------------+-----------------+---------------+
| 102  | Lor        | Ipsumd          | dwhalley@in.gov | (612)211-6296 |
+------+------------+-----------------+-----------------+---------------+
| 103  | Ips        | Umdolo          | dwhalley@in.gov | (612)211-6296 |
+------+------------+-----------------+-----------------+---------------+

Если

Si выбранse пользователемselecciona сal usuario con id = 101101, ,mostramos тоla подsiguiente таблицейinformación выводимdebajo следующуюde информацию:

la tabla:

ВыбранSeleccionado пользовательusuario: <b>Sue Corson</b>
Описание:Descripción:
<textarea>
et lacus magna dolor...
</textarea>
АдресDirección проживания:de residencia: <b>9792 Mattis Ct</b>
Город:Ciudad: <b>Waukesha</b>
Провинция/штат:Provincia/Estado: <b>WI</b>
Индекс:Código Postal: <b>22178</b>


Дополнительно

Adicionalmente, напишитеinfórmenos нам,cómo какprobaste выel тестировалиresultado результатde своейtu работы.trabajo. Какие¿Qué используетеherramientas инструментыutilizaste иy какcómo выrealizaste осуществляетеlas тестирование.

pruebas?


КомментарииComentarios

Результат

El выполненияresultado заданияde нужноla будетtarea оформитьdeberá здесьser же,presentado наen гитхабе.GitHub.

В
качестве
ответа
не

нужно
присылать

никаких(!)
ZIP
архивов
и наборов файлов. Все ваши ответы должны быть оформлены на https://github.com/ . Вы присылаете только ссылку на ваш репозиторий. У нас в компании применяется GIT, и если вы его не знаете, вам стоит освоить базу самостоятельно. Если у вас еще нет аккаунта, то это хороший повод его завести.

Если есть вопросы, вы всегда их можете задать, связавшись с человеком, который выдал вам задание.