はじめに
この記事は,「シクシク素数アドベントカレンダー Advent Calendar 2018」の 13 日目です.
https://qiita.com/advent-calendar/2018/4949prime-series
シクシク素数・問題文はアドベントカレンダーを参照してください.
ソースコード
Ideone
https://ideone.com/vVEFoR
命令セット風に可視化したコード
https://gist.github.com/buyoh/b2b50884e2defe829b4805d8c6d3aa3a
こちらにも載せます.S
がスペース,T
がタブ,L
が改行(LF)です.
SSSTSLSSSTSSSLTTSSSSTTLSSSTSSSLTTSLSLSLLSSSTSLLTSSTTLSLTLSSSTTLSLLLTLLSSSTSSLLTT
STSTLSLTLSSSTSTLSLLLTLLSSSTTSLLTSSTTTLSLSLTSSTTTLSLLSSSTLLTLLSSSTTTLSLLSSSLLTLLS
SSTSSSLLTSSTSSTLSLLSSSTLLTLLSSSTSSTLLTSSTSTSLSSSTLLTLLSSSTSTSLSSSLLTLLSSSLLSLSTS
SSTLLSSSTSSSSLSSSTSLTTTSSSTTLTTTSLSSSSTSLSLTTTSSSSTLTSSSSSSTTLSLTTTSSSSTSSLSLTTT
SSSSTSTLSSSLSSSTSLTTTTSSSTTSSSSTSTLTTTSLTTTSSSSTSSLTTTLSSSTSSTSLSSSTLSSSLSSSLSSS
TSLTTTTSSSTTTSSSLTSSTLSTSTSLLTSSTSSTTLSSSLSLTSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSLT
LLSSSTSSTTLLSSSTSTSSLSSSTLSSSLSSSLSSSTSLTTTTSSSTTTSSSTSTSLTSTTSSSTSSLTSSTLSTSTSL
SSSTLSSSLSSSLSSSTSLTTTTSSSTTTSSSTSTSLTSTTSSSTSSTLTSSTLSTSTSLLSTSTSSSLLTSSTSTSTLS
SSTLSLTSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSLTLLSSSTSTSTLSSSLSSSTSLTTTTSSSTTTSSSTSTS
LTSTSLSTSTSSSSLSLTSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSLTLSSSTSLTTTSSSTTLSLTTTSSSSTS
LSLTTTSSSSLLTLLSSSTSSSTLLSLSTSTTTLLSSSTSTTSLSSSTSLTTTSSSTTLTTTSLSSSSTSLSLTTTSSSS
TSLTSSSSSSTTLSLTTTSSSSTSSLSLTTTSSSSTSTLSSSLSSSTSLTTTTSSSTTSSSSTSTLTTTSLTTTSSSSTS
SLTTTLSSSTTSSSLSSSTLSSSLSSSLSSSTSLTTTTSSSTTTSSSTSLTSSTLSTSTSLLTSSTTSSTLSSSTLSLTS
SSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSLTLLSSSTTSSTLLSSSTTSTSLSSSTLSSSLSSSLSSSTSLTTTTSS
STTTSSSTSLTSTTSSSLTSSTLSTSTSLLTSSTTSTTLSSSLSLTSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSL
TLLSSSTTSTTLSSSTLSSSTSLTTTTSSSSSSLTSSSSSSTTLTTSLSSSTTTSSLSSSLSSSTLSSSTLSSSTSLTTT
TSSSTTTSSSTLSSSTSLTTTTSSSTTTTSSLSSSLSSSTSLTTTTSSSTTTSLTTSSTLSTSTSSLLTSSTTTSTLLSS
STTTTSLSSSTLSSSLSSSLSSSTSLTTTTSSSTTTSSSTLSSSTSLTTTTSSSTTTTSTTSSSLTSSTLSTSTSLLTSS
TTTTTLSSSLSLTSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSLTLLSSSTTTTTLSSSTLSSSTSLTTTTSSSSLS
SLSTTTSSSTSLTSSSTTSTTTSLLLSLSTTTSSLLSSSTTTSTLSSSTLSLTSSSTSLTTTSSSTTLSLTTTSSSSTSL
SLTTTSLTLSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTTTSSSSLLTLLSSSTSTTTLLSLSTSSSSTLLSSSTSSSSS
LSSSTSLTTTSSSTTLTTTSLSSSSTSLSLTTTSSSSTSTTTLTSSSSSSTTLSLTTTSSSSTSSLSLTTTSSSSTSTLS
SSLSSSTSLTTTTSSSTTSSSSTSTLTTTSLTTTSSSSTSSLTTTSSSTSTSTLSSSTSLTTTTSSSSSSLTSSSSSTTL
TTSSSSTSTTSLSSSTSLTTTTSSSSSSLTSSSSSSTTSSSSLTTSLSSSTSSSTSLSSSTLSSSLSSSLSSSTSLTTTT
SSSTTTSSSLSLTTSSTLSTSTSSLLTSSTSSSTTLSSSTLSSSTSLTTTTSSSSSSTSTSTLSSSTSLTTTTSSSSLSS
LSTTTSSSTLTSSSTTSTTTTSSSSLSSSSLSSSTSLTTTTSSSTTTSSSTSTSLTSTTTTSTTTSLLSSSLSSSTSLTT
TTSSSSLSSLSTTTSSSTSTSLTSTSTTSTTTSLLLSLSTSSSTSLLSSSTSSSTTLLSSSTSSTSSLSSSLSSSTLSSS
TSTSTLSSSTSLTTTTSSSTTTSSSLTSSTLSTSTSSLLTSSTSSTSTLSSSTSTTSLSSSTSLTTTTSSSTTTSSSTLS
SSTSLTTTTSSSSSSTSTSTLSSSTSLTTTTSSSTTTTSSSTTTTSSSSLSTLSSSLLSSSTSTSTLSSSTSLTTTTSSS
SLSSLSTTTSSSTLTSSTTTSTTTSLLLSLSTSSTSSLLSSSTSSTSTLSSSTSLTTTSSSTTLSLTTTSSSSTSLSLTT
TSSSSLLTLLSSSTSSSSTLLSLSTSSTTTLLSSSTSSTTSLSSSTSLTTTSSSTTLTTTSLSSSSTSLSLTTTSSSSTS
LTSSSSSSTTLSLTTTSSSSTSSLSLTTTSSSSTSTLSSSTLSSSTSLTTTTSSSTTSSSSTSTLTTTSLTTTSSSSTST
LTTTSSTTLTSSSSLTTTSSSSTSSLTTTSSSLSSSTSLTTTTSSSTTTTTTLSTSTSSSSSLSLLSSSLSSSTSLTTTT
SSSSLSSLSTTTSSSTLTSSSTTSTTTSLLLSSSTSTSSSLSSSTLSSSLSSSLSSSTSLTTTTSSSTTTSSSTLSSSTS
LTTTTSSSTTTTSSTLSTSTSSLLTSSTSTSSTLSSSTSTTSSLSLSTLSSSLLSSSLSSSTSLTTTTSSSTTTTTTLST
STSSSSSLSLLSSSLSSSTSLTTTTSSSSLSSLSTTTSSSTLTSSSTTSTTTSLLLSLSTSTSSSLLSSSTSTSSTLSSS
TSLTTTSSSTTLSLTTTSSSSTSLSLTTTSSSSLLTLLSSSTSSTTTLLSLSTSTSTTLLSSSTSTSTSLSSSTSLTTTS
SSTTLTTTSLSSSSTSLSLTTTSSSSTTSSTTTLTSSSSSSTTLSLTTTSSSSTTSSTSTLSSSTSLTTTTSSSSLSSSS
LTSSSSSSTSSTTLTTSSSSTLTSSSSSSLTTSSSSTTSSTSSLSSSTSLTTTTSSSSLSSSSTSSLTLTTSSSTSSLTT
TTTSTTTSLLLSSSTSTTSSLSSSTLSSSLSSSTTSSTTSLSSSTSLTTTTSSSTTTSSSTTSSTSSLSSSTSLTTTTSS
STTTTSSTLSTSTSSLLTSSTSTTSTLLSSSTSTTTSLSSSTTSSTSTLSSSTSLTTTTSSSTTTLSTSTSTTSLSSSTT
SSTSTLSSSTSLTTTTSSSTTTLSTSTSSSSLLSTSTTSLLTSSTSTTTTLSSSLSSSTSLTTTTSSSSSSTTSSTTSLS
SSTSLTTTTSSSTTTTSSSSLSSSSTTSSTSTLSSSTSLTTTTSSSTTTTTSTTTSLLSSSTTSSTTSLSSSTSLTTTTS
SSSLSSLSTTTSSSTLTSSSTTSTTTSLLLSSSTSTTTTLSSSTTSSTSTLSSSTSLTTTTSSSSLSSLSTTTSSSTLTS
SSTTSTTTSLLLSLSTSTTSSLLSSSTSTTSTLSSSLSSSTSLTTTTSSSSSSLSSSTSLTTTTSSSSSSTTSSTSSLSS
STSLTTTTSSSTTTTSSSLSTSTSSTTSLSLLSSSTSTSLSLSTLSSSLLSSSTSLTTTSSSTTLSLTTTSSSSTSLSLT
TTSSSSLLTLLSSSTSTSTTLLSTSTSTSTSLLLL
メモ
whitespaceを直接書いたわけではなく,9月頃に作った,独自言語からwhitespaceに変換するコンパイラを使っています1.
下のコードを上のwhitespaceにコンパイルしています.
func: sikusiku(x){
if (x == 0){
return: 0;
}
if (x%10 == 4 || x%10 == 9){
return: 1;
}
return: sikusiku(x/10);
}
# x >= 2
func: isprime(x){
if (x == 2){
return: 1;
}
if (x%2 == 0){
return: 0;
}
let: d(3);
while (d*d <= x){
if (x%d == 0){
return: 0;
}
d += 2;
}
return: 1;
}
# x > 0
func: print_number(x){
let: stack[20], i(-1);
let: zero('0');
while (x > 0){
stack[i += 1] = x%10;
x /= 10;
}
while (i >= 0){
__putc(zero + stack[i]);
i -= 1;
}
}
func: print_array(begin, end){
print_number(*begin);
begin += 1;
while (begin < end){
__putc(',');
print_number(*begin);
begin += 1;
}
}
func: main(){
let: results[100];
let: cnt, val(19), i(0);
cnt = __geti();
while(i < cnt) {
if (isprime(val) && sikusiku(val)){
results[i] = val;
i += 1;
}
val += 1;
}
print_array(&results, &results + cnt);
__putc('\n');
}
-
ひょっとしたら,この場合はwhitespaceではなく独自言語になるかもしれませんが,独自言語は誰も書かないはずなのでレギュレーションには違反していないはず…. ↩