Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Нужна помощь с Java 7 на Google Foobar interview

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Я тут попал на интервью в Google Foobar, но не могу никак засабмитить код, потому что выдает постоянно ошибку «Error compiling...» Может кто-то прогнать код под Java 7 и посмотреть, в чем проблема ? У меня локально все компилируется, а когда сабмитишь в Google выдает ошибку... Вот думаю, может все-таки не я дурак, а Гугл :))

Код внизу..

package com.google.challenges;

public class Answer {
    
    public static int[] answer(int[] data, int n) {
        int i = 0;

        while (i < data.length) {
            if (count(data, data[i]) > n ) {
                data = removeValue(data, data[i]); 
            } else {
                i++;
            }
        }
        
        return data;
    }
    
    public static int count(int[] data, int number) {
        int count = 0;
        for (int i = 0; i < data.length; i++) {
            if (data[i] == number) {
                count++;
            }
        }

        return count;
    }
    
    public static int[] removeValue(int[] data, int number) {
        int newLength = data.length-count(data,number);
        int[] newValues = new int[newLength]; 
        int track = 0; 

        for (int i = 0; i < data.length; i++) {

            if (data[i] != number) {
                newValues[track] = data[i];
                track++;
            }
        }

        return newValues;
    }
}
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Если это какое-нибудь онлайн-чудо, мой совет — убери paсkage. Очень вероятно оно пытается компилить в своей среде, и потому package у него свой.

А вообще Гугл стал сильно похож на Майкрософт. Те же яйца: «ой, что-то не работает», но сказать что именно — величайшее табу!

Там требования в файле указывать такой имя package. Я так и не понял почему не работало — на питоне все заработало как нужно.

я не знаю в чем тут челлендж, но если эта задача как на кодилити или лит код — то нада контролировать расход памяти и комлексити О. ваш подход — он мне кажется не оптимальными, например первый цикла где пользуется data.length, например у вас ряд [0,1, 2, 2, 2], что происходит когда у вас i = 2 и вы удалили все двойки (я не помню — джава будет рейсить ошибку если и вдруг ушло за пределы массива или нет)? я бы вначале прошелся по массиву и посчитал количество уникальных элементов, потом прошелся еще раз и переписал в новый массив только те елементы которых меньше чем N. Это тоже может быть не оптимальным методом, но вы вообще копируете массив каждый раз когда удаляете какой то элемент тоесть ваш код далек от оптимального.

Я с Вами согласен полностью. Я наверно за сегодня написал 10 вариантов решения задачи. И скажем, если сложность того, что в топике составляет O(n^2), то если использовать Hashtable и List сложность можно сократить до O(n). Кстати пример сверху — это решения задачи я нашел у кого-то на Github-е и оно было успешным. Я сначала подумал, что я использую какие-то обьекты или синтаксис недоступный в Java 7 и так как я сам не программирую на Java уже давно, то мне нужно было выяснить, что проблема не в версии кода — но на все попытки Гугл выдает одну и ту же ошибку.

Это его челлендж, а не публичный. Пусть сам думает.

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

Гугл? Расход памяти контролировать? Что-то из области мифологии

Под 7ку тоже будет компилится.

В многих такая же проблема как и у вас, вот пример:
stackoverflow.com/...​-my-machine-but-google-fo

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

В многих такая же проблема как и у вас, вот пример:
stackoverflow.com/...​-my-machine-but-google-fo

Да, читал уже — что у многих тот же самый код через какое-то время проходил. Может проверяющий ушел на кофе-брейк :))

У меня тоже компилится под Java 7 и тесты тоже проходят. Вот условие — нигде не указано о тестах или о чем либо еще. Это уже мой наверно 6 вариант кода который я пытаюсь засабмитеть.

Level 1
Success! You’ve managed to infiltrate Commander Lambda’s evil organization, and finally earned yourself an entry-level position as a Minion on her space station. From here, you just might be able to subvert her plans to use the LAMBCHOP doomsday device to destroy Bunny Planet. Problem is, Minions are the lowest of the low in the Lambda hierarchy. Better buck up and get working, or you’ll never make it to the top...

Requesting challenge...
Next time Bunny HQ needs someone to infiltrate a space station to rescue prisoners, you’re going to tell them to make sure ’stay up for 48 hours straight scrubbing toilets’ is part of the job description. It’s only fair to warn people, after all.

—> cat readme.txt
Minion Labor Shifts
===================

Commander Lambda’s minions are upset! They’re given the worst jobs on the whole space station, and some of them are starting to complain that even those worst jobs are being allocated unfairly. If you can fix this problem, it’ll prove your chops to Commander Lambda so you can get promoted!

Minions’ tasks are assigned by putting their ID numbers into a list, one time for each day they’ll work that task. As shifts are planned well in advance, the lists for each task will contain up to 99 integers. When a minion is scheduled for the same task too many times, they’ll complain about it until they’re taken off the task completely. Some tasks are worse than others, so the number of scheduled assignments before a minion will refuse to do a task varies depending on the task. You figure you can speed things up by automating the removal of the minions who have been assigned a task too many times before they even get a chance to start complaining.

Write a function called answer(data, n) that takes in a list of less than 100 integers and a number n, and returns that same list but with all of the numbers that occur more than n times removed entirely. The returned list should retain the same ordering as the original list — you don’t want to mix up those carefully-planned shift rotations! For instance, if data was [5, 10, 15, 10, 7] and n was 1, answer(data, n) would return the list [5, 15, 7] because 10 occurs twice, and thus was removed from the list entirely.

Languages
=========

To provide a Python solution, edit solution.py
To provide a Java solution, edit solution.java

Test cases
==========

Inputs:
(int list) data = [1, 2, 3]
(int) n = 0
Output:
(int list) []

Inputs:
(int list) data = [1, 2, 2, 3, 3, 3, 4, 5, 5]
(int) n = 1
Output:
(int list) [1, 4]

Inputs:
(int list) data = [1, 2, 3]
(int) n = 6
Output:
(int list) [1, 2, 3]

Use verify [file] to test your solution and see how it does. When you are finished editing your code, use submit [file]to submit your answer. If your solution passes the test cases, it will be removed from your home folder.

—> cat constraints.txt
Java
====

Your code will be compiled using standard Java 7. It must implement the answer() method in the solution stub.

Execution time is limited. Some classes are restricted (e.g. java.lang.ClassLoader). You will see a notice if you use a restricted class when you verify your solution.

Third-party libraries, input/output operations, spawning threads or processes and changes to the execution environment are not allowed.

Python
======

Your code will run inside a Python 2.7.6 sandbox.

Standard libraries are supported except for bz2, crypt, fcntl, mmap, pwd, pyexpat, select, signal, termios, thread, time, unicodedata, zipimport, zlib.

сразу попробуйте:
public static int[] answer(int[] data, int n) {
return data;
}
и все остальное удалите. Надо понять почему не компилится.
Если не откомпилится. Попробуйте массив на List поменять.

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

тут совсем сложно что-либо сказать, это печалька

Переписал еще раз код, покрыл тестами все одно и тоже. Может челедж как раз не в коде :))

photos.app.goo.gl/qhWaq3KRei1dDWAE2

«To provide a Java solution, edit solution.java» — так а що було в оригінальному файлі ? мож ви сигнатуру методу змінили і тепер гугл не може прилінкувати ваш клас до тест-кейсів

К сожалению не сохранил, но сигнатура метода не поменялось. Переписал все на питоне и все прошло....

def answer(data, n):
	# your code here
	counter = {}
	for i in range(len(data)):
		counter[data[i]] = counter.get(data[i], 0) + 1
	remove = []
	for k, v in counter.items():
		if(v > n):
			for i in range(v):
				data.remove(k)
	return data

ну чисто ради азарта

counter = {}
for d in data:
    cur = counter.get(d)
    if cur is None:
        counter[d] = 0
     counter[d] = counter[d] + 1
returnArray = []
for d in data:
    if counter[d]<N:
        retunrArray.append(d)
return returnArray

К сожалению уже проверить не могу :)) Закрылась задача. Если честно — мне кажется, что ошибка была в том, что я удалил коментарий — ​ ​​ ​//​ ​Your​ ​code​ ​goes​ ​here. — в начальном файле :))

ну ты в питоне пишешь как на с++,

Скорее как на Go :)) Жалко, что нельзя писать решения на Go. Для меня, что Питон, что Джава не очень комфортные.

Но самое веселое теперь, что на решения задачи дается 2 дня. У меня прошло чуть больше 18 часов со вчерашней ночи и мне после успешной верификации выдается сообщения — Sorry. Your time to solve this challenge has expired.

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

package com.google.challenges;

public class Answer {

    public static int[] answer(int[] data, int n) {

        int i = 0;

        while (i < data.length) {

            int count = 0;
            for (int j = 0; j < data.length; j++) {
                if (data[j] == data[i]) {
                    count++;
                }
            }

            int newLength = data.length - count;
            if (count <= n) {
                newLength++;
            }
            int[] newValues = new int[newLength];
            int track = 0;

            for (int j = 0; j < data.length; j++) {
                if (data[j] != data[i]) {
                    newValues[track] = data[j];
                    track++;
                }

                if (j == i && count <= n) {
                    newValues[track] = data[j];
                    track++;
                }
            }

            if (count <= n) {
                i++;
            }

            data = newValues;
        }

        return data;
    }
}

Там в условии сказанно list может имелось в виду список. Тогда возможно решение должно быть таким:

public static List answer(List data, int n) {
Iterator itr = data.iterator();
Set tempSet = new HashSet<>();
while (itr.hasNext()) {
Integer number = itr.next();
if (Collections.frequency(data, number) > n) {
tempSet.add(number);
}
}
data.removeAll(tempSet);
return data;
}

Гугл указывает сигнутуру метода и все, что вы можете сделать это добавить имплементацию, т.е. внутри метода вы можете сделать любую имплементацию. Я даже не уверен, что можно сделать import какого-то пакета. Поэтому я оставил Java и сначала пишу на Go, а потом переношу логику на Python. Что касается Java, то Гугл ставит вот такие constraints:

Java
====

Your code will be compiled using standard Java 7. It must implement the answer() method in the solution stub.

Execution time is limited. Some classes are restricted (e.g. java.lang.ClassLoader). You will see a notice if you use a restricted class when you verify your solution.

Third-party libraries, input/output operations, spawning threads or processes and changes to the execution environment are not allowed.

Неужели все Джависты уехали из Украины ??

Ага. И в Борисполе свет выключили

Підписатись на коментарі