Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   FizzBuzz, делящихся на 5 (но не на 3) (https://javascript.ru/forum/misc/57080-fizzbuzz-delyashhikhsya-na-5-no-ne-na-3-a.html)

jack3dm 18.07.2015 16:31

Странно. Я этого не понимаю. Если поменять местами ифы то результат будет совершенно другой

Правильный код.
<script>
var num = 1;
for ( ; num < 100; num++ ) {
    if ( num % 5 === 0 && num % 3 === 0 ){
       document.write( num, " = FizzBuzz <br />" )
    }else if ( num%5 === 0 ){
       document.write( num, " = Buzz <br />" );
    }else if ( num%3 === 0 ){
       document.write( num, " = Fizz <br/ >" );
    }else{
       document.write( num, "<br/ >" );
    }
}
</script>



А если поменять местами ифы то FizzBuzz не видно...
<script>
var num = 1;
for( ; num <= 100; num++ ){
	if( num%3 === 0 ){
       document.write( num, " = Fizz <br/ >" );
    }else if ( num%5 === 0 ){
       document.write( num, " = Buzz <br />" );
    }else if ( num % 5 === 0 && num % 3 === 0 ){
       document.write( num, " = FizzBuzz <br />" );
    }else{
       document.write( num, "<br/ >" );
    }
}
</script>


Как же это влияет? Как это работает? Почему месторасположение так важно?

Makarov 18.07.2015 18:08

jack3dm,
потому что это два разных алгоритма очевидно. Пусть ваше число равно скажем 15. Куда оно придет во втором случае и куда должно по условиям?
Код в большинстве случаев выполняется последовательно, это раз.

Конструкция if(проверка){что-нибудь} else {еще что-нибудь} он в else не зайдет если проверка выполнена, это два

Ну и в третьих, чтобы было понятнее, добавлю пару незначащих скобочек и табов в правильный код и в ваш:
var num = 1;
for ( ; num < 100; num++ ) {
	if ( num % 5 === 0 && num % 3 === 0 ){
		document.write( num, " = FizzBuzz <br />" )
	} else {
		if ( num%5 === 0 ){
			document.write( num, " = Buzz <br />" );
		} else {
			if ( num%3 === 0 ){
				document.write( num, " = Fizz <br/ >" );
			} else {
				document.write( num, "<br/ >" );
			}
		}
	}
}

var num = 1;
for( ; num <= 100; num++ ){
	if( num%3 === 0 ){
		document.write( num, " = Fizz <br/ >" );
	} else {
		if (num % 5 === 0) {
			document.write(num, " = Buzz <br />");
		} else {
			if (num % 5 === 0 && num % 3 === 0) {
				document.write(num, " = FizzBuzz <br />");
			} else {
				document.write(num, "<br/ >");
			}
		}
	}
}

jack3dm 18.07.2015 18:17

Makarov,
Я понял как работает. Последовательно, сначала было 3, затем 5, затем 15. Так как изначально у нас в списке стоит 3 то и числу 15 будет присвоено Fizz. Последовательность. Спасибо

Makarov 18.07.2015 18:41

KosBeg,
про "слишком уж учебные задачи".
Конкретно вот это задача дала название целому классу задачек, их обычно так и называют "физзбазз задачки".

Такой тип задач широко применяется на практике в одном конкретном случае.
А случай такой: приходит собеседоваться на программиста какой-нибудь тип, и надо проверить, способен ли он хоть пару строчек кода написать. Резюме как правило верить сильно нельзя, в среднестатистическую контору на собеседование могут прийти какие-нибудь очень странные люди, вроде всяких студентов "с дипломом программиста", которые ничего серьезного в жизни не писали никогда. Такой чувак может обычно очень хорошо заговаривать зубы и иметь впечатляющее выдуманное резюме, но если попросить его решить какую-нибудь очень простую задачку на листочке, то он скорее всего сольется.

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

KosBeg 18.07.2015 18:55

Цитата:

Сообщение от Makarov
То есть физзбазз задачки - это общая проверка на адекватность, что к нам именно программист пришел а не хрен с горы

я хрен з горы :cray:

Makarov 18.07.2015 19:01

KosBeg,
Ничо, пройдет, все мы ими когда-то были) Тебе 14 лет, в 14 лет это не страшно. Будешь постоянно заниматься программированием - к возрасту когда все твои сверстники будут максимум в макдональдсе работать станешь хорошим спецом

JsConAp 18.07.2015 20:42

Цитата:

Сообщение от jack3dm
======
Решение:

В одну строку :-? :haha:
for(var i=1;101>i;i++)console.log(i%5||i%3?i%3?i%5?i:"Buzz":"Fizz":"FizzBuzz");

kostyanet 19.07.2015 09:26

Цитата:

Сообщение от Makarov
То есть физзбазз задачки - это общая проверка на адекватность,

Наоборот, это проверка на адекватность работодателя или того придурка, который нанят придурошным работодателем в отдел кадров.

То есть не проверка, а признак. Если вам начинают предлагать порешать физбуз - значит вы вливаетесь в команду недоумков и неадекватов.

kostyanet 19.07.2015 09:31

Например

Цитата:

Сообщение от jack3dm
Напишите программу, которая выводит через console.log все цифры от 1 до 100


Все что так перевел - не прошли, не сдали, уволены без выходного пособия, на пинковой тяге. Ах бл, они же принимают на работу... ну так о чем и базар.

kostyanet 19.07.2015 09:42

Хорошо, возьмем исходник

Write a program that uses console.log to print all the numbers from 1 to 100, with two exceptions. For numbers divisible by 3, print “Fizz” instead of the number, and for numbers divisible by 5 (and not 3), print “Buzz” instead. When you have that working, modify your program to print “FizzBuzz”, for numbers that are divisible by both 3 and 5 (and still print “Fizz” or “Buzz” for numbers divisible by only one of those).

и типа правильный перевод

FizzBuzz. Напишите программу, которая выводит через console.log все числа от 1 до 100, с двумя исключениями. Для чисел, нацело делящихся на 3, она должна выводить ‘Fizz’, а для чисел, делящихся на 5 (но не на 3) – ‘Buzz’.Когда сумеете – исправьте её так, чтобы она выводила «FizzBuzz» для всех чисел, которые делятся и на 3 и на 5.

чтобы задать вопрос: какой недоумок пишет такую документацию? Вот так пишут

Напишите программу, которая выводит через console.log все числа от 1 до 100 по следующим правилам. 1) Все числа кратные 3 заменить на текст ‘Fizz’ 2) Все числа кратные 5 (но не кратные 3) заменить на текст ‘Buzz’. 3) Иначе вывести число.

Правильно сформулировал? Тогда вопрос - зачем автор баяна формулирует хуйдожественными екивоками? Варианты: 1) автор - тупой, 2) учит не программированию, а распознаванию хотелок заказчиков. Типа такой тренинг на бабку Вангу от жабы скрипучей.

Короче, будете учиться на гамнямбах - тому и выучитесь.


Часовой пояс GMT +3, время: 20:55.