arman1231
@arman1231
Keykeeper

Задача про foobar на JS. Как найти правильный алгоритм?

Есть интересная задача про FooBar.
Суть её заключается в том, что дан массив чисел, допустим от 1 до 100.
Нужно сделать так, что бы числа, делящиеся на 3 без остатка принимали значения Foo, а числа, делящиеся на 5 принимали значение Bar, а числа делящиеся на 3 и на 5 принимали значение Foobar.
И всё вроде бы ничего, и моих скудных знаний хватило, что бы решить данную задачу. Однако, чувство, что я написал 100 срок кода, вместо 5 заставило меня обратиться к вам.
Друзья, подскажите, как можно было решить данную задачу покороче. Спасибо!
Собственно мой код,
var arr = [];
			console.log(arr);
			function createArr(){
				for (var i=1; i<101; i++)
					arr.push(i);
			}
			createArr();
			console.log(arr);
			function divBy3By5(a){
				var ar = [];
				for (var i=0; i<a.length; i++){
					if (a[i]%5 == 0 && a[i]%3 == 0){
						ar.push(a[i]='foobar');
					}
				}
				return ar;
			}
			function divBy3(a){
				var ar = [];
				for (var i=0; i<a.length; i++){
					if (a[i]%3 === 0 && a[i]%5 != 0){
						ar.push(a[i]='foo');		
					}
				}
				return ar;
			}
			function divBy5(a){
				var ar = [];
				for (var i=0; i<a.length; i++){
					if (a[i]%5 === 0 && a[i]%3 != 0){
						ar.push(a[i]='bar');
					}
				}
				return ar;
			}
			divBy3(arr);
			divBy5(arr);
			divBy3By5(arr);
			console.log(arr);
  • Вопрос задан
  • 8666 просмотров
Решения вопроса 2
crazy_leo
@crazy_leo
Frontend Developer
const fillArray = count => 
  (new Array(count)).fill(1).map((item, i) => i + 1)

const fooBar = array =>
  array.map(number => 
    !(number % 3) && !(number % 5) 
    ? "FooBar"
    : !(number % 3) ? "Foo"
    : !(number % 5) ? "Bar" : number
  )

fooBar(fillArray(100))
Ответ написан
zendor
@zendor
Решение
const arr = [...Array(100)].map((_, i) => i + 1);
const res = arr.map(n => `${n % 3 ? '' : 'Foo'}${n % 5 ? '' : 'Bar'}` || n);

Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Zoominger
@Zoominger
System Integrator
Да нормальное решение. Есть изящнее и короче, но это с опытом приходит.
Ответ написан
Al_Shopen
@Al_Shopen
Human
Твоё решение вполне годное, но я тут сделал по компактнее, хотя, конечно, Leo Developer написал лучше всего)
const arr = []

fillArray = array => {

    for (let i = 1; i < 101; i++) {

        if (!(i % 3) & !(i % 5)) {
            array.push('foobar')
        } else if (!(i % 3)) {
            array.push('foo')
        } else if (!(i % 5)) {
            array.push('bar')
        } else {
            array.push(i)
        }

    }
    return array
}

console.log(fillArray(arr))
Ответ написан
Комментировать
ramil_bayramov
@ramil_bayramov
Your Personal Sheikh
let arrayOfNums = [];        

    for (let i = 1; i <= 100; i++) {
        arrayOfNums[i] = i;
        if (i % 3 == 0) {
            // alert(i + " Foo");
            arrayOfNums[i] = "Foo";
        }
        if (i % 5 == 0) {
            // alert(i + " bar");
            arrayOfNums[i] = "bar";
        }
        if (i % 3 == 0 && i % 5 == 0) {
            // alert(i + " Foobar")
            arrayOfNums[i] = "Foobar";
        }
    }

        console.log(arrayOfNums);


Считаю это - самый простой и понятный и примитивный, компактный код, который даже новичок 3 урока поймет(хотя я сам еще новичко кстати)
Ответ написан
@Nightmare2002
let arr = []

for (let i = 1; i < 101; i++) {
  arr.push(i)
}


function fooBar(arr) {
  let foo = []
  let bar = []
  let foobar = []

  for (let a = 1 ; a < 101; a++) {
    if (a % 3 == 0) {
      foo.push(a)
    }
  }

  for (let a = 1 ; a < 101; a++) {
    if (a % 5 == 0) {
      bar.push(a)
    }
  }

  for (let a = 1 ; a < 101; a++) {
    if (a % 3 == 0 || a % 5 == 0) {
      foobar.push(a)
    }
  }

  alert(`Foo(value /3) = ${foo}`)
  alert(`Bar(value /5) = ${bar}`)
  alert(`FooBar(value /3 and /5) = ${foobar}`)
}

fooBar(arr)


Я смог решить таким образом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы