Buat Latihan Gym Anda sendiri dan ikuti bersama irl

10

Mari kita lakukan latihan bersama, ya? Cukup ikuti gerakan stickman. Stickman apa yang kamu minta? Yang akan kita buat!

Buat program yang memungkinkan input string hanya berisi bilangan bulat, dan output sembilan stick-angka berikut dengan interval di antaranya:

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

Ini akan menghasilkan animasi, yang kemudian dapat kita ikuti bersama irl.

Berikut adalah contoh dari output yang dibuat ketika inputnya " 123245762":

masukkan deskripsi gambar di sini

Beberapa peraturan:

  • Ini ditandai dengan , sehingga kode terpendek dalam byte akan menang
  • Input stringhanya berisi [1-9]dengan panjang yang berpotensi bervariasi dari 2 hingga 100 karakter **
  • Animasi harus berupa loop tanpa akhir
  • Waktu interval harus 750 ms
  • Tidak ada bilangan bulat berdekatan yang digandakan diizinkan dalam input - ini juga termasuk bilangan bulat input pertama dan terakhir (lihat kasus uji ketujuh dan delapan) **

** Bagaimana gagal jika input yang tidak valid sepenuhnya terserah Anda, tetapi harus jelas bahwa itu gagal . Itu bisa melempar pengecualian; cukup kembali di awal; reboot PC Anda; hapus kode sumber / kompilasi sendiri; meretas ke dalam militer dan menembakkan roket ke lokasi GPS kompilasi. Panggilanmu. EDIT: Tidak diperbolehkan hanya menampilkan animasi (benar / setengah) sebagai input yang gagal. Harus jelas bahwa ada yang salah dengan input untuk testcas gagal di bawah ini. Terima kasih kepada @ user81655 untuk membawa ini menjadi perhatian saya, karenanya edit.

Subrules:

  • Silakan memposting gif untuk salah satu (tanpa gagal) test case di bawah ini dalam jawaban Anda, yang dapat Anda buat dengan sangat mudah dengan program berikut: screentogif.codeplex.com (Program pembuatan gif lain juga diperbolehkan tentunya.)
  • Poin bonus jika Anda benar-benar melakukan latihan bersama irl animasi ketika sudah selesai. ;)

Testis yang benar:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

Testis yang gagal:

  1. 2 // Terlalu sedikit karakter
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 // Terlalu banyak karakter
  3. 1232405762// Mengandung masukan tidak valid (yang 0)
  4. 112212// Gagal karena 11dan 22sekarang
  5. 1232457621 // Gagal karena memulai dan memimpin 1
Kevin Cruijssen
sumber
5
IMO ini adalah pembohong batas ini
Peter Taylor
1
BTW, melakukan pengeditan setelah tantangan diposting tidak disarankan.
Biru
dan validasi input menghancurkan tantangan.
FlipTack
@ Lipup Anda memang benar. Saya seharusnya terus dengan tantangan dan menganggap semua input valid. Ini adalah pertanyaan pertama saya di PPCG. Agak terlambat untuk mengubahnya sekarang.
Kevin Cruijssen

Jawaban:

0

Pyth, 114 byte

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

Output GIF

Coba di sini

(Tidak ada jeda, tidak terbatas)

Biru
sumber
Hmm, tidak mungkin untuk mengembalikan / melempar atau mengulang secara tak terbatas dalam Pyth? Atau akan terlalu banyak byte / terlalu lama untuk dibuat? (Saat ini berfungsi sama untuk semua testcas yang benar, serta semua testcas gagal. Dan itu juga menambahkan dalam output untuk 0.) Apapun, terima kasih untuk entri. Pasti salah satu snipet kode yang paling tidak dapat dibaca untuk entri ini adalah dugaan saya. :)
Kevin Cruijssen
Penerjemah online tidak menyiram IO selama tidur sehingga tidak diperhatikan. Anda bilang Anda menginginkan loop tak terbatas jadi saya tidak yakin apa yang Anda tanyakan di sana. "Bagaimana kegagalan itu terserah Anda" - Saya melakukan perilaku yang tidak ditentukan untuk ini; kode mungkin melakukan apa saja (meskipun HARUS berperilaku sama) Saya juga berharap ini relatif dapat dibaca dibandingkan dengan beberapa entri yang mungkin
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"

Terus mengulang sampai Anda menekan ESC. Kegagalan untuk berolahraga dengan benar (input salah - dalam contoh ini a 0 sebagai salah satu langkah) menyebabkan kegemukan. GIF loop, dalam program itu hanya berhenti pada titik itu.

#13adalah SpecBAS yang setara dengan \ndan memungkinkan Anda menyertakan umpan baris dalam string.

masukkan deskripsi gambar di sini

Brian
sumber
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>

Neil
sumber
1

JavaScript (ES6), 210 byte

s=>setInterval(_=>(c=console).clear(i=0)&c.log(`, @
/|\\
/ \\,\\@/
 |
/ \\,|@_
 |
/ \\,_@|
 |
/ \\,@/
 |
/|\\, \\@
 |
/|\\,|@|
 |
/ \\,\\@\\
 |
/ \\,/@/
 |
/ \\`.split`,`[s[i++%s.length]]),750)
pengguna81655
sumber
Bagaimana ini menangani aturan tentang mengecualikan 0dan duplikat?
Morgan Thrapp
4
@ Morgan'Venti'Thrappuccino Saya mendapat kesan bahwa input yang tidak valid tidak perlu perilaku yang pasti, karena katanya How it fails in case of invalid input is completely up to you. Saya hanya menangani input yang tidak valid dengan menampilkan animasi. : P Tidak ada jawaban lain yang ada yang memeriksa ini, namun jawaban OP baru saja diposting, jadi mungkin dia ingin kami menangani input yang tidak valid.
user81655
"Saya hanya menangani input yang tidak valid dengan menampilkan animasi.: P" Lol .. Itu salah satu cara melihatnya. xD Saya akan mengedit pertanyaan.
Kevin Cruijssen
0

Mathematica, 252 byte

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

Akan lebih baik jika seseorang dapat membuat GIF. Jalankan di notebook.

LegionMammal978
sumber
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]
mIllIbyte
sumber
0

Java 8, 663 636 634 631 596 355 354 byte

Hanya untuk lol saya mencoba membuat program di Jawa. Memang saya cukup buruk dalam golf dan regex, jadi kemungkinan besar bisa golf (banyak?) Lebih. Namun demikian, ini dia di Java 7.
Sekarang hampir dua tahun kemudian dan saya hampir membagi dua kode di Java 8. Mengapa saya pernah membuat aturan tentang memvalidasi input dan memerlukan program penuh, meskipun ...>.> Saya benci diri masa laluku sekarang ..

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

Penjelasan:

Cobalah online. (Setelah batas waktu setelah 60 detik.)

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:
(Catatan: Gif lama, karena jelas jdk1.8 + sekarang.)

masukkan deskripsi gambar di sini

Kevin Cruijssen
sumber
Biasanya kami mengatakan Java 7untuk merujuk ke versi Java ini karena 1.7dapat membingungkan sebagian orang untuk berpikir bahwa itu adalah Java 1revisi7
GamrCorps
Pernyataan panjang jika bisa diubah menjadi sesuatu seperti p(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();. Saya juga berpikir bahwa mendefinisikan ldan wmembuang karakter, sekarang mereka hanya digunakan dua kali. Pertimbangkan untuk membiarkan smenjadi char[] s=a[0].toCharArray(); semua operasi lain dengan itu jauh lebih pendek, kalau begitu.
Alex Meiburg