Author Topic: Простое тестовое задание. Алгоритм Луна  (Read 11363 times)

0 Members and 2 Guests are viewing this topic.

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
[spoiler]Ура, мой алгоритм луны проверили!!!  А можете помочь с заданием со скобками? оно меня принципиально не хочет слушаться :([/spoiler]
Я ничего не проверял. Только посмотрел. Пусть Vint проверяет.  ;D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Я ничего не проверял. Только посмотрел. Пусть Vint проверяет.  ;D
Ага, не проверял говоришь? А замечания дал, хоть и в другой теме
http://crapware.aidf.org/forum/index.php?topic=3251.msg22246#msg22246

И про циклы и про удаление массива и множественный UNDEFINE


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Проверка на буквы в ведённых данных с помощью умножения на 0. Как вариант для *.
А вот перевод строки в число неявно, когда она попадает в массив иногда даёт ошибку в этом коде. Пробел попадает в массив и преобразуется в логический "0".

Есть же STRFILTER. Им можно оставить только цифры. Ошибку выводить не будет при опечатке, просто пропустит букву. Но зато можно вводить код для наглядности с разделением на разряды
Code: [Select]
4561 2612 1234 5467или через TAB
Code: [Select]
4561 2612 1234 5467
А так я ввёл с пробелами и выдало неправильный результат - 2
Ошибку тоже не показало
[spoiler]
Code: [Select]
9:30:54 последний символ *
9:30:54 анализируемая карта 4561 2612 1234 54670
9:30:54 0 n = 4
9:30:54 1 n = 5
9:30:54 2 n = 6
9:30:54 3 n = 1
9:30:54 4 n = 
9:30:54 5 n = 2
9:30:54 6 n = 6
9:30:54 7 n = 1
9:30:54 8 n = 2
9:30:54 9 n = 
9:30:54 10 n = 1
9:30:54 11 n = 2
9:30:54 12 n = 3
9:30:54 13 n = 4
9:30:54 14 n = 
9:30:54 15 n = 5
9:30:54 16 n = 4
9:30:54 17 n = 6
9:30:54 18 n = 7
9:30:54 19 n = 0
9:30:54 0-4
9:30:54 8
9:30:54 2-6
9:30:54 3
9:30:54 4-
9:30:54  *2
9:30:54 6-6
9:30:54 3
9:30:54 8-2
9:30:54 4
9:30:54 10-1
9:30:54 2
9:30:54 12-3
9:30:54 6
9:30:54 14-
9:30:54  *2
9:30:54 16-4
9:30:54 8
9:30:54 18-7
9:30:54 5
9:30:54 Поиск  контрольного числа для 4561 2612 1234 5467*
9:30:54 сумма без последнего числа, sum1= 38
9:30:54 верное контрольное число 2
9:30:54     Исправленный номер 4561 2612 1234 54672 скопирован в буффер обмена.
9:31:00 Введенный номер карты: 4561 2612 1234 54670
9:31:00 20 символов в номере
9:31:00 0 odd, флаг для нечетно
[/spoiler]

А в целом хорошо. Вариант со звёздочкой удобней и наглядней, чем мой простой переключатель.


Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Совсем не учла этот вариант. Зато дальше с первой попытки смогла выловить ошибку  ;D Достаточно было ввести номер через "-", чтоб предложили остановить.

Quote
Есть же STRFILTER.
Признаться, я только вчера  STRFILTER  в действии увидела ::) Так что назовем это повторением вчерашнего урока)

Спасибо, поправила :) Заодно в лог кинула сообщение про "возможную ошибку", если строчка после фильтра уменьшилась.

Атеист

  • Guest
Re: Простое тестовое задание. Алгоритм Луна
« Reply #19 on: December 01, 2017, 08:46:15 PM »
Ладно. Вот ещё одно задание. Сам давно подумывал сделать и вот только что натолкнулся и вспомнил. Вполне себе бытовое и нужное.
https://www.codewars.com/kata/checking-groups

Гуглоперевод

В принципе всё понятно, проверить правильность вложенности скобок в строке. Выдать ответ "правильно" / "неправильно".

Годная оказалась задача (3 in 1). Одним решением поднял на Codewars целый уровнь. :) Функция подходит для решения трёх кат разных уровней.
Вот они все: (может еще есть, я не искал, может кому пригодится)
Checking Groups (6 kyu)
Valid Parentheses (5 kyu)
Valid Braces (4 kyu)

Решал эту задачу на JavaScript. Для Clickermann соответственно тоже написал подпрограмму groupCheck($s) + оригинальные тесты из задачи "Checking Groups".

[spoiler= Ката "Checking Groups" (решение)]
Code: (clickermann) [Select]
#name "Checking Groups" // Clickermann v4.12 (build 001)

// Задача "Checking Groups" - https://www.codewars.com/kata/checking-groups

//-------------------------------- Test Cases:
//
// Тестовые строки от авторов задачи. Копируем их в массив (вместе с комментариями и прочим "мусором") для проверки своего решения.
// Как оказалось (после выполнения задания), тестовые строки не содержат никаких символов кроме скобок, но мы их добавим.

$arr[0] = "Test.expect(groupCheck('()'), 'That group was matched correctly');"
$arr[1] = "Test.expect(groupCheck('({})'), 'That group was matched correctly');"
$arr[2] = "Test.expect(groupCheck('[[]()]'), 'That group was matched correctly');"
$arr[3] = "Test.expect(groupCheck('[{()}]'), 'That group was matched correctly');"
$arr[4] = "Test.expect(groupCheck('([])'), 'That group was matched correctly');"
$arr[5] = "Test.expect(groupCheck('{}([])'), 'That group was matched correctly');"
$arr[6] = "Test.expect(groupCheck('{[{}[]()[]{}{}{}{}{}{}()()()()()()()()]{{{[[[((()))]]]}}}}(())[[]]{{}}[][][][][][][]({[]})'), 'That group was matched correctly');"
$arr[7] = "Test.expect(groupCheck(''), 'That group was matched correctly');"
//
$arr[8] = "Test.expect(!groupCheck('{(})'), 'That group was matched incorrectly');"
$arr[9] = "Test.expect(!groupCheck('[{}{}())'), 'That group was matched incorrectly');"
$arr[10] = "Test.expect(!groupCheck('{)[}'), 'That group was matched incorrectly');"
$arr[11] = "Test.expect(!groupCheck('[[[]])'), 'That group was matched incorrectly');"
$arr[12] = "Test.expect(!groupCheck('()[]{]'), 'That group was matched incorrectly');"
$arr[13] = "Test.expect(!groupCheck('{([]})'), 'That group was matched incorrectly');"
//
$arr[14] = "Test.expect(!groupCheck('[])'), 'That group was left open or prematurely closed');"
$arr[15] = "Test.expect(!groupCheck('([]))'), 'That group was left open or prematurely closed');"
$arr[16] = "Test.expect(!groupCheck('{{))'), 'That group was left open or prematurely closed');"
$arr[17] = "Test.expect(!groupCheck('{}{'), 'That group was left open or prematurely closed');"
$arr[18] = "Test.expect(!groupCheck('{'), 'That group was left open or prematurely closed');"
$arr[19] = "Test.expect(!groupCheck(']'), 'That group was left open or prematurely closed');"
$arr[20] = "Test.expect(!groupCheck('{{{{{{{{{{{((((((([])))))))}}}}}}}}}}'), 'That group was left open or prematurely closed');"
//
$arrsize = ARRSIZE($arr)

//-------------------------------- Решение (было бы другим, если бы задание было правильно сформулировано)

SUB(groupCheck, $s)
   
   $s = STRFILTER($s, "[({})]", 1)
   
   $check = 1
   
   WHILE( (STRLEN($s) > 0) & ($check > 0) )
      $lastStrLength = STRLEN($s)
      $s = STRREPLACE($s, "()", "")
      $s = STRREPLACE($s, "{}", "")
      $s = STRREPLACE($s, "[]", "")
      $check = $lastStrLength - STRLEN($s)
   END_CYC
   
   IF(STRLEN($s))
      LOGWRITE ("false")
   ELSE
      LOGWRITE ("true")
   END_IF
   
   //   LOGWRITE ( !!STRLEN($s) ) // 0 - true, 1 - false
   
END_SUB

//-------------------------------- Тесты

LOGCLEAR

FOR($i = 0, $i < $arrsize)
   
   groupCheck($arr[$i])
   
END_CYC


HALT
[/spoiler]

Прикрутил себе в подпись бейджик Codewars. Как видно хвалиться пока нечем, это начало. Надеюсь будет работать как мотиватор.
Присоединяйтесь! :)