Cody

Problem 1940. Decimation - Optimized for speed

Solution 3171701

Submitted on 12 Oct 2020
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

Test Suite

Test Status Code Input and Output
1   Pass
assert(isequal(speed_decimation(10,3),4))

ans = 1 ans = 10 ans = 7 ans = 5 ans = 3

2   Pass
assert(isequal(speed_decimation(1024,3),676))

ans = 1 ans = 1024 ans = 683 ans = 455 ans = 304 ans = 202 ans = 135 ans = 90 ans = 60 ans = 40 ans = 27 ans = 18 ans = 12 ans = 8 ans = 5 ans = 3 ans = 2

3   Pass
assert(isequal(speed_decimation(2012,50),543))

ans = 1 ans = 2012 ans = 1972 ans = 1933 ans = 1894 ans = 1856 ans = 1819 ans = 1783 ans = 1747 ans = 1712 ans = 1678 ans = 1644 ans = 1611 ans = 1579 ans = 1548 ans = 1517 ans = 1486 ans = 1457 ans = 1428 ans = 1399 ans = 1371 ans = 1344 ans = 1317 ans = 1290 ans = 1265 ans = 1239 ans = 1214 ans = 1190 ans = 1166 ans = 1143 ans = 1120 ans = 1098 ans = 1076 ans = 1054 ans = 1033 ans = 1013 ans = 992 ans = 972 ans = 953 ans = 934 ans = 915 ans = 897 ans = 879 ans = 861 ans = 844 ans = 827 ans = 811 ans = 795 ans = 779 ans = 763 ans = 748 ans = 733 ans = 718 ans = 704 ans = 690 ans = 676 ans = 663 ans = 649 ans = 636 ans = 624 ans = 611 ans = 599 ans = 587 ans = 575 ans = 564 ans = 552 ans = 541 ans = 530 ans = 520 ans = 509 ans = 499 ans = 489 ans = 480 ans = 470 ans = 461 ans = 451 ans = 442 ans = 433 ans = 425 ans = 416 ans = 408 ans = 400 ans = 392 ans = 384 ans = 376 ans = 369 ans = 361 ans = 354 ans = 347 ans = 340 ans = 333 ans = 327 ans = 320 ans = 314 ans = 307 ans = 301 ans = 295 ans = 289 ans = 284 ans = 278 ans = 272 ans = 267 ans = 262 ans = 256 ans = 251 ans = 246 ans = 241 ans = 237 ans = 232 ans = 227 ans = 223 ans = 218 ans = 214 ans = 209 ans = 205 ans = 201 ans = 197 ans = 193 ans = 189 ans = 186 ans = 182 ans = 178 ans = 175 ans = 171 ans = 168 ans = 164 ans = 161 ans = 158 ans = 155 ans = 152 ans = 149 ans = 146 ans = 143 ans = 140 ans = 137 ans = 134 ans = 132 ans = 129 ans = 126 ans = 124 ans = 121 ans = 119 ans = 117 ans = 114 ans = 112 ans = 110 ans = 108 ans = 105 ans = 103 ans = 101 ans = 99 ans = 97 ans = 95 ans = 93 ans = 92 ans = 90 ans = 88 ans = 86 ans = 84 ans = 83 ans = 81 ans = 79 ans = 78 ans = 76 ans = 75 ans = 73 ans = 72 ans = 70 ans = 69 ans = 68 ans = 66 ans = 65 ans = 64 ans = 62 ans = 61 ans = 60 ans = 59 ans = 58 ans = 56 ans = 55 ans = 54 ans = 53 ans = 52 ans = 51 ans = 50 ans = 49 ans = 48 ans = 47 ans = 46 ans = 45 ans = 44 ans = 43 ans = 42 ans = 42 ans = 41 ans = 40 ans = 39 ans = 38 ans = 38 ans = 37 ans = 36 ans = 35 ans = 35 ans = 34 ans = 33 ans = 33 ans = 32 ans = 31 ans = 31 ans = 30 ans = 30 ans = 29 ans = 28 ans = 28 ans = 27 ans = 27 ans = 26 ans = 26 ans = 25 ans = 25 ans = 24 ans = 24 ans = 23 ans = 23 ans = 22 ans = 22 ans = 21 ans = 21 ans = 21 ans = 20 ans = 20 ans = 19 ans = 19 ans = 19 ans = 18 ans = 18 ans = 17 ans = 17 ans = 17 ans = 16 ans = 16 ans = 16 ans = 15 ans = 15 ans = 15 ans = 15 ans = 14 ans = 14 ans = 14 ans = 13 ans = 13 ans = 13 ans = 13 ans = 12 ans = 12 ans = 12 ans = 12 ans = 11 ans = 11 ans = 11 ans = 11 ans = 11 ans = 10 ans = 10 ans = 10 ans = 10 ans = 10 ans = 9 ans = 9 ans = 9 ans = 9 ans = 9 ans = 8 ans = 8 ans = 8 ans = 8 ans = 8 ans = 8 ans = 7 ans = 7 ans = 7 ans = 7 ans = 7 ans = 7 ans = 7 ans = 6 ans = 6 ans = 6 ans = 6 ans = 6 ans = 6 ans = 6 ans = 6 ans = 6 ans = 5 ans = 5 ans = 5 ans = 5 ans = 5 ans = 5 ans = 5 ans = 5 ans = 5 ans = 5 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 4 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 3 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2 ans = 2

4   Pass
assert(isequal(speed_decimation(30,5),3))

ans = 1 ans = 30 ans = 24 ans = 20 ans = 16 ans = 12 ans = 10 ans = 8 ans = 6 ans = 5 ans = 4 ans = 3 ans = 3 ans = 2

5   Pass
assert(isequal(speed_decimation(10,10),8))

ans = 1 ans = 10 ans = 9 ans = 9 ans = 8 ans = 7 ans = 6 ans = 6 ans = 5 ans = 4 ans = 4 ans = 4 ans = 3 ans = 3 ans = 3 ans = 2 ans = 2 ans = 2 ans = 2

6   Pass
assert(isequal(speed_decimation(2048,2),1))

ans = 1 ans = 2048 ans = 1024 ans = 512 ans = 256 ans = 128 ans = 64 ans = 32 ans = 16 ans = 8 ans = 4

7   Pass
assert(isequal(speed_decimation(2048,1024),1773))

ans = 1 ans = 2048 ans = 2046 ans = 2045 ans = 2043 ans = 2041 ans = 2039 ans = 2037 ans = 2035 ans = 2033 ans = 2031 ans = 2029 ans = 2027 ans = 2025 ans = 2023 ans = 2021 ans = 2019 ans = 2017 ans = 2015 ans = 2013 ans = 2011 ans = 2009 ans = 2007 ans = 2005 ans = 2003 ans = 2001 ans = 1999 ans = 1997 ans = 1995 ans = 1993 ans = 1991 ans = 1989 ans = 1987 ans = 1985 ans = 1984 ans = 1982 ans = 1980 ans = 1978 ans = 1976 ans = 1974 ans = 1972 ans = 1970 ans = 1968 ans = 1966 ans = 1964 ans = 1962 ans = 1960 ans = 1958 ans = 1957 ans = 1955 ans = 1953 ans = 1951 ans = 1949 ans = 1947 ans = 1945 ans = 1943 ans = 1941 ans = 1939 ans = 1938 ans = 1936 ans = 1934 ans = 1932 ans = 1930 ans = 1928 ans = 1926 ans = 1924 ans = 1922 ans = 1921 ans = 1919 ans = 1917 ans = 1915 ans = 1913 ans = 1911 ans = 1909 ans = 1907 ans = 1906 ans = 1904 ans = 1902 ans = 1900 ans = 1898 ans = 1896 ans = 1894 ans = 1893 ans = 1891 ans = 1889 ans = 1887 ans = 1885 ans = 1883 ans = 1882 ans = 1880 ans = 1878 ans = 1876 ans = 1874 ans = 1872 ans = 1871 ans = 1869 ans = 1867 ans = 1865 ans = 1863 ans = 1861 ans = 1860 ans = 1858 ans = 1856 ans = 1854 ans = 1852 ans = 1851 ans = 1849 ans = 1847 ans = 1845 ans = 1843 ans = 1842 ans = 1840 ans = 1838 ans = 1836 ans = 1834 ans = 1833 ans = 1831 ans = 1829 ans = 1827 ans = 1825 ans = 1824 ans = 1822 ans = 1820 ans = 1818 ans = 1817 ans = 1815 ans = 1813 ans = 1811 ans = 1809 ans = 1808 ans = 1806 ans = 1804 ans = 1802 ans = 1801 ans = 1799 ans = 1797 ans = 1795 ans = 1794 ans = 1792 ans = 1790 ans = 1788 ans = 1787 ans = 1785 ans = 1783 ans = 1781 ans = 1780 ans = 1778 ans = 1776 ans = 1774 ans = 1773 ans = 1771 ans = 1769 ans = 1768 ans = 1766 ans = 1764 ans = 1762 ans = 1761 ans = 1759 ans = 1757 ans = 1755 ans = 1754 ans = 1752 ans = 1750 ans = 1749 ans = 1747 ans = 1745 ans = 1743 ans = 1742 ans = 1740 ans = 1738 ans = 1737 ans = 1735 ans = 1733 ans = 1732 ans = 1730 ans = 1728 ans = 1727 ans = 1725 ans = 1723 ans = 1721 ans = 1720 ans = 1718 ans = 1716 ans = 1715 ans = 1713 ans = 1711 ans = 1710 ans = 1708 ans = 1706 ans = 1705 ans = 1703 ans = 1701 ans = 1700 ans = 1698 ans = 1696 ans = 1695 ans = 1693 ans = 1691 ans = 1690 ans = 1688 ans = 1687 ans = 1685 ans = 1683 ans = 1682 ans = 1680 ans = 1678 ans = 1677 ans = 1675 ans = 1673 ans = 1672 ans = 1670 ans = 1669 ans = 1667 ans = 1665 ans = 1664 ans = 1662 ans = 1660 ans = 1659 ans = 1657 ans = 1656 ans = 1654 ans = 1652 ans = 1651 ans = 1649 ans = 1647 ans = 1646 ans = 1644 ans = 1643 ans = 1641 ans = 1639 ans = 1638 ans = 1636 ans = 1635 ans = 1633 ans = 1631 ans = 1630 ans = 1628 ans = 1627 ans = 1625 ans = 1623 ans = 1622 ans = 1620 ans = 1619 ans = 1617 ans = 1616 ans = 1614 ans = 1612 ans = 1611 ans = 1609 ans = 1608 ans = 1606 ans = 1605 ans = 1603 ans = 1601 ans = 1600 ans = 1598 ans = 1597 ans = 1595 ans = 1594 ans = 1592 ans = 1591 ans = 1589 ans = 1587 ans = 1586 ans = 1584 ans = 1583 ans = 1581 ans = 1580 ans = 1578 ans = 1577 ans = 1575 ans = 1574 ans = 1572 ans = 1570 ans = 1569 ans = 1567 ans = 1566 ans = 1564 ans = 1563 ans = 1561 ans = 1560 ans = 1558 ans = 1557 ans = 1555 ans = 1554 ans = 1552 ans = 1551 ans = 1549 ans = 1548 ans = 1546 ans = 1545 ans = 1543 ans = 1542 ans = 1540 ans = 1539 ans = 1537 ans = 1536 ans = 1534 ans = 1533 ans = 1531 ans = 1530 ans = 1528 ans = 1527 ans = 1525 ans = 1524 ans = 1522 ans = 1521 ans = 1519 ans = 1518 ans = 1516 ans = 1515 ans = 1513 ans = 1512 ans = 1510 ans = 1509 ans = 1507 ans = 1506 ans = 1504 ans = 1503 ans = 1501 ans = 1500 ans = 1498 ans = 1497 ans = 1496 ans = 1494 ans = 1493 ans = 1491 ans = 1490 ans = 1488 ans = 1487 ans = 1485 ans = 1484 ans = 1482 ans = 1481 ans = 1480 ans = 1478 ans = 1477 ans = 1475 ans = 1474 ans = 1472 ans = 1471 ans = 1469 ans = 1468 ans = 1467 ans = 1465 ans = 1464 ans = 1462 ans = 1461 ans = 1459 ans = 1458 ans = 1457 ans = 1455 ans = 1454 ans = 1452 ans = 1451 ans = 1450 ans = 1448 ans = 1447 ans = 1445 ans = 1444 ans = 1442 ans = 1441 ans = 1440 ans = 1438 ans = 1437 ans = 1435 ans = 1434 ans = 1433 ans = 1431 ans = 1430 ans = 1428 ans = 1427 ans = 1426 ans = 1424 ans = 1423 ans = 1421 ans = 1420 ans = 1419 ans = 1417 ans = 1416 ans = 1415 ans = 1413 ans = 1412 ans = 1410 ans = 1409 ans = 1408 ans = 1406 ans = 1405 ans = 1404 ans = 1402 ans = 1401 ans = 1399 ans = 1398 ans = 1397 ans = 1395 ans = 1394 ans = 1393 ans = 1391 ans = 1390 ans = 1389 ans = 1387 ans = 1386 ans = 1384 ans = 1383 ans = 1382 ans = 1380 ans = 1379 ans = 1378 ans = 1376 ans = 1375 ans = 1374 ans = 1372 ans = 1371 ans = 1370 ans = 1368 ans = 1367 ans = 1366 ans = 1364 ans = 1363 ans = 1362 ans = 1360 ans = 1359 ans = 1358 ans = 1356 ans = 1355 ans = 1354 ans = 1352 ans = 1351 ans = 1350 ans = 1348 ans = 1347 ans = 1346 ans = 1344 ans = 1343 ans = 1342 ans = 1341 ans = 1339 ans = 1338 ans = 1337 ans = 1335 ans = 1334 ans = 1333 ans = 1331 ans = 1330 ans = 1329 ans = 1328 ans = 1326 ans = 1325 ans = 1324 ans = 1322 ans = 1321 ans = 1320 ans = 1318 ans = 1317 ans = 131...

8   Fail
t_in=clock; j=1:50; v=arrayfun(@(x) speed_decimation(100000,x),j); correct=[100000 68929 92620 32942 40333 54212 27152 67341 42610 77328 82991 13252 91717 6850 45758 71249 38339 86953 63331 66903 72606 83990 87828 46101 99979 47141 16871 60389 51549 76409 42868 78390 79590 27573 95835 53636 36954 39891 45943 63811 71589 70886 49313 4069 93694 96031 20739 41403 93714 60023]; assert(all(isequal(v,correct))); t_out=etime(clock,t_in)*1000; fprintf('Actual Time = %.0f msec\n',t_out) v=[100000:100000:1000000]; v=arrayfun(@(x) speed_decimation(x,17),v); correct=[38339 162859 151602 99465 462955 559860 337009 546467 563784 364193]; assert(all(isequal(v,correct))); t_out=etime(clock,t_in)*1000; fprintf('Actual Time = %.0f msec\n',t_out) assert(isequal(speed_decimation(2^20,2^9),210856)); t_out=etime(clock,t_in)*1000; t2=min(100000,t_out); fprintf('Actual Time = %.0f msec\n',t_out) feval(@assignin,'caller','score',floor(t2));

ans = 1 ans = 100000 ans = 0

Array indices must be positive integers or logical values. Error in speed_decimation (line 7) survivor=survivor(mod((test+offset(length(offset))),kill_every)>0); Error in Test8>@(x)speed_decimation(100000,x) (line 3) v=arrayfun(@(x) speed_decimation(100000,x),j); Error in Test8 (line 3) v=arrayfun(@(x) speed_decimation(100000,x),j);

Suggested Problems

More from this Author80

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!