LINUX.ORG.RU

А вы бы приняли такой ответ?

 , ,


0

2

Привет ЛОР!

Недавно,между делом, хотел пройти маленький тест на php задача была такова: нужно объявить массив, в цикле от 1 до 100 заполнить его случайными цифрами (тоже от 1го до 100), и в итоге получить массив с уникальными значениями, реализовать минимальным кол-вом строк

Чтоб решить по-быстрому и красиво я прибегнул к жульничеству:

<?php
$arr = range(1, 100);
shuffle($arr);
foreach ($arr as $key) {
    echo "$key ";
    }
?>

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

А сжульничал я во-первых, потому, что если генерировать случайные числа через mt_rand() нам нужно после избавиться от дублей и, в то же время, обеспечить, чтобы в массиве точно были все числа от 1 до 100.

Во-вторых, потому, что посчитал это красивым решением да и требовали минимум строк :-)

Пацаны это лечится?!

★★★★★

Последнее исправление: Twissel (всего исправлений: 2)

up-ну топик версии сэров и пэров ЛОРа принимаются.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ты же понимаешь, что если randint выдаст два раза число один, то в результате твой массив будет не из сотни элементов, а короче, что не соответствует условиям задачи. Вот тебе пруф.

[λ:~]$ python
Python 2.7.6 (default, Sep  9 2014, 15:04:36) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> x = [random.randint(0,10) for i in range(0,10)]
>>> y = list(set(x))
>>> print y
[0, 1, 4, 5, 7, 9]
>>> ^D
[λ:~]$ 

Aswed ★★★★★
()
Ответ на: комментарий от Twissel

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

alexnorton
()

А чем, собственно, тебе не нравится твое решение?

Aswed ★★★★★
()
Ответ на: комментарий от deep-purple

О, адекватный человек в треде :-)

Спасибо!

Просто этой разрушает семантику задачи, т.к. насколько я понимаю подоплёку тут хотят цикл for, а потом на каждый чих дергать свою функцию :-)

Но тогда уже минимальным количеством строк не обойдешься

Хотя, предложенное мной скорее воркараунд, чем решение.

Twissel ★★★★★
() автор топика

но достигнут не тем путём, который требовался

А требовалось через жопу делать? У тебя всё правильно.

no-such-file ★★★★★
()
Ответ на: комментарий от alexnorton

Не, в принципе, ты прав.

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

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Aswed

что не соответствует условиям задачи.

Условия задачи слишком расплывчаты. «В итоге получить» конфликтует со способом построения предложенным в условии. Каждый волен устранить конфликт по своему.

A1
()
Ответ на: комментарий от Aswed

как раз таки это соответствует условиям задачи - не сказано «заполнить уникальными случайными значениями массив из 100 элементов», а сказано «заполнить случайными значениям и (подразумевается слово „потом“) получить массив с уникальными значениями»

anonymous
()

Такое решение – плюс, оно показывает способность кандидата решать задачу не в лоб и вообще творчески подходить к ее решению.

staseg ★★★★★
()

Всем спасибо за участие, пишите ещё.

Приду с работы вечерком, почитаю.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

подразумевается слово „потом“

Ничего там не подразумевается. Сказано чётко - «заполнить ... массив ... в итоге получить...». Т.е. в результате заполнения должен получиться массив с уникальными значениями.

no-such-file ★★★★★
()
Ответ на: комментарий от staseg

Но я бы на твоем месте еще поспрашивал бы их, в какой системе счисления они нашли цифру 100, может в их мире 1..100 это вообще 1, 10, 100, например.

staseg ★★★★★
()
Ответ на: комментарий от no-such-file

Сказано чётко

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

A1
()

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

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)
Ответ на: комментарий от Twissel

Вот там получился изврат

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

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

ну раз не подразумевается слово «потом», тогда вот такой вариант удовлетворяет вашей логике

x = list(xrange(1,101))
print x
shuffle лишнее, ибо о порядке чисел в массиве ничего не сказано. неуд.

anonymous
()
Ответ на: комментарий от A1

поэтому трактовать можно в любую сторону

Вообще, на самом деле, не очень понятно, как, по логике задачи, после заполнения массива 1..100 случайными числами, «в итоге» должен получиться массив уникальных значений. ИМХО автор задачи - дебил.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

shuffle лишнее

Отлично подмечено, чорт побери!

A1
()
Ответ на: комментарий от anonymous

shuffle лишнее, ибо о порядке чисел в массиве ничего не сказано

Тогда числа будут не случайные, дурачина. Массив случайных чисел = массив с нулевой автокорреляцией. Но вообще да, т.к. не сказано, что «в итоге» должны быть случайные числа, а только уникальные. Я же говорю - автор задачи дурачок.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Тот код я приводить не буду ибо стыдно.

Там все как положено:массивы, цикл с параметром и т.д.

Тогда вам лучше сразу развернуться и не участвовать в этой специальной олимпиаде.

Я так и сделаю.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от A1

Условие точно скопипащено со скайп-диалога.

Просто, похоже, что тот человек, с которым я беседовал он ни кодер, ни HR, а все сразу в одном флаконе :-)

Twissel ★★★★★
() автор топика

Твое решение не удовлетворяет условиям задачи в части в цикле от 1 до 100 заполнить, но оно более красивое и короткое, имхо... я бы сначала сделал все по условию, но потом выкатил это решение и обосновал его преимущества

menefis
()
Ответ на: комментарий от no-such-file

Не исключено, что задача потеряла смысл при ее пересказе. «Цифры» от 1 до 100, я бы сказал, тоже на это намекают.

TeopeTuK ★★★★
()
Ответ на: комментарий от staseg

В справочник лень было лезть, выяснять что shuffle делает.

зы. Это как про программистов на дельфях шутка, задали нарисовать львенка минимальным количеством строк - пошел нашел в интенете компонент рисующий львенка, написал строчку Lion.Create. В чем проверка вообще была, знает человек про shuffle? Просто бы спросили чего shuffle делает.

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)

точно были все числа от 1 до 100

Я бы уточнил задание

buddhist ★★★★★
()
Ответ на: комментарий от ilovewindows

А в чем должна быть проверка, как написать цикл? :)

Вообще конструктивно было бы задать вопрос типа «а теперь давайте попробуем прикинуть реализацию shuffle», а заставлять топорно перерешивать задачу «давай на массивах» – это давай до свидания.

staseg ★★★★★
()

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

То есть, функция генерации случайных чисел нам не очень подходит потому что:

  • По условию у нас все числа натуральные, нафиг их генерить?
  • Как избавиться от дублей после rand() и оставить массив либо уникальных значений либо полный ряд натуральных чисел от 1 до 100?

Неточность формулировки, однако.

Twissel ★★★★★
() автор топика

Всё зависит от того, чего хотел этим тестом задавший его. Если проверить знание php и как-то нестандартно мыслить - то принял. Если проверить умение чётко выполнять поставленное задание - то нет.

WARNING ★★★★
()
Последнее исправление: WARNING (всего исправлений: 1)
Ответ на: комментарий от WARNING

Вот и я о том же.

Благодарю за отклик.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Тогда числа будут не случайные, дурачина. Массив случайных чисел = массив с нулевой автокорреляцией

докажи, а то пока тормоз тут только ты.

anonymous
()

А если шутя профтоплю:

Может уйти к рубистам?

Там есть жизнь или сплошная хипстота?

Or Go is better choice,

to Go or no to Go that is the question?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Тоже самое что и в функции asctime, если тебе не повезло и ты не пользуешься ей каждый день то ни хрена не помнишь что она точно делает. Во-вторых, знание этой функции ни о чем не говорит, что это признак крутого программера на пыхе, полмильёна сразу оклад?

ilovewindows ★★★★★
()

В Москву не собираешься перебираться? А то ищем нормального PHP-шника, грусть-пичаль.

ei-grad ★★★★★
()
$a = array();
$j = rand(0,100);
for ($i = 1; $i < 100; $i++)
$a[$i] = ($j + $i) % 100 + 1;

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

amomymous ★★★
()
Последнее исправление: amomymous (всего исправлений: 1)
Ответ на: комментарий от ei-grad

К сожалению нет, дружище :-(

Тут бы в своем Цюрюпинске обустроиться и смуту эту переждать...

Twissel ★★★★★
() автор топика
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от Twissel

решение бы принял, но из-за обоснования почему оно плохое и что тут хотят - нет.

qnikst ★★★★★
()
Ответ на: комментарий от staseg

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

ilovewindows ★★★★★
()

А это точно задание на «программирование», а не на алгоритмическое решение?

Если этим заданием проверялось умение правильно переформулировать поставленную задачу - Ваше решение абсолютно верно.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.