#include <stdio.h>
typedef enum{USER,GROUP,OTHER}Grupa;
typedef enum{R,W,X}Prawo;
void przyznaj_prawo(int *prawa,Grupa grupa,Prawo prawo){
int maska=1<<(grupa*3+prawo);
*prawa|=maska;
}
void zabierz_prawo(int *prawa,Grupa grupa,Prawo prawo){
int maska=~(1<<(grupa*3+prawo));
*prawa&=maska;
}
void wyswietl_prawa(int prawa){
const char znaki[]={'r','w','x'};
for(int grupa=USER;grupa<=OTHER;grupa++){
for(int prawo=R;prawo<=X;prawo++){
int maska=1<<(grupa*3+prawo);
if(prawa
&maska
) putchar(znaki
[prawo
]); }
}
}
int main(){
int prawa=0;
przyznaj_prawo(&prawa,OTHER,R);
przyznaj_prawo(&prawa,USER,X);
wyswietl_prawa(prawa);
przyznaj_prawo(&prawa,USER,R);
przyznaj_prawo(&prawa,USER,W);
przyznaj_prawo(&prawa,GROUP,R);
przyznaj_prawo(&prawa,GROUP,X);
wyswietl_prawa(prawa);
zabierz_prawo(&prawa,USER,W);
zabierz_prawo(&prawa,GROUP,X);
wyswietl_prawa(prawa);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIGVudW17VVNFUixHUk9VUCxPVEhFUn1HcnVwYTsKdHlwZWRlZiBlbnVte1IsVyxYfVByYXdvOwoKdm9pZCBwcnp5em5hal9wcmF3byhpbnQgKnByYXdhLEdydXBhIGdydXBhLFByYXdvIHByYXdvKXsKICAgIGludCBtYXNrYT0xPDwoZ3J1cGEqMytwcmF3byk7CiAgICAqcHJhd2F8PW1hc2thOwp9Cgp2b2lkIHphYmllcnpfcHJhd28oaW50ICpwcmF3YSxHcnVwYSBncnVwYSxQcmF3byBwcmF3byl7CiAgICBpbnQgbWFza2E9figxPDwoZ3J1cGEqMytwcmF3bykpOwogICAgKnByYXdhJj1tYXNrYTsKfQoKdm9pZCB3eXN3aWV0bF9wcmF3YShpbnQgcHJhd2EpewogICAgY29uc3QgY2hhciB6bmFraVtdPXsncicsJ3cnLCd4J307CiAgICBmb3IoaW50IGdydXBhPVVTRVI7Z3J1cGE8PU9USEVSO2dydXBhKyspewogICAgICAgIGZvcihpbnQgcHJhd289UjtwcmF3bzw9WDtwcmF3bysrKXsKICAgICAgICAgICAgaW50IG1hc2thPTE8PChncnVwYSozK3ByYXdvKTsKICAgICAgICAgICAgaWYocHJhd2EmbWFza2EpIHB1dGNoYXIoem5ha2lbcHJhd29dKTsKICAgICAgICAgICAgZWxzZSBwdXRjaGFyKCctJyk7CiAgICAgICAgfQogICAgfQogICAgcHV0Y2hhcignXG4nKTsKfQoKaW50IG1haW4oKXsKICAgIGludCBwcmF3YT0wOwogICAgcHJ6eXpuYWpfcHJhd28oJnByYXdhLE9USEVSLFIpOwogICAgcHJ6eXpuYWpfcHJhd28oJnByYXdhLFVTRVIsWCk7CiAgICB3eXN3aWV0bF9wcmF3YShwcmF3YSk7CiAgICBwcnp5em5hal9wcmF3bygmcHJhd2EsVVNFUixSKTsKICAgIHByenl6bmFqX3ByYXdvKCZwcmF3YSxVU0VSLFcpOwogICAgcHJ6eXpuYWpfcHJhd28oJnByYXdhLEdST1VQLFIpOwogICAgcHJ6eXpuYWpfcHJhd28oJnByYXdhLEdST1VQLFgpOwogICAgd3lzd2lldGxfcHJhd2EocHJhd2EpOwogICAgemFiaWVyel9wcmF3bygmcHJhd2EsVVNFUixXKTsKICAgIHphYmllcnpfcHJhd28oJnByYXdhLEdST1VQLFgpOwogICAgd3lzd2lldGxfcHJhd2EocHJhd2EpOwogICAgcmV0dXJuIDA7Cn0K