Stwórz własne ćwiczenie na siłowni i podążaj wzdłuż irl

10

Zróbmy razem ćwiczenie, prawda? Po prostu podążaj za ruchami stickmana. O jakiego stickmana pytasz? Ten, który właśnie stworzymy!

Stwórz program, który pozwala na wprowadzanie ciągu zawierającego tylko liczby całkowite, i wyświetla następujące dziewięć liczb kreskowych z odstępem pomiędzy:

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

Spowoduje to animację, którą będziemy mogli śledzić wzdłuż irl.

Oto przykład danych wyjściowych utworzonych, gdy dane wejściowe to „ 123245762”:

wprowadź opis zdjęcia tutaj

Niektóre zasady:

  • Jest to oznaczone , więc wygrywa najkrótszy kod w bajtach
  • Dane wejściowe stringzawierają tylko dane [1-9]o długości potencjalnie wahającej się od 2 do 100 znaków **
  • Animacja musi być nieskończoną pętlą
  • Interwał musi wynosić 750 ms
  • Na wejściu nie są dozwolone duplikowane liczby całkowite - obejmuje to także pierwszą i ostatnią liczbę całkowitą wejścia (patrz siódmy i osiem przypadków testowych) **

** Sposób niepowodzenia w przypadku nieprawidłowego wprowadzania danych zależy wyłącznie od Ciebie, ale powinno być jasne, że się nie powiedzie . Może to rzucić wyjątek; po prostu wróć na początku; uruchom ponownie komputer; usuń własny kod źródłowy / kompilacyjny; włamać się do wojska i wystrzelić rakietę do kompilowanej lokalizacji GPS. Twoja decyzja. EDYCJA: Niedopuszczalne jest wyświetlanie (poprawnej / połowy) animacji jako błędnego wejścia. Musi być jasne, że coś jest nie tak z danymi wejściowymi dla nieudanych przypadków testowych poniżej. Dziękuję @ user81655 za zwrócenie mi na to uwagi, stąd edycja.

Subrule:

  • Prześlij gif dla jednego z (nieudanych) przypadków testowych poniżej w swojej odpowiedzi, co możesz bardzo ułatwić za pomocą następującego programu: screentogif.codeplex.com ( Oczywiście każdy inny program do tworzenia gifów jest również dozwolony).
  • Punkty bonusowe, jeśli faktycznie wykonasz ćwiczenie obok animacji po zakończeniu. ;)

Prawidłowe przypadki testowe:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Nieudane przypadki testowe:

  1. 2 // Za mało znaków
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Zbyt wiele znaków
  3. 1232405762// Zawierające nieprawidłowe dane wejściowe (the 0)
  4. 112212// zawodzi ze względu na 11i 22teraźniejszości
  5. 1232457621 // Nie udaje się ze względu na początek i prowadzenie 1
Kevin Cruijssen
źródło
5
IMO, to jest graniczna wersja tego
Peter Taylor
1
BTW, odradza się dokonywanie zmian po opublikowaniu wyzwania.
Niebieski,
imo sprawdzanie poprawności danych wejściowych rujnuje wyzwanie.
FlipTack,
@FlipTack Rzeczywiście masz rację. Powinienem był kontynuować wyzwanie i założyć, że wszystkie dane wejściowe są prawidłowe. To było moje pierwsze pytanie tutaj na PPCG. Jednak trochę za późno, aby to zmienić teraz.
Kevin Cruijssen

Odpowiedzi:

0

Pyth, 114 bajtów

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

Wyjście GIF

Wypróbuj tutaj

(Bez pauzy, nieskończony)

niebieski
źródło
Hmm, nie ma możliwości powrotu / rzutu lub zapętlenia w nieskończoność w Pyth? A może zajmie to zbyt wiele bajtów / jest zbyt czasochłonne? (Obecnie działa tak samo dla wszystkich poprawnych przypadków testowych, a także dla wszystkich nieudanych przypadków testowych. I dodaje również dane wyjściowe dla 0.) Niezależnie od tego, dziękuję za wpis. Zdecydowanie jednym z najbardziej nieczytelnych fragmentów kodu dla tego wpisu jest moje przypuszczenie. :)
Kevin Cruijssen
Tłumacz online nie spłukuje IO podczas snu, więc nie jest to zauważane. Powiedziałeś, że chcesz nieskończonej pętli, więc nie jestem pewien, o co tam pytasz. „To, jak się nie powiedzie, zależy od ciebie” - robię w tym celu niezdefiniowane zachowanie; kod może zrobić wszystko (nawet jeśli POWINIEN zachowywać się tak samo). Spodziewam się też, że będzie to względnie czytelne w porównaniu z niektórymi możliwymi wpisami
Blue
4

SpecBAS - 387 bajtów

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"

Powtarza pętlę, dopóki nie naciśniesz ESC. Niewłaściwe ćwiczenie (nieprawidłowe wprowadzanie - w tym przykładzie 0 jako jeden z kroków) prowadzi do otyłości. Pętle GIF, w programie po prostu zatrzymuje się w tym momencie.

#13jest odpowiednikiem SpecBAS \ni umożliwia dołączanie wiersza w ciągach znaków.

wprowadź opis zdjęcia tutaj

Brian
źródło
1
„FAT”: D ......
Adam Varhegyi
2

JavaScript (ES6), 165 bajtów

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
źródło
1

JavaScript (ES6), 210 bajtów

s=>setInterval(_=>(c=console).clear(i=0)&c.log(`, @
/|\\
/ \\,\\@/
 |
/ \\,|@_
 |
/ \\,_@|
 |
/ \\,@/
 |
/|\\, \\@
 |
/|\\,|@|
 |
/ \\,\\@\\
 |
/ \\,/@/
 |
/ \\`.split`,`[s[i++%s.length]]),750)
użytkownik 81655
źródło
Jak radzi sobie z zasadami wykluczania 0i duplikowania?
Morgan Thrapp
4
@ Morgan'Venti'Thrappuccino Miałem wrażenie, że nieprawidłowe dane wejściowe nie wymagają określonego zachowania, ponieważ tak jest napisane How it fails in case of invalid input is completely up to you. Po prostu obsługuję nieprawidłowe wprowadzanie, wyświetlając animację. : P Żadna z pozostałych istniejących odpowiedzi też tego nie sprawdzała, jednak odpowiedź zrobiła właśnie przesłana przez PO, więc może chciał, abyśmy obsłużyli nieprawidłowe dane wejściowe.
user81655,
„Po prostu obsługuję nieprawidłowe wprowadzanie, wyświetlając animację.: P” Lol .. To jeden ze sposobów patrzenia na to. xD Zmienię pytanie.
Kevin Cruijssen
0

Mathematica, 252 bajty

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

Byłoby miło, gdyby ktoś mógł stworzyć GIF. Uruchom w zeszycie.

LegionMammal978
źródło
0

Python3, 338 bajtów

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]
Mllllbyte
źródło
0

Java 8, 663 636 634 631 596 355 354 bajtów

Tylko dla loli próbowałem stworzyć program w Javie. Wprawdzie jestem kiepski w golfie i wyrażeniach regularnych, więc najprawdopodobniej można w niego grać (dużo?) Więcej. Niemniej jednak, tutaj jest w Javie 7.
Teraz prawie dwa lata później prawie o połowę kodu w Javie 8. Dlaczego kiedykolwiek stworzyłem te zasady dotyczące sprawdzania poprawności danych wejściowych i wymagania pełnego programu, chociaż ...>.> Nienawidzę moje poprzednie ja teraz ...

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

Wyjaśnienie:

Wypróbuj online. (Po upływie limitu czasu po 60 sekundach)

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:
(Uwaga: stary gif, ponieważ teraz jest to jdk1.8 +).

wprowadź opis zdjęcia tutaj

Kevin Cruijssen
źródło
Zwykle mówimy Java 7o odwołaniu się do tej wersji Javy, ponieważ 1.7niektórzy mogą pomylić, że jest to Java 1wersja7
GamrCorps
Długie wyrażenie if można przekształcić w coś podobnego p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. Myślę też, że definiowanie li wmarnowanie znaków, teraz, gdy są one używane tylko dwa razy. Zastanów się, czy szamiast tego być char[] s=a[0].toCharArray(); wszystkie inne operacje na nim są zatem znacznie krótsze.
Alex Meiburg