Crea tu propio ejercicio de gimnasio y sigue a lo largo de irl

10

Hagamos un ejercicio juntos, ¿de acuerdo? Simplemente sigue los movimientos del stickman. ¿Qué stickman preguntas? ¡El que estamos por crear!

Cree un programa que permita una entrada de cadena que solo contenga números enteros y genere las siguientes nueve figuras con un intervalo entre ellas:

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

Esto dará como resultado una animación, que luego podemos seguir a lo largo de irl.

Aquí hay un ejemplo de la salida creada cuando la entrada es " 123245762":

ingrese la descripción de la imagen aquí

Algunas reglas:

  • Esto está etiquetado como , por lo que gana el código más corto en bytes
  • La entrada es un stringcontenido único [1-9]con una longitud que puede variar de 2 a 100 caracteres **
  • La animación debe ser un bucle sin fin.
  • El intervalo de tiempo debe ser de 750 ms.
  • No se permiten números enteros adyacentes duplicados en la entrada; esto también incluye el primer y el último número entero de la entrada (consulte los casos de prueba séptimo y octavo) **

** Cómo falla en caso de una entrada no válida depende completamente de usted, pero debe quedar claro que falla . Podría arrojar una excepción; simplemente regrese al comienzo; reinicia tu PC; eliminar su propio código fuente / compilación; piratear a los militares y dispara un cohete a la ubicación GPS de compilación. Tu llamada. EDITAR: no está permitido mostrar simplemente una animación (correcta / media) como entrada errónea. Debe quedar claro que algo está mal con la entrada para los casos de prueba que fallan a continuación. Gracias a @ user81655 por llamar mi atención, de ahí la edición.

Subreglas:

  • Publique el gif para uno de los casos de prueba (sin fallas) a continuación en su respuesta, que puede hacer muy fácil con el siguiente programa: screentogif.codeplex.com (cualquier otro programa de creación de gif también está permitido, por supuesto).
  • Puntos de bonificación si realmente haces el ejercicio junto con la animación irl cuando haya terminado. ;)

Casos de prueba correctos:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Casos de prueba fallidos:

  1. 2 // Muy pocos personajes
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Demasiados personajes
  3. 1232405762// Contiene entrada inválida (la 0)
  4. 112212// Falla por el 11y el 22presente
  5. 1232457621 // falla debido al inicio y al inicio 1
Kevin Cruijssen
fuente
55
En mi opinión, este es un engaño límite de esto
Peter Taylor
1
Por cierto, no se recomienda realizar ediciones después de publicar un desafío.
Azul
La validación de entrada arruina el desafío.
FlipTack
@FlipTack De hecho tienes razón. Debería haber seguido con el desafío y asumir que todas las entradas son válidas. Esta fue mi primera pregunta aquí sobre PPCG. Sin embargo, es demasiado tarde para cambiarlo ahora.
Kevin Cruijssen

Respuestas:

0

Pyth, 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 salida

Pruébalo aquí

(Sin pausa, no infinito)

Azul
fuente
Hmm, ¿no es posible regresar / lanzar o recorrer infinitamente en Pyth? ¿O tomará demasiados bytes / es demasiado lento para hacer? (Actualmente funciona de la misma manera para todos los casos de prueba correctos, así como para todos los casos de prueba que fallan. Y también agrega la salida para 0). De todos modos, gracias por la entrada. Definitivamente, uno de los fragmentos de código más ilegibles para esta entrada es mi suposición. :)
Kevin Cruijssen
El intérprete en línea no descarga IO durante un sueño, por lo que no se nota. Dijiste que querías un bucle infinito, así que no estoy seguro de lo que estás preguntando allí. "Cómo falla depende de usted" - Estoy haciendo un comportamiento indefinido para esto; el código puede hacer cualquier cosa (aunque DEBERÍA comportarse igual) También espero que esto sea relativamente legible en comparación con algunas entradas posibles
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"

Sigue en bucle hasta que presione ESC. No hacer ejercicio correctamente (entrada incorrecta, en este ejemplo un 0 como uno de los pasos) conduce a la gordura. Los bucles GIF, en el programa simplemente se detiene en ese punto.

#13es el equivalente de SpecBAS \ny le permite incluir el avance de línea en cadenas.

ingrese la descripción de la imagen aquí

Brian
fuente
1
"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
fuente
1

JavaScript (ES6), 210 bytes

s=>setInterval(_=>(c=console).clear(i=0)&c.log(`, @
/|\\
/ \\,\\@/
 |
/ \\,|@_
 |
/ \\,_@|
 |
/ \\,@/
 |
/|\\, \\@
 |
/|\\,|@|
 |
/ \\,\\@\\
 |
/ \\,/@/
 |
/ \\`.split`,`[s[i++%s.length]]),750)
usuario81655
fuente
¿Cómo maneja esto las reglas sobre exclusión 0y duplicados?
Morgan Thrapp
44
@ Morgan'Venti'Thrappuccino Tenía la impresión de que las entradas inválidas no necesitan un comportamiento definido, como dice How it fails in case of invalid input is completely up to you. Solo manejo entradas no válidas mostrando una animación. : P Ninguna de las otras respuestas existentes verificó esto tampoco, sin embargo, la respuesta que acaba de publicar el OP sí, así que tal vez él quería que manejáramos entradas no válidas.
user81655
"Solo manejo entradas no válidas mostrando una animación.: P" Lol .. Esa es una forma de verlo. xD Editaré la pregunta.
Kevin Cruijssen
0

Mathematica, 252 bytes

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

Sería bueno si alguien pudiera crear un GIF. Corre en un cuaderno.

LegionMammal978
fuente
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
fuente
0

Java 8, 663 636 634 631 596 355 354 bytes

Solo por los lols intenté hacer el programa en Java. Es cierto que soy bastante malo en el golf y las expresiones regulares, por lo que lo más probable es que se pueda jugar al golf (¿mucho?) Más. Sin embargo, aquí está en Java 7.
Ahora, casi dos años después y casi reduje a la mitad el código en Java 8. ¿Por qué alguna vez hice esas reglas sobre validar la entrada y requerir un programa completo, aunque ...>.> Odio mi pasado yo ahora ..

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

Explicación:

Pruébalo en línea. (Después de que se haya agotado el tiempo de espera después de 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 antiguo, ya que es claramente jdk1.8 + ahora).

ingrese la descripción de la imagen aquí

Kevin Cruijssen
fuente
Por lo general, se dice Java 7para referirse a esta versión de Java como 1.7puede confundir a algunos a pensar que se trata de Java 1la revisión7
GamrCorps
La larga declaración if podría convertirse en algo así p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. También creo que define ly wdesperdicia personajes, ahora que solo se usan dos veces. Considere dejar en scambio ser char[] s=a[0].toCharArray(); todas las demás operaciones con él son mucho más cortas, entonces.
Alex Meiburg