Функция, чтобы определить, является ли покерная комбинация прямым?

Измените оператор запроса:

query = 'INSERT INTO metric_db VALUES  {}'.format(values)

РЕДАКТИРОВАТЬ

Чтобы избежать внедрения SQL и использовать правильный формат даты:

import csv
import sqlite3
import pprint
from datetime import datetime

conn = sqlite3.connect('metrics.db')
c = conn.cursor()

def read_file(filename):
    with open(filename, 'r') as f:
        yield from f

for row in read_file('inputs.csv'):

    data = row.split(',')
    values = '({}, {})'.format(data[0], data[1].strip())
    print('Values are: {}'.format(values))
    date_readed = datetime.strptime(data[0], '%d-%m-%Y').strftime('%Y-%m-%d')

    try:
        query = 'INSERT INTO metric_db VALUES (?, ?)'
        c.execute(query,(date_readed,data[1],))
    except sqlite3.IntegrityError as e:
        pass

conn.commit()
conn.close()
6
задан Bill the Lizard 19 September 2012 в 12:41
поделиться

9 ответов

Вы действительно понимаете, что по правилам какой-либо игры в покер я когда-либо играл или слышал о прямом, не может перенести право? Туз может быть низок [A, 2,3,4,5] или высоко [10, J, Q, K], но он не может перенестись. Согласно тем правилам (не Ваш) я реализовал что-то подобное прежде. В основном Вы сортируете массив и обходите его, удостоверяясь, что текущая карта один выше, чем предыдущее. В первом повторении, если это - туз, затем Вы явно проверяете на [A, 2,3,4,5]. Если это - Вы, возвращают true и если это не Вы, продолжают нормальную прямую логику. Это должно установить Вас в правильном направлении.

9
ответ дан 8 December 2019 в 16:10
поделиться

Вы могли записать необычный алгоритм для возвращения true несмотря на количество возможных карт, но если Вы понимаете, что существует только 10 допустимых комбинаций на отсортированной руке, Вы могли бы просто искать их:

2-6, 3-7, 4-8, 5-9, 6-T, 7-J, 8-Q, 9-K, T-A, (2-5,A)
3
ответ дан 8 December 2019 в 16:10
поделиться

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

Кроме того, это зависит от того, если Вы поняли своего учителя или своего неправильно понятого учителя (или исказил), правила игры.

Я думаю, что испытал бы желание просто создать массив [2.. 14] и место карты в месте, которое соответствует их разряду. При ударе дубликата это не прямое, и когда Вы сделаны, у Вас должно быть 8 пробелов подряд. Если у Вас есть меньше чем 8 пробелов подряд, это не прямое.

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

править: Кроме того, если Вы неправильно поняли учителя, и единственное условие обертывания "10, j, q, k," (как в реальных правилах), затем Вам нужен дополнительный тест, что, если все из 2, 13 и 14 установлены, это - также отказ (2 циклических возврата на К).

(Отредактированный снова для замены 1 для туза с 14 после перечитывания вопроса)

0
ответ дан 8 December 2019 в 16:10
поделиться

Я утверждал бы, что, учитывая, что определение РАЗРЯДА, что дорожки могут только запуститься с макс. из ACE.points () - 4.

Таким образом, если Вы сортируете руку, и самый низкий РАЗРЯД> ACE.points () - 4 затем у Вас не может быть прямого, иначе Вы просто выполняете итерации по руке, чтобы видеть, что каждая карта является предыдущим РАЗРЯДОМ + 1.

Если ACE может быть высоким или низким, затем идут, каким ответила SHS.

0
ответ дан 8 December 2019 в 16:10
поделиться

Я не использую перечисление очень, я предпочитаю названные константы, но я предположу, что движение от "ACE" до "14" тривиально

я слишком ленив для написания реального кода Java (около Вас, на самом деле должны сделать Вашу домашнюю работу ^^),

check if the list has 5 cards
convert card names to a card number list named array
sort the list array
for i=1 to 4
if not (array[i] + 1) % 13 == (array[i+1]) % 13
then it is not a straight

Оператор % называют по модулю так (15% 13) == 2, я использую этот оператор каждый раз, когда я сталкиваюсь, "переносятся по" проблеме

Редактирование: После перечитывания Вашего вопроса мое решение не может работать из поля. Необходимо переупорядочить перечисление так, чтобы ДВА == 0

0
ответ дан 8 December 2019 в 16:10
поделиться

С тех пор существует только 5 карт в Вас список, Вы могли отсортировать его и определить различие между 2 последовательными картами. Если это содержит туз, необходимо рассмотреть это как низкую карту также. если все различия равняются 1 (или-1, в зависимости от порядка сортировки), у Вас есть свое прямое.

2
ответ дан 8 December 2019 в 16:10
поделиться

Я рекомендую использовать немного вектора для представления карт. Это избегает необходимости вид. Можно добавить туз дважды (однажды как 1 другие времена как король), или Вы можете специальный случай стартовая ситуация путем проверки, установлен ли первоклассный бит прежде, чем проверить, установлены ли эти 2). Можно создать большой взгляд таблица, если скорость имеет значение. Этот подход, также чистя масштабы для нахождения остальной части рук (сбросы, 2 пары, аншлаги, прохождения, и так далее). Это также помогает выяснить, выше ли данный прямо, чем другой. И это расширяется чисто до 7 средств анализа карты

В псевдо коде это выглядит примерно так для очень общего случая (у Вас может быть любое количество карт. Это возвращает первый подряд),

 long cardBitMask
 for each card in hand
   setBit in cardBitMask

 hearts = mask(cardBitMask)
 diamonds = mask(cardBitMask)
 clubs = mask(cardBitMask)
 spades = mask(cardBitMask)

 // find straight
 uniqueCards = hearts|diamonds|clubs|spades
 int cardsInaRow = 0
 if uniqueCards&AceCardMask:
    cardsInaRow = 1
 for card = 2...King
   if uniqueCards&(1<<card)
      cardsInARow++
   else 
      if cardsInARow == 5
         break
      cardsInARow = 0
 if cardsInARow==5:
     return true
 return false
0
ответ дан 8 December 2019 в 16:10
поделиться

Добавьте все разряды чтобы к списку, дважды. Затем чтобы проверить, является ли рука прямым, отсортируйте руку по разряду и затем проверьте, является ли рука подсписком того списка.

0
ответ дан 8 December 2019 в 16:10
поделиться

Вы могли записать класс, который преобразовывает каждую карту в определенное значение карты

Шутник = 11 королев = 12 королей = 13 тузов = 0 или 14

это сделает намного более легкую обработку карты и поиск возможных рук.

-2
ответ дан 8 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: