Как я могу найти путь последовательных чисел в файле с Python? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть файл с 4000 000 данных. Я начинаю программировать на Python. Я хочу найти путь до 7 к 1. Но у меня есть некоторые условия:

1.- Путь должен быть нисходящим, например: 7, 6, 5 .... 1 (в надежде быть последовательным), но может быть 7,6,3,1. Основная цель - спуск (второй столбец). Представьте, что подложка между строками должна быть = 1, чтобы их идентифицировать

2.- Путь не должен идти вверх. Например: если я нахожусь в 7, 6, 5..и тогда 6 не является правильным. Следующее число 5 должно быть числом 4 или другим ниже, но не выше. Представляю, что подложка между строками должна быть -1, чтобы их идентифицировать

3.- Можно повторить цифры. Например, если я нахожусь в 7, у меня могло бы быть несколько строк в 7 прежде, чем пройти 6, и это было бы хорошо. Помните, что главная цель - не идти вверх, а идти вниз. Я предполагаю, что результат будет постоянным 0 или 1.

4.- Если одно из этих условий ложно, то: а) начать заново, но не в первой строке, где есть 7. Я имею в виду, начать со следующей строки, где есть 7 (вторая 7 в файле) если не существует пути, начинающегося с 7, возьмите затем строку с 6 и т. д., пока не найдете путь для достижения 1. б) или начать с последней строки, где процесс прерывается. (Я не знаю, эффективен ли этот вариант)

В резюме я хочу найти путь, по которому нужно идти от 7 до 1 по убыванию, а не идти вверх.

входной файл:

 1  6
 2  6
 3  6
 4  7
 5  7
 6  3
 7  3
 8  5
 9  7
 10 6

... и т. Д.

Выходной файл:

45   7 
46   7
47   7
48   7 
49   6
50   6
51   5
52   5
53   4
54   3
55   2
56   1

или

50      7
51      6
52      5
53      4
54      3
55      2
56      1

Итак, не могли бы вы подсказать мне, как я могу сделать этот процесс?

Большое спасибо.

1 Ответ

0 голосов
/ 27 марта 2019

Я бы создал конечный автомат с состоянием для каждого числа (7 состояний, от 1 до 7). На каждой строке:

  • Если число в текущей строке равно 7: создайте новый экземпляр машины (это был бы класс) и поместите его в список «живых» автоматов.
  • Звоните .add_number(parsed_number) на всех машинах. Эта функция запоминает число и возвращает один из трех возможных результатов:
    • 0 - Я не принимаю число, отбросьте меня (вы должны смоделировать все переходы состояний, которые в основном представляют собой любой переход от большего к меньшему числу).
    • 1 - Я принял номер, ничего не делать.
    • 2 - Я принял число, а число равно 1: распечатай накопленное и выбрось меня.
...