1. Perl / Говнокод #16634

    −109

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    #!/usr/bin/perl
    use strict;
    sub ternary_switch {
    	my ($def,%exp) = @_;
    	my $result = $def;
    	for my $key (keys %exp) {
    		$result = '(' . $key . ')?(' . $exp{$key} . '):(' . $result . ')';
    	}
    	return $result;
    }
    my $def = ' (int)sum/0 /*assert*/ '; 
    my %exp = ( 
    	'quant==2' => ' round((sum)*pow(10.0,prec-1)*5.0)/pow(10.0,prec-1)/5.0 ',
    	'quant==5' => ' round((sum)*pow(10.0,prec-1)*2.0)/pow(10.0,prec-1)/2.0 ',
    	'quant==1' => ' round((sum)*pow(10.0,prec))/pow(10.0,prec) ',
    );
    my $result = ternary_switch($def,%exp);
    print $result . "\n";
    
    #define ROUND_QUANT(sum,prec,quant) (quant==5)?( round((sum)*pow(10.0,prec-1)*2.0)/pow(10.0,prec-1)/2.0 ):\
        ((quant==2)?( round((sum)*pow(10.0,prec-1)*5.0)/pow(10.0,prec-1)/5.0 ):\
        ((quant==1)?( round((sum)*pow(10.0,prec))/pow(10.0,prec) ):\
        ( (int)sum/0 /*assert*/ )))

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

    Запостил: overloop, 02 Сентября 2014

    Комментарии (65) RSS

    Добавить комментарий