#ifndef BLIST_H
#define BLIST_H
#include <stdio.h>
typedef struct {
int BlockID; // 0, 1, ..., 9
int Direction; // 0, 1
} bSHAPE;
#define MAXLENGTH (100)
typedef struct {
int L;
int R;
bSHAPE elem[ MAXLENGTH] ; //要素を格納する配列
} bLIST;
#endif
void B_makeEmpty( bLIST * x) { // リストを初期化する
x-> L = x-> R = 0 ;
}
int B_isEmpty( bLIST * x) { // リストが空であれば1を,そうでなければ0を返す
return ( x-> L == x-> R) ;
}
int B_size( bLIST * x) { // リストの要素数を返す
return x-> R - x-> L;
}
int B_isFull( bLIST * x) { // リストが一杯であれば1を,そうでなければ0を返す
return ( B_size( x) == MAXLENGTH) ;
}
static int pos( int i) {
while ( i < 0 ) i += MAXLENGTH;
return i% MAXLENGTH;
}
void B_pushFront( bLIST * x, bSHAPE e) { // リストの先頭に要素eを追加する
int p = pos( -- x-> L) ;
x-> elem[ p] = e;
}
void B_pushBack( bLIST * x, bSHAPE e) { // リストの末尾に要素eを追加する
int p = pos( x-> R++ ) ;
x-> elem[ p] = e;
}
bSHAPE B_popFront( bLIST * x) { // リストの先頭から要素を取り出す
int p = pos( x-> L++ ) ;
return x-> elem[ p] ;
}
bSHAPE B_popBack( bLIST * x) { // リストの末尾から要素を取り出す
int p = pos( -- x-> R) ;
return x-> elem[ p] ;
}
bSHAPE B_retrieve( bLIST * x, int i) { // リストのi番目の要素を返す
int p = pos( x-> L+ i) ;
return x-> elem[ p] ;
}
void B_swap( bLIST * x, int i, int j) { // リストのi番目とj番目の要素を入れ替える
int p = pos( x-> L+ i) ;
int q = pos( x-> L+ j) ;
bSHAPE temp = x-> elem[ p] ;
x-> elem[ p] = x-> elem[ q] ;
x-> elem[ q] = temp;
}
void B_printList( bLIST * x) { // リストの内容をプリントする
for ( int i = 0 ; i < B_size( x) ; i++ ) {
bSHAPE e = B_retrieve( x, i) ;
printf ( "(%d,%d)" , e.
BlockID , e.
Direction ) ; }
}
I2lmbmRlZiBCTElTVF9ICiNkZWZpbmUgQkxJU1RfSAoKI2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdCB7CmludCBCbG9ja0lEOyAvLyAwLCAxLCAuLi4sIDkKaW50IERpcmVjdGlvbjsgLy8gMCwgMQp9IGJTSEFQRTsKCiNkZWZpbmUgTUFYTEVOR1RIICgxMDApCnR5cGVkZWYgc3RydWN0IHsKaW50IEw7CmludCBSOwpiU0hBUEUgZWxlbVtNQVhMRU5HVEhdOy8v6KaB57Sg44KS5qC857SN44GZ44KL6YWN5YiXCn0gYkxJU1Q7CgoKCiNlbmRpZgoKCnZvaWQgQl9tYWtlRW1wdHkoYkxJU1QgKngpIHsvLyDjg6rjgrnjg4jjgpLliJ3mnJ/ljJbjgZnjgosKeC0+TCA9IHgtPlIgPSAwOwp9CgppbnQgQl9pc0VtcHR5KGJMSVNUICp4KSB7Ly8g44Oq44K544OI44GM56m644Gn44GC44KM44GwMeOCku+8jOOBneOBhuOBp+OBquOBkeOCjOOBsDDjgpLov5TjgZkKcmV0dXJuICh4LT5MID09IHgtPlIpOwp9CgppbnQgQl9zaXplKGJMSVNUICp4KSB7Ly8g44Oq44K544OI44Gu6KaB57Sg5pWw44KS6L+U44GZCnJldHVybiB4LT5SIC0geC0+TDsKfQoKaW50IEJfaXNGdWxsKGJMSVNUICp4KSB7Ly8g44Oq44K544OI44GM5LiA5p2v44Gn44GC44KM44GwMeOCku+8jOOBneOBhuOBp+OBquOBkeOCjOOBsDDjgpLov5TjgZkKcmV0dXJuIChCX3NpemUoeCk9PU1BWExFTkdUSCk7Cn0KCnN0YXRpYyBpbnQgcG9zKGludCBpKSB7CndoaWxlIChpIDwgMCkgaSArPSBNQVhMRU5HVEg7CnJldHVybiBpJU1BWExFTkdUSDsKfQoKdm9pZCBCX3B1c2hGcm9udChiTElTVCAqeCwgYlNIQVBFIGUpIHsvLyDjg6rjgrnjg4jjga7lhYjpoK3jgavopoHntKBl44KS6L+95Yqg44GZ44KLCmludCBwID0gcG9zKC0teC0+TCk7CngtPmVsZW1bcF0gPSBlOwp9Cgp2b2lkIEJfcHVzaEJhY2soYkxJU1QgKngsIGJTSEFQRSBlKSB7Ly8g44Oq44K544OI44Gu5pyr5bC+44Gr6KaB57SgZeOCkui/veWKoOOBmeOCiwppbnQgcCA9IHBvcyh4LT5SKyspOwp4LT5lbGVtW3BdID0gZTsKfQoKYlNIQVBFIEJfcG9wRnJvbnQoYkxJU1QgKngpIHsvLyDjg6rjgrnjg4jjga7lhYjpoK3jgYvjgonopoHntKDjgpLlj5bjgorlh7rjgZkKaW50IHAgPSBwb3MoeC0+TCsrKTsKcmV0dXJuIHgtPmVsZW1bcF07Cn0KCmJTSEFQRSBCX3BvcEJhY2soYkxJU1QgKngpIHsvLyDjg6rjgrnjg4jjga7mnKvlsL7jgYvjgonopoHntKDjgpLlj5bjgorlh7rjgZkKaW50IHAgPSBwb3MoLS14LT5SKTsKcmV0dXJuIHgtPmVsZW1bcF07Cn0KCmJTSEFQRSBCX3JldHJpZXZlKGJMSVNUICp4LCBpbnQgaSkgey8vIOODquOCueODiOOBrmnnlarnm67jga7opoHntKDjgpLov5TjgZkKaW50IHAgPSBwb3MoeC0+TCtpKTsKcmV0dXJuIHgtPmVsZW1bcF07Cn0KCnZvaWQgQl9zd2FwKGJMSVNUICp4LCBpbnQgaSwgaW50IGopIHsvLyDjg6rjgrnjg4jjga5p55Wq55uu44GoaueVquebruOBruimgee0oOOCkuWFpeOCjOabv+OBiOOCiwppbnQgcCA9IHBvcyh4LT5MK2kpOwppbnQgcSA9IHBvcyh4LT5MK2opOwpiU0hBUEUgdGVtcCA9IHgtPmVsZW1bcF07CngtPmVsZW1bcF0gPSB4LT5lbGVtW3FdOwp4LT5lbGVtW3FdID0gdGVtcDsKfQoKdm9pZCBCX3ByaW50TGlzdChiTElTVCAqeCkgey8vIOODquOCueODiOOBruWGheWuueOCkuODl+ODquODs+ODiOOBmeOCiwpwcmludGYoIlsiKTsKZm9yIChpbnQgaSA9IDA7IGkgPCBCX3NpemUoeCk7IGkrKyl7CmlmIChpID4gMCkgcHJpbnRmKCIsICIpOwpiU0hBUEUgZSA9IEJfcmV0cmlldmUoeCwgaSk7CnByaW50ZigiKCVkLCVkKSIsIGUuQmxvY2tJRCwgZS5EaXJlY3Rpb24pOwp9CnByaW50ZigiXSIpOwp9