Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12

4 скрипта, которые не проходят несколько тестов

17.02.2013, 15:29. Показов 716. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте

Задача 1.
в файле i.txt хранятся данные в формате:

1 0 1 1 1
1 1 1 0 1
0 1 1 1 1
1 1 0 1 1
1 1 1 0 1
r r y q v
f c a s p
p k j h t
r t h t y
u h I s t
первые 5 строчек - это своеобразный ключ
последние 5 строчек - замок, к которому нужно "примерить" ключ.
Как это все происходит:
давайте представим, что ключ - это бумажка (0 - отверстие, 1 - сам лист).
а замок - это буквы, написанные на листе

Нам нужно определить, подходит ли ключ. А подходит он только в том случае, если после наложения останутся буквы t, s, t, a, r (то есть их положение совпадет с нулями).
Важное замечание! ключ можно поворачивать по часовой стрелке до 3х раз. то есть наложили, если не подошел, перевернули, опять наложили и т.д.

В ответ надо вывести No, если ключ не подходит, либо, если подходит:
Yes
количество необходимых поворотов
для примера выше будет выведен ответ
Yes
2
еще 1 пример входного файла:
1 1 1 1 1
1 0 1 1 1
1 1 1 1 0
1 1 1 1 0
0 1 0 1 1
r r y q v
f c a s p
p k j h t
r t h t y
u h I s t
Ответ на выходе должен быть No

Итак, мой исходник:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$data = file('i.txt');//загружаем данные
 
$key[0] = explode(" ", $data[0].' '.$data[1].' '.$data[2].' '.$data[3].' '.$data[4]); // массив для ключа. каждый элемент массива - цифра 1 или 0
$code = explode(" ", $data[5].' '.$data[6].' '.$data[7].' '.$data[8].' '.$data[9]); // замок. принцип, как и у ключа
 
for($i=0; $i < 5; $i++) // "переварачиваем" ключ по часовой стрелке. это 1 поворот
    for($j=20+$i; $j >= 0; $j -= 5)
        $key[1][] = $key[0][$j];
        
$key[2] = array_reverse($key[0]); // 2 поворота
$key[3] = array_reverse($key[1]); // 3 поворота
 
$t = "No"; // начальное значение ответа
 
for($i=0; $i<4; $i++){ // "запоминаем" буквы, которые были на месте дырок во всех случаях
    
    foreach($key[$i] as $k => $v){ //если попали на 0, то записываем в массив answ букву, которая на его месте
        if((int)$v == 0) $answ[$i][] = $code[$k];
    }
    
    $arstt = array('t', 's', 't', 'a', 'r'); //нужные символы
    for($j=0; $j<5; $j++){
        if(($k = array_search(strtolower($answ[$i][$j]), $arstt)) !== false) //если есть нужный символ, удаляем его
            unset($arstt[$k]);
    }
    if(count($arstt) == 0){ //если все удалили, значит ключ подошел
        $t = "Yes\r\n".$i;
        break;
    }
    
}//если буква не подошла, то повторяем цикл
 
 
file_put_contents('o.txt', $t); //записываем ответ
Скрипт проходит 9 из 10 тестов. не могу найти проблему. (тестирую не я. еще примеров входных файлов нет)


Задача 2
Ребята собрались на озере и решили поиграть в блинчики (кидать камушки в воду, чтобы они отскакивали). всего было N человек. Ребята договорились, что считать количество соприкосновений они будут только на дистанции L от берега.
Нужно сказать, кто из мальчиков выиграл

Входные данные:
Первая строка - число N
Вторая строка - дистанция L
последующие строки - информация о броске мальчика в формате: первая цифра H - количество соприкосновений с водой, затем H чисел - расстояний от берега до места, где камень коснулся воды

Пример входного файла:

3
4
1 1
2 1 2
3 1 2 3
3 участника
4 - ограничение
блинчик первого мальчика каснулся с водой всего 1 раз на дистанции 1 метр от берега
блинчик второго мальчика подскочил 2 раза. 1 касание с водой на 1 метре от берега, второе - на 2
и т.д.

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

2й пример входного файла:
3
4
1 8
3 1 3 4
6 20 30 40 100 110 120
Ответ - 2

Мой исходник:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
$data = file('i.txt');//загружаем данные 
 
$n = $data[0]; //количество участников
$l = $data[1]; // дистанция
 
$players = array(); //массив с результатами
 
for($i=2, $c = $n+2; $i< $c; $i++){ //перебор результатов
    $temp = explode(" ", $data[$i]); //массив с результатами 1 мальчика
    $c2 = $temp[0]; // количество прыжков блинчика
    unset($temp[0]); 
    
    $players[$i-1] = 0;
    foreach($temp as $v) //перебираем результат
        if((int)$v <= (int)$l){ $players[$i-1] += (int)$v; //если результат меньше ограничения, то записываем его
        
        
    }
    
 
    
    
}
 
 
 
arsort($players); //сортируем от большего к меньшему
 
 
foreach($players as $k => $v){
    file_put_contents('o.txt', trim($k)); //записываем результат
    break;
}
Скрипт проходит 10 из 20 тестов


Задача 3
есть строка вида abbababa. нужно сказать, сколько в ней цепочек, в которых количество a и b одинаковое.

Например, строка aba
ответ: 2 цепочки (ab и ba)

пример2: строка abbababa
ответ: 13

порядок букв в цепочках может повторяться! Например, в прошлом примере будет несколько одинаковых цепочек:
abbababa

Мой исходник:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$data = file('i.txt');//загружаем данные из файла. каждая строчка будет отдельным элементом массива
 
$strarr = array();
 
$str=trim($data[1]);//str = строчке
 
for($i=0, $len=strlen($str)-2; $i<= $len; $i++){ // цикл будет повторяться до тех пор, пока i будет меньше или равен длине строки
    
    
    for($j=2, $len2=strlen($str); $j <= $len2; $j++){ // цикл повторяется до тех пор, пока j <= длине новой строки
        
        $strarr[] = substr($str, 0, $j); //в массив заносим варианты строк. substr обрезает строку с 0 по j-й символ. то есть из строки abcd мы получим массив array(ab, abc, abcd);
    }
    
    $str=substr($str, 1); // убираем самый левый символ. то есть из строки abcd получим bcd
    
}
 
//после всех этих кругов из строки abcd получим массив: arr(ab, abc, abcd, bc, bcd, cd)
 
$c=0; //количество подходящих цепочек
 
foreach($strarr as $v){ //пребор массива. $v - значение элемента массива
    //echo $v.'<br>';
    $a=0; $b=0;
    $a = substr_count($v, "a"); // считаем, сколько символов 'a' в строке
    $b = substr_count($v, "b"); // сколько 'b' в строке
    if($a == $b && $a !=0 && $b != 0) $c++; // если количество равно, то увеличиваем C на 1
}
    echo $c;
file_put_contents('o.txt', $c); //записываем это число в файл
p.s.комментарии делал на буква abcd, чтобы было нагляднее


И последняя задача
На каждой клетке поля размером NxN лежит цифра. Путешественник идет по полю и суммирует числа. как только он получает число K или больше, он останавливается. Нужно определить на какой клетке он остановился. Либо, если он не досчитал до числа K, то нужно вывести 0

Внимание. Свое движение человек начинает в верхнем левом углу. затем идет вправо до конца поля, спускается на 1 клетку вниз, идет до конца влево, опять спускается на 1 келтку вниз и т.д.

Пример входных данных:
4 24
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
4 - число N (размер поля)
24 - K (необходимая сумма)
в остальных строчках - цифры, которые лежат на поле

ответ для данного примера - 11

второй пример:
4 50
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
ответ - 0

мой исходник:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
 
$data = file('i.txt'); //загружаем данные
 
$a = explode(" ", $data[0]); //массив. первый элемент - N, второй - K
 
$track = array(); //создаем массив, в котором в нормальном порядке будут расположены числа
 
for($i=0; $i < $a[0]; $i++) 
    if($i % 2 == 0) $track = array_merge($track, explode(" ", $data[1+$i])); 
    else $track = array_merge($track, array_reverse(explode(" ", $data[1+$i])));
/*
если это первая строчка, то переворачивать ее не надо => записываем как есть
если это вторая строчка, то ее надо перевернуть => переворчиваем и дописываем в первый массив
и т.д.
*/
    
 
$n=0; $b=0;
for($i=0, $c=$a[0]*$a[0]; $b < $a[1] && $i < $c; $i++, $n++) //проходим по полученной дороге
    $b += $track[$i]; //если мы еще не набрали нужную сумму и если поле не закончилось, то прибавляем число с клетки
 
 
if($b >= $a[1]) $t = $n; //если мы набрали нужное число, то записываем его в ответ
else $t = 0; //иначе в ответ - 0
file_put_contents('o.txt', $t); //выводим ответ
скрипт проходит 18 из 20 тестов


Заранее благодарен за помощь. я не прошу давать мне готовые исходники, можете просто подсказать, в каком месте может возникнуть ошибка при таких-то и таких-то значениях
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2013, 15:29
Ответы с готовыми решениями:

Определить силы токов, которые проходят через резисторы
Приветствую всех, прошу помочь мыслями, решениями кто чем сможет. Буду невероятно признателен. В цепи электродвижущая сила равна 5...

Запрос: вывести лекции, которые проходят в одно и тоже время
Здравствуйте! подскажите пожалуйста) Есть таблица lectures необходимо вывести лекции, которые проходят в одно и тоже время. Пытаюсь при...

Составить уравнения окружностей, которые проходят через точку А и касаются прямых
Составить уравнения окружностей, которые проходят через точку А(1; 0) и касаются прямых 2x+y+2=0, 2x+y-18=0. Пожалуйста, объясните...

1
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
18.02.2013, 14:05
Цитата Сообщение от kir55rus Посмотреть сообщение
последняя задача
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
/* содержимое файла для теста:
4 24
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
*/
$data = file('inc.php');
#массив. первый элемент - N, второй - K
list($area_size , $limit )= explode(" ", $data[0]);
unset($data[0]);
$current_size = 0;
$GoRight = false;
foreach ($data as $Y => $line){
   #проверяем лимит поля
   #+1 так как индексы с 0 идут   
   if ($Y + 1 > $area_size) break;
   #на каждой линии меняем направление
   #тру станет фолс , а фолс тру
   $GoRight = !$GoRight;
   $cur_line_array = explode(' ', $line);
   if (!$GoRight) $cur_line_array = array_reverse($cur_line_array);
   $line_real_count = count($cur_line_array);
   foreach ($cur_line_array as $X => $number){
      #проверяем лимит поля
      if ($GoRight && $X + 1 > $area_size) continue;
      #если влево идем проверяем иначе
      if (!$GoRight && $line_real_count - $area_size > $X ) continue;
      #если попали сюда значит ступили на поле
      $current_size += $number;
      #проверка лимита
      if (!($current_size < $limit)) {
        #вычисляем реальный х
        if (!$GoRight && $line_real_count > $area_size ) {
          #разница между реальным полем и дозволеным настройками
          $line_offset = $area_size - $line_real_count;
          $X = ($line_real_count - $X) + $line_offset;
        }
        echo 'X : ' , $X , ' , Y : ' , $Y;
        #убиваем цикл
        break 2;
      }
   }
}
if ($current_size < $limit) echo 'не набрали';
Добавлено через 7 минут
дополнение : Y +1 стираем , так как индексы Y не с 0 а с 1 идут - мы стерле первую линию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2013, 14:05
Помогаю со студенческими работами здесь

JS Требуется вывести несколько ответов из тестов
У меня имеется тест. В нём пользователи могут выбрать 1 любой ответ, мне требуется Вывод сообщений с несколькими ответами. К примеру у...

Сохранить несколько форм тестов в один exe
Привет! Вот я задался вопросом - как сделать компилятор самому? Я создал не большую программку на с++, где можно создавать несколько...

Подкиньте несколько вариантов тестов для задачи с acm.timus.ru
Собственно, хочется несколько хитрых вариантов тестов для задачи 1848 http://acm.timus.ru/problem.aspx?space=1&amp;num=1848 Заранее...

Программа для тестов - как грамотно подойти к редактированию тестов
Что я пишу: Вот пишу приложение для создания тестов, dll с классами самих тестов и приложение, которое будет уже отображать эти тесты,...

Ищу функции, части скриптов, методы, библиотеки которые могут понадобится для написания тестов на движке Unity
Здравствуйте! Мне нужна помощь Знатоков и Гуру &quot;C#&quot;. Я только начел, изучать этот язык программирования, и поэтому прошу вас мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru