Google Foobar — пожалуйста, передайте кодированное сообщение о сбое тестового примера

#python

#python

Вопрос:

Вопрос

У вас есть L, список, содержащий несколько цифр (от 0 до 9). Напишите функциональное решение (L), которое находит наибольшее число, которое может быть составлено из некоторых или всех этих цифр и делится на 3.

Если невозможно создать такое число, верните 0 в качестве решения. L будет содержать от 1 до 9 цифр. Одна и та же цифра может появляться в списке несколько раз, но каждый элемент в списке может использоваться только один раз.

Тестовые примеры

Ввод: решение.решение([3, 1, 4, 1]) Вывод: 4311

Ввод: решение.решение([3, 1, 4, 1, 5, 9]) Вывод: 94311

Мой код

 
def sum(L):
    totalSum = 0
    for x in range(len(L)):
        totalSum = totalSum   L[x]
        
    return totalSum 

def listToInteger(L):
    strings = [str(integer) for integer in L ]
    concatString = "".join(strings)
    finalInt = int(concatString)
    return finalInt


def solution(L):  
    
    num = sum(L)
    
    if not num % 3:
        L.sort(reverse=True) # sort list in descending order to create largest number
        return listToInteger(L)
    
    else:
        n = num % 3
        flag = False
       
        
    while not flag: # locate digit causing indivisiblity
        if n in L:
            L.remove(n)
            L.sort(reverse=True)
            return listToInteger(L)

        elif(n > num):
            return 0
           
        else:
            n  = 3
  

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

единственная ошибка в логике, о которой я могу думать, это то, что если бы ввод был [8,5,3], сумма была бы равна 16 и 16 % 3 = 1

таким образом, он проверил бы список на 1, 4, 7, 10, 13 , 16 но его не будет в списке, поэтому он не удалит 8 или 5. он вернет 0, когда он действительно должен вернуться [3].

Я добавил функцию для этого, но даже тогда она все еще не выполняла скрытый тестовый пример . . .

Любые предложения будут оценены

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

1. I added a function for this Пожалуйста, добавьте этот код функции в свой вопрос, чтобы сделать его полным. Вы уже обнаружили проблему в своем коде и пытались ее исправить, но не опубликовали полный код? Тогда трудно ответить.

2. У меня простая логика, я думаю, что это может сработать. Код не работает для [8,5,3]. Но должно вернуться 3, попробуйте написать еще одну функцию для поиска всех комбинаций этого вида списков, и вы можете получить при оценке каждого списка …. Пример: [8,5,3] может быть [[8,5],[8,3],[8],[5],[3]] , Когда вы оцениваете, чтобы найти любой вложенный список, сумма может быть кратна 3, поэтому здесь [3] может быть возвращен

Ответ №1:

Похоже, что ваш код предполагает, что может быть только одна неправильная цифра. Что бы вы сделали с таким вводом 1,1,3 ? сумма равна 5, n равно 2, и вы попытаетесь удалить 2, 5, а затем потерпите неудачу и вернете 0.

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

Ответ №2:

Этот код отлично работал для [8,5,3]

пример: [8,5,3,6]

сумма будет равна 22

сумма%3 будет равна 1

таким образом, числа, которые необходимо проверить в списке для удаления, равны 1,4 7,10,13,16,19,22, и он никогда не удалит какие-либо элементы, поскольку в списке этих элементов нет

итак, все еще есть 6 и 3, которые могут быть кратными 3.

итак, возьмите 3 и 6 в списке и отсортируйте их, и ответом будет 63

 def sum(L):
    totalSum = 0
    for x in range(len(L)):
        totalSum = totalSum   L[x]
    
    return totalSum 

def listToInteger(L):
    strings = [str(integer) for integer in L ]
    concatString = "".join(strings)
    finalInt = int(concatString)
    return finalInt

def solution(L):
    num = sum(L)
    if not num % 3:
        L.sort(reverse=True) # sort list in descending order to create largest number
        return listToInteger(L)

else:
    n = num % 3
    flag = False  
while not flag: # locate digit causing indivisiblity
    if n in L:
        L.remove(n)
        L.sort(reverse=True)
        return listToInteger(L)
    elif(n > num):
        k=[]
        for i in L:
            if i%3==0:
                k.append(i)
        if len(k)!=0:
            k.sort(reverse=True)
            return listToInteger(k)
        else:
            return 0
       
    else:
        n  = 3

l=[8,5,3]
print(solution(l))