Créez votre propre exercice de gym et suivez-le


10

Faisons un exercice ensemble, d'accord? Suivez simplement les mouvements du stickman. Quel stickman vous demandez? Celui que nous allons créer!

Créez un programme qui autorise une entrée de chaîne contenant uniquement des entiers et génère les neuf chiffres de bâton suivants avec un intervalle entre les deux:

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

Cela se traduira par une animation, que nous pourrons ensuite suivre le long d'irl.

Voici un exemple de la sortie créée lorsque l'entrée est " 123245762":

entrez la description de l'image ici

Certaines règles:

  • Il s'agit du , donc le code le plus court en octets l'emporte
  • L'entrée est un stringseul contenant [1-9]d'une longueur pouvant varier de 2 à 100 caractères **
  • L'animation doit être une boucle sans fin
  • L'intervalle de temps doit être de 750 ms
  • Aucun entier adjacent dupliqué n'est autorisé dans l'entrée - cela inclut également le premier et le dernier entier de l'entrée (voir les septième et huit cas de test) **

** La façon dont cela échoue en cas d'entrée invalide dépend entièrement de vous, mais il doit être clair qu'il échoue . Cela pourrait jeter une exception; revenez simplement au début; redémarrez votre PC; supprimer son propre code source / de compilation; pirater l'armée et tirer une fusée vers l'emplacement de compilation GPS. Ton appel. EDIT: Il n'est pas permis d'afficher simplement une animation (correcte / à moitié) comme entrée défaillante. Il doit être clair que quelque chose ne va pas avec l'entrée des tests échoués ci-dessous. Merci à @ user81655 d' avoir porté cela à mon attention, d'où la modification.

Sous-règles:

  • Veuillez poster le gif pour l'un des cas de test (non défaillants) ci-dessous dans votre réponse, que vous pouvez rendre très facile avec le programme suivant: screentogif.codeplex.com (Tout autre programme de création de gif est également autorisé bien sûr.)
  • Des points bonus si vous faites l'exercice en même temps que l'animation quand il est terminé. ;)

Cas de test corrects:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Échec des tests:

  1. 2 // Trop peu de caractères
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Trop de caractères
  3. 1232405762// Contenant une entrée invalide (le 0)
  4. 112212// Échoue à cause du 11et du 22présent
  5. 1232457621 // Échoue en raison du début et de la fin 1

5
OMI c'est une dualité limite de cela
Peter Taylor

1
BTW, il est déconseillé d'apporter des modifications après la publication d'un défi.
Blue

imo la validation des entrées gâche le défi.
FlipTack

@FlipTack Vous avez en effet raison. J'aurais dû juste relever le défi et supposer que toutes les entrées sont valides. C'était ma toute première question ici sur PPCG. Un peu trop tard pour le changer maintenant, cependant.
Kevin Cruijssen

Réponses:


0

Pyth, 114 octets

.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 de sortie

Essayez-le ici

(Pas de pause, non infini)


Hmm, il n'est pas possible de retourner / lancer ou boucler infiniment en Pyth? Ou cela prendra trop d'octets / prend trop de temps à faire? (Actuellement, cela fonctionne de la même manière pour tous les cas de test corrects, ainsi que pour tous les cas de test défaillants. Et il ajoute également la sortie pour 0.) Quoi qu'il en soit, merci pour l'entrée. Certainement l'un des extraits de code les plus illisibles pour cette entrée est ma supposition. :)
Kevin Cruijssen

L'interprète en ligne ne vide pas les entrées / sorties pendant un sommeil, il n'est donc pas remarqué. Vous avez dit que vous vouliez une boucle infinie, donc je ne suis pas sûr de ce que vous demandez là-bas. "Comment cela échoue, c'est à vous" - je fais un comportement indéfini pour cela; le code peut faire n'importe quoi (même s'il DEVRAIT se comporter de la même manière). Je m'attends également à ce que cela soit relativement lisible par rapport à certaines entrées possibles
Blue

4

SpecBAS - 387 octets

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"

Continue de boucler jusqu'à ce que vous appuyiez sur ESC. Le fait de ne pas s'exercer correctement (saisie incorrecte - dans cet exemple, un 0 comme l'une des étapes) conduit à l'adiposité. Le GIF boucle, dans le programme, il s'arrête juste à ce point.

#13est l'équivalent de SpecBAS \net vous permet d'inclure un saut de ligne dans les chaînes.

entrez la description de l'image ici


1
"FAT": D ......
Adam Varhegyi

2

JavaScript (ES6), 165 octets

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 octets

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

Comment cela gère-t-il les règles d'exclusion 0et de doublons?
Morgan Thrapp

4
@ Morgan'Venti'Thrappuccino J'avais l'impression que les entrées invalides n'ont pas besoin d'un comportement défini, comme il est dit How it fails in case of invalid input is completely up to you. Je gère simplement les entrées invalides en affichant une animation. : P Aucune des autres réponses existantes n'a vérifié cela non plus, mais la réponse que l'OP vient de publier le fait, alors peut-être qu'il voulait que nous gérions les entrées invalides.
user81655

"Je gère simplement les entrées invalides en affichant une animation.: P" Lol .. C'est une façon de voir les choses. xD Je vais modifier la question.
Kevin Cruijssen

0

Mathematica, 252 octets

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

Ce serait bien si quelqu'un pouvait créer un GIF. Courez dans un cahier.


0

Python3, 338 octets

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 octets

Juste pour les lols, j'ai essayé de faire le programme en Java. Certes, je suis assez mauvais au golf et aux regex, donc il peut très probablement être joué au golf (beaucoup?) Plus. Néanmoins, le voici en Java 7.
Maintenant presque deux ans plus tard et j'ai presque divisé par deux le code en Java 8. Pourquoi ai-je jamais fait ces règles pour valider l'entrée et exiger un programme complet, cependant ...>.> Je déteste mon passé passé maintenant ..

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

Explication:

Essayez-le en ligne. (Après expiration du délai après 60 secondes.)

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:
(Remarque: ancien gif, car il s'agit clairement de jdk1.8 + maintenant.)

entrez la description de l'image ici


Habituellement, nous disons de Java 7faire référence à cette version de Java, car 1.7certains peuvent penser que c'est une Java 1révision7
GamrCorps

La longue déclaration if pourrait être transformée en quelque chose du genre p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. Je pense aussi que définir let wgaspiller des caractères, maintenant qu'ils ne sont utilisés que deux fois. Envisagez splutôt de laisser l' être char[] s=a[0].toCharArray(); toutes les autres opérations avec lui sont donc beaucoup plus courtes.
Alex Meiburg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.