假设我有一个包含 4 个元素 [0,4,0,2] 的列表(可以是任何排列)。列表中的每个元素都会向左移动。如果元素邻居为零,则它可以轻松向左移动。如果邻居是非零数,则它不能向左移动。(例如:[8,0,2,3] 会变成 [8,2,3,0],而 [0,4,0,2] 会变成 [4,2,0,0])
这是我目前的尝试:
shift_left([],_):-!.
shift_left([H1,H2|T],S):-
H1=0,
append(S,[H2|T],L1),
write(L1),
shift_left([H2|T],_).
shift_left([H1|T],_):-
H1\=0,
shift_left(T,[H1]).
Run Code Online (Sandbox Code Playgroud)
看了 CapelliC 的回答后,我的第二次尝试。它工作得很好。
shift_left([],[]).
shift_left([H|T],S):-
shift_left(T,Q),
H=0,
append(Q,[0],S).
shift_left([H|T],S):-
shift_left(T,Q),
H\=0,
S=[H|Q].
Run Code Online (Sandbox Code Playgroud) 我无法将图像作为背景上传到堆栈,我已将图像添加到资产文件夹中并将其添加到 pubspec.yaml 并向我显示该错误:
Exception caught by image resource service.
The following assertion was thrown resolving an image codec:
Unable to load asset: assets/images/rose.jpg
When the exception was thrown, this was the stack:
#0 PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:225:7)
<asynchronous suspension>
#1 AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:668:31)
#2 AssetBundleImageProvider.load (package:flutter/src/painting/image_provider.dart:651:14)
#3 ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:504:13)
...
Image provider: AssetImage(bundle: null, name: "assets/images/rose.jpg")
Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#dea48(), name: "assets/images/rose.jpg", scale: 1.0)
Run Code Online (Sandbox Code Playgroud)
代码:
return new Scaffold(
backgroundColor: Colors.greenAccent,
body: new Stack(
children: [
new Image(
image: new AssetImage("assets/images/rose.jpg"),
fit: BoxFit.cover, …Run Code Online (Sandbox Code Playgroud) android flutter flutter-test flutter-layout flutter-animation
我正在尝试合并列表中的元素,规则如下:
1.合并一个列表,如果列表中的 2 个连续数字是相同的数字,它们应该通过求和合并成一个(即 [4,4,0,0] -> [8,0,0,0] )。
2.新合并的图块不能在同一回合与另一个图块合并(例如:[4,4,8,0] ->[8,8,0,0] 正确,但 [16,0,0,0] ] 错误的)
3.列表长度应该是4.如果列表在合并后减少,则在尾部添加一个零。(例如:[4,4,0,2] -> [8,0,2,0])。
4.零的情况下注意:[0,0,2,2] -> [0,4,0,0]。
我已经能够创建代码,但是我想找到一种更简单的方法来详细解释。
我的做法:
merge([H|T],L):-
merge2([H|T],J),
(
length(J,2)->
append(J,[0,0],L);
length(J,3)->
append(J,[0],L);length(J,4)-> J=L).
merge2(_,[]).
merge2([X],[X|_]).
merge2([H1,H2|T],[W|L]):-
H1=H2,
W is H1+H2,
merge2(T,L).
merge2([H1,H2|T],[H1|L]):-
H1\=H2,
merge2([H2|T],L).
Run Code Online (Sandbox Code Playgroud)