{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":930,"title":"1D DCT-II transform.","description":"Implement a function that calculates 1D Discrete Cosine Transform \u003chttp://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II (DCT-II)\u003e for each row of a given input matrix so that the outputs are in columns. \r\n\r\nFor example:\r\n\r\nInput:  \r\n\r\n  [1 0 0 0]\r\n\r\nGives:\r\n\r\n  mydct([1 0 0 0])\r\n  ans =\r\n            0.5\r\n        0.65328\r\n            0.5\r\n         0.2706","description_html":"\u003cp\u003eImplement a function that calculates 1D Discrete Cosine Transform \u003ca href=\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\"\u003e(DCT-II)\u003c/a\u003e for each row of a given input matrix so that the outputs are in columns.\u003c/p\u003e\u003cp\u003eFor example:\u003c/p\u003e\u003cp\u003eInput:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 0 0 0]\r\n\u003c/pre\u003e\u003cp\u003eGives:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003emydct([1 0 0 0])\r\nans =\r\n          0.5\r\n      0.65328\r\n          0.5\r\n       0.2706\r\n\u003c/pre\u003e","function_template":"function y = mydct(x)\r\n  y = x;\r\nend","test_suite":"%% test 1\r\nx = eye(4);\r\ny = mydct(mydct(x));\r\ny_corr = eye(4);\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 2\r\nx = 10;\r\ny = mydct(mydct(x));\r\ny_corr = 10;\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 3\r\nx = [1 0];\r\ny = mydct(x);\r\ny_corr = sqrt(2)/2*[1;1];\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":6,"created_by":6084,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-02T15:30:23.000Z","updated_at":"2026-01-20T15:48:33.000Z","published_at":"2012-09-02T15:45:13.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eImplement a function that calculates 1D Discrete Cosine Transform\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e(DCT-II)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for each row of a given input matrix so that the outputs are in columns.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 0 0 0]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGives:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[mydct([1 0 0 0])\\nans =\\n          0.5\\n      0.65328\\n          0.5\\n       0.2706]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":929,"title":"Rearrange coefficients after block based DCT transform.","description":"Two dimensional block-based discrete cosine transform \u003chttp://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II (DCT-II)\u003e is a widely used spatio-frequency image representation for image and video compression.\r\n\r\nIf we use same-size blocks we can group coefficients into frequency bands.\r\n\r\nFor example, consider a following 8x8 image:\r\n\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n\r\nIf we split it into four 4x4 blocks we have DCTs of zero-blocks equal to zero-blocks and:\r\n\r\n dct2([ 1 1 1 1\r\n        1 1 1 1\r\n        1 1 1 1 \r\n        1 1 1 1]) =\r\n  4 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\r\n\r\nwith the only non-zero element representing DC component and zeros representing AC components. \r\nWe want to rearrange coefficients so corresponding components from different blocks are grouped together.\r\n\r\nThe result will be:\r\n\r\n    4 0 0 0 0 0 0 0\r\n    0 4 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n\r\nFor a grayscale image (matrix) of size NxM and block size nxm (it is guaranteed that an image can be divided into blocks of this size) return NxM matrix grouped by frequencies (with DC components inside N/n x M/m block in the most top-left corner).","description_html":"\u003cp\u003eTwo dimensional block-based discrete cosine transform \u003ca href=\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\"\u003e(DCT-II)\u003c/a\u003e is a widely used spatio-frequency image representation for image and video compression.\u003c/p\u003e\u003cp\u003eIf we use same-size blocks we can group coefficients into frequency bands.\u003c/p\u003e\u003cp\u003eFor example, consider a following 8x8 image:\u003c/p\u003e\u003cpre\u003e    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\u003c/pre\u003e\u003cp\u003eIf we split it into four 4x4 blocks we have DCTs of zero-blocks equal to zero-blocks and:\u003c/p\u003e\u003cpre\u003e dct2([ 1 1 1 1\r\n        1 1 1 1\r\n        1 1 1 1 \r\n        1 1 1 1]) =\r\n  4 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\u003c/pre\u003e\u003cp\u003ewith the only non-zero element representing DC component and zeros representing AC components. \r\nWe want to rearrange coefficients so corresponding components from different blocks are grouped together.\u003c/p\u003e\u003cp\u003eThe result will be:\u003c/p\u003e\u003cpre\u003e    4 0 0 0 0 0 0 0\r\n    0 4 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\u003c/pre\u003e\u003cp\u003eFor a grayscale image (matrix) of size NxM and block size nxm (it is guaranteed that an image can be divided into blocks of this size) return NxM matrix grouped by frequencies (with DC components inside N/n x M/m block in the most top-left corner).\u003c/p\u003e","function_template":"function out = block_dct2( img, n, m )\r\nNoBands = (size(img,1)/n) * (size(img,2)/m);\r\nout = img;\r\nend","test_suite":"%% test 1\r\nx = ones(16);\r\nfor N=2.^(1:4)\r\n    for M=2.^(1:4)        \r\n        y = block_dct2(x, N, M);\r\n        y_corr = [sqrt(N*M)*ones(16/N, 16/M), zeros(16/N,16-16/M); zeros(16-16/N,16)];\r\n        assert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n    end\r\nend\r\n%% test 2\r\nx = eye(16);\r\ny_corr = eye(16);\r\nfor N=2.^(1:4)\r\n    y = block_dct2(x, N, N);    \r\n    assert( norm( y_corr(:) - y(:)) \u003c 1e-10 );    \r\nend\r\n%% test 3\r\nx = double(invhilb(8)\u003e0);\r\ny = block_dct2(x, 2, 2);\r\ny_corr = [ones(4),zeros(4);zeros(4),ones(4)];\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 4\r\nx = double(invhilb(4)\u003e0);\r\ny = block_dct2(x, 1, 2);\r\ny_corr = (sqrt(2)/2)*[1 1 1 1; 1 1 -1 -1; 1 1 1 1; 1 1 -1 -1];\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 5 1x1 matrix\r\nx = 5;\r\ny = block_dct2(x, 1, 1);\r\nassert( abs(y - 5) \u003c 1e-10 );","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6084,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-02T11:19:28.000Z","updated_at":"2012-09-02T15:46:33.000Z","published_at":"2012-09-02T15:27:38.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTwo dimensional block-based discrete cosine transform\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e(DCT-II)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a widely used spatio-frequency image representation for image and video compression.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf we use same-size blocks we can group coefficients into frequency bands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example, consider a following 8x8 image:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    1 1 1 1 0 0 0 0\\n    1 1 1 1 0 0 0 0\\n    1 1 1 1 0 0 0 0\\n    1 1 1 1 0 0 0 0\\n    0 0 0 0 1 1 1 1\\n    0 0 0 0 1 1 1 1\\n    0 0 0 0 1 1 1 1\\n    0 0 0 0 1 1 1 1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf we split it into four 4x4 blocks we have DCTs of zero-blocks equal to zero-blocks and:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ dct2([ 1 1 1 1\\n        1 1 1 1\\n        1 1 1 1 \\n        1 1 1 1]) =\\n  4 0 0 0\\n  0 0 0 0\\n  0 0 0 0\\n  0 0 0 0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewith the only non-zero element representing DC component and zeros representing AC components. We want to rearrange coefficients so corresponding components from different blocks are grouped together.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe result will be:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    4 0 0 0 0 0 0 0\\n    0 4 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor a grayscale image (matrix) of size NxM and block size nxm (it is guaranteed that an image can be divided into blocks of this size) return NxM matrix grouped by frequencies (with DC components inside N/n x M/m block in the most top-left corner).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":930,"title":"1D DCT-II transform.","description":"Implement a function that calculates 1D Discrete Cosine Transform \u003chttp://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II (DCT-II)\u003e for each row of a given input matrix so that the outputs are in columns. \r\n\r\nFor example:\r\n\r\nInput:  \r\n\r\n  [1 0 0 0]\r\n\r\nGives:\r\n\r\n  mydct([1 0 0 0])\r\n  ans =\r\n            0.5\r\n        0.65328\r\n            0.5\r\n         0.2706","description_html":"\u003cp\u003eImplement a function that calculates 1D Discrete Cosine Transform \u003ca href=\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\"\u003e(DCT-II)\u003c/a\u003e for each row of a given input matrix so that the outputs are in columns.\u003c/p\u003e\u003cp\u003eFor example:\u003c/p\u003e\u003cp\u003eInput:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 0 0 0]\r\n\u003c/pre\u003e\u003cp\u003eGives:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003emydct([1 0 0 0])\r\nans =\r\n          0.5\r\n      0.65328\r\n          0.5\r\n       0.2706\r\n\u003c/pre\u003e","function_template":"function y = mydct(x)\r\n  y = x;\r\nend","test_suite":"%% test 1\r\nx = eye(4);\r\ny = mydct(mydct(x));\r\ny_corr = eye(4);\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 2\r\nx = 10;\r\ny = mydct(mydct(x));\r\ny_corr = 10;\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 3\r\nx = [1 0];\r\ny = mydct(x);\r\ny_corr = sqrt(2)/2*[1;1];\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":6,"created_by":6084,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-02T15:30:23.000Z","updated_at":"2026-01-20T15:48:33.000Z","published_at":"2012-09-02T15:45:13.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eImplement a function that calculates 1D Discrete Cosine Transform\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e(DCT-II)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for each row of a given input matrix so that the outputs are in columns.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 0 0 0]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGives:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[mydct([1 0 0 0])\\nans =\\n          0.5\\n      0.65328\\n          0.5\\n       0.2706]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":929,"title":"Rearrange coefficients after block based DCT transform.","description":"Two dimensional block-based discrete cosine transform \u003chttp://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II (DCT-II)\u003e is a widely used spatio-frequency image representation for image and video compression.\r\n\r\nIf we use same-size blocks we can group coefficients into frequency bands.\r\n\r\nFor example, consider a following 8x8 image:\r\n\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n\r\nIf we split it into four 4x4 blocks we have DCTs of zero-blocks equal to zero-blocks and:\r\n\r\n dct2([ 1 1 1 1\r\n        1 1 1 1\r\n        1 1 1 1 \r\n        1 1 1 1]) =\r\n  4 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\r\n\r\nwith the only non-zero element representing DC component and zeros representing AC components. \r\nWe want to rearrange coefficients so corresponding components from different blocks are grouped together.\r\n\r\nThe result will be:\r\n\r\n    4 0 0 0 0 0 0 0\r\n    0 4 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n\r\nFor a grayscale image (matrix) of size NxM and block size nxm (it is guaranteed that an image can be divided into blocks of this size) return NxM matrix grouped by frequencies (with DC components inside N/n x M/m block in the most top-left corner).","description_html":"\u003cp\u003eTwo dimensional block-based discrete cosine transform \u003ca href=\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\"\u003e(DCT-II)\u003c/a\u003e is a widely used spatio-frequency image representation for image and video compression.\u003c/p\u003e\u003cp\u003eIf we use same-size blocks we can group coefficients into frequency bands.\u003c/p\u003e\u003cp\u003eFor example, consider a following 8x8 image:\u003c/p\u003e\u003cpre\u003e    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    1 1 1 1 0 0 0 0\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\r\n    0 0 0 0 1 1 1 1\u003c/pre\u003e\u003cp\u003eIf we split it into four 4x4 blocks we have DCTs of zero-blocks equal to zero-blocks and:\u003c/p\u003e\u003cpre\u003e dct2([ 1 1 1 1\r\n        1 1 1 1\r\n        1 1 1 1 \r\n        1 1 1 1]) =\r\n  4 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\r\n  0 0 0 0\u003c/pre\u003e\u003cp\u003ewith the only non-zero element representing DC component and zeros representing AC components. \r\nWe want to rearrange coefficients so corresponding components from different blocks are grouped together.\u003c/p\u003e\u003cp\u003eThe result will be:\u003c/p\u003e\u003cpre\u003e    4 0 0 0 0 0 0 0\r\n    0 4 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\r\n    0 0 0 0 0 0 0 0\u003c/pre\u003e\u003cp\u003eFor a grayscale image (matrix) of size NxM and block size nxm (it is guaranteed that an image can be divided into blocks of this size) return NxM matrix grouped by frequencies (with DC components inside N/n x M/m block in the most top-left corner).\u003c/p\u003e","function_template":"function out = block_dct2( img, n, m )\r\nNoBands = (size(img,1)/n) * (size(img,2)/m);\r\nout = img;\r\nend","test_suite":"%% test 1\r\nx = ones(16);\r\nfor N=2.^(1:4)\r\n    for M=2.^(1:4)        \r\n        y = block_dct2(x, N, M);\r\n        y_corr = [sqrt(N*M)*ones(16/N, 16/M), zeros(16/N,16-16/M); zeros(16-16/N,16)];\r\n        assert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n    end\r\nend\r\n%% test 2\r\nx = eye(16);\r\ny_corr = eye(16);\r\nfor N=2.^(1:4)\r\n    y = block_dct2(x, N, N);    \r\n    assert( norm( y_corr(:) - y(:)) \u003c 1e-10 );    \r\nend\r\n%% test 3\r\nx = double(invhilb(8)\u003e0);\r\ny = block_dct2(x, 2, 2);\r\ny_corr = [ones(4),zeros(4);zeros(4),ones(4)];\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 4\r\nx = double(invhilb(4)\u003e0);\r\ny = block_dct2(x, 1, 2);\r\ny_corr = (sqrt(2)/2)*[1 1 1 1; 1 1 -1 -1; 1 1 1 1; 1 1 -1 -1];\r\nassert( norm( y_corr(:) - y(:)) \u003c 1e-10 );\r\n%% test 5 1x1 matrix\r\nx = 5;\r\ny = block_dct2(x, 1, 1);\r\nassert( abs(y - 5) \u003c 1e-10 );","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6084,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-02T11:19:28.000Z","updated_at":"2012-09-02T15:46:33.000Z","published_at":"2012-09-02T15:27:38.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTwo dimensional block-based discrete cosine transform\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-II\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e(DCT-II)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a widely used spatio-frequency image representation for image and video compression.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf we use same-size blocks we can group coefficients into frequency bands.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example, consider a following 8x8 image:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    1 1 1 1 0 0 0 0\\n    1 1 1 1 0 0 0 0\\n    1 1 1 1 0 0 0 0\\n    1 1 1 1 0 0 0 0\\n    0 0 0 0 1 1 1 1\\n    0 0 0 0 1 1 1 1\\n    0 0 0 0 1 1 1 1\\n    0 0 0 0 1 1 1 1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf we split it into four 4x4 blocks we have DCTs of zero-blocks equal to zero-blocks and:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ dct2([ 1 1 1 1\\n        1 1 1 1\\n        1 1 1 1 \\n        1 1 1 1]) =\\n  4 0 0 0\\n  0 0 0 0\\n  0 0 0 0\\n  0 0 0 0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewith the only non-zero element representing DC component and zeros representing AC components. We want to rearrange coefficients so corresponding components from different blocks are grouped together.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe result will be:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    4 0 0 0 0 0 0 0\\n    0 4 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0\\n    0 0 0 0 0 0 0 0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor a grayscale image (matrix) of size NxM and block size nxm (it is guaranteed that an image can be divided into blocks of this size) return NxM matrix grouped by frequencies (with DC components inside N/n x M/m block in the most top-left corner).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"dct\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"dct\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"dct\"","","\"","dct","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f4a00763f30\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f4a00763cb0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f4a007630d0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f4a00764250\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f4a007641b0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f4a00764070\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f4a00763fd0\u003e":"tag:\"dct\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f4a00763fd0\u003e":"tag:\"dct\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"dct\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"dct\"","","\"","dct","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f4a00763f30\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f4a00763cb0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f4a007630d0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f4a00764250\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f4a007641b0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f4a00764070\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f4a00763fd0\u003e":"tag:\"dct\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f4a00763fd0\u003e":"tag:\"dct\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":930,"difficulty_rating":"easy-medium"},{"id":929,"difficulty_rating":"medium"}]}}