LoginSignup
0

More than 3 years have passed since last update.

オフラインどう書く第14回の解答

Last updated at Posted at 2019-07-20

問題はこちら->http://nabetani.sakura.ne.jp/hena/ord14linedung/

 だいぶ前に書いていたのを一部修正
 入力をmanda/3で武器のリストとモンスターのリストに分け、
 battle/3でmon/1とパターンマッチさせて、
 持っている武器で倒せるモンスターがあれば、モンスターのリストから該当のモンスターを除き、
 そのモンスターを倒して得られる武器を持っている武器に加えることをくりかえし、
 倒せるモンスターがないか、すべて倒したら終了。

%SWI-Prolog (version 7.4.2)
%start
%:-initialization(start).  %ideone
mon(['B',a,c]).
mon(['D',c,e]).
mon(['F',e,g]).
mon(['H',g,i]).
mon(['J',i,k]).
mon(['L',k,a]).

solve(Input,N):-
    manda(Input,Arms,Monster),length(Monster,N0),
   battle(Monster,Arms,Result),length(Result,N1),N is N0-N1,!.

manda(Input,Arms,Monster):-
   atom_chars(Input,Output),
    findall(X,(member(X,Output),char_type(X,lower)),Arms),
    subtract(Output,Arms,Monster).

battle([],_,[]).
battle(Monster,Arms,Result):-
  (member(Arm1,Arms),mon([M,Arm1,Arm2]),select(M,Monster,Monster1)
   ->(Arms1=[Arm2|Arms],battle(Monster1,Arms1,Result));Result=Monster).

start:-str(S),split_string(S,"\s,\n","\s",L),pre(L),!.

pre([]):-!.
pre([_,B,C|T]):-solve(B,R),number_chars(CN,C),
      (R=:=CN->Str=" pass";Str=" fail"),write(Str),write(" "),writeln(R),pre(T).


str("0  gLDLBgBgHDaD    6
1       DBcDLaLgDBH     6
2       JJca    0
3       FJDLBH  0
4       HJBLFDg         6
5       HBaDLFJ         6
6       DJaHLB  2
7       gDLHJF  3
8       cJFgLHD         5
9       FFBJaJJ         1
10      FJeJFBJ         2
11      iJFFJJB         3
12      JBJiLFJF        5
13      JDiFLFBJJ       8
14      BDFDFFDFFLLFFJFDBFDFFFFDDFaDBFFB        28
15      DDFBFcBDFFFFFFLBFDFFBFLFDFDJDFDF        24
16      FDLBFDDBFFFeFFFFFDFBLDDFDDFBFFJF        16
17      FDBFFLFDFFDBBDFFBJDLFgDFFFDFFDFF        0
18      FDiFLDFFFFBDDJDDBFBFDFFFBFFDFLFF        31
19      FDFDJBLBLBFFDDFFFDFFFFFDDFBkFDFF        30
20      HBkFFFFHBLH     3
21      FBHHFFFHLaB     2
22      LFHFBBcHFHF     0
23      LFBHFFeFHBH     7
24      LgFHHHBFBFF     3
25      FFiFHBHLBFH     0
26      BFHHFFHBeFLk    10
27      FHFaBBHFHLFg    5
28      FFgacaFg        0
29      JHDaDcBJiiHccBHDBDH     9
30      FHJJLckFckFJHDFF        12
31      DeDHJHDFHJBLHDLLDHJLBDD         22
32      gJLLLJgJgJLJL   0
33      DaaaDDD         0
34      HFeJFHiBiiBJeJBBFFB     9
35      FJFFJDBHBHaLJBHJHDLHkLLLFFFgJgHJLHkJkB  32
36      giFLBiBJLLJgHBFJigJJJBLHFLDLL   23
37      cgkLJcLJJJJgJc  2
38      LDFHJHcFBDBLJBLFLcFJcDFBL       22
39      JJHHHkHJkHLJk   1
40      kHHBBaBgHagHgaHBBB      11
41      HDBFFDHHHDFLDcHHLFDcJD  20
42      HFFFHeFFee      7
43      gLLDHgDLgFL     1
44      JJJBBaBBHBBHaLBHJ       7
45      FBFBgJBDBDgF    0
46      LLLLakakLakLL   7
47      HeJHeJe         0
48      LDFLBLLeBLDBBFFBLFBB    4").

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