同一个世界(三生梦醒)

前段时间写了同一个世界的,链接如下

同一个世界(erlang解题答案)

这次带来了三生梦醒的解题答案和思路,

首先看题目

还是用1代表黑色,0代表白色,用2代表黄点,x代表空白

抽象就是这样

----------------
| 1 | 1 | 1 | 1 |
----------------
| 1 | 0 | 0 | 1 |
----------------
| 0 | 1 | 1 | 1 |
----------------
| 1 | 0 | 0 | 0 |
----------------
| 1 | 1 | 1 | 1 |
----------------

这次因为每个点走的步数定了,所以暴力的使用轮询来解

把起点能走的所有路径找出来,(注意:这次的路径可以重复~~)

-module(oneword_three).

%..........省略

start(Data, {S, Scnt}, {E, Ecnt}) ->
    Pid = self(),
    Load_data = [{Num, List} || {Num, _V, List} <- Data],
    Val_data = [{Num1, V1} || {Num1, V1, _List1} <- Data, V1 =/= []],
    Tab1 = ets:new(?TAB, [public, duplicate_bag, {write_concurrency, true}]),
    Tab2 = ets:new(?TAB, [public, duplicate_bag, {write_concurrency, true}]),
    spawn(fun() -> start_try(Pid, Load_data, Tab1, S, Scnt) end),        %并发去尝试所有的路径
    spawn(fun() -> start_try(Pid, Load_data, Tab2, E, Ecnt) end),
    do_loop(Val_data, Tab1, Tab2, 2).

%..........省略

start_try2(Pid, _Load_data, Tab, Loads, Nownum, 0) ->
    ets:insert(Tab, {?SIGNAL, [Nownum|Loads]}),      %走完了就把路径存表里面
    Pid ! stop;

start_try2(Pid, Load_data, Tab, Loads, Nownum, Scnt) ->
%    ets:insert(Tab, {?SIGNAL, [Nownum|Loads]}),
    {Nownum, List} = lists:keyfind(Nownum, 1, Load_data),
    Pids = [spawn(fun() -> start_try2(Pid, Load_data, Tab, [Nownum|Loads], X, Scnt-1) end) || X <- List],
    Pid ! {start, erlang:length(Pids)},
    Pid ! stop.

然后就是取表里面的路径轮询,

%..........省略

start(Val_data, Tab1, Tab2) ->
    Pid = self(),
    Yellow_num = [Num || {Num, V} <- Val_data, V == 2],
    Slist = [ Z || {_N, Z}  <- ets:tab2list(Tab1)],
    Elist = [ Z1 || {_N1, Z1}  <- ets:tab2list(Tab2)],
%    io:format("here is Slist:~p, Elist:~p~n", [Slist, Elist]),
    _P = [spawn_link(fun() -> check(Pid, Yellow_num, Val_data, X, Y) end)|| X <- Slist,  Y <- Elist],    %轮询去所有的数据
    wait_loop().

wait_loop() ->
    receive
        Any ->
            io:format("this is a erorr msg:~p~n", [Any])
    end,
    wait_loop().

check(Pid, Yellow_num, Val_data, X, Y) ->
    X1 = lists:reverse(X),
    Y1 = lists:reverse(Y),
    L = X1 ++ Y1,
    case check_all(Yellow_num, L) of            %首先要求所有的黄点都走到
        ok ->
            case check_ok(Val_data, X1, Y1) of      %check结果是否是全1或者全0
                ok ->
                    ?SERVERNAME ! {ok, Pid, X1, Y1};
                no ->
                    no
            end;
        no ->
            no
    end.
%..........省略

然后就出结果了

13> oneword:start(A,{12,5},{13,5}).
<0.6761.106>
 ----------------
| 1 | 1 | 1 | 1 |
 ----------------
| 1 | 0 | 0 | 1 |
 ----------------
| 0 | 1 | 1 | 1 |
 ----------------
| 1 | 0 | 0 | 0 |
 ----------------
| 1 | 1 | 1 | 1 |
 ----------------
the answere is:
 line1:[12,11,10,6,7,11]
 line2:[13,9,10,14,15,16]

tips:

如果有3个起点,可以先随便走一个,猜其他的2个,如下

走一下下面步骤3的,变成这样

然后再解答

16> oneword:start(A,{5,5},{8,5}).
<0.11334.106>
 ----------------
| X | 1 | 1 | X |
 ----------------
| 1 | 0 | 0 | 1 |
 ----------------
| 1 | 0 | 0 | 1 |
 ----------------
| 1 | 1 | 1 | 1 |
 ----------------
| X | 0 | 0 | X |
 ----------------
the answere is:
 line1:[5,6,10,14,18,14]
 line2:[8,7,11,15,19,15]

答案就出来了

时间: 2024-08-27 22:38:28

同一个世界(三生梦醒)的相关文章

张艾迪(创始人):同一个世界.同一个梦想

AOOOiA.global创始人艾迪张: 同一个世界.同一个梦想OneWorldOneDream; 梦想点燃了世界的希望 艾迪相信世界是因为梦想而变得更有价值.世界因梦想而蜕变绽放.世界因梦想而美丽:梦想是个神圣的词语.它诞生和应用在世界的每个地方.每个人身上.全世界的梦想叠加就是伟大的历史进程:是人类社会的发展; 梦想点燃了人类无数的希望:梦想是思想.想法.创意.影响.情绪.感觉.希望.探索.求知.渴望.来自纯洁的心灵:世界上的每个人都有公平拥有梦想的权利:希望.可以让我们从这里到达那里.让我

[全是废话的日记]离梦醒还有82天,中老年退役选手复健之路

帮兴dalao劝小学妹,顺便收获了一波嘲讽,比如一个人闷头做题 我是真的不适合这种劝人的活啊,我只会开嘲讽怼回去 然后发现辣鸡兴大佬,天天就知道骂人家妹子,骂完了,妹子玻璃心,又开始疯狂找人劝,你当初别骂那么狠啊! 我现在心态爆炸了,我也想有学长劝. 好了,吐槽时间结束,开始伟大的复健之路,又称咸鱼不忍心白白死去的垂死挣扎. (不要相信这句话,我真的全篇都在吐槽一点干货都没留) 你们能相信我打一个动态规划,从19号22点,打到现在20号快1点还没打完吗. 真是复健之路艰辛啊,明天(实际上应该是今

G - 娜娜梦游仙境系列——梦醒

G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)     Special Judge Submit Status Problem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过

同一个世界(erlang解题答案)

最近玩同一个世界,才几关就把3次提示用完了,十分气愤, 于是写了程序来解~~~ o(^▽^)o 以2-1为例子,题目如下 以0代表白色,1代表黑色,抽象的就是这样的 ----------------------| 0 | 1 | 0 | 1 | 0 | ----------------------| 0 | 1 | 0 | 1 | 0 | ----------------------| 1 | 0 | 1 | 0 | 1 | ----------------------| 0 | 1 | 0 |

梦醒,泪已落

说好在考试前不写日志的,可是心里始终有些话要说,不只为什么,自己总觉得有种东西将要离我而去的感觉,也许秋天的缘故吧,越发有些伤感,十年了,每年的秋季都是这般,如今身边有朋友的陪伴,真的幸福很多,在省级的大医院里努力的汲取知识,就像一场梦一样,突然身边的人告诉我,原来我从未真正的拥有过这份美丽. 是的,我不是个家境富裕的独生女,农村出生,从小心怀着跳出“农门”的志愿长大,当别的孩子还在父母面前撒娇时,我已经知道要承担起该承担的责任,我太累了,可是却从不敢停歇,努力的攀爬,试图挤入更上层的社会,让家

acdream 1686 梦醒(时钟重合)

Problem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过来呢?”,天使说:“只要这个钟的时针和分针重合,你就可以进入时光隧道,离开这个地方.” 那你能告诉娜娜还有多久时针和分针才会重合吗? Input 多组数据,第一行是一个正整数t(t<=100,000),表示数据的组数 对于每组数据,为一个时刻,格式为hh:mm:ss

梦醒在早上5点的随想

人归根结底是脆弱的,或者说人这个系统是脆弱的.我们努力工作,不论混的好与坏,但凡发生一点变故,我们的生活就会发生很大的动荡. 曾经可能梦想着改变世界,渐渐才发现,其实自己只是这个世界上很平凡的人,一直受这个世界的影响,被这个世界改变着.想想也是,一个人影响几十亿人终究是很难的,而却很难在几十亿人的影响下而不发生改变. 人与人的差别其实不难发现.退去衣服,除了身体外在的不同,就是脑袋里思想.知识的不同,再有就是和这个世界其他人的关系也就是人脉不同. 叔本华说过“生命是一团欲望,欲望不满足便痛苦,满

张艾迪(创始人):我们接管世界

当比尔盖茨叔叔老了.就让我们接管世界吧 我们是世界最高级的创始人.我们是世界级创始人.我们是梦想理想的使者: 我们拥抱服务整个世界的梦想理想.我在世界.从AOOOiA.Global诞生的那一刻起.我们就容纳了整个世界.涵括了整个宇宙.AOOOiA..Global从诞生的那一刻起.就诞生容纳了整个世界的每个角落.每个人.Hello.Global.World.我们的理念就是全世界都在用.容纳了整个宇宙.整个地球.七大洲四大洋的各个角落.亚洲.欧洲.非洲.南美洲.北美洲.大洋洲.包括无人居住的南极洲.

张艾迪(创始人):发明整个世界+224C个国家

Eidyzhang:发明整个世界+224C个国家 Eidyzhang: Genius.Founder.CEO.23 I 世界级最高级创始人.世界最高级FounderCEO 出生在亚洲中国.Eidyzhang 拥有黑色头发白色皮肤(20岁)大学辍学生.提前2年离开学校 Hello World Fouder:Eidyzhang story for Grow Up Eidyzhang是一个大学辍学生(修读2年) 这一切我都可以做得到.我是Eidyzhang.我是世界级最高级梦想家.理想家: 年少的我拥