创建自己的健身运动并遵循irl


10

让我们一起做运动吧?只需跟随火柴人的动作。你问什么火柴人?我们将要创建的那个!

制作一个程序,只允许输入一个包含整数的字符串,并输出以下九个数字,它们之间的间隔为:

 @  \@/ |@_ _@| @/   \@ |@| \@\ /@/
/|\  |   |   |   |   |   |   |   |
/ \ / \ / \ / \ /|\ /|\ / \ / \ / \
 1   2   3   4   5   6   7   8   9

这将产生一个动画,然后我们可以跟随irl。

这是输入为“ 123245762” 时创建的输出的示例:

在此处输入图片说明

一些规则:

  • 这被标记为,因此以字节为单位的最短代码获胜
  • 输入是string唯一包含[1-9]长度可能在2到100个字符之间变化的**
  • 动画必须是无尽的循环
  • 间隔时间必须为750毫秒
  • 输入中不允许重复的相邻整数-这也包括输入的第一个和最后一个整数(请参阅第七个和八个测试用例)**

**在输入无效的情况下如何失败完全取决于您,但是应该清楚的是失败了。它可能会引发异常;只需在开始时返回即可;重新启动电脑;删除它自己的源代码/编译代码;入侵军队并向编制GPS的位置发射火箭。您的来电。编辑:不允许简单地将(正确/一半)动画显示为失败的输入。必须清楚的是,以下失败的测试用例的输入有问题。感谢@ user81655引起我注意,因此进行了编辑。

子规则:

  • 请在您的答案中张贴以下(非失败)测试用例之一的gif,您可以使用以下程序使它变得非常简单:screentogif.codeplex.com(当然,也可以使用任何其他创建gif的程序。)
  • 如果您在完成动画irl时实际进行练习,则可获得加分。;)

正确的测试用例:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

测试用例失败:

  1. 2 //字符太少
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 //字符过多
  3. 1232405762//包含无效输入(0
  4. 112212//由于1122存在而失败
  5. 1232457621 //由于开始和领先而失败 1

5
IMO这是在临界欺骗这个
彼得·泰勒

1
顺便说一句,不建议在发布挑战后进行编辑。
蓝色

imo输入验证破坏了挑战。
FlipTack

@FlipTack你确实是对的。我应该一直面对挑战,并假设所有输入均有效。这是我在PPCG上的第一个问题。不过,现在更改它为时已晚。
凯文·克鲁伊森

Answers:


0

Pyth,114个字节

.V0j@cv.Z"xÚí» À0DW¹NM@+Üñ\">íÂA¸êÄÓw»`3±2þ&'NövfAé8é~0,p'ÆìÞúr_'¥,d!YÈBíéqs"3tv@zb.d.75

输出GIF

在这里尝试

(无暂停,非无限)


嗯,不可能在Pyth中无限地返回/抛出或循环吗?还是需要太多字节/太耗时?(当前,它适用于所有正确的测试用例以及所有失败的测试用例。并且它还会添加的输出0。)不管怎么说,谢谢您的输入。毫无疑问,此条目是最不可读的代码片段之一。:)
Kevin Cruijssen '16

在线解释器不会在睡眠期间刷新IO,因此不会引起注意。您确实说过想要无限循环,所以我不确定您在那儿问什么。“如何失败取决于您”-为此,我正在做不确定的行为;该代码可能会执行任何操作(即使其行为应相同),而且我希望与某些可能的条目相比,该代码相对可读
Blue

4

SpecBAS-387字节

1 DIM m$=" @"#13"/|\"#13"/ \","\@/"#13" |"#13"/ \","|@_"#13" |"#13"/ \","_@|"#13" |"#13"/ \","@/"#13" |"#13"/|\"," \@"#13" |"#13"/|\","|@|"#13" |"#13"/ \","\@\"#13" |"#13"/ \","/@/"#13" |"#13"/ \"
2 INPUT a$: o=0
3 IF LEN a$<2 OR LEN a$>100 THEN 10
4 FOR i=1 TO LEN a$
5 n=VAL(a$(i))
6 IF n=0 OR n=o THEN 10
7 CLS : ?m$(n): o=n: WAIT 750
8 NEXT i
9 GO TO 4
10 CLS : ?" @"#13"-O-"#13"/ \"#13"FAT"

一直循环播放,直到您按ESC键为止。不能正确运动(错误输入-在此示例中,步骤0为0)会导致肥胖。GIF循环,在程序中它仅在该点停止。

#13是SpecBAS的等效项\n,可让您在字符串中包含换行符。

在此处输入图片说明


1
“ FAT”:D ......
亚当·瓦赫吉

2

JavaScript(ES6),165个字节

f=s=>{n=s[0];e.textContent=' @ \\@/|@__@|@/  \\@|@|\\@\\/@/'.substr(n*3-3,3)+(n>1?`
 | 
`:`
/|\\
`)+(n<5|n>6?'/ \\':'/|\\');s=s.slice(1)+n;s[0]-n&&setTimeout(f,750,s)}
f("123245762")
<pre id=e>


1

JavaScript(ES6),210个字节

s=>setInterval(_=>(c=console).clear(i=0)&c.log(`, @
/|\\
/ \\,\\@/
 |
/ \\,|@_
 |
/ \\,_@|
 |
/ \\,@/
 |
/|\\, \\@
 |
/|\\,|@|
 |
/ \\,\\@\\
 |
/ \\,/@/
 |
/ \\`.split`,`[s[i++%s.length]]),750)

这如何处理有关排除0和重复的规则?
Morgan Thrapp '16

4
@ Morgan'Venti'Thrappuccino我的印象是,无效输入不需要定义的行为,因为它说How it fails in case of invalid input is completely up to you。我只是通过显示动画来处理无效输入。:P其他现有答案中的任何一个都未对此进行检查,但是OP刚刚发布的答案确实如此,因此也许他确实希望我们处理无效输入。
user81655 '16

“我只是通过显示动画来处理无效输入。:P”大声笑。。这是一种查看方式。xD我将编辑问题。
凯文·克鲁伊森

0

Mathematica,252个字节

i=0;Dynamic[Uncompress["1:eJxTTMoPSuNkYGAoZgESPpnFJcFCQIaCQ4yBoZF+TUwMmFaIiQELx8Q46IMEFGrgwoJA4RqHeCyi8Q41aKICQFEUA2qg5gIlHdCEIeaimyAMcQTEWWj26aO7DQDaqDEh"][[FromDigits[#~StringTake~{i=i~Mod~StringLength@#+1}]]],UpdateInterval->3/4,TrackedSymbols->{}]&

如果有人可以创建GIF,那就太好了。在笔记本上运行。


0

Python3,338个字节

import os,time
p=" @ \n/|\\\n/ \\","\\@/\n | \n/ \\","|@_\n | \n/ \\","_@|\n | \n/ \\","@/ \n | \n/|\\"," \\@\n | \n/|\\","|@|\n | \n/ \\","\\@\\\n | \n/ \\","/@/\n | \n/ \\"
i=input()
for j in range(len(i)):(i[j]in"123456789"and i[j]!=i[(j+1)%len(i)])or exit()
while 1:[[time.sleep(0.75),os.system("clear"),print(p[int(j)-1])]for j in i]

0

Java 8,663 636 634 631 596 355 354字节

我只是为了尝试使用Java编写程序。诚然,我在打高尔夫球和正则表达式方面表现很差,所以很可能会打更多(很多?)。但是,这里是Java7。
现在差不多两年后,我几乎将Java 8中的代码减半了。尽管如此,我为什么制定了有关验证输入并需要完整程序的规则,但是...>。>我讨厌我现在的过去

interface M{static void main(String[]a)throws Exception{if(!a[0].matches("[1-9]{2,100}")|a[0].matches("(.).*\\1|.*(.)\\2.*"))return;for(;;)for(int c:a[0].getBytes()){c-=48;System.out.printf("%s%n%s%n%s%n",c<2?" @ ":c<3?"\\@/":c<4?"|@_":c<5?"_@|":c<6?"@/ ":c<7?" \\@":c<8?"|@|":c<9?"\\@\\":"/@/",c<2?"/|\\":" | ",c%7>4?"/|\\":"/ \\");Thread.sleep(750);}}}

说明:

在线尝试。(在60秒后超时。)

interface M{                     // Class
  static void main(String[]a)    //  Mandatory main-method
      throws Exception{          //    Required throws for the `Thread.sleep`
    if(!a[0].matches("[1-9]{2,100}")
                                 //   Validate 2-100 integers only containing 1-9
       |a[0].matches("(.).*\\1|.*(.)\\2.*")
                                 //   Validate no adjacent duplicated char (with wrap-around)
      return;                    //    If either isn't valid, stop the program
    for(;;)                      //   Loop indefinitely
      for(int c:a[0].getBytes()){//    Inner loop over the characters of the input
        c-=48;                   //     Convert character-code to integer
        System.out.printf("%s%n%s%n%s%n",
                                 //     Print:
          c<2?" @ ":c<3?"\\@/":c<4?"|@_":c<5?"_@|":c<6?"@/ ":c<7?" \\@":c<8?"|@|":c<9?"\\@\\":"/@/",
                                 //      The top part of the stick figure
          c<2?"/|\\":" | "       //      The middle part of the stick figure
          c%7>4?"/|\\":"/ \\");  //      The bottom part of the stick figure
        Thread.sleep(750);}}}    //     Sleep 750 ms

Gif :(
注意:旧的gif,因为它现在显然是jdk1.8 +。)

在此处输入图片说明


通常,我们说Java 7将Java版本称为它1.7可能会使一些人Java 17

long if语句可以变成p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();。我还认为定义lw浪费字符现在已经被使用了两次。考虑让它s成为char[] s=a[0].toCharArray(); 然后,使用它的所有其他操作要短得多。
Alex Meiburg
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.