All streams
Search
Write a publication
Pull to refresh
16
0.2

User

Send message
Советую: тег <source></source>
В задаче ведь не написано, что отобразить для любого n
Вообще-то сказано.
(Естественно, вместо 6 может быть любое число).
Да, в продолжение ещё хотел написать код с парой фабрик (на алгоритм рисования этой пирамиды и на рисование строк), но на середине бросил и подумал, что это уже слишком. Хотя получалось нечто java-красивое :)) Вот остановился на другом упрощённом варианте с листенерами, пока хватит.

/**
 * Обработчик печати.
 * ... тут куча описания ...
 */
interface PrintListener {
	/**
	 * Печать объекта последовательности. 
	 * @param num номер объекта в последовательности.
	 * @return true, если объект не последний, false - в обратном случае.
	 */
	 boolean print( int num );
}

/**
 * Реализация печати последовательности объектов.
 */
class Printer {
	private PrintListener printListener;	
	public Printer( PrintListener printListener ) {
		this.printListener = printListener;
	}	
	public void print() {
		int num = 1;
		while ( printListener.print( num++ ) );
	}
}

public class Gavnokod4 {
	final static int N = 6;
	public static void main( String[] args ) {
		// запускаем печаталку строк
		new Printer( new PrintListener() {
			@Override
			public boolean print( final int row )
			{
				// запускаем печаталку столбцов в каждой строке
				new Printer( new PrintListener() {
					@Override
					public boolean print( final int col )
					{
						System.out.print( row%2==1 ? col : row-col+1 );
						System.out.print( col < row ? "-" : "\n" );
						// печатаем пока столбцов меньше строк
						// (у нас же половинка матрицы)
						return col<row;
					}
				}).print();
				// печатаем пока не напечатано нужное кол-во строк
				return row<N; 
			}
		}).print();
	}
}
Вот решение покороче :)
public class Gavnokod2 {
	final static int N = 6;
	public static void main( String[] args ) {
		for (int row=1;row<=N;row++)
			for (int pos=row%2==1?1:row;row%2==1?pos<=row:pos>=1;pos+=row%2==1?1:-1)
				System.out.print(pos+(pos!=(row%2==1?row:1)?"-":"\n"));
	}
}
Решение как решение, но всё равно гавнокод, потому что сложночитаемый, хотел сократить кол-во операторов и строк.
Вообще, задача такова, что любое решение будет похоже на гавнокод. Вот для Java, решение в самый лоб. Вроде чисто под задачу «вывести в столбик», без выдумок, а всё же гавнокод. Дальше я его сокращу.

public class Gavnokod1
{
	final static int N = 6;
	
	public static void main( String[] args ) {
		for( int row=1; row<=N; row++ )	 {
			if( row%2 == 1 ) {
				for( int pos=1; pos<=row; pos++ ) {
					System.out.print(pos);
					if(pos!=row)System.out.print("-");
				}
			}
			else
			{
				for( int pos=row; pos>=1; pos-- ) {
					System.out.print(pos);
					if(pos!=1)System.out.print("-");
				}
			}			
			System.out.println();
		}
	}
}
Надеюсь, вы шутите :)
Ок, а расскажите в чём офигенная польза вот этого вот способа брута общего случая солёных хешей?
С десяток лет назад занимался раз(до-)работкой и внедрением систем автоматизаций и учёта. Ну там на семинары ездил, на форумах тусил, короче общался с народом. Могу сказать, что и в те времена витала эта наивная идея — взять и коллективно написать супер-пупер-мега-универсальную систему, которая сделает 1С, кристал сет, р-кипер и всё остальное вместе взятое. Ведь всего то ничего, угу :)
когда я об этом сказал милиции, мне ответили, чтоб кроме конституции есть и другие законы, и они руководствуются прежде всего ими
А вы слушайте их больше, ну ну, они вам много чего ещё расскажут интересного. Надо верить законам и нормативным актам, а не этим товарищам. Строго говоря, они и подходить к вам просто так не имеют права.

И вообще, вы не путаете необходимость регистрации по месту пребывания в случае пребывания там 3 месяца и то, что написано в этой заметке? И про право передвижения конституционное тоже вообще странно. Это как бы совсем разные вещи… Тем более непокидание 3 месяца Москвы вообще никакого отношения к регистрации не имеет. И москвичи в случае пребывания в другой части города должны там регистрацию получать по месту пребывания. И нахождение иногородними сколько угодно в пределах любого города не является нарушением. Законы, заметки и просто FAQ-и на эту тему гуглятся элементарно.
Уважаемый читатель! Если ты читаешь эту запись через 300 лет после ее опубликования (может чуть раньше или чуть позже) знай, что в 2011 году эта задача считалась сложной, и я не знаю никого (кроме себя), кто смог бы ее решить менее, чем за одну неделю. Тактовая частота процессора среднего компьютера в наше время составляла 3 Ггц, среднее количество процессоров одного компьютера равнялось четырем. Если получится решить задачу, сообщи пожалуйста мне, и, если я буду еще жив, напишу на страницах своего блога, насколько ты крут ;)
На самом деле это задача максимум на один вечер для любого приличного студента программистской специальности. И в 2011 и даже, как помнится, в 2000 году эта задача не была сложной и тянула на среднюю лабу по структурам и алгоритмам ОД или просто дискретки в целом. Делать никто не стал, не потому что задача слишком сложная или все тупые, а потому что «это никому не надо» больше чем «интересно ради интереса». Это совершенно не сложная задача в целом, но это СЛИШКОМ сложная задача для малоизвестного конкурса ради интереса ;)

Выложите потом своё решение, как обещали, будем изучать. Но если там настолько «в лоб», что моё решение с обходом в глубину показалось «оптимизацией», то как-то это несерьёзно, имхо)
С математикой он на ты, выигрывает все олимпиады, хочет в дальнейшем идти в аспирантуру и дальше в ученую степень, ему это в самом деле прет, он нашел свое я. Так вот вопрос, как ему сдавать первые два года гуманиратные предметы?
Оба вступительных экзамена в аспирантуру и два из трёх кандидатских минимумов в аспирантуре — гуманитарные (ин.яз, философия). И учёную степень никак не получить без них, соответственно. Что он там делать будет? Снова башлять? Понятно, что можно «терпеть не мочь» гуманитарные предметы, но в чём проблема умному человеку (тем более умному технарю/математику) их успешно сдавать?
Не понял, с каких пор Metal с двумя LL пишется? Тем более как музыкальный жанр и тем более написанный на латинице. Я ещё понимаю дискуссии писать ли две Л в русском названии жанра, но тут то…
легальный контент стоит столько, что ебал я в рот, на одну только музыку да фильмы работать
Льюиса Армстронга слушаю всего, это шедевральный автор и исполнитель
Louis Armstrong. This Is Louis: The Very Best Of Louis Armstrong — 238 руб.
И этот человек кого-то жлобами называет.
Угу, в итоге деньги поимели все кто угодно, кроме музыкантов.
Но как я продолжил пользоваться last.fm, так продолжу и простоплеером. Я считаю, что за удобство в современном интернете не зазорно и заплатить. Тем более не такие уж и большие для большинства людей деньги.
Разница тут в том, что контент на last.fm как-никак легальный, а на prostopleer нифига.
главным образом показывающее культуру пользователей, желающих все отгребать бесплатно и не готовых заплатить минимум денег за удобно сделанный и приятный сервис, чтобы поддержать разработчиков и дальше продолжать пользоваться ресурсом.
Культура тут непричём. Ресурс то хороший и удобный, но требовать деньги за то, что тебе не принадлежит, имхо, нагло.
Да, извиняюсь, не написал, это на третьем файрфоксе. Верно, возможно, тогда сравнение не очень к месту, если речь исключительно о четвёртой версии. Но всё равно, почему же «старые версии фокса»? Я запускал на самом свежем релизе, 3.6.15, который вышел чуть больше недели назад. Остальные: опера 11, хром 10.

Скачал 4.0 RC 1, справедливости ради стоит заметить, что ускорился более чем в 2 раза:
Total: 510.2ms ± 21.1% (пруф)

Приложения:
1) скриншот версии файрфорса 4.0 RC 1

Здесь же про IE и Fx статья, про остальные умалчивается) Сейчас запустил вышеупомянутый тест на трёх браузерах — опера и хром значительно быстрее фаерфокса.

У меня такие результаты:

Хром:
Total: 341.5ms ± 2.6% (пруф)

Firefox:
Total: 1226.5ms ± 3.2% (пруф)

Опера:
Total: 365.7ms ± 1.2% (пруф)
Ну, вообще, там цикл в самом алгоритме фактически один — перебор путей из конкретной вершины в другие) А дальше просто обход в глубину. Что ж там вложенного и ресурсоёмкого? В лоб — это уж не совсем «в лоб», конечно)) Позже по-возможности выложу алгоритм и код, мне не жалко)

Некое подобие БД — один мэп списков (связей из этой вершины) и один список списков (последовательность связей, т.е. путей) — используется, конечно, куда без этого. В память нагрузилось сравнительно немного. Сначала, когда я начал по-дурости хранить все выходные законченные пути, там рухнуло всё вместе с JVM, это да.
Да, разумеется, если я читаю в big-endian, то и пишу я в big-endian. Внутри алгоритма номера у меня конечно другие получаются, но в итоге они обратно сериализуются «правильно». Хотя я уже сейчас быстренько обёртки на Data[I/O]Stream накалякал и перезапустил алгоритм, но раз вы делаете допущение, то ок. Конечно, всё так же осталось, кроме первого числа.

Кстати, не очень понятно почему вы говорили о том, что вычисления тяжёлые, алгоритм у меня на таком нехилом кол-ве данных работает примерно полминуты. Но это почти в лоб решалось, к тому же очень нарочито по-ООП-шному. Я прямо сейчас вижу как его сильно заоптимизировать.
Т.е. я хочу сказать, что у вас подразумевается запись вашего файла в little-endian, хотя это стало ясно только из этого вашего примера. Но это совсем неочевидно. В бинарных форматах файлов и разных там протоколах как раз част big-endian. Прошу это принять с сведению.

Маршрут не изменится, кстати, так что ответ от этого не меняется. Потому что как ни читай целые числа, они всё равно разные будут для разных точек, хотя целочисленная интерпретация номеров вершин на самом деле другая, но связи не рушатся. Но вот с первыми 4 байтами провал, конечно.

Information

Rating
2,572-nd
Registered
Activity