태그 보관물: kolmogorov-complexity

kolmogorov-complexity

최소한의 문자로“Lorem ipsum”출력 dolore magna aliqua. Ut enim ad minim

사람들은 코드 크기가 문자가 아닌 바이트 단위로 측정되어야한다고 말하는 것을 기억합니다. 시각적 의미가없는 이상한 유니 코드 문자로 정보를 저장할 수 있기 때문입니다.

얼마나 나쁠 수 있습니까?

이 과제에서는 Wikipedia 에서 가져온 다음 Lorem Ipsum 텍스트를 출력해야합니다 .

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

의 수를 지정하십시오 문자를 코드에서 (안 바이트). 문자 수가 최소 인 코드가 승리합니다.

여기 에 설명 된대로 코드에는 유효한 유니 코드 문자 만 포함되어야합니다 .

  • U + 10FFFF까지 코드 포인트
  • 서로 게이트 없음 (D800-DBFF 범위 금지)
  • 문자 없음 FFFE 및 FFFF
  • 널 문자 없음 (코드 0)

코드를 표시 할 수 없으면 문제가있는 문자가 수정 된 버전과 16 진 덤프를 제공하십시오.

몇 가지 참고 사항 :

  • 출력은 하나의 긴 행 (445 자)이어야합니다. 시스템에서이를 수행 할 수없는 경우 (예 : 종이에 인쇄하는 경우) 가장 가까운 근사값을 출력하십시오. 후행 줄 바꿈은 중요하지 않습니다.
  • Lorem Ipsum 텍스트를 생성하는 내장 함수는 허용되지 않습니다
  • 해당되는 경우 코드에 유효한 텍스트 인코딩을 지정하십시오


답변

Dyalog APL , 123 자

마지막 기간을 제외한 모든 문자는 111 개의 32 비트 문자 (UTF-32)로 압축됩니다.

'.',⍨80DR'𦽌򒁭󗕳󆽤𲁲𒁴󇑥󦽣񆍥𧕴򖑡𷍩􆝮񆥬񗌠󶐠񖥥񆽭󖕴􇉯򖍮񖑩񒁴𖰠񗉯􇑥󶱯󒁥𖹧򖱡󦅵􇑕󖥮􆑡򖹩񗘠󖅩񗄠󢁳𧑳񒁤𷉥񆅴􆹯𖱬􆽣󶉡􇍩򗍩􇑵𖥬􇁩񒁸󶌠񆽭󶌠𖕳󧑡򗕄񖄠򒁥񗉵󆽤򒁲񗈠򆕲񖑮􇑩񢁮􇕬񗑡󆕶񒁴􆕳󆱩񂁭𦽬񖔠񷕦􇑡󆱵𗀠񆅩􂹲񖍸񖕴򗌠󲁴񖅣􇑡򗁵𗑡󶸠𧀠񖑩􂱴񆹵􆹩􆱵񗄠񦼠򖍩񖐠񗉥󒁴򖱬󦄠򒁭𶔠𖰠񗉯'

'.',⍨ 추가 된 기간

80⎕DR8 비트 ( 8) 문자 ( 0) D ATA R 의 epresentation

''111 개 유니 코드 문자 U + 26F4C 9206D D7573 C6F64 32,072 12,074 C7465 E6F63 46365 27574 96461 37369 10676E 4696C 57,320 F6420 56,965 46F6D D6574 10726F 9636E 56469 52074 16C20 5726F 107465 F6C6F의 D2065 16E67 96C61 E6175 107455 D696E 106461 96E69 57,620 D6169 57120 E2073 27473 52064 37265 46,174 106E6F 16C6C 106F63 F6261 107,369 97,369 107,475 1696C 107,069 52,078 F6320 46F6D F6320 16,573 E7461 97,544 56,120 92,065 57,275 C6F64 92,072 57,220 86,572 5646E 107,469 6206E 10756C 57,461 C6576 52,074 106,573 C6C69 4206D 26F6C 56,520 77,566 107,461 C6C75 17,020 46,169 102E72 56,378 56,574 97,320 F2074 56,163 107,461 97,075 17,461 F6E20 27020 56469 102C74 46E75 106E69 106C75 57120 66F20 96369 56420 57265 D2074 96C6C E6120 9206D 36520 16C20 5726F이 범위는 12074-10756C 범위에 있으며 OP의 모든 허용 범위 10000-10FFFF 내에 있습니다.


답변

자바 스크립트 (ES7), 326 개 283 273 249 243 242 문자

_=>"򾍮󂙙󱤭󕜛񟉝񚫎󸦘󏇌󻮾󪕍򦙜񴫰𭙝𧇍񛜃򧮖󓔽򅬸󪙗񴦲񿫽񟮩򺥸󫡽񛜕󖷉󂨗񢕕򦯊񗮣󌫉񣔶򥹖񟷗򢫂󧩜񝼜󾿍񙇛񴮪󼬗񟪵񥦘񝕋󖹜񝹜򢟝񚪲󧩙񙁪񛌖󆆸񛌗󳭞񧔍􄮉񧮮񜭾󫤭󕜛񜫩󫬻򄗗񻭲󺙗񟼕􆞪󻤿򅙝𯎎񛉕򹤭󕜛򀿉򏨒񧔷􅚪񞕛򢮾󪂌򆞮􆴼򥾩󓆊򃅝񛏙򣕝񧔷󕴹󮉍򅾢󷫽񜫩񷪹񢝞򢜏򌦒񢖮󳭾󏔶󕚲󺕗򥤲񸾝񝕋󖿇"[r='replace'](/./gu,c=>(c.codePointAt()-4**8).toString(32))[r](/\d/g,d=>"  , exum. ".substr(d,2))[r](/^.|\. ./g,x=>x.toUpperCase())

작동 원리

압축 기술의 첫 번째 단계는 전체 문자열을 소문자로 변환하고 (필수적이지는 않지만 더 좋아 보입니다), 각 문자 쌍 , exum. (후행 공백 자체)을 문자열의 색인 + 2로 바꾸는 것 입니다. 이것은 텍스트를 유효한 base-32 숫자로 만듭니다 :

lorem9ips69dolor9sit9amet2consectetur9adipiscing3lit2sed9do3iusmod9tempor9incididunt9ut9labore3t9dolore9magna9aliqua8ut3nim9ad9minim9veniam2quis9nostrud94ercitation9ullamco9laboris9nisi9ut9aliquip943a9commodo9consequat8duis9aute9irure9dolor9in9reprehenderit9in9voluptate9velit3sse9cill69dolore3u9fugiat9nulla9pariatur84cepteur9sint9occaecat9cupidatat9non9proident2sunt9in9culpa9qui9officia9deserunt9mollit9anim9id3st9laboru7

다음 단계는 각 4 문자 실행을 10 진수로 변환 한 다음 해당 코드 포인트에서 문자를 얻는 것입니다. 이것은 다음 기능으로 수행 할 수 있습니다.

f=s=>s.replace(/..../g,x=>(n=parseInt(x,32),String.fromCharCode(0xD800+(n>>10),0xDC00+(n&0x03FF))))

( 참고 : 모든 자릿수가 2 이상이므로 가능한 최소 네 자릿수 값은 2222 This입니다.이 값은 95978₁₀ 또는 176EA₁₆이므로 코드 포인트는 제한 범위 내에 있지 않습니다.)

이제 압축 된 문자열이 있습니다 :

򾍮󂙙󱤭󕜛񟉝񚫎󸦘󏇌󻮾󪕍򦙜񴫰𭙝𧇍񛜃򧮖󓔽򅬸󪙗񴦲񿫽񟮩򺥸󫡽񛜕󖷉󂨗񢕕򦯊񗮣󌫉񣔶򥹖񟷗򢫂󧩜񝼜󾿍񙇛񴮪󼬗񟪵񥦘񝕋󖹜񝹜򢟝񚪲󧩙񙁪񛌖󆆸񛌗󳭞񧔍􄮉񧮮񜭾󫤭󕜛񜫩󫬻򄗗񻭲󺙗񟼕􆞪󻤿򅙝𯎎񛉕򹤭󕜛򀿉򏨒񧔷􅚪񞕛򢮾󪂌򆞮􆴼򥾩󓆊򃅝񛏙򣕝񧔷󕴹󮉍򅾢󷫽񜫩񷪹񢝞򢜏򌦒񢖮󳭾󏔶󕚲󺕗򥤲񸾝񝕋󖿇

106 개의 문자로 압축 된 445 개의 문자입니다. 압축 해제는 단순히이 과정을 반대로 바꿉니다.

  1. 각 문자를 base-32에서 65536을 뺀 코드 포인트로 변환하십시오.
  2. 각 숫자를 n로 바꿉니다 " , exum. ".substr(n,2).
  3. 마침표 뒤 또는 문자열 시작 부분에서 각 문자를 대문자로 변환하십시오.

사용되는 유일한 ES7 기능은 **입니다. 교체 4**865536아직 ES7를 지원하지 않는 브라우저에서 실행합니다.


답변

자바 스크립트 (ES6), 261 255 254 자

ETH 프로덕션 덕분에 1 바이트 절약

_=>'L'+"⫒㠰拳␰䨒堵̎⨦W䙨ⅶ嵷˘㥆姳䗨⠬巯堡Ŋɩ懪䨶尩个˒≎㥎䜩怷㰷䤆ŵ̊㹩⫒ᨠᩌ㳠抮f̅㩊ᠰ䀩㩎搰㩊ئ抠ˮ婱拗⠩啺巨㬆ɒ㸘∦㰲䤆姵㩀Ƕ̘㨆㬴⠳⠺…䈲䥒䤠⫱᬴w㬣ᠶ⬘嗠⫘䥀噯䗠⫀⫓䕭啩̎Ɏ㹹庘⬆⭀巯奠Ŷ㷨䌯䥀噯⠪ⰸ㦸̆㼱ï哳峮૘梠䵨慷堵幎≠⣨峨愠◳ᬆ䐷ɒ䫓⥎ܑ拠̑Ɏ㼨ó㬴⹠⇫î奩拊̑㹰巯䓠ȮŎ廪ᨀ噧ਸ".replace(/./g,c=>(s=" ,.DEUabcdefghilmnopqrstuvx")[(c=c.charCodeAt()-32)&31]+s[c>>5&31]+s[c>>10])

고장

페이로드 : 148 개의 유니 코드 문자
코드 : 107 바이트

작동 원리

먼저 'L'원본 메시지에서 행간 을 제거하여 444 = 148 * 3 자로 남겨 둡니다.

Leading이 없으면 'L'문자 세트는 27 개의 다음 문자로 구성됩니다.

" ,.DEUabcdefghilmnopqrstuvx"

3 개의 문자로 구성된 각 그룹은 다음과 같이 인코딩됩니다.

n = 32 + a + b * 32 + c * 32^2

여기서 a, b 및 c는 위의 문자 집합에있는 문자의 인덱스입니다.

이로 인해 “CJK Unified Ideographs”어딘가로 끝나는 U + 0020 ~ U + 801F 범위의 유니 코드 코드 포인트가 생성됩니다.

let f =
_=>'L'+"⫒㠰拳␰䨒堵̎⨦W䙨ⅶ嵷˘㥆姳䗨⠬巯堡Ŋɩ懪䨶尩个˒≎㥎䜩怷㰷䤆ŵ̊㹩⫒ᨠᩌ㳠抮f̅㩊ᠰ䀩㩎搰㩊ئ抠ˮ婱拗⠩啺巨㬆ɒ㸘∦㰲䤆姵㩀Ƕ̘㨆㬴⠳⠺…䈲䥒䤠⫱᬴w㬣ᠶ⬘嗠⫘䥀噯䗠⫀⫓䕭啩̎Ɏ㹹庘⬆⭀巯奠Ŷ㷨䌯䥀噯⠪ⰸ㦸̆㼱ï哳峮૘梠䵨慷堵幎≠⣨峨愠◳ᬆ䐷ɒ䫓⥎ܑ拠̑Ɏ㼨ó㬴⹠⇫î奩拊̑㹰巯䓠ȮŎ廪ᨀ噧ਸ".replace(/./g,c=>(s=" ,.DEUabcdefghilmnopqrstuvx")[(c=c.charCodeAt()-32)&31]+s[c>>5&31]+s[c>>10])


console.log(f())

답변

bash + coreutils + gzip + recode, 191 자

echo -ne "ᾋࠀ㰟퍗\03㖐셱䌱ࡄ戋⪒宮⦀⃬〣ख़ʏ쬏湂삲מּ浊莎ᔍ얪䴬畐Ꮏ肭⽡តप㩴뇶ᮤ樶鞔岀梬昅⹭盖ꈥ먣Ვ빓ỢꞴꃑ괓꣪㷨삗䎺뛔䛓ﵸ摉篨䊷૤⦓헉픺ꉖ橬ꟲỒꗻ퉋則ใ⢍럴摧耼񸺷⒅୴䘺㦳櫇鐱窑駁愵䚞鎴鍉Ⅻक़毽➔脂ힸ⤹喝葁㎋頇㺞ⳃ┶왤惌⒜猜䌋吏젔掚ᛩ鯢⚕䜹鴛皽⨫ꇈ銹믍䄛逦軵융󌒣杻龇븁\0"|recode u8..utf16be|tr -d ٣ܣ|gunzip

문자열은 UTF-16BE로 해석되는 텍스트의 gzip과 짝을 이루지 않은 서로 게이트 반쪽과 쌍을 이루기위한 추가 바이트입니다. tr은 여분의 대리 절반을 제거합니다.

이 스크립트 파일 (또는이 명령이 입력 된 쉘)은 텍스트를 UTF-8로 해석해야하므로 레코딩이 필요합니다.


답변

05AB1E , 319 바이트

CP-1252 인코딩을 사용합니다.

•9y†QHÚSe²ŒÓdéÓ#ǧÖN›Íˆž4GÏóREØån‡·JîÁØ£ÎÁ¥evÑRZ¶—¥1RËÒÆzçå"UNé¨v¯ÊcŒÔÝjðtrœÛeã&“SÁxÌ4Þá1N$ù?T(çÛbŸœfó˜lUž}Þß-©ÃMšBÈÑPàê#jÇÐ+n¼BDFý>–¸äFT×›qÜY³ö9ªòËùˆA‡¾p=‘¤ÚÞ{I¶Œ±Ål#¨5´Aq˜Àž,s<*Ï;‡õã¾»ðŽL´ÅuØö+Xi+S>»/8Kã~WΔƒß”¤µðWluØa'cUÐeà¥ä…ž+œ6*0RU£›aÝQ_ñœoþÏð””Þã7ã¨sŒV`_É-´éÄèÆd¦úE5Í^Aá,‘‡™™¢äTHä0¥3±.}Søg•36B0„. :™J'yð:'z',:'.«

다음 문자열을 밑이 36 인 숫자로 해석하고 밑이 214로 인코딩

LOREMYIPSUMYDOLORYSITYAMETZYCONSECTETURYADIPISCINGYELITZYSEDYDOYEIUSMODYTEMPORYINCIDIDUNTYUTYLABOREYETYDOLOREYMAGNAYALIQUA0UTYENIMYADYMINIMYVENIAMZYQUISYNOSTRUDYEXERCITATIONYULLAMCOYLABORISYNISIYUTYALIQUIPYEXYEAYCOMMODOYCONSEQUAT0DUISYAUTEYIRUREYDOLORYINYREPREHENDERITYINYVOLUPTATEYVELITYESSEYCILLUMYDOLOREYEUYFUGIATYNULLAYPARIATUR0EXCEPTEURYSINTYOCCAECATYCUPIDATATYNONYPROIDENTZYSUNTYINYCULPAYQUIYOFFICIAYDESERUNTYMOLLITYANIMYIDYESTYLABORUM

그 후 우리는

36B                      # encode back into base 36
   0„. :                 # replace 0 with ". "
        ™J               # convert to titlecase and join
          'yð:           # replace "y" with <space>
              'z',:      # replace "z" with ","
                   '.«   # add a "." at the end

어떤 이유로 인코딩이 마지막에 0으로 작동하지 않았으므로 최종 “.”에 특별한 경우가 필요합니다.

온라인으로 사용해보십시오!


답변

PHP, 247 자

이전 2 가지 버전의 조합

echo gzuncompress(base64_decode(mb_convert_encoding("敊眱歍䙸兺䕉剆癚䅪礯極南慷潧楏㡷䥷汚䅯⽌䐸灐扫䱁獶猫扅煄橨啎硡灎䱈噑䔷⭂牓㥨䘴㡊䭪瀰獦夷灇漲氵剣杇楳婧啵扥卹摴慩䩢潪䡊圫啨㝩氷卧ぢご煏潪㙍䍮儷焲ㅅ扔⽘桭卥㉇别桃琫啺䍵公欹塊ㅔ煩噭灳氯䥥ぱ堷ぱ⭫橨祇啂灶㙣浵䅈湋䐷硴卑潘㙉砰捭塖橩汪祲昰䥪佄㔸晔慯眸䨲歮欰䱗䕲䑗⭫㡯䅷塏畃猵⭪慅兔佌流晥塹穄䩔扇婇䑍䩊硺䡅䵌⭤㝉䙇佡䙵浢㑩慖剺湱潊ぢ摰㝋卩楹婏㕵猷灴ぁ慫楗倹捙ㄲ⽁䍧塋啊","UTF-16")));

PHP, 261 자

echo mb_convert_encoding("䱯牥洠楰獵洠摯汯爠獩琠慭整Ⱐ捯湳散瑥瑵爠慤楰楳捩湧⁥汩琬⁳敤⁤漠敩畳浯搠瑥浰潲⁩湣楤楤畮琠畴慢潲攠整⁤潬潲攠浡杮愠慬楱畡⸠啴⁥湩洠慤楮業⁶敮楡洬ⁱ畩猠湯獴牵搠數敲捩瑡瑩潮⁵汬慭捯慢潲楳楳椠畴⁡汩煵楰⁥砠敡⁣潭浯摯⁣潮獥煵慴⸠䑵楳⁡畴攠楲畲攠摯汯爠楮⁲数牥桥湤敲楴⁩渠癯汵灴慴攠癥汩琠敳獥⁣楬汵洠摯汯牥⁥甠晵杩慴畬污⁰慲楡瑵爮⁅硣数瑥畲⁳楮琠潣捡散慴⁣異楤慴慴潮⁰牯楤敮琬⁳畮琠楮⁣畬灡ⁱ畩晦楣楡⁤敳敲畮琠浯汬楴⁡湩洠楤⁥獴慢潲畭.","UTF-16");

인코딩 $ s는 문자열을 포함합니다

foreach(str_split(bin2hex($s),4)as $c)eval('echo"\u{'.$c.'}";');

구 버전 PHP, 386 바이트 | 문자

echo gzinflate(base64_decode("NZDBcUMxCERb2QI8v4rklmsKIIjvMCMJWQKPyw/KT25CwLL7PmxKg44VDcWqTSx1UBO/ga0vYRePCSo6dLH2O6RqNpeUXIBorGYFLm3ksnbWoiW6IxyVvlIe4pe0oNG9E6jqI+jAp0O6ttRG0/14ZknthkfoQrflMwrkJZPVydU6olZqbJfyHtKl+9KvpI4chlAab+nJrgB5yg+8bUkKF+iMdHJl1Y4pY8q39CIzg+fH02qMPCdpJ5NC1hKw1vpPKAMFzrgrOfo2hEEzi5gH3l8swyU2xmRgzCSccxxDC/neyBRjmhbpm+ImlUc56qCdG3aeykoosmTubrO6bdAGpIlj/XGNdvwA"));

답변

C #을, 337 333 331 자

_=>{var q="";foreach(var c in"潌敲彭灩畳彭潤潬彲楳彴浡瑥弬潣獮捥整畴彲摡灩獩楣杮敟楬ⱴ獟摥摟彯楥獵潭彤整灭牯楟据摩摩湵彴瑵江扡牯彥瑥摟汯牯彥慭湧彡污煩慵弮瑕敟楮彭摡浟湩浩癟湥慩Ɑ煟極彳潮瑳畲彤硥牥楣慴楴湯畟汬浡潣江扡牯獩湟獩彩瑵慟楬畱灩敟彸慥损浯潭潤损湯敳畱瑡弮畄獩慟瑵彥物牵彥潤潬彲湩牟灥敲敨摮牥瑩楟彮潶畬瑰瑡彥敶楬彴獥敳损汩畬彭潤潬敲敟彵畦楧瑡湟汵慬灟牡慩畴ⅲ䕟捸灥整牵獟湩彴捯慣捥瑡损灵摩瑡瑡湟湯灟潲摩湥ⱴ獟湵彴湩损汵慰煟極潟晦捩慩摟獥牥湵彴潭汬瑩慟楮彭摩敟瑳江扡牯浵ਡ")q=q+(char)(c&255)+(char)(c>>8);return q.Replace("!",".").Replace("_"," ");};

.“pariatur”및 “laborum”뒤에 있는 s를 !문자를 넓은 문자로 결합하고 후행 줄 바꿈을 추가하기 전에 -4자를 사용하십시오 .

출력 VAR를 재 – 할당하는 대신에 추가로 -2 문자 +=.

작동 방식 :

가 lorem ipsum의 문자열로 대체하여 그 혼란으로 전환 한 .!, 함께 _아스키 문자가 각각의 넓은 문자가 하나의 문자입니다 넓은 문자를 만들기 위해 서로 옆에 배치되도록합니다.

/*Func<object, string> Lorem = */ _=> // unused parameter
{
    // Output var
    var q = "";

    // Enumerate each wide char
    foreach (var c in "潌敲彭灩畳彭潤潬彲楳彴浡瑥弬潣獮捥整畴彲摡灩獩楣杮敟楬ⱴ獟摥摟彯楥獵潭彤整灭牯楟据摩摩湵彴瑵江扡牯彥瑥摟汯牯彥慭湧彡污煩慵弮瑕敟楮彭摡浟湩浩癟湥慩Ɑ煟極彳潮瑳畲彤硥牥楣慴楴湯畟汬浡潣江扡牯獩湟獩彩瑵慟楬畱灩敟彸慥损浯潭潤损湯敳畱瑡弮畄獩慟瑵彥物牵彥潤潬彲湩牟灥敲敨摮牥瑩楟彮潶畬瑰瑡彥敶楬彴獥敳损汩畬彭潤潬敲敟彵畦楧瑡湟汵慬灟牡慩畴ⅲ䕟捸灥整牵獟湩彴捯慣捥瑡损灵摩瑡瑡湟湯灟潲摩湥ⱴ獟湵彴湩损汵慰煟極潟晦捩慩摟獥牥湵彴潭汬瑩慟楮彭摩敟瑳江扡牯浵ਡ")
        // Split each wide char into two ascii chars
        q = q + (char)(c&255) + (char)(c>>8);

    // Restore the replaced periods and spaces
    return q.Replace("!",".").Replace("_"," ");
};