t(*a,*b,c){char*z="VP\225TBUIUVAaUZ@AWVDeTf@EVWhU😎EQV😀RTYT😉UU";for(size_t*p,f,n,y,i;c--;b++){f=1<<(8-*b)/3;p=z+*b++*8+*b++%f*2;f=n=*p;for(y=i=0;i<=f%4;y=fmax(y,a[*b+i++]+n%4))n/=4;for(;i--;a[*b+i]=y+n%4)n/=4;}}
オンラインでお試しください!
ps実際には、UTF-8でコード化されたUNICODE文字のため、コードサイズは221バイト(ただし212文字)です。しかし、tio.runはそれを212バイトのコードとして扱います...
コンピューターのコードサイズは209文字(218バイト)です。しかし、私はtio.runで\225
目に見えるcharに置き換えることができませんでした 😞
未ゴルフコード
// a - output array (must be zeroed), b - array of block info, c - number of blocks
// Figure codes: 2->0, 3->1, 6->2, 1->3, 5->4, 7->5, 4->6 (0,1 are L-figures, 2 is is T-figure, 3 is a line 1x4; 4,5 are zigzags; 6 is a cube 2x2)
// Vertical and horizontal positions are zero-indexed, angles = 0..3
t(*a,*b,c)
{
char*z="VP\225TBUIUVAaUZ@AWVDeTf@EVWhU😎EQV😀RTYT😉UU"; // UTF-8
//char*z="VP\225TBUIUVAaUZ@AWVDeTf@EVW\1hU😎\26EQV😀RTYT😉UU"; // 3 bytes longer (use it if you can't copy previous string correctly) :)
// Blocks
for(size_t*p,f,n,y,i;c--;b++){
f=1<<(8-*b)/3; // number of figure variants
p=z+*b++*8+*b++%f*2;
// Get top base line position (y)
f=n=*p; // figure width, TBLs and HATs
for(y=i=0;i<=f%4;
y=fmax(y,a[*b+i++]+n%4))
n/=4;
// Add heights (HATs)
for(;i--;
a[*b+i]=y+n%4)
n/=4;
}
} // 215 chars (224 bytes)
説明
各図の一番上のベースライン(TBL)を見つけて、それを各水平位置のTBLの下のセルの数として説明しましょう。また、TBL(HAT)上のセルの数(高さ)を説明しましょう。
例えば:
________ ________
_ [] _____ HAT = 1,0,0 [] [] [] HAT = 0,0,0 ___ [] [] _ HAT = 0,1,1 [] [] [] HAT = 0,0,0
[] [] [] TBL = 1,1,1 [] TBL = 2,1,1 [] [] TBL = 1,1,0 [] TBL = 1,2,1
各図と各回転角度のTBLとHATを説明しましょう。
幅TBL HAT
----- ------- -------
L字:
3 1 1 1 1 0 0 // 0°
2 1 1 0 2 // 90°
3 1 1 2 0 0 0 // 180°
2 3 1 0 0 // 270°
3 1 1 1 0 0 1 // 0°
2 1 3 0 0 // 90°
3 2 1 1 0 0 0 // 180°
2 1 1 2 0 // 270°
T字形:
3 1 1 1 0 1 0 // 0°
2 1 2 0 1 // 90°
3 1 2 1 0 0 0 // 180°
2 2 1 1 0 // 270°
ライン:
4 1 1 1 1 0 0 0 0 // 0°、180°
1 4 0 // 90°、270°
ジグザグ:
3 1 1 0 0 1 1 // 0°、180°
2 1 2 1 0 // 90°、270°
3 0 1 1 1 1 0 // 0°、180°
2 2 1 0 1 // 90°、270°
キューブ:
2 2 2 0 0 //任意の角度
(交換今は2ビットのシーケンスとしてこれらの番号を符号化し、アレイに入れなければならない4 0
ことで3 1
- ; 1と減少幅と同じになる結果の2ビットに収まるように、「ライン」の90°の角度のために)。
幅(2 LSB 単位)、TBL、HAT(逆方向ループの逆方向)の順にエンコードします。たとえば2 2 1 1 0
、T字の角度が270°の場合、1 0 1 2 1
(最後の1はwidth-1)としてエンコードされます0b0100011001 = 281
。
12.02更新:
a)配列を文字列に変換して18文字を保存しました(以前の239バイトのコードを見ることができます):))
b)より最適化され、コードは9文字縮小されます。
これは私の最後の試みです(そうだと思います、笑!) 😀
I
、R
そしてP
異なる順序で入力することが?