セブンのゲームの拡張


8

前書き

7のゲームの適応バージョンに表示される特定のベースのすべての数値を出力します。

チャレンジ

あなたの仕事は、特定の範囲の特定の基数のすべての数値を出力し、特定の条件に一致する数値をスキップすることです。

あなたは、4つの入力が与えられます:base elim startend。4つの変数の役割は次のとおりです。

  • base他の3つの変数、および出力に使用するベースを指定します。それを表現する1つの方法は、「8」、「9」、または「A」から「Z」までの大文字の1文字を使用し、10進法の場合は「A」、16進法の場合は「G」を使用することです。サポートされる予定のベースは8〜35です。これは私の提案する表現方法baseであり、「入力と出力例」セクションで使用しますが、独自の方法で表現することもできます。たとえばbase、通常の10進数表現としてフォーマットすることを選択できます。

  • startおよびendは、出力される数値の範囲を指定する2つの文字列で、指定されたで表されbaseます。baseis Gstartis 10endisの場合は、1Fを出力する必要10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1Fがありますelimが、すぐに説明するために、何に基づいてそれらを削除する必要もあります。

  • elimは単一の文字であり、指定されたの有効な数字である必要がありますbase。数字を含む、elimまたはその倍数であるすべての数値elimは、最終的な出力を生成するためにリストから削除する必要があります。

上記の場合、if elim717数字が含まれているため、削除する必要があります715また、の1C倍数であるため、削除する必要があり7ます。したがって、最終的な出力は10 11 12 13 14 16 18 19 1A 1B 1D 1E 1F

テストケース

Input -> Output

G,7,10,1F -> 10 11 12 13 14 16 18 19 1A 1B 1D 1E 1F
A,3,1,100 -> 1 2 4 5 7 8 10 11 14 16 17 19 20 22 25 26 28 29 40 41 44 46 47 49 50 52 55 56 58 59 61 62 64 65 67 68 70 71 74 76 77 79 80 82 85 86 88 89 91 92 94 95 97 98 100
G,A,96,C0 -> 97 98 99 9B 9C 9D 9E 9F B0 B1 B2 B3 B5 B6 B7 B8 B9 BB BC BD BF C0

3番目のテストケースは、元の投稿の後に追加されます。編集前に投稿されたすべての回答がテストされ、3番目のテストに合格しました。

スペック

  • 入力は常に有効であるため、例外処理について心配する必要はありません。

  • これはであり、最小のバイト数が優先されます。

  • 入力を取得し、任意の標準形式で出力を提供できます。形式は自由に選択できます。

  • いつものように、デフォルトの抜け穴がここに適用されます。

  • これはセブンのゲーム(の実際のバージョン)に基づいています。

  • 私はbase純粋に個人的な好みのために、少なくとも8歳である必要があります。シーケンスの桁数が急激に増加するのを見たくありません。

スコアボード

この質問から抜粋したスニペット。スニペットを実行してスコアボードを取得します。


11
PPCGへようこそ!これは良い最初の投稿ですが、いくつかの推奨事項があります。非常に厳密な入力/出力形式10進法のbase,elim,start,end場合は「A 」、16進法の場合は「G」)を避け、テストケースを簡単にフォーマットできるようにしてください。メインサイトに投稿する前にフィードバックを受け取るために、サンドボックスの使用使用を検討してください。全体として、これは良い最初の挑戦です!
Xcoder氏、18年

1
@WeijunZhouわかりました。後で確認します。また、編集中に問題が発生したり、ヒントが必要な場合は、チャットでお気軽にご連絡ください。
Xcoder氏、18年

1
@ Mr.Xcoder編集を終了しました。質問を直接編集して改善することもできます。私はあなたの編集から学びます。
Weijun Zhou

1
@WeijunZhou私はまたのための入力フォーマットを作成することをお勧めしたいstartendそしてelimより寛大。
Erik the Outgolfer 2018年

5
"G,7,10,1F"入力については、完全に柔軟なアプローチにより、たとえば[16,7,16,31]入力および[[1,0],[1,1],[1,2],[1,3],[1,4],[1,6],[1,8],[1,9],[1,10],[1,11],[1,13],[1,14],[1,15]]出力として使用できます。(最初の回答では、かなり標準的なため、これはすでに許可されていると想定していますが、それは完全にあなた次第です)。
ジョナサンアラン

回答:


10

Emojicode141の 116バイト

25バイトの@NieDzejkobに感謝!

🍇a🚂b🚂c🚂d🚂🔂i⏩c➕1d🍇🍊🎊❎😛0🚮i b☁️🔍🔡i a🔡b a🍇😀🔡i a🍉🍉🍉

オンラインでお試しください!

🍇				
  a🚂 b🚂 c🚂 d🚂		👴 4 arguments of type 🚂 (integer)
  🔂 i  ⏩ c  ➕ 1 d 🍇		👴 for i in range(c, d+1)
    🍊 🎊 			👴   if cond_a and cond_b
      ❎ 😛 0  🚮 i b		👴     cond_a: i%b != 0
      ☁️ 🔍 🔡 i a  🔡 b a	👴     cond_b: i in base-a doesnt have b in base-a
    🍇				👴   then
      😀 🔡 i a			👴     print i in base-a
    🍉
  🍉
🍉


3
-1言語の選択ಠ_ಠ用
ロッド

3
ラムダに相当する絵文字コードであるクロージャーをポストすることができます。これにより、バイトが節約されます。
NieDzejkob

5

ゼリー 12  11 バイト

-1 Erik the Outgolferに感謝(引数を入れ替えて割り切れる代わりに"order"を使用ḍ@

r/ọÐḟ⁵bċÐḟ⁵

リスト-三の全ての採用進表記コマンドライン引数、入力として取る完全なプログラム[start, end]、及び二つの数、base及びelim各々が数値の桁数を表しリストのリストのゼリー表現、印刷- baseおよび各桁を10進数です(たとえば、基数20の1043は[2,12,3]、つまり2×20 2 + 12×20 1 + 3×20 0)。

オンラインでお試しください!

小さなメモ:これは負の値を含む範囲では機能しませんが、リンクされたチャレンジは1から始まり、カウントアップします。

どうやって?

r/ọÐḟ⁵bċÐḟ⁵ - Main link: list, [start, end]; number, base
 /          - reduce [start, end] with:
r           - inclusive range => [start, start+1, ..., end]
   Ðḟ       - filter discard if:
     ⁵      -   program's 5th argument (the 3rd input), elim
  ọ         -   order (how many times the element is divisible by elim, or 0 if not)
      b     - convert to base "base"
        Ðḟ  - filter discard if:
          ⁵ -   program's 5th argument (the 3rd input), elim
       ċ    -   count (0 if elim is not a digit)

ḍ@;)にすることができます(ところで、私は投稿したと思いますrọÐḟ⁶b⁵ċÐḟ⁶...)
Erik the Outgolfer '26年

ええ、6番目の引数を使用したことはありません!
ジョナサンアラン

1
いつものように、それを拡張し、それがどのように機能するかを詳しく説明してもらえますか?
Weijun Zhou

以下のための代替ọÐḟ可能性%Ðf
氏Xcoder

2

ジュリア0.6、69バイト

f(b,e,r,g=filter)=g(z->!contains(z,base(b,e)),base.(b,g(x->x%e>0,r)))

入力はあるbase, elim, start:endところstart:endですUnitRange。10を底とする整数として。指定された基数の数値の文字列のリストを出力します。整数形式の分割可能性をbase.フィルタリングし、要素ごとに文字列に変換してから、数字の包含をフィルタリングします。呼び出された例:f(10,3,1:100)

オンラインでお試しください!


1
サブルーチンにエイリアスを付けるためにシグネチャでデフォルトを使用することを考えていなかったので、将来のPerl 6の投稿ではそれを覚えておく必要があります。
Brad Gilbert b2gills


1

Perl 6の 94の  57バイト

->\a,$b,\c,\d {grep {!/$b/},grep({$_%$b.parse-base(a)},[...] (c,d)».parse-base(a))».base(a)}

テストする(94)

ルールが変わったので:

->\b,$e,\r{grep {!/"$e.base(b)"/},grep(*%$e,r)».base(b)}

テストする(Int、Int、Range)
出力はベース内の文字列のリストです

拡張

->
  \b,  # base  (Int)
  $e,  # elim  (Int)
  \r   # range (Int Range)
{
  grep
    {!/"$e.base(b)"/},  # remove the values that contain the character

    grep(
      * % $e,           # remove values that are divisible by elim
      r                 # the input Range

    )».base(b)          # convert each into base 「b」
}

あなたの興味と努力、そしてテストを書いてくれてありがとう。多くを学んだ。
Weijun Zhou

1

JavaScript、82バイト

ぶらぶらする前の速攻!ために、ベース10に入力を受け取りbaseelimstartおよびend単一末尾のスペースを持つベース10番号のスペースで区切られた文字列を出力します。

(b,l,s,e)=>(g=o=>++s>e?o:g(s%l&&!~s[t=`toString`](b).search(l[t](b))?o+s+` `:o))``

オンラインでお試しください


これはJaptのものとして問題があります。少し変更していただけませんか?
Weijun Zhou 2018

@WeijunZhou:更新されました。
シャギー

どうもありがとうございました。他の回答の「説明」の部分はいつでも更新できます。急がずに。
Weijun Zhou

@WeijunZhou:私のJaptソリューションではなく、これを意味すると思いますか?明日コンピューターに戻ったらアップデートします。
シャギー

はい、悪いです。コメントをすぐに編集しましたが、元のコメントはまだ表示されていました...申し訳ありません。
Weijun Zhou

1

Japt、16バイト

10進入力を許可するように仕様が変更された後、急いで書き直されたため、おそらく改善が可能です。

順に入力を受け取りstartendbaseelim及び所与ベースの数字の配列を出力します。

òV kvX msW køXsW

それを試してみてください


説明

                   :Implicit input of integers U=start, V=end, W=base & X=elim
òV                 :[U,V]
   k               :Remove
    vX             :  elements divisible by X
       m           :Map
        sW         :  Convert to base-W string
           kø      :Remove elements containing
             XsW   :  X converted to a base-W string
                   :Implicit output of resulting array

10より大きいがベースよりも小さいelimの値の場合、これは数字を含む要素の削除に失敗します。たとえば、0,35,12,11の場合、出力には誤って23 =(1,11)base12が含まれます
gggg

@gggg、これを投稿してから仕様が変更されたようです。もともとは、入力ベースの1文字ではなくelim1 (つまり0-9)として指定されていました。
シャギー

十分に公正で、私は仕様が非常に混乱していることがわかりました。
gggg 2018年

「一桁」とは、対応するベースの数字を意味します。したがって、 "A"(または、10として表現したい場合)は、16進数の数字です。混乱については申し訳ありません。
Weijun Zhou 2018

1
@WeijunZhou:完了
シャギー

0

Java 8、92バイト

(b,k,s,e)->{String r="",t;for(;s<=e;r+=t.contains(k)?"":t+" ")t=b.toString(s++,b);return r;}

として入力しInteger (base), String (elem), int (start), int (end)ます。

説明:

オンラインでお試しください。

(b,k,s,e)->{              // Method with the four parameters, and String return-type
  String r="",            //  Result-String, starting empty
         t;               //  Temp-String
  for(;s<=e;              //  Loop from start to end (inclusive)
      r+=                 //    After every iteration: append the result-String with:
         t.contains(k)?   //     If the temp-String contains the elem we exclude
          ""              //      Don't append anything to the result-String
         :                //     Else:
          t+" ")          //      Append the temp-String + a space
    t=b.toString(s++,b);  //   Convert the number to the given base and set the temp-String
  return r;}              //  Return the result-String

3つのテストケースは次のように入力されます。

16,"7",16,31
10,"3",1,100
16,"A",151,192
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.