到处都是蛇


12

挑战

挑战很简单:打印一条蛇
您将获得蛇的长度作为输入。
长度为2的蛇看起来像这样:

==(:)-

长度为7的蛇看起来像这样:

=======(:)-

换句话说,一条蛇的长度等于头部前有多少等号

用法

假设我做了一个C ++实现并将其编译为./getsnake
我可以这样运行:

$ ./getsnake 10
==========(:)-

澄清说明

  • 不允许出现标准漏洞。
  • 您可以以任何可接受的方式获取输入和输出。
  • 您可以假设所有给定的输入均为正整数。
  • 您可以编写函数而不是常规程序。

8
仅在半小时内将挑战留在沙盒中是没有用的。您确实获得了一些反馈,但是通常最好将其保留在沙箱中24-72小时。(另外,您还可以
充实

功能是否足够?您是否需要完整的程序?
betseg 2016年

@betseg函数就足够了
InitializeSahib

4
恐怕所有“ 我的波浪形”答案都可以毫不费力地移植到此。
manatwork '16

3
负整数会导致蛇吞咽自己。
GuitarPicker

Answers:


18

六边形,33字节

不会赢,但仍然很酷。可能会更多地打高尔夫球。

在线尝试!

打高尔夫球:

61}?.$)@$j;(3<./;.}l/.400;5\j;.'\

格式:

    6 1 } ?
   . $ ) @ $
  j ; ( 3 < .
 / ; . } l / .
  4 0 0 ; 5 \
   j ; . ' \
    . . . .

有色的(使用Timwi的Hexagony Colorer制成

你发现了一个秘密的小偷! =======(:)-

说明:

循环打印“ =”,直到计数器达到0。

    6 1 } ?
   . $ . . $
  . . ( . . .
 / . . } . . .
  . . . ; . .
   . . . ' .
    . . . .

打印“(”

    . . . .
   . . . . .
  . . . . . .
 / ; . . . . .
  4 . . . . .
   j . . . .
    . . . .

打印“:”

    . . . .
   . . . . .
  . ; ( 3 < .
 . . . } l / .
  . . . . . .
   . . . . .
    . . . .

打印“)”

    . . . .
   . . . . .
  j . . . . .
 . . . . . . .
  . . . ; 5 \
   . . . . \
    . . . .

以上值是使用简单的python脚本生成的。但是,我的“-”用完了。因此,我不得不诉诸更高级的技巧。

当程序打印出“)”时,单元格的值不是41,而是1065。六角形仅在打印时修改该值。事实证明,(1065 * 1000 + 4)%256 = 44,与“-”的ascii值仅相差45。然后,我仅增加,打印并在打印后的某个位置插入@。

    . . . .
   . $ ) @ $
  j . . 3 . .
 / . . } . . .
  4 0 0 . 5 \
   . ; . . \
    . . . .

.j4 /时如何称其为编程语言?是...打印“(” ??? .j4 /;的哪一部分是打印内容,哪一部分是要打印的字符串?
Fogmeister

2
@Fogmeister [Part 1/2]在Hexagony中,任何字母字符都将当前存储单元的值设置为该字符的ascii值。“ j”的ascii值为106,因此将其设置为内存。此外,与数字字符乘以10的当前小区的值,然后自己添加到它(这允许容易地施工号码,如61处开始。

3
[第2/2部分]因此,j4将存储单元设置为1064。当IP到达“ /”时,它将反映为“;”,它打印出与当前存储单元%256相对应的ascii字符。1064% 256 = 40,为“(”我希望的ASCII值这个回答你的问题。

谢谢。是的,确实如此。我想这更多是一种用来测试大脑的语言。而不是一种编写程序的方式呢?有趣。
Fogmeister

@Fogmeister有许多深奥的编程语言,它们在实际工作中比大脑扭曲的练习更多,而不是有用的,尽管如果您足够努力的话,它们也可以进行实际工作。
Sparr


12

Brian&Chuck,31个字节

,{-?>}-):(=?
#}<<.{?_<.<.<.<.<.

字节值的形式输入,例如,输入!给出长度为33的蛇。

在线尝试!

有一阵子了...

说明

Brian&Chuck快速入门:

  • 该程序的第一行是Brian,第二行是Chuck。
  • Brian和Chuck是两个Brainfuck的实例。主要发现是Chuck的程序是Brian的录音带,反之亦然。磁带头/指令指针从每个磁带的第一个单元格开始,执行从Brian开始。
  • 至于命令,有一些区别。只有Brian可以使用,(输入),只有Chuck可以使用.(输出)。除了<>还有{},它们将磁带头移到下一个零单元格({如果途中没有零单元格,则移动到磁带的左端)。代替[...],唯一的控制流程是?如果当前单元格非零,则将控制切换到另一个实例。在另一个单元格上第一个执行的指令是条件之后的一条。最后,_为方便起见,它只是空字节的别名。

现在的代码。Brian从此开始:

,{-?

这会将输入读取到Chuck的第一个单元格中,然后使用{(将当前不执行任何操作)将磁带头移到左侧,-如果值仍为非零,则在切换对Chuck的控制之前将其递减。这开始主循环。然后Chuck运行以下位:

}<<.{?

这会将Brian上的磁带头移到最末端,将两个单元格移到上,=并在磁带头一直向左打印之前将其打印,并将控制权切换回Brian。这就是B&C中循环通常的工作方式。

一旦输入减少到零,?Brian的磁带上的内容将什么也不做。然后Brian执行这部分:

>}-):(=?

由于):(=没有操作,因此实际代码仅为>}-?。我们从移出零单元>,向上移至,将_}递减以使其变为非零,然后通过切换到Chuck ?。然后运行Chuck的最后一位:

<.<.<.<.<.

这只是在Chuck前面打印五个字符,即=(:)-。请注意,=由于主循环仅对N-1input 执行了一次,因此我们需要打印另一个N


10
恭喜100k
Insane


6

视网膜,10字节

.+
$*=(:)-

在线尝试!

这是一个简单的正则表达式替换。

它匹配.+匹配整个输入的内容,然后将其替换为$*=(;)-

$*是视网膜中唯一的特点:它是字符重复特殊操作。

例如,5$*x将变为xxxxx

如果缺少前一个参数,则将整个匹配项用作默认参数。


5

Python,21个字节

lambda n:"="*n+"(:)-"

伊迪恩!


您可以执行以下操作来减少3个字节:"="*input()+"(:)-"
gowrath '16

@gowrath然后它不会打印任何内容
Leaky Nun

如果您在口译员中,它将输出该信息吗?Op说,您可以通过任何方式获得输出。
gowrath

@gowrath您不能以为我们在REPL
Leaky Nun

这是打代码的一般规则吗?新消息在这里:)
gowrath '16


5

Java 8,52字节

n->new String(new char[n]).replace("\0","=")+"(:)-";

测试套件。(编译>执行)

学分

传统方式,61 54 53字节

感谢Kevin Cruijssen提供7个字节。

感谢Dom Hastings提供1个字节。

n->{String s="";for(;n-->0;)s+="=";return s+"(:)-";};

+1哦,对于传统的+1:for(int i=0;i<n;i++)可以打高尔夫球到for(;n>0;n--),因为无论如何您都不需要for循环的输入。
凯文·克鲁伊森

@KevinCruijssen谢谢,编辑
Leaky Nun

通过您提供的链接进行测试,看起来您可以将for循环更改为:for(;n-->0;)保存另一个字节!
Dom Hastings

@DomHastings编辑感谢
Leaky Nun


4

C,38

f(n){for(;n--;printf(n?"=":"=(:)-"));}

在ideone上尝试。


1
不是更短,而是更酷:f(n){~-printf(n?"=":"=(:)-")||f(~-n);}
orlp

f(n){for(;n;printf(n--?"=":"(:)-"));}为-1。
暴民埃里克(Erik the Outgolfer)'16年

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ-没有输出头部。
owacoder '16

@owacoder好吧,C不是我的主要语言……
Outgolfer的Erik,16年

1
@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ这就是为什么您不应该发布未经测试的高尔夫建议的原因(尤其是如果您需要5秒钟的时间使用答案中提供的链接来测试您的建议)。
Martin Ender

4

05AB1E,10 9字节

'=×"ÿ(:)-

说明

'=         # push equal-sign
  ×        # repeat input nr of times
   "ÿ(:)-  # interpolate snake body with head as a string
           # implicitly display

在线尝试

感谢Adnan,节省了1个字节。


'=×"ÿ(:)-对于9个字节:)。这使用字符串插值。
阿德南

1
@Adnan:Aaah,所以就是ÿ这样:)
Emigna '16

4

Javascript,23个字节

n=>"=".repeat(n)+"(:)-"

1
我正要发布确切的代码!击败我吧!进行
投票

今天,我了解了箭头功能。谢谢。不知道那是一回事
bobkingof12vs

您如何调用该函数实例?我只是尝试n(3)并收到一个Uncaught ReferenceError: n is not defined错误...
WallyWest '16

@WallyWest -尝试x=n=>"=".repeat(n)+"(:)-"; x(7);
eithed

@eithedog然后答案不应该有缩写x=并且改为25个字符吗?
WallyWest '16

4

C#,28个字节

n=>new string('=',n)+"(:)-";

我一直对lambda片段感兴趣。你怎么甚至可以运行这个?
downrep_nation

@downrep_nation它接受一个int并自动返回字符串,因为它只是一个语句
TheLethalCoder

答案应该是完整的程序或功能,而不仅仅是片段。因此,此答案似乎不完整。
raznagul

@raznagul这是一个匿名函数,因此它已完成
TheLethalCoder 16'Aug

@TheLethalCoder:也许尝试在线链接将有助于理解它。(csharppad.com
raznagul

4

Python,24个字节。

print"="*input()+"(:)-"

input() 从用户那里获取输入

*,当用于字符串和整数时,将创建一个新字符串,该字符串由原始的连接副本组成。例如:"hello "*3输出hello hello hello

通过将=和相乘input(),可以得到=用户指定长度的字符串。

使用+连接两个字符串(在这种情况下,我们的身体"=…="与头部相连)"(:)-"来制作蛇。

print 输出结果。


3

GolfScript,11个10字节

~"="*"(:)-"

将“ =”乘以输入,然后加上head。

-1感谢Leaky Nun


3

Mathematica,21个 20字节

"="~Table~#<>"(:)-"&

匿名函数。以数字n作为输入,并返回长度为n的蛇作为输出。"="~Table~#生成{"=", "=", ..., "="}长度为n<>"(:)-"的列表,并连接列表的元素,并将其追加"(:)-"到结果字符串中。


1
可再打一个字节:"="~Table~#<>"(:)-"&
LLlAMnYP '16

3

R,32 27字节

此解决方案非常简单,rep函数会重复第一个元素("="scan()次,实际上是用户的输入。

a=scan();cat(rep("=",a),"(:)-")

编辑

cat(rep("=",scan()),"(:)-")

答案短一点,scan()直接使用。

或者,

cat(rep("=",scan()),"(:)-",sep="")

对于非斩蛇(34字节


我想说这sep=""是需要的,否则您的蛇看起来就像是穿越铁路的那条蛇:= = = (:)-
manatwork

此处生产的蛇确实有些碎,但是OP的委托仅表明蛇的长度是头部前等号的数量。sep尽管如此,我仍将其 作为旁注;)
Frédéric16年

3

批处理,68字节

@set h=(:)-
@for /l %%i in (1,1,%1)do @call set h==%%h%%
@echo %h%


2

Perl 6的 16个15  12字节

{"{'='x$_}(:)-"}
{'='x$_~'(:)-'}
'='x*~'(:)-'

说明:

'=' x * # 「=」 string repeated by the only parameter 「*」
~        # concatenated with
'(:)-'   # the head

用法:

# store it in the lexical namespace
my &snake = '='x*~'(:)-';

put snake 10;

# put ^5 .map: &snake;
put ^5 .map: '='x*~'(:)-';
==========(:)-
(:)- =(:)- ==(:)- ===(:)- ====(:)- =====(:)-

2

JAISBaL,9个字节

t=*Qb(:)-

详细:

# \# enable verbose parsing #\
push1 =        \# push = onto the stack #\
mul            \# multiply the top two values of the stack #\
popout         \# pop the top value of a stack and print it #\
print4 (:)-    \# print (:)- #\

使用JAISBaL-0.0.7进行了测试 (编译的.jar刚刚被推送,但是源代码已经在git上运行了一段时间)


#在语言名称前使用,以使其看起来像其他所有人一样。
迈克尔·克莱恩

@MichaelKlein好的
苏格拉底凤凰城

2

PowerShell v2 +,19个字节

'='*$args[0]+'(:)-'

完整程序。接受输入$args[0],使用字符串乘法构造身体,然后将字符串串联到头部。

PS C:\Tools\Scripts\golfing> .\snakes-all-around.ps1 7
=======(:)-

PS C:\Tools\Scripts\golfing> .\snakes-all-around.ps1 77
=============================================================================(:)-

"$("="*[int]$args[0])(:)-"
恭喜


2

切达(Cheddar),15个字节(非竞争)

n->'='*n+'(:)-'

一个简单的答案。


1

Sesos,11个字节

十六进制转储:

0000000: aaaa5e a0f7b4 ed4cee 5d3b                         ..^....L.];

在线尝试!

汇编器:

set numin
add 61
fwd 1
get
jmp,sub 1,rwd 1,put,fwd 1,jnz
add 40,put
rwd 1,sub 3,put
fwd 1,add 1,put
add 4,put

1

K,17字节

{,[x#"=";"(:)-"]}

例;

f:{,[x#"=";"(:)-"]}
-1(f'!10);          /print out the result of calling f where x is 0 1 2 3 4 5....
(:)-
=(:)-
==(:)-
===(:)-
====(:)-
=====(:)-
======(:)-
=======(:)-
========(:)-
=========(:)-

说明;

{}                 /function x is implicit and is an int
x#"="              /take (#) x of "=" --> so 3#"=" gives "==="
,[x#"=";"(:)-"]    /comma is a join that takes 2 args --> ,[x;y] gives the concatination of x and y --> "a","abc" is the same as ,["a";"abc"] and gives "aabc"

什么是-1(…… );
2013年

保存一个字节:{(x#"="),"(:)-"}
2013年

谢谢亚当。-1打印到控制台。-1“你好”; 将打印Hello
Chromozorz '16

但是打印不是隐式的吗?
2013年

是的,但是包括双引号...“ ====(:)-”而不是; =====(:)
Chromozorz

1

Perl,16 +1(-p标志)= 17个字节

$_="="x$_."(:)-"

需要-p标志,因此运行:

perl -pe '$_="="x$_."(:)-"'


1

Befunge-98,24个字节

从用户那里获取数字输入,然后打印蛇。

'=&:00pk:00gk,"-):("4k,@

1

Matlab /八度,22字节

@(n)[~(1:n)+61 '(:)-']

这是一个匿名函数。

在Ideone上尝试一下

说明

假设n= 5

1:n产生行向量[1 2 3 4 5]

~(1:n)否定每个条目,因此给出[0 0 0 0 0]

...+61将添加61到每个条目,因此得到[61 61 61 61 61]61是character的ASCII值=

[... '(:)-']将其与字符串连接'(:)-'。这会在连接之前自动转换[61 61 61 61 61]为字符串'====='

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.