Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 33 34 35 36 37 38 [39] 40 41 42   вперед  Ctrl
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
ivanra
Member

Откуда:
Сообщений: 851
Можно пользоваться сравнениями внутри методов классов:
static boolean test(int n, int max) {
  System.out.println(n);
  return !Integer.valueOf(Integer.compare(n,max)).equals(0) && test(++n, max)
}
public static void main(String...args) {
  test(1, 10);
}
19 апр 19, 15:37    [21867308]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Kriptman
Бампну тему. Задали тут задачку на собеседовании, решить не смог, ответа не дали при этом.
Нужно вывести числа от 1 до N. При этом:
-Нельзя использовать циклы
-Нельзя использовать условия
-Нельзя использовать исключения
-Нельзя использовать стримы
Может решение очевидно, но я как-то не могу придумать.
\

есть подозрение, что как раз тех, кто решил - не берут. Мало ли что у них в голове, раз они так используют яву?:)
19 апр 19, 16:03    [21867352]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
mayton
Member

Откуда: loopback
Сообщений: 41020
Нормальный собес для сишника.
19 апр 19, 16:27    [21867378]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Kriptman,

без рекурсий и "сравнений":

	private static ExecutorService executor = Executors.newSingleThreadExecutor();

	private static C[] c = new C[]{
			(s, m) -> print(s, m),
			(s, m) -> executor.shutdown()
	};

	public static void main(String[] args) {
		c[0].print(1, 100000);
	}

	private static void print(int start, int max) {
		CompletableFuture.supplyAsync(() -> start, executor).whenCompleteAsync((integer, throwable) -> {
			System.out.println(integer);
			c[(max - start - 1) >>> 31].print(start + 1, max);
		}, executor);
	}


	interface C {

		void print(int start, int max);

	}
19 апр 19, 18:50    [21867472]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Андрей Панфилов
Kriptman,

без рекурсий и "сравнений":

	private static ExecutorService executor = Executors.newSingleThreadExecutor();

	private static C[] c = new C[]{
			(s, m) -> print(s, m),
			(s, m) -> executor.shutdown()
	};

	public static void main(String[] args) {
		c[0].print(1, 100000);
	}

	private static void print(int start, int max) {
		CompletableFuture.supplyAsync(() -> start, executor).whenCompleteAsync((integer, throwable) -> {
			System.out.println(integer);
			c[(max - start - 1) >>> 31].print(start + 1, max);
		}, executor);
	}


	interface C {

		void print(int start, int max);

	}


чет потоки не нужны, стека и так должно хватить:

	private static C[] c = new C[]{
			(s, m) -> print(s, m),
			(s, m) -> { }
	};

	public static void main(String[] args) {
		c[0].print(1, Integer.MAX_VALUE);
	}

	private static void print(int start, int max) {
		System.out.println(start);
		int average = (max >> 1) + (start >> 1) + 1;
		c[max - 1 - start >>> 31].print(start + 1, average);
		c[max - 1 - average >>> 31].print(average + 1, max);
	}


	interface C {

		void print(int start, int max);

	}
19 апр 19, 21:13    [21867528]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов
Андрей Панфилов
Kriptman,

без рекурсий и "сравнений":

	private static ExecutorService executor = Executors.newSingleThreadExecutor();

	private static C[] c = new C[]{
			(s, m) -> print(s, m),
			(s, m) -> executor.shutdown()
	};

	public static void main(String[] args) {
		c[0].print(1, 100000);
	}

	private static void print(int start, int max) {
		CompletableFuture.supplyAsync(() -> start, executor).whenCompleteAsync((integer, throwable) -> {
			System.out.println(integer);
			c[(max - start - 1) >>> 31].print(start + 1, max);
		}, executor);
	}


	interface C {

		void print(int start, int max);

	}


чет потоки не нужны, стека и так должно хватить:

	private static C[] c = new C[]{
			(s, m) -> print(s, m),
			(s, m) -> { }
	};

	public static void main(String[] args) {
		c[0].print(1, Integer.MAX_VALUE);
	}

	private static void print(int start, int max) {
		System.out.println(start);
		int average = (max >> 1) + (start >> 1) + 1;
		c[max - 1 - start >>> 31].print(start + 1, average);
		c[max - 1 - average >>> 31].print(average + 1, max);
	}


	interface C {

		void print(int start, int max);

	}


буэ. первый виток рефакторинга прошел успешно.
19 апр 19, 21:49    [21867541]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин,

ну да, куда нам с вашим StackOverflowError тягаться.
19 апр 19, 21:57    [21867547]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов
Озверин,

ну да, куда нам с вашим StackOverflowError тягаться.


м? ;) Ну да, как обычно, мой - код - чужой код, а ваш такой плохой, потому что ваш ;)))

Так что там..еще волна рефакторинга будет?:)
19 апр 19, 22:03    [21867550]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин
м? ;)
ну попробуйте распечатать от 1 до 100000.

Озверин
Так что там..еще волна рефакторинга будет?:)
Нет, я удовлетворился тем, что сравнение вообще ни в каком виде не используется.
19 апр 19, 22:12    [21867553]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов
Озверин
м? ;)
ну попробуйте распечатать от 1 до 100000.

Озверин
Так что там..еще волна рефакторинга будет?:)
Нет, я удовлетворился тем, что сравнение вообще ни в каком виде не используется.


вы сильно путаете вычисление логического выражения и сравнение, ну то такое, для человека, который доказывает, что надо просто не ошибаться и тут же "ошибается" и на ходу рефакторит код - нормально.
19 апр 19, 22:14    [21867554]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
mayton
Member

Откуда: loopback
Сообщений: 41020
Но в данной конкретной задаче я-бы искал арифметическое решение на базе разрядной сетки
произвольной длины. Тоесть не завязывался бы на то что будет именно short/int/long.
19 апр 19, 22:23    [21867556]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
ivanra
Member

Откуда:
Сообщений: 851
нужно больше лямбд!
	public static void main(String[] args) {
		BiConsumer[] bc = new BiConsumer[2];
		BiConsumer<Integer, Integer> print = (n, max) -> {
			System.out.println(n);
			bc[max - 1 - n >>> 31].accept(++n, max);
		};
		bc[0] = print;
		bc[1] = (n, max) -> {};
		print.accept(1, 100);
	}
19 апр 19, 22:40    [21867558]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин
вы сильно путаете вычисление логического выражения и сравнение, ну то такое, для человека, который доказывает, что надо просто не ошибаться и тут же "ошибается" и на ходу рефакторит код - нормально.
Приходите когда StackOverflowError почините, ok?

+


Я несколько другую задачу решал...

  static int print(int);
    Code:
       0: iload_0
       1: istore_1
       2: iload_0
       3: iconst_1
       4: if_icmpeq     17
       7: iload_0
       8: iconst_1
       9: isub
      10: invokestatic  #2                  // Method print:(I)I
      13: iload_1
      14: if_icmple     21
      17: iconst_1
      18: goto          22
      21: iconst_0
      22: istore_2
      23: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
      26: iload_0
      27: iinc          0, 1
      30: invokevirtual #4                  // Method java/io/PrintStream.println:(I)V
      33: iload_0
      34: ireturn
    LineNumberTable:
      line 7: 0
      line 8: 2
      line 9: 23
      line 10: 33

19 апр 19, 22:46    [21867559]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
mayton
Member

Откуда: loopback
Сообщений: 41020
Здесь главный образующий паттерн - это Replace Condition With Polymorhism.
Лямбды - просто украшательство. Без них задача формально тоже решена.
19 апр 19, 22:46    [21867560]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
[quot Андрей Панфилов]
Озверин
вы сильно путаете вычисление логического выражения и сравнение, ну то такое, для человека, который доказывает, что надо просто не ошибаться и тут же "ошибается" и на ходу рефакторит код - нормально.
Приходите когда StackOverflowError почините, ok?

я памяти накину и даже париться не буду по этому поводу ;) В крайнем случае - отрефакторю, ибо я допускаю, что могу ошибаться, хотя в условии нет требований, потому и никакого стаковерфлоу у меня нет.

А вот вам придется с этим ужасом, при прочтении которого открываются врата в ад - жить всю жизнь...вам нельзя ошибаться и рефакторить ;)

p.s. Легко:

public class MyClass {
    static int n;
    static int m;
    
    public static void main(String args[]) {
        n = 1;
        m = 4;
        
         print();   
    }
    
    static boolean print() {
        System.out.println(n++);
        boolean b = (n > m || print());
        return true;
    }
}


p.p.s кстати, моя ф-ия такая простая, что даже при огромном числе можно будет избежать стакоферфлоу.
19 апр 19, 22:52    [21867563]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин
хотя в условии нет требований

Как это нет требований?
Kriptman
Нужно вывести числа от 1 до N
А у вас StackOverflowError выводится вместо последовательности чисел.
Озверин
p.p.s кстати, моя ф-ия такая простая, что даже при огромном числе можно будет избежать стакоферфлоу.

Да ладно...

+


$ java -Xss1G Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss1500M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss1800M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss2000M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss2100M Test 2>&1 | tail -1
Error: A fatal exception has occurred. Program will exit.
$ cat Test.java

public class Test {

static int n;

static int m;

public static void main(String args[]) {
n = 1;
m = Integer.MAX_VALUE;
print();
}

static boolean print() {
//System.out.println(n++);
boolean b = (n > m || print());
return true;
}

}

19 апр 19, 23:14    [21867569]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов, лично у меня при naxint - все ок ;) А вот вам придется рефакторить, если вдруг придется использовать long $(
19 апр 19, 23:19    [21867571]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов, кстати, вы вот закомментили штуку, а ее надо бе раскомментить и не будет вам стаковерфлоу ;)
19 апр 19, 23:21    [21867572]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Озверин
Андрей Панфилов, кстати, вы вот закомментили штуку, а ее надо бе раскомментить и не будет вам стаковерфлоу ;)



вы все больше и больше дискредитируете себя в моих глазах своей невнимательностью.
19 апр 19, 23:22    [21867573]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
asv79
Member

Откуда: Тверь
Сообщений: 1322
[quot Озверин]
Андрей Панфилов
пропущено...
Приходите когда StackOverflowError почините, ok?

я памяти накину и даже париться не буду по этому поводу ;) В крайнем случае - отрефакторю, ибо я допускаю, что могу ошибаться, хотя в условии нет требований, потому и никакого стаковерфлоу у меня нет.

А вот вам придется с этим ужасом, при прочтении которого открываются врата в ад - жить всю жизнь...вам нельзя ошибаться и рефакторить ;)

p.s. Легко:

public class MyClass {
    static int n;
    static int m;
    
    public static void main(String args[]) {
        n = 1;
        m = 4;
        
         print();   
    }
    
    static boolean print() {
        System.out.println(n++);
        boolean b = (n > m || print());
        return true;
    }
}


p.p.s кстати, моя ф-ия такая простая, что даже при огромном числе можно будет избежать стакоферфлоу.

Чего уж мелочиться давайте тогда так

 void ozverin(int n) {
        for (int i = 0; i < n; i++) {
            System.out.print(i+" ");

        }
    }

по ТЗ условия нельзя,но если очень хочется то можно
19 апр 19, 23:34    [21867578]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин
Андрей Панфилов, лично у меня при naxint - все ок ;) А вот вам придется рефакторить, если вдруг придется использовать long $(
Так вы наверное мой запускали, раз StackOverflow не словили:

+

Чет какая-то новая для меня концепция - добавление System.out.println должно спасать от StackOverflow - брехня

$ java -Xss2M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss20M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss200M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ java -Xss2000M Test 2>&1 | tail -1
at Test.print(Test.java:16)
$ cat Test.java

public class Test {

static int n;

static int m;

public static void main(String args[]) {
n = 1;
m = Integer.MAX_VALUE;
print();
}

static boolean print() {
System.out.println(n++);
boolean b = (n > m || print());
return true;
}

}


у вас даже рефакторить нечего - тупо тесты не проходит.
19 апр 19, 23:34    [21867579]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов, там как бе в печати заложен инкремент, но то такое..для человека, который не ошибается - ненужное уточнение ;)) Конечно не проходит тесты, ага ;)
19 апр 19, 23:37    [21867581]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин,

так а чего инкремент-то? мне ждать пока оно в консоль этот мусор будет выводить сильно западло, а StackOverflow ваш возникает еще задооолго до подхода к Integer.MAX_VALUE.
19 апр 19, 23:45    [21867583]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Андрей Панфилов
Озверин,

так а чего инкремент-то? мне ждать пока оно в консоль этот мусор будет выводить сильно западло, а StackOverflow ваш возникает еще задооолго до подхода к Integer.MAX_VALUE.


ЕЩЕ раза - там нет стаковерфлоу;)
19 апр 19, 23:48    [21867584]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
asv79
Member

Откуда: Тверь
Сообщений: 1322
Озверин

p.s. Легко:

public class MyClass {
    static int n;
    static int m;
    
    public static void main(String args[]) {
        n = 1;
        m = 4;
        
         print();   
    }
    
    static boolean print() {
        System.out.println(n++);
        boolean b = (n > m || print());
        return true;
    }
}



а если m =-4?)))
в условии не сказано что число положительное.
ваше решение озверин мало того что противоречит изначальным условиям,где нельзя использовать сравнение,так еще и не работает
как бы рано вам про фунциональные интерфейсы спорить,освежить надо бы основы java)
19 апр 19, 23:59    [21867590]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 33 34 35 36 37 38 [39] 40 41 42   вперед  Ctrl
Все форумы / Java Ответить