LoginSignup
0
0

More than 3 years have passed since last update.

リアルタイムどう書く過去問(第10回)

Last updated at Posted at 2018-06-23

問題はこちら->http://nabetani.sakura.ne.jp/hena/ord10haniwa/
この問題は、座標(のようなもの)をどのように決めるかがみそで、あとは難しくないと思われます。
リアルタイムどう書くE13の私の解き方
2021.02.20 URLがおかしくなっているので修正。
->https://qiita.com/smallbigcats/items/c637dc7fccd9add592c8
->https://qiita.com/drafts/c645ea864689e0b89ed9
が応用できるか挑戦してみました。
連番ではうまくいきませんが、TUVWの辺を上辺として、プログラムのコメントのように数字を割り当てますと、
上、右上、右下の六角形との差がそれぞれ11,10,1となります(m/2)。
join/3で六角形に割り当てた数字と文字を結合したものをリストにします。
初期値を34としm/2を利用して次々計算して求めた数がリストに入っているかどうかを判断します。
ところで、コメントの後半にありますように、割り当てた数の10の位を縦座標に、1の位を横座標にすると、
https://qiita.com/Nabetani/items/55641767510c2f9f235f
の多くの人の解答と同様のものとなるのでした。

/*
             1   2   3   4   (T U V W)
          11  12  13  14  15
        21  22  23  24  25  26
      31  32  33  34  35  36  37
    41\ 42  43  44  45  46  47
  51  52\ 53  54  55  56  57
61  62  63\ 64  65  66  67
              |
           0,1   0,2   0,3   0,4
        1,1   1,2   1,3   1,4   1,5
     2,1   2,2   2,3   2,4   2,5   2,6
     .........
             |
      1 2 3 4 5 6 7
    0 T U V W
    1 k H I J X
    2 j S B C K Y
    3 i R G A D L Z
    4   h Q F E M a
    5     g P O N b
    6       f e d c
 */

n("1   2   3   4
11  12  13  14  15
21  22  23  24  25  26
31  32  33  34  35  36  37
42  43  44  45  46  47
53  54  55  56  57
64   65  66  67").

a("T U V W
k H I J X
j S B C K Y
i R G A D L Z
h Q F E M a
g P O N b
f e d c").

m(0,-11).
m(1,-10).
m(2,1).
m(3,11).
m(4,10).
m(5,-1).

solve(_,[],_,S,S):-!.
solve(L,[H|T],N1,S1,R):-
     m(H,M),N is N1+M,(member(N:C,L)->(string_concat(S1,C,S),N2=N);
     (string_concat(S1,"!",S)),N2=N1),solve(L,T,N2,S,R).

judg(S,C):-(S==C->write("pass ");write(" fail ")),writeln(S),!.

join(X,Y,Z):-Z=X:Y.

start:-
     a(A),split_string(A,"\s,\n","\s",AL),n(N),split_string(N,"\s,\n","\s",NL),
     maplist(atom_number,NL,NL1),maplist(join,NL1,AL,L),
     str(S),split_string(S,"\s,\n","\s",SL),pre(SL,L),!.

pre([],_):-!.
pre([A,B,C|T],L):-
     atom_chars(B,B1),maplist(atom_number,B1,B2),solve(L,B2,34,"A",S),judg(S,C),pre(T,L).

%start.

str("0    135004  ACDABHS
1       1       AC
2       33333120        AENc!!b!M
3       0       AB
4       2       AD
5       3       AE
6       4       AF
7       5       AG
8       4532120         AFQPOEMD
9       051455  ABSHSj!
10      23334551        ADMb!cdeO
11      22033251        ADLKLa!ML
12      50511302122     AGSjkTHTU!VW
13      000051  ABHT!!!
14      1310105         ACDKJW!V
15      50002103140     AGSk!HU!IVIU
16      3112045         AEDKYXKC
17      02021245535     ABCIJW!JIHBS
18      014204  ABIBCIB
19      255230  ADAGAEA
20      443501  AFPefgQ
21      022321  ABCKLZ!
22      554452  AGRh!!Q
23      051024  ABSHTUH
24      524002  AGAFGSB
25      54002441132     AGQRjSRhRSGA
26      11010554312     ACJV!!UTkSHI
27      23405300554     ADMNEFOFGRi!
28      555353201       AGRih!gPQG
29      22424105        ADLMabaLD
30      11340202125     ACJKDCKJX!!J
31      4524451         AFQFPf!P
32      44434234050     AFPf!!e!!Pgh
33      00554040132     ABHk!j!i!jRG
34      3440403         AEOePfgf
35      111130  ACJW!XW
36      21133343125     ADKXYZ!a!Z!L
37      353511  AEFOPFA
38      22204115220     ADLZYLY!KY!X
39      03013541        ABABICBGB
40      101344  ACIVJCA
41      2432541         ADENbNdN
42      45332242015     AFQPedc!!NME
43      215453  ADKCAGF
44      45540523454     AFQh!i!RQg!!
45      42434302545     AFEOd!!ONOef").


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0