Crea il tuo esercizio in palestra e segui il percorso


10

Facciamo un esercizio insieme, vero? Segui semplicemente i movimenti dello stickman. Quale stickman chiedi? Quello che stiamo per creare!

Crea un programma che consenta un input di stringa contenente solo numeri interi e produca le seguenti nove figure stilizzate con un intervallo tra:

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

Ciò si tradurrà in un'animazione, che possiamo quindi seguire lungo irl.

Ecco un esempio dell'output creato quando l'input è " 123245762":

inserisci qui la descrizione dell'immagine

Alcune regole:

  • Questo è contrassegnato come , quindi vince il codice più breve in byte
  • L'input è un stringsolo contenente [1-9]una lunghezza potenzialmente variabile da 2 a 100 caratteri **
  • L'animazione deve essere un ciclo infinito
  • L'intervallo di tempo deve essere di 750 ms
  • Non sono consentiti numeri interi adiacenti duplicati nell'input, inclusi anche il primo e l'ultimo numero intero dell'input (vedere il settimo e l'ottavo caso di test) **

** Come fallisce in caso di input non valido dipende completamente da te, ma dovrebbe essere chiaro che fallisce . Potrebbe generare un'eccezione; semplicemente tornare all'inizio; riavviare il PC; cancellare il proprio codice sorgente / compilare; entra nell'esercito e spara un razzo verso la posizione GPS compilante. La tua chiamata. EDIT: non è consentito visualizzare semplicemente un'animazione (corretta / metà) come input non riuscito. Deve essere chiaro che c'è qualcosa che non va nell'input per i casi di test falliti di seguito. Grazie a @ user81655 per avermi portato alla mia attenzione, quindi la modifica.

sottoregole:

  • Si prega di pubblicare il GIF per uno dei casi di test (non falliti) di seguito nella risposta, che è possibile semplificare con il seguente programma: screentogif.codeplex.com ( Ovviamente è consentito anche qualsiasi altro programma di creazione di GIF.)
  • Punti bonus se esegui effettivamente l'esercizio a fianco della spirale d'animazione al termine. ;)

Testcase corretti:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Test non riusciti:

  1. 2 // Troppi caratteri
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Troppi personaggi
  3. 1232405762// Contiene input non validi (il 0)
  4. 112212// riesce a causa della 11e 22presente
  5. 1232457621 // Non riesce a causa dell'avvio e del vantaggio 1

5
IMO questa è una vittima borderline di questo
Peter Taylor

1
A proposito, è sconsigliabile apportare modifiche dopo la pubblicazione di una sfida.
Blu,

imo la validazione dell'input rovina la sfida.
FlipTack,

@FlipTack Hai davvero ragione. Avrei dovuto continuare con la sfida e presumere che tutti gli input fossero validi. Questa è stata la mia prima domanda qui su PPCG. Un po 'troppo tardi per cambiarlo ora, però.
Kevin Cruijssen,

Risposte:


0

Pyth, 114 byte

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

Uscita GIF

Provalo qui

(Nessuna pausa, non infinito)


Hmm, non è possibile tornare / lanciare o eseguire il loop all'infinito in Pyth? Oppure ci vorranno troppi byte / richiede troppo tempo? (Attualmente funziona allo stesso modo per tutti i casi di test corretti, così come per tutti i casi di test falliti. E aggiunge anche l'output per 0.) Indipendentemente da ciò, grazie per la voce. Sicuramente uno dei frammenti di codice più illeggibili per questa voce è la mia ipotesi. :)
Kevin Cruijssen,

L'interprete online non scarica l'IO durante il sonno, quindi non viene notato. Hai detto che volevi un ciclo infinito, quindi non sono sicuro di quello che stai chiedendo lì. "Come fallisce dipende da te" - Sto facendo un comportamento indefinito per questo; il codice potrebbe fare qualsiasi cosa (anche se DOVREBBE comportarsi allo stesso modo) Inoltre mi aspetto che questo sia relativamente leggibile rispetto ad alcune voci possibili
Blue

4

SpecBAS - 387 byte

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"

Mantiene il looping fino a quando non si preme ESC. Il mancato esercizio corretto (input errato - in questo esempio uno 0 come uno dei passaggi) porta alla stanchezza. Il GIF gira, nel programma si ferma a quel punto.

#13è l'equivalente SpecBAS \ne consente di includere feed di riga nelle stringhe.

inserisci qui la descrizione dell'immagine


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

2

JavaScript (ES6), 165 byte

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 byte

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

Come gestisce le regole sull'esclusione 0e sui duplicati?
Morgan Thrapp,

4
@ Morgan'Venti'Thrappuccino Avevo l'impressione che input non validi non necessitino di comportamenti definiti, dal momento che dice How it fails in case of invalid input is completely up to you. Gestisco solo input non validi visualizzando un'animazione. : P Nessuna delle altre risposte esistenti l'ha verificata, tuttavia la risposta dell'OP appena pubblicata lo fa, quindi forse voleva che gestissimo input non validi.
user81655

"Gestisco solo input non validi visualizzando un'animazione.: P" Lol .. Questo è un modo di vederlo. xD Modificherò la domanda.
Kevin Cruijssen,

0

Mathematica, 252 byte

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

Sarebbe bello se qualcuno potesse creare una GIF. Corri su un quaderno.


0

Python3, 338 byte

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 byte

Solo per i lols ho provato a creare il programma in Java. Devo ammettere che sono piuttosto pessimo nel golf e nelle regex, quindi molto probabilmente si può giocare a golf (molto?) Di più. Tuttavia, eccolo qui in Java 7.
Ora quasi due anni dopo e ho quasi dimezzato il codice in Java 8. Perché ho mai fatto quelle regole sulla convalida dell'input e sulla necessità di un programma completo, anche se ...>.> Odio il mio io passato ora ..

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

Spiegazione:

Provalo online. (Dopo che è scaduto dopo 60 secondi.)

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: vecchia gif, dato che è chiaramente jdk1.8 + ora.)

inserisci qui la descrizione dell'immagine


Di solito diciamo Java 7di fare riferimento a questa versione di Java poiché 1.7possiamo confondere alcuni pensando che si tratti di una Java 1revisione7
GamrCorps,

La lunga dichiarazione if potrebbe essere trasformata in qualcosa del genere p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. Penso anche che definire le wsprecare i personaggi, ora che vengono usati solo due volte. Considera sinvece di essere char[] s=a[0].toCharArray(); tutte le altre operazioni con esso sono quindi molto più brevi.
Alex Meiburg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.