Каталог решений - FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются…

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются…

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются…

В наличии

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом… нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью «чем короче, тем лучше».
Прошу сильно не пинать, это просто развлечение для вечера.

Категория:

Описание

Пояснение

Кто не знает, не помнит, вот содержание задачи.

Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz».

И так я сделал для себя 4 варианта.

Вариант 1 — в лоб

&НаКлиенте
Процедура Вариант1(Команда)
	Для Индекс = 1 По 100 Цикл
		Если Индекс % 15 = 0 Тогда
			Т = "FizzBuzz";
		ИначеЕсли Индекс % 3 = 0 Тогда
			Т = "Fizz";
		ИначеЕсли Индекс % 5 = 0 Тогда
			Т = "Buzz";
		Иначе 
			Т = Формат(Индекс, "ЧГ=");
		КонецЕсли;
		
		Сообщить(Т);
	КонецЦикла;
КонецПроцедуры

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

Вариант 2 — сократим ИначеЕсли

&НаКлиенте
Процедура Вариант2(Команда)
	Для Индекс = 1 По 100 Цикл
		Т = "";
		Если Индекс%3 = 0 Тогда
			Т = Т + "Fizz";
		КонецЕсли;
		Если Индекс%5 = 0 Тогда
			Т = Т + "Buzz";
		КонецЕсли;
		Если ПустаяСтрока(Т) Тогда
			Т = Формат(Индекс, "ЧГ=");
		КонецЕсли;
		
		Сообщить(Т);
	КонецЦикла;
КонецПроцедуры

И тут я подумал, ведь FizzBuzz = Fizz + Buzz. А условие для FizzBuzz это %3*5. Ну значит берем и прибавляем к строке результат проверки условия на %3 и на %5. Если ничего нет — значит это число.

Вариант 3 — заменим Если на ?

&НаКлиенте
Процедура Вариант3(Команда)
	Для Индекс = 1 По 100 Цикл
		Т = ?(Индекс%3 = 0, "Fizz", "") + ?(Индекс%5 = 0, "Buzz", "");
		Т = ?(ПустаяСтрока(Т), Формат(Индекс, "ЧГ="), Т);
		
		ВывестиВЛог(Т);
	КонецЦикла;
КонецПроцедуры

Ну это было как бы логичное продолжение. Убираем Если … КонецЕсли, меняем на тернарный оператор ? становится короче и лучше.

Вариант 4 — короче, не значит лучше

&НаКлиенте
Процедура Вариант4(Команда)
	Для Индекс = 1 По 100 Цикл
		Т = ?(Индекс%15 = 0, "FizzBuzz", 
				?(Индекс%3 = 0, "Fizz", 
					?(Индекс%5 = 0, "Buzz", 
						Формат(Индекс, "ЧГ="))));
		
		Сообщить(Т);
	КонецЦикла;
КонецПроцедуры

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

Конец

Поскольку дальше мне стало скучно, отведенное время для развлечений закончилось и пора было идти спать, я решил что продолжать не буду. Мне хватит. Написал тест ко всем 4-м вариантам, прогнал и закрыл этот вопрос. Ну, а поскольку на Инфостарт не нашел упоминания про FizzBuzz решил восполнить пробел.

Прошу ногами не пинать, помидорами не закидывать. Хотите свою интерпретацию — в комментарии. Будет интересно почитать.

has been added to your cart:
Оформление заказа