Algorithm 高尔夫:兄弟
我刚刚参加完2009年ACM ICPC编程大会的拉丁美洲决赛。这些问题是针对巴西、玻利维亚、智利等的 我和我的团队只能完成11个问题中的两个(我认为第一次尝试还算不错) 这是我们可以完成的。我很想看到代码的任何变化。问题全文:ps:这些问题也可以在ICPC官方网站上找到,每个人都可以访问Algorithm 高尔夫:兄弟,algorithm,console-application,Algorithm,Console Application,我刚刚参加完2009年ACM ICPC编程大会的拉丁美洲决赛。这些问题是针对巴西、玻利维亚、智利等的 我和我的团队只能完成11个问题中的两个(我认为第一次尝试还算不错) 这是我们可以完成的。我很想看到代码的任何变化。问题全文:ps:这些问题也可以在ICPC官方网站上找到,每个人都可以访问 在ACM的土地上,一位贪婪的国王开始沉迷于秩序。王国呈长方形,国王将领土划分为长方形的小郡。国王临死前把郡分给了他的儿子们 国王没有意识到儿子之间的竞争:第一个继承人恨第二个,但不恨其他继承人;第二个继承人恨
在ACM的土地上,一位贪婪的国王开始沉迷于秩序。王国呈长方形,国王将领土划分为长方形的小郡。国王临死前把郡分给了他的儿子们 国王没有意识到儿子之间的竞争:第一个继承人恨第二个,但不恨其他继承人;第二个继承人恨第三个,但不恨其他继承人,等等……最后,最后一个继承人恨第一个继承人,但不恨其他继承人 国王一死,国王的儿子们之间奇怪的竞争就在王国引发了一场全面的战争。袭击只发生在两个相邻县之间(相邻县是共享一条垂直或水平边界的县)。每当X恨Y时,一个县X就会攻击相邻的县Y。被攻击的县总是被征服。所有同时进行的攻击和一系列同时进行的攻击称为战斗。经过若干次战斗后,幸存的儿子们休战,再也没有战斗过 例如,如果国王有三个儿子,分别命名为0、1和2,下图显示了在给定初始土地分配的第一场战斗中发生的情况:
输入 输入包含几个测试用例。测试用例的第一行包含四个整数,N、R、C和K
2220
2101
2220
0200
103
212
Python 2.6376个字符
此代码的灵感来自:
Python(420个字符)
我已经有一段时间没有玩代码高尔夫谜题了,所以我肯定我错过了一些东西:
import sys
H,R,C,B=map(int,raw_input().split())
M=(1,0), (0,1),(-1, 0),(0,-1)
l=[map(int,r.split())for r in sys.stdin]
n=[r[:]for r in l[:]]
def D(r,c):
x=l[r][c]
a=[l[r+mr][c+mc]for mr,mc in M if 0<=r+mr<R and 0<=c+mc<C]
if x==0and H-1in a:n[r][c]=H-1
elif x-1in a:n[r][c]=x-1
else:n[r][c]=x
G=range
for i in G(B):
for r in G(R):
for c in G(C):D(r,c)
l=[r[:] for r in n[:]]
for r in l:print' '.join(map(str,r))
导入系统
H、 R,C,B=map(int,raw_input().split())
M=(1,0),(0,1),(-1,0),(0,-1)
l=[sys.stdin中r的映射(int,r.split())]
n=[r[:]表示l[:]中的r
def D(r,c):
x=l[r][c]
a=[l[r+mr][c+mc]表示mr,mc单位为M,如果0Lua,291个字符
g=loadstring(“return io.read('*n')”)重复n=g()r=g()c=g()k=g()l={}c=c+1
i=0,k do w={}对于x=1,r*c do a=l[x]和(l[x]+n-1)%n w[x]=i==0和x%c~=0和
或(l[x-1]==a或l[x+1]==a或l[x+c]==a或l[x-c]==a)和或
l[x]io.write(i~=k和“”或x%c==0和“\n”或w[x]..”)结束l=w结束,直到n==0为止
Perl,233字符
{$\=;($~,$R,$C,$K)=拆分;如果($~){@A=map{$\=;拆分}1..$R;$x=0,
@A=map{$r=0;对于$d($C,$C,1,-1){$r}=($y=$x+$d)>=0&$y1 | 1-$d-2*$p}$x++;($-$r)%$~}@A
而$K--;打印“@a\n”while@a=splice@A,0,$C;重做}
地图被保存在一维数组中。这没有二维解决方案优雅,但它也更短。包含成语@a=map{…}@a
,所有战斗都在括号内进行。AWK-245
虽然有点晚了,但是…数据在1-D数组中。使用2-D数组,解决方案大约长30个字符
NR<2{N=$1;R=$2;C=$3;K=$4;M=0}NR>1{for(i=0;i++<NF;)X[M++]=$i}END{for(k=0;k++<K;){
for(i=0;i<M;){Y[i++]=X[i-(i%C>0)]-(b=(N-1+X[i])%N)&&X[i+((i+1)%C>0)]-b&&X[i-C]-b
&&[i+C]-b?X[i]:b}for(i in Y)X[i]=Y[i]}for(i=0;i<M;)printf"%s%d",i%C?" ":"\n",
X[i++]}
NR1{for(i=0;i++为什么投票关闭?这对你来说是冒犯吗?我不明白为什么stackoverflowers会对code golf的问题是否合法大惊小怪。我建议把这个问题留给社区成员来解决。由此产生的解决方案对我这样的人来说是很有教育意义的。没有任何东西能展示编程语言的能力比code golf更简洁的年代…我真的很震惊于那些高傲的用户如此多的负面评论。FFS,这是一个任何想尝试一下的人的问题。就像我说的,我们用Java解决了它,我希望看到其他的解决方案。我是否应该把这个问题重新命名为code Volleyball,这样人们就不会觉得code golf的名字被偷了?长大吧。Ev每次发布代码高尔夫问题时,我都会看到人们抱怨,我想知道:“在你被忽略的标签列表中添加‘代码高尔夫’真的有那么难吗?”关于代码高尔夫的适当性的元讨论(到目前为止,裁决是肯定的)以及关于什么是“好”代码高尔夫问题的元讨论:(这可能需要更多的输入…).从后面开始,我们看到一个混合的代码黄金问题关闭和打开,所以YMMV。当我执行此操作时,代码还输出NRCK值,从第二个测试用例开始(所以,4 2 3 4
和0 0
)@Stephan202:这对我来说绝对不行……我不知道这怎么会发生,读代码。@Steve:我按照Brian的帖子中指定的方式输入。我以python2.6 Steve.py
的方式运行代码。然后输出应该由6行组成(同样,请参见Brian的帖子)。然而,由于某些原因,输出是8行。很奇怪,你没有观察到相同的行为…@Steve:我看了你的代码。它只处理一个测试用例,而不是所有的。啊,好吧,我现在明白了——我没有仔细阅读原文,认为每次运行一个测试用例。这个解决方案一次只处理一个测试用例。@Stephan202,如果您将Python和Haskell分成两个单独的答案,这将允许人们分别投票给他们。
3 4 4 3
0 1 2 0
1 0 2 0
0 1 2 0
0 1 2 2
4 2 3 4
1 0 3
2 1 2
0 0 0 0
2220
2101
2220
0200
103
212
import sys
A=range
l=lambda:map(int,raw_input().split())
def x(N,R,C,K):
if not N:return
m=[l()for _ in A(R)];n=[r[:]for r in m]
def u(r,c):z=m[r][c];n[r][c]=(z-((z-1)%N in[m[r+s][c+d]for s,d in(-1,0),(1,0),(0,-1),(0,1)if 0<=r+s<R and 0<=c+d<C]))%N
for i in A(K):[u(r,c)for r in A(R)for c in A(C)];m=[r[:]for r in n]
for r in m:print' '.join(map(str,r))
x(*l())
x(*l())
import Monad
import Array
import List
f=map
d=getLine>>=return.f read.words
h m k=k//(f(\(a@(i,j),e)->(a,maybe e id(find(==mod(e-1)m)$f(k!)$filter(inRange$bounds k)[(i-1,j),(i+1,j),(i,j-1),(i,j+1)])))$assocs k)
main=do[n,r,c,k]<-d;when(n>0)$do g<-mapM(const d)[1..r];mapM_(\i->putStrLn$unwords$take c$drop(i*c)$f show$elems$(iterate(h n)$listArray((1,1),(r,c))$concat g)!!k)[0..r-1];main
import Control.Monad
import Data.Array.IArray
import Data.List
type Index = (Int, Int)
type Heir = Int
type Kingdom = Array Index Heir
-- Given the dimensions of a kingdom and a county, return its neighbors.
neighbors :: (Index, Index) -> Index -> [Index]
neighbors dim (i, j) =
filter (inRange dim) [(i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1)]
-- Given the first non-Heir and a Kingdom, calculate the next iteration.
iter :: Heir -> Kingdom -> Kingdom
iter m k = k // (
map (\(i, e) -> (i, maybe e id (find (== mod (e - 1) m) $
map (k !) $ neighbors (bounds k) i))) $
assocs k)
-- Read a line integers from stdin.
readLine :: IO [Int]
readLine = getLine >>= return . map read . words
-- Print the given kingdom, assuming the specified number of rows and columns.
printKingdom :: Int -> Int -> Kingdom -> IO ()
printKingdom r c k =
mapM_ (\i -> putStrLn $ unwords $ take c $ drop (i * c) $ map show $ elems k)
[0..r-1]
main :: IO ()
main = do
[n, r, c, k] <- readLine -- read number of heirs, rows, columns and iters
when (n > 0) $ do -- observe that 0 heirs implies [0, 0, 0, 0]
g <- sequence $ replicate r readLine -- read initial state of the kingdom
printKingdom r c $ -- print kingdom after k iterations
(iterate (iter n) $ listArray ((1, 1), (r, c)) $ concat g) !! k
main -- handle next test case
import sys
H,R,C,B=map(int,raw_input().split())
M=(1,0), (0,1),(-1, 0),(0,-1)
l=[map(int,r.split())for r in sys.stdin]
n=[r[:]for r in l[:]]
def D(r,c):
x=l[r][c]
a=[l[r+mr][c+mc]for mr,mc in M if 0<=r+mr<R and 0<=c+mc<C]
if x==0and H-1in a:n[r][c]=H-1
elif x-1in a:n[r][c]=x-1
else:n[r][c]=x
G=range
for i in G(B):
for r in G(R):
for c in G(C):D(r,c)
l=[r[:] for r in n[:]]
for r in l:print' '.join(map(str,r))
g=loadstring("return io.read('*n')")repeat n=g()r=g()c=g()k=g()l={}c=c+1 for
i=0,k do w={}for x=1,r*c do a=l[x]and(l[x]+n-1)%n w[x]=i==0 and x%c~=0 and
g()or(l[x-1]==a or l[x+1]==a or l[x+c]==a or l[x-c]==a)and a or
l[x]io.write(i~=k and""or x%c==0 and"\n"or w[x].." ")end l=w end until n==0
{$_=<>;($~,$R,$C,$K)=split;if($~){@A=map{$_=<>;split}1..$R;$x=0,
@A=map{$r=0;for$d(-$C,$C,1,-1){$r|=($y=$x+$d)>=0&$y<@A&1==($_-$A[$y])%$~
if($p=(1+$x)%$C)>1||1-$d-2*$p}$x++;($_-$r)%$~}@A
while$K--;print"@a\n"while@a=splice@A,0,$C;redo}}
NR<2{N=$1;R=$2;C=$3;K=$4;M=0}NR>1{for(i=0;i++<NF;)X[M++]=$i}END{for(k=0;k++<K;){
for(i=0;i<M;){Y[i++]=X[i-(i%C>0)]-(b=(N-1+X[i])%N)&&X[i+((i+1)%C>0)]-b&&X[i-C]-b
&&[i+C]-b?X[i]:b}for(i in Y)X[i]=Y[i]}for(i=0;i<M;)printf"%s%d",i%C?" ":"\n",
X[i++]}