SASでWORDLE(その2:UI追加)
SASでWORDLE - 我輩はブロガーではない。ネタもまだない
この追記です。
ベタですけど、%windowを使ってUIを作りました。
リストの作成のところは同じ
%let keychars=5; %let resobs=4; data list; length wordle $&keychars.; input wordle; datalines; PIZZA QUICK QUAKE CRAZY CHICK WALTZ ; run;
で、本題はここから。
%windowで入力欄を呼び出し、入力された内容をマクロ変数として、処理用のマクロに引き継いでいます(パラメータではないですけど)
%window wordleWindow color=gray icolumn=40 irow=10 rows=40 columns=60 #1 @1 "Welcome to WORDLE in SAS" #4 @8 "Enter 5 charactors and press Enter" #6 @8 input 5 attr=underline REQUIRED=yes ; %Macro Wordle; %display wordleWindow; options nomprint nomlogic nonotes nosource; title ; %if %length(&input)^=&keychars %then %do; data _null_; file print; put 'not 5 charactors!'; run; %end;%else %do; data res; %let success=1; set list(firstobs=&resobs obs=&resobs); length res1-res5 $2; %do i=1 %to &keychars; res&i=cats(char(upcase("&input"),&i),index(wordle,char(upcase("&input"),&i))); %end; keep res:; run; ods html; proc report data=res nowd noheader style(column)={FONT_SIZE=12pt WIDTH=20 TEXTALIGN=center FONT_WEIGHT=bold COLOR=white}; column res: ; %do i=1 %to &keychars; compute res&i; if substr(res&i,2)="0" then call define (_COL_,'style','style={background=gray}'); else if substr(res&i,2)="&i" then call define (_COL_,'style','style={background=green}'); else call define (_COL_,'style','style={background=D1C513}'); res&i=substr(res&i,1,1); endcomp; %end; run; %end; %let input=; %Mend;
これで、
%Wordle
を実行するだけで以下のウィンドウが立ち上がります。
で、このように入力してenterを押せば…
結果が出力されます
後は6回の制限だったり、正解したら処理できなくしたり、といったエラー処理は…やめときましょう。
なお、残念ながらSAS Studioでは%Windowが動かないので使えません。