コードと同じ長さのLorem ipsumを出力します!
ルール:
- コードを出力と同一にすることはできません
- 圧縮ライブラリなし
- 2週間で最短のプログラムが勝つ
- 簡単に(と任意のコードゴルフ問題を解決することができませいずれかでネットワークの使用状況、ファイルの読み込みはなく、他のトリック
eval
、exec
など)
例
Your code with length 25.
出力
Lorem ipsum dolor sit ame
コードと同じ長さのLorem ipsumを出力します!
ルール:
eval
、exec
など)例
Your code with length 25.
出力
Lorem ipsum dolor sit ame
回答:
ルールには非常に小さなあいまいさがあります。「出力」とは正確には何を意味するのでしょうか?多くのプログラムは、プログラムの「出力」に最終改行が含まれないと想定しています。これは、シェル入力の次の行が別の行で始まるようにするためのものです。
00000000 27 80 38 6e df 07 55 f7 a7 8f c0 42 9d dc 1e e7 |'.8n..U....B....|
00000010 7d 48 9a 88 79 03 92 c1 fb ed 8a af 51 92 52 24 |}H..y.......Q.R$|
00000020 2c b7 0b 17 d4 eb dc b0 d8 ce 8c 82 0f 94 0d 18 |,...............|
00000030 42 71 58 8a dd e6 b9 70 9b 48 74 f5 f0 70 c2 bb |BqX....p.Ht..p..|
00000040 e0 5b 1d e1 f2 a7 29 3e 87 b4 f0 4d 3a 22 5c 71 |.[....)>...M:"\q|
00000050 55 3d d1 fd 77 12 e2 52 73 24 89 00 9b c3 e5 47 |U=..w..Rs$.....G|
00000060 0c b4 17 1a 27 32 35 36 62 61 73 65 20 39 30 62 |....'256base 90b|
00000070 61 73 65 7b 33 32 2b 7d 25 2b |ase{32+}%+|
0000007a
122バイトで、122バイトのlorum ipsumと末尾の改行を出力します。
00000000 27 75 24 b6 ac 4e 36 10 aa 62 7f 2b 35 67 cc ee |'u$..N6..b.+5g..|
00000010 c2 fa d4 9a 7a 54 96 e9 f0 0b 38 58 63 79 97 f8 |....zT....8Xcy..|
00000020 d5 7e 8a bc 4e e6 9b ee 88 ed f0 87 b5 9e 78 8c |.~..N.........x.|
00000030 ff 4e ac 59 49 d5 71 f1 94 51 f5 4e 6a 58 57 24 |.N.YI.q..Q.NjXW$|
00000040 f6 4a 07 40 d6 06 bb a3 34 55 8d 83 aa ce d4 41 |.J.@....4U.....A|
00000050 46 04 26 c7 ef e2 f7 00 a2 61 a9 d2 40 8c 00 d9 |F.&......a..@...|
00000060 78 9a a7 53 d6 ea 85 16 23 fd c6 2c 8d a6 cb 09 |x..S....#..,....|
00000070 0a 27 32 35 36 62 61 73 65 20 39 30 62 61 73 65 |.'256base 90base|
00000080 7b 33 32 2b 7d 25 2b 3a 6e 3b |{32+}%+:n;|
0000008a
138バイトであり、末尾の改行なしで138バイトのlorum ipsumを生成します。
私は以前誰もこれを思いついていなかったことに驚いています:)
Y
ボーナスとして、非常にシンプルなperlソリューション
s//LoremIpsumDolorSitAmet,ConsectetuerAdipiscingElit,SedDiamNonummyNibhEuismodTinciduntUtLaoreetDoloreMagnaAliquamEratVolutpat. UtWisiEnimAdMinimVeniam,QuisNostrudExerciTationUllamcorperSuscipitLobortisNislUtAliquipExE/;s,([^ ])([A-Z]),$1$"\l$2,g;print
...ExerciTationU/;s,\S\K[A-Z], \l$&,g;print
print'LoremIpsumDolor...NostrudExerciT'=~s,\S\K[A-Z], \l$&,gr
very simple perl solution
。
編集:Pythonソリューションはそれ自体とは異なる長さを出力するため、golfscriptでより良いものを作成しました。これは私の最初のゴルフスクリプトの回答でもあります。
[' ,.LUabcdeghilmnopqrstuvwy''zä{~4ú›Úˆ2©JfÖØélq¤öäpDÎ;bÐô(;ÆXÔZo´dZ]e§B¥×ûba(šX†Cf½ÇUÃ0~3i‰d<Ú{¡º¯ŠÛ„å4B9W}˜$ûã–'{1-}%255base{.26%@.@=\@26/.}do;;]''+
ここでどのようにエンコードされているのかわかりませんので、ここにファイルへのリンクがあります。
print''.join([x,'tmoi eiidoqa ua lde rsernponutsatmnci '[ord(x)%21::21]]['.'<x<'D']for x in'LAe@1su@2lA6i?9et,;3sectetu/7d1Bc0gC<t,6e=di9:3ummy:ibhCuBmo=t0cidun?8 laAee?2lA>magna7<49Cr5 vol8p5. U?wBiCni@a=m0i@veni9, 4B:ostru=ex/ci t5i3 ull9cAp/6usc1i?lobAtB:Bl 87<41CxCa;ommo2;3se45. DuB78e@velCu@iriur>2lA 0 hendr/i?0 vulp85>')
誰かが気にするなら、ここに改善の部分的なリストがあります:
1181-> 630-> 549-> 510-> 456-> 416-> 381-> 332
視覚的に同一の出力が許容されると仮定します。したがって、ASCII "i"の代わりにこの文字を使用すると、2つのシンボルが正しい順序で自動的にソートされます。
іp*Lorem
Lorem іp
実際の「圧縮ライブラリ」の使用は禁止されているため、base64
代わりにcoreutilsを悪用します。(xxd -r
提出をデコードするため)
0000000: 7461 696c 202d 3120 2430 7c62 6173 6536 tail -1 $0|base6
0000010: 3420 2d77 307c 7472 2058 595a 205c 202c 4 -w0|tr XYZ \ ,
0000020: 2e0a 6578 6974 0a2e 8ade 9978 a9b2 e997 ..exit.....x....
0000030: 7689 68ad 7b22 b576 a67a d617 7289 ec79 v.h.{".v.z..r..y
0000040: cb5e b6e7 ab5d a762 a62b 1c8a 7817 7a58 .^...].b.+..x.zX
0000050: ad61 7b1e 7577 626a 65e7 a27b a69b 25e7 .a{.uwbje..{..%.
0000060: 89b8 577a e8ac 9a87 57b6 29dc 89db a7b5 ..Wz....W.).....
0000070: 7bad 5e56 a8ad e7ad 5dda 25a2 b797 99a8 {.^V....].%.....
0000080: 2769 76a5 8aab 9a99 77ab 6ad5 efa2 5bad 'iv.....w.j...[.
0000090: a5ab 595d 4b57 c22b 225d e9e2 ..Y]KW.+"]..
このPHPプログラムを使用して上記のコードを生成しました。
<?php
$lorem = '<text here>';
$enclorem = base64_decode( strtr( $lorem, ' ,.', 'XYZ' ) );
$prog = "tail -\$3 \$0|base64 -w0|tr XYZ \\ ,.\nexit\n$1";
for ( $i = 0, $n = strlen( $lorem ); $i < $n; $i++ ) {
$cutlorem = substr( $lorem, 0, $i );
for ( $j = 0, $o = strlen( $enclorem ); $j < $o; $j++ ) {
$cutenclorem = substr( $enclorem, 0, $j );
if ( substr( strtr( base64_encode( $cutenclorem ), 'XYZ', ' ,.' ), 0, $i ) === $cutlorem ) {
break;
}
}
$out = strtr( $prog, array(
'$1' => $cutenclorem,
'$2' => $i,
'$3' => substr_count( $cutenclorem, "\n" ) + 1,
) );
echo "\$i=$i strlen(\$out)=" . strlen( $out ) . "\n";
if ( $i === strlen( $out ) ) {
break;
}
}
echo "\nHexdump:\n";
$p = popen( 'xxd', 'w' );
fwrite( $p, $out );
pclose( $p );
echo "\nFinal output check: ";
$tmp = tmpfile();
fwrite( $tmp, $out );
$md = stream_get_meta_data( $tmp );
ob_start();
passthru( 'bash ' . escapeshellarg( $md['uri'] ) );
$buf = rtrim( ob_get_clean() );
echo $buf === substr( $lorem, 0, strlen( $out ) ) ? 'PASS' : 'FAIL', "\n$buf\n";
cat $0
。
これがフェアプレーかどうかはわかりません。Mathematicaのサンプルデータには、Lorem ipsumの「フル」テキストが含まれています。以下は、MathematicaにLorem Ipsumの組み込み例から特定の長さの文字列を取得するように単に指示します。
編集:
e=ExampleData;e[e["Text"][[19]]]~StringTake~46
オリジナル:
ExampleData@{"Text","LoremIpsum"}~StringTake~47
「Lorem ipsum dolor sit amet、consectetuer adipis」
<?=substr(file_get_contents('http://bit.ly/15KKxqh'),0,filesize(__FILE__));
出力例:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttito
圧縮を使用しませんが、ルールを曲げます。たくさん。
ガベージ文字を例の最後に追加しても、正しい出力(最大2k +文字)を保持できます。
<?=substr(file_get_contents('http://bit.ly/15KKxqh'),0,59);
上記と同じですが、固定サイズを使用し、余分な文字が追加されると不正確になります。
Windows XPおよびWindows 7でテストしましたが、拡張子(IIRC、Windows NT以降)を使用したすべてのコマンドで動作するはずです。
CMD /V:ON /C batchfile
遅延変数の拡張を有効にするために実行する必要がありますがSETLOCAL EnableDelayedExpansion
、バッチファイル内でcodegolfに対応していない方が好きです。
@ECHO OFF
SET A=Lore2ipsu21 si0amet,6ctetu7 adip3cing4lit, sed dia2nonummy nibh4u3mod tincidun0u0laoree018magna aliqua27a0volutpat. U0w3i4ni2ad mini2veniam, qu3 nostrud4x7ci tation ullamcorp7 suscipi0lobort3 n3l u0aliquip4x4a commodo6quat. Du3 aute2vel4u2iriur81 in hendr7i0in vulputat8veli0ess8molestie6quat, vel illu21e4u feugia53 a0v7o4ros40accumsan40iusto odio dign3si2qui blandi0praesen0luptatu2zzril deleni0augu8du3 18t8feugai5i. Na2lib7 tempor cu2soluta nob34leifend option congu8nihil imp7die0doming id quod mazi2plac7a0fac7 possi2assum. Typi non haben0claritate2insitam;4s0usus legent3
FOR %%I IN ("8=e ","7=er","6= conse","5=0nulla facil3","4= e","3=is","2=m ","1=dolor","0=t ") do SET "A=!A:%%~I!"
ECHO %A%
出力を測定できるように適切なスクリプトにする必要がなかったら、128だったでしょう。
exit[stdout'utsrponmligfedcbaVLI., '{~#._5>\,#:a.i.'�F��$f����`kg�c������$NI�f!!��`�L�:����l���5l�0A����Fـ���T�X ��@g�I�`��'
仕組み:テキストには23個の一意の文字しかないため、5バイトのエンコードで表現できます。エンコードされた文字列の文字はASCII番号(a.i.
)に変換され、各番号はベース2表現に変換され(#:
)、ビットは5つのグループにグループ化され(_5>\,
)、これらの各グループが変換されます値(#.
)に変換され、これらはルックアップテーブルへのインデックスとして使用されます。({~
)。
J文字列リテラルには\n
、\r
またはを含めることができないため、ルックアップテーブルには実際に多少の調整が必要でした\0
。
Hexdump:
0000000:7865 7469 735b 6474 756f 2774 7475 7273 0000010:6f70 6d6e 696c 6667 6465 6263 5661 494c 0000020:2c2e 2720 7e7b 2e23 355f 5c3e 232c 613a 0000030:692e 272e 4691 d9c3 1024 660f 0595 841d 0000040:da90 6007 676b c214 8263 81c0 b483 921a 0000050:4e24 9549 2166 a521 60a6 4cb1 8c1d 3a03 0000060:02d0 ca80 6cd9 9302 d800 35c5 c56c 4130 0000070:ac80 d600 00c3 0346 80d9 88ad 8001 b454 0000080:2058 e0a5 0f40 1467 49cd 60d8 e080 0a27
('VLI., ',97}.a.)
、何らかの方法で他のリテラルを台無しにしないでください。