2019-04-19 FizzBuzz 3

by Vasil Kolev

(предхождащи post-ове по темата: FizzBuzz, FizzBuzz 2)
Задачката продължава да води до интересни идеи, та ще публикувам някои от тях.

В последно време търсим java програмист, та в едно от решенията имаше следното:

try {
	errorNumber=  1/(tmpNum%15);
} catch (ArithmeticException ae) {
	return "AB";
} 

Това за мен беше съвсем неизвестен начин да се напише if() :) Ползването на exception-и е страшно неефективно (поне под Linux генерира SIGFPE, т.е. ще мине за малко и през kernel-а), но е още един начин да се промени пътя на кода.

Също така, в езиците, в които няма goto цикълът може да се реализире с рекурсия, като функцията, в която се влиза се избира от масив (идеята дойде на Slackware, който написа реализация на php), и изглежда горе-долу по следния начин:

function printto99($i) {
	global $funcs;
	....
	$funcs[$i % 100]($i+1);
}
function print100($i) {
	global $funcs;
	....
	return;
}

$funcs = array(0 => printto99(), 1 => print100());

$funcs[0](1);

В …. частта се слага логиката какво да се печата, което ме мързи да разписвам пак.

В Java тази конкретна идиотщина може да се реализира, като вместо масив от функции се направи масив от обекти с общ родител, който има два наследника – printto99 и print100 и така да се направи цикъла.

Leave a Reply