独自のジム演習を作成し、irlに従ってください


10

一緒に運動しましょうか。単に棒人間の動きに従ってください。あなたはどんな棒人間を尋ねますか?これから作成します!

整数のみを含む文字列入力が可能なプログラムを作成し、間隔を空けて次の9つの棒グラフを出力します。

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

これによりアニメーションが生成され、irlに沿って追跡できます。

以下は、入力が " 123245762"の場合に作成される出力の例です。

ここに画像の説明を入力してください

いくつかのルール:

  • これはとタグ付けされているため、バイト単位の最短コードが優先されます
  • 入力は、2〜100文字の範囲で長さが変わる可能性のあるstring唯一の包含[1-9]です**
  • アニメーションは無限ループでなければなりません
  • インターバル時間は750ミリ秒でなければなりません
  • 入力で重複する隣接整数は許可されません-これには、入力の最初と最後の整数も含まれます(7番目と8番目のテストケースを参照)**

**無効な入力があった場合の失敗の仕方は完全にあなた次第ですが、失敗することは明らかです。例外をスローする可能性があります。最初に戻るだけです。PCを再起動します。独自のソース/コンパイルコードを削除します。軍に侵入し、GPSの位置情報を収集するためにロケットを発射します。あなたの電話。編集:失敗した入力として(正しい/半分の)アニメーションを単に表示することはできません。以下の失敗したテストケースの入力に問題があることは明らかである必要があります。これを私の注意、したがって編集に持ってきてくれた@ user81655に感謝します。

サブルール:

  • 以下の(失敗しない)テストケースのいずれかのgifを回答に投稿してください。これは、次のプログラムで非常に簡単に作成できます。screentogif.codeplex.com(他のgif作成プログラムももちろん許可されています。)
  • 終了時にアニメーションirlと一緒に実際に演習を行った場合のボーナスポイント。;)

正しいテストケース:

  1. 123245762
  2. 65
  3. 121234346565879879132418791576

失敗したテストケース:

  1. 2 //文字が少なすぎます
  2. 7282918274959292747383785189478174826894958127476192947512897571298593912374857471978269591928974518735891891723878 //文字が多すぎます
  3. 1232405762//無効な入力が含まれています(0
  4. 112212//ための失敗1122現在
  5. 1232457621 //開始と先行のために失敗 1

5
IMOこれは、境界線のデュープで、これは
ピーター・テイラー

1
ところで、チャレンジが投稿された後に編集することはお勧めしません。
ブルー

入力検証は、課題を台無しにします。
FlipTack 2017

@FlipTackあなたは本当に正しいです。私は挑戦を続け、すべての入力が有効であると想定するべきでした。これがPPCGに関する私の最初の質問でした。しかし、今それを変更するには遅すぎます。
Kevin Cruijssen 2017

回答:


0

Pyth、114バイト

.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

ここで試してください

(一時停止なし、非無限)


うーん、Pythで無限にリターン/スローまたはループすることはできませんか?または、バイトが多すぎます/作成に時間がかかりすぎますか?(現在、すべての正しいテストケースとすべての失敗したテストケースで同じように機能します。また、の出力にも追加されます0。)とにかく、エントリに感謝します。間違いなく、このエントリの最も読みにくいコードスニペットの1つは私の推測です。:)
Kevin Cruijssen

オンラインインタープリターは、スリープ中にIOをフラッシュしないため、気付かれません。無限ループが必要だと言っていたので、何を求めているのかわかりません。「どのように失敗するかはあなた次第です」-私はこれに対して未定義の動作をしています。コードは何でも実行する可能性があります(同じように動作するはずですが)。また、いくつかの可能なエントリと比較して、これは比較的読みやすいと思います
Blue

4

SpecBAS-387バイト

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"

Escキーを押すまでループし続けます。適切に運動しないと(誤った入力-この例では、ステップの1つとして0)、肥満につながります。GIFループ、プログラムでは、その時点で停止します。

#13と同等のSpecBAS \nであり、文字列に改行を含めることができます。

ここに画像の説明を入力してください


1
"FAT":D ......
アダムVarhegyi

2

JavaScript(ES6)、165バイト

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バイト

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

これは除外0と重複に関するルールをどのように処理しますか?
Morgan Thrapp

4
@ Morgan'Venti'Thrappuccinoと言うので、無効な入力は定義された動作を必要としないという印象を受けましたHow it fails in case of invalid input is completely up to you。アニメーションを表示して無効な入力を処理するだけです。:P他の既存の回答のいずれもこれをチェックしませんでしたが、OPが投稿した回答はそうなので、おそらく彼は無効な入力を処理するように望みました。
user81655

「私はアニメーションを表示することで無効な入力を処理します。:P」Lol ..それはそれを見る1つの方法です。xD質問を編集します。
Kevin Cruijssen

0

Mathematica、252バイト

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

誰かがGIFを作成できればいいのですが。ノートブックで実行します。


0

Python3、338バイト

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バイト

笑いのために私はプログラムをJavaで作成しようとしました。確かに私はゴルフと正規表現がかなり得意ではないので、もっとゴルフをすることができます(たくさん?)。それにもかかわらず、ここではJava 7です
。ほぼ2年後、Java 8のコードはほぼ半分になりましたが、なぜ入力の検証と完全なプログラムの必要性についてこれらのルールを作成したのですか...>。>嫌いです。私の過去の自己。

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

説明:

オンラインでお試しください。(60秒後にタイムアウトした後)

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:(
注:古いgif、現在は明らかにjdk1.8 +であるため)

ここに画像の説明を入力してください


通常、私たちはJava 7このバージョンのJavaを参照すると言い1.7、それがJava 1リビジョンであると考える人を混乱させる可能性があります7
GamrCorps

長いifステートメントはのようなものに変えることができますp(new String[]{" @ ",y,"|@_", ... }[c-49]);if(c==49){p(x);l();}else if(c==53){w();p(x);}else d();。また、キャラクターは2回しか使用されないため、キャラクターを定義lしてw無駄にすると思います。s代わりにさせることを検討してくださいchar[] s=a[0].toCharArray()。それで、他のすべての操作ははるかに短くなります。
Alex Meiburg 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.