Crie o seu próprio Gym Exercise e acompanhe irl

10

Vamos fazer um exercício juntos, sim? Basta seguir os movimentos do stickman. Que stickman você pergunta? O que estamos prestes a criar!

Crie um programa que permita uma entrada de seqüência de caracteres contendo apenas números inteiros e produza as nove figuras seguintes com um intervalo entre elas:

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

Isso resultará em uma animação, que podemos seguir ao longo da irl.

Aqui está um exemplo da saída criada quando a entrada é " 123245762":

insira a descrição da imagem aqui

Algumas regras:

  • Isso é marcado como , então o código mais curto em bytes ganha
  • A entrada é stringapenas uma contendo [1-9]com um comprimento potencialmente variando de 2 a 100 caracteres **
  • A animação deve ser um loop sem fim
  • O intervalo de tempo deve ser 750 ms
  • Nenhum número inteiro adjacente duplicado é permitido na entrada - isso também inclui o primeiro e o último número inteiro da entrada (consulte o sétimo e o oito casos de teste) **

** A decisão de como ela falha no caso de entrada inválida é totalmente sua, mas deve ficar claro que ela falhará . Poderia lançar uma exceção; simplesmente retorne no início; reinicie o seu PC; exclua seu próprio código-fonte / compilação; invadir as forças armadas e disparar um foguete para a localização GPS de compilação. Sua chamada. EDIT: Não é permitido exibir simplesmente uma animação (correta / metade) como entrada com falha. Deve ficar claro que há algo errado com a entrada para os casos de teste com falha abaixo. Agradeço a @ user81655 por trazer isso à minha atenção, daí a edição.

Sub-regras:

  • Poste o gif em um dos casos de teste (sem falha) abaixo em sua resposta, o que você pode facilitar com o seguinte programa: screentogif.codeplex.comclaro que qualquer outro programa de criação de gif também é permitido).
  • Pontos de bônus se você realmente fizer o exercício juntamente com a animação irl quando ela terminar. ;)

Casos de teste corretos:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Casos de teste com falha:

  1. 2 // Muito poucos caracteres
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Demasiados caracteres
  3. 1232405762// Contendo entrada inválida (the 0)
  4. 112212// Falha por causa do 11e 22presente
  5. 1232457621 // Falha devido ao início e à liderança 1
Kevin Cruijssen
fonte
5
IMO este é um joguete fronteira do presente
Peter Taylor
11
BTW, não é recomendável fazer edições após o lançamento de um desafio.
Azul
A validação de entrada arruina o desafio.
21417 FlipTack
@FlipTack Você está realmente certo. Eu deveria ter continuado com o desafio e assumir que todas as informações são válidas. Esta foi a minha primeira pergunta aqui no PPCG. Um pouco tarde para mudar agora.
Kevin Cruijssen

Respostas:

0

Pitão, 114 bytes

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

GIF de saída

Experimente aqui

(Sem pausa, não infinito)

Azul
fonte
Hmm, não é possível retornar / lançar ou fazer um loop infinito em Pyth? Ou vai demorar muito bytes / é muito demorado para fazer? (Atualmente, funciona da mesma forma para todos os casos de teste corretos, assim como para todos os casos de teste com falha. E também adiciona a saída para 0.) Independentemente disso, obrigado pela entrada. Definitivamente, um dos trechos de código mais ilegíveis para esta entrada é o meu palpite. :)
Kevin Cruijssen 06/04
O intérprete on-line não libera E / S durante o sono, portanto não é percebido. Você disse que queria um loop infinito, então não tenho certeza do que está perguntando lá. "Como isso falha é com você" - estou fazendo um comportamento indefinido para isso; o código pode fazer qualquer coisa (mesmo que ele deve se comportar da mesma) Também estou esperando que este seja relativamente legível em comparação com algumas entradas possíveis
Azul
4

SpecBAS - 387 bytes

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"

Mantém o loop até você pressionar ESC. A falta de exercício adequado (entrada incorreta - neste exemplo, 0 como uma das etapas) leva à gordura. O GIF faz um loop, no programa ele pára naquele momento.

#13é o equivalente ao SpecBAS \ne permite incluir o avanço de linha nas strings.

insira a descrição da imagem aqui

Brian
fonte
11
"FAT": D ......
Adam Varhegyi
2

JavaScript (ES6), 165 bytes

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>

Neil
fonte
1

JavaScript (ES6), 210 bytes

s=>setInterval(_=>(c=console).clear(i=0)&c.log(`, @
/|\\
/ \\,\\@/
 |
/ \\,|@_
 |
/ \\,_@|
 |
/ \\,@/
 |
/|\\, \\@
 |
/|\\,|@|
 |
/ \\,\\@\\
 |
/ \\,/@/
 |
/ \\`.split`,`[s[i++%s.length]]),750)
user81655
fonte
Como isso lida com as regras sobre exclusão 0e duplicatas?
Morgan Thrapp
4
@ Morgan'Venti'Thrappuccino Fiquei com a impressão de que entradas inválidas não precisam de um comportamento definido, como diz How it fails in case of invalid input is completely up to you. Eu apenas ligo com entrada inválida exibindo uma animação. : P Nenhuma das outras respostas existentes também verificou isso, no entanto, a resposta que o OP acabou de publicar faz, então talvez ele quisesse que lidássemos com entradas inválidas.
user81655
"Eu apenas manipulo entrada inválida exibindo uma animação.: P" Lol .. Essa é uma maneira de olhar para ela. xD vou editar a pergunta.
Kevin Cruijssen
0

Mathematica, 252 bytes

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

Seria bom se alguém pudesse criar um GIF. Corra em um caderno.

LegionMammal978
fonte
0

Python3, 338 bytes

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]
mIllIbyte
fonte
0

Java 8, 663 636 634 631 596 355 354 bytes

Apenas para os lols, tentei fazer o programa em Java. É certo que eu sou muito ruim em golfe e regexes, então provavelmente pode ser mais (muito?). No entanto, aqui está em Java 7.
Agora, quase dois anos depois, eu quase reduzi o código para metade em Java 8. Por que eu já fiz essas regras sobre validar a entrada e exigir um programa completo, apesar de ...>.> Eu odeio meu passado eu agora ..

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);}}}

Explicação:

Experimente online. (Após expirar o tempo limite após 60 segundos).

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:
(Nota: gif antigo, já que é claramente o jdk1.8 + agora.)

insira a descrição da imagem aqui

Kevin Cruijssen
fonte
Normalmente dizemos que Java 7nos referimos a esta versão do Java, pois 1.7podemos confundir alguns que pensam que é uma Java 1revisão7
#
A declaração if longa poderia ser transformada em algo parecido p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. Também acho que definir le wdesperdiçar caracteres, agora que eles são usados ​​apenas duas vezes. Considere deixar sser char[] s=a[0].toCharArray(); todas as outras operações com ele são muito mais curtas, então.
Alex Meiburg