警官と強盗(警官)のハードコーディング


28

これは挑戦です。強盗のスレッドはこちらです。

考えるべき興味深い質問は次のとおりです。

番号のシーケンスがある場合、どのシーケンスについて話しているかが明確になる前に、それらの番号をいくつ提供する必要がありますか?

私はから順に、正の整数についての話をしたい場合は例えば1、私が言うことができる1,2,3,…、それは本当に十分でしょうか?

私はこの質問に答える一つの方法があり、それはコードゴルフをするコードゴルファーである。それらの用語を生成する最短のコードがシーケンスのすべての用語を生成する場合、シーケンスの十分な用語を提供しました。これをコードゴルフの観点から考えると、テストケースを通過する最短のコードが目的のタスクを実行するのに十分なテストケースを提供したことになります。

チャレンジ

この挑戦は挑戦です。どの警官がテストケースを提示し、強盗は、意図したシーケンス以外のテストケースをスプーフィングするより短い方法を見つける必要があります。警官は次のものを提示します。

  • 入力として負でない整数を取り、出力として整数を生成するコード。このコードはシーケンスを定義します。コードは入力として0をサポートする必要はなく、代わりに1を最小入力として使用することを選択します。これがあなたの答えに当てはまるかどうかは明らかです。

  • 出力に影響する可能性のある関連するプラットフォームまたは言語の要件(longintのサイズなど)。

  • コードによって計算されたシーケンスの最初のn項とともに、数値。これらは「テストケース」として機能します。nn

シーケンスの機能を説明し、OEISが存在する場合はリンクすることをお勧めしますが、説明ではなくシーケンスを定義するのはコードです。

強盗は、提示されたものよりも短い同じ言語のプログラムを見つけ、すべてのテストケースに合格します(最初の入力に警官のコードと同じ出力を生成します)。強盗のコードは、nよりも大きい数の場合、警官のプログラムからの出力も異なる必要があります。nn

警官は、提出する前に自分の回答を解読できなければなりません。

1週間後、警官がクラックを明らかにし、答えを安全とマークする場合があります。そのようにマークされた回答は、もはやクラックできません。

得点

警官の回答は、バイト数が少ないほど良いと評価されます。ひびの入った回答は無限のスコアを獲得します。


すべてのテストケースを印刷するだけのように、問題を非数学的にクラックする方法があることは明らかですが、その問題は警察が提供するケースに依存しています。それについての規則があるべきですか?シーケンスの計算可能性またはラムジー理論からの何かに対する制限はありますか?(つまり、マシンをクラックできるようにする必要がありますか?)
— REALyumdub

2
@theReallyumdubの質問では、自分の提出物を解読できる必要があると規定されています。
— 小麦ウィザード

@CatWizardありがとう、私は先に進みました、そして、それはすでに明白なメタ投稿にあります、それは明らかにこれらの人の何人かを妨げます。したがって、クラックの計算に1時間以上かかるのはタグの精神ではありません
— -theREALyumdub


「理論的には、ソリューションは実際にはすべての数値で機能する必要がありますが、...のみで機能する必要があります」という条件はありますか?
— user202729

回答:


6

cQuents、4バイト(クラック)

"::$

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

8つの(n=8)ケースがあります。

1 1
2 12
3 123
4 1234
5 12345
6 123456
7 1234567
8 12345678

コードの説明:

"      Stringify sequence (join on "", remove it and see what happens)
 ::    Given input n, output all items in the sequence up to and including n
   $   Each item in the sequence equals the index

シーケンスは1,2,3,4,5 ...であるため、結合され""てになるため、入力まで出力されること12345 ...を::意味します。



5

Pythonの3、66 57バイト(ひび割れ)

xnorによって
クラックされ、編集前にCat Wizardによってクラックされた

def f(n):x=n/10-2;return int(x*60-x**3*10+x**5/2-x**7/84)

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

こんにちは!場合にクラックするシーケンスを次に示します。最初の40個の要素に0のインデックスを付けます。これはOEISシーケンスではありませんn=40

[-54, -56, -58, -59, -59, -59, -59, -57, -55, -53, -50, -46, -43, -38, -33, -28, -23, -17, -11, -5, 0, 5, 11, 17, 23, 28, 33, 38, 43, 46, 50, 53, 55, 57, 59, 59, 59, 59, 58, 56]

空白を削除するのを忘れました、私はまだ専門のゴルファーではありません:pそれを修正するために編集しても構いませんか?
— crashoz

はい、どうぞ。亀裂を取り除きます。
— 小麦ウィザード


5

Python 2、44バイト(クラック)

f=lambda n,i=1,p=1:n and-~f(n-p%i,i+1,p*i*i)

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

素数。どのシーケンスがより純粋になりますか?それともやり過ぎ?あなたの目標はtoの最初の50個の素数を生成するn=1ことn=50です。

コードは、このtipから正確にコピーされたウィルソンの定理ジェネレータです。

代替シーケンスの異なる値は、オーバーフローや精度などのマシンの制限によるものではありません。サードパーティのライブラリはありません。


Arnauld、@ PoonLevi、およびMr. Xcoderによってクラックされました。


これでひび割れするつもりはなかったと思います。「Python(サードパーティライブラリなし)」または「Python(インポートなし)」などを指定しますか?
— ジョナサンアラン

@JonathanAllanありがとう、サードパーティのライブラリがないことを編集しました。
— xnor

私はまだこれをクラックすることができませんでした(現時点での私の最善の試みは47バイトかそこらです)が、それらの特定の素数について注意すべき興味深いことがあると思います。それぞれについてと、I ∈ [ 1 、50 ] ∩ Nは、これが成り立つ:2 P I ≡ 2 (MOD  P I)。同時に、これはのために当てはまらない任意の(範囲で上記)素数でない数が、それはありませんpii∈[1,50]∩N2pi≡2(mod pi)より高い値の場合。私は他の人が言及した技術を使用して亀裂で彼らの手を試してみてください、そしておそらくより良いスコア:)得ることができるので、ここでは、この考えを残している
— ミスターXcoder

Mr.Xcoder @ ここでは、あなたの提案した方法に基づいて、私の最高の試みです。N = 69でそれがうまく発散、(ベース2、または第プーレ番号に最初のフェルマーpseudoprime)341を返すが、それはまた、N = 1で失敗しました。自分で修正できるとは思えないので、自分が持っているものを共有した方がいいと思いました。(私の最高の修正は46バイトです...)
— アーナルド

1
@Arnauld この方法を使用して、44バイトのソリューションを見つけました。これ以上進むことはできないようです。たぶん他の誰かがこれを理解できるでしょう。
— プーンレヴィ

4

Wolfram言語(Mathematica)、39 34バイト(安全)

Check[{1,9,7}[[#]],18+Boole[#>9]]&

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

シンプルに見えますが、解決策は難しいはずです。

1-indexedおよび。このシーケンスは、OEISでは使用できません。n=99

{1, 9, 7, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}

上記のリストは次と同等です:

Join[{1, 9, 7}, Table[18, 6], Table[19, 90]]

ソリューションを確認するためのテンプレートを次に示します。オンラインで試してください!

意図した亀裂

ここでのキャッチは、最初の3つの用語を除き、桁数が1増えると出力が1増えることです。意図した解決策は、文字列変換に関係しています。

したがって、式と文字列間の変換に関するドキュメントを読むと、関数が見つかりますSpokenString。

解決策はx^n、さまざまな入力に対する式の音声文字列バージョンの長さです。StringLength@SpokenString[x^#]&


3

ハスケル、29バイト(割れ:1、2)

a n=n*ceiling(realToFrac n/2)

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

これは、A093005:(N )= N ⌈ N。a(n)=n⌈n2⌉

テストケースのためにです。0≤n≤20map a [0..20]

[0,1,2,6,8,15,18,28,32,45,50,66,72,91,98,120,128,153,162,190,200]

意図したソリューション(20バイト)

b n=sum$n<$show(3^n)

オンラインでお試しください!で異なり、a (23 )= 276およびb (23 )= 253です。n=23a(23)=276b(23)=253

この関数は、と等価である。上限のおかげで、両方の関数は0から22の範囲の整数引数に対してオーバーラップします:b(n)=n len(3n)=n⌈log10(1+3n)⌉022

ソース



@Laikoni、意図したクラックが短い場合、他の誰かがBMOから強盗を要求する可能性があります。
— fəˈnɛtɪk

@ fəˈnɛtɪkありがとう、私はこのルールを知らなかった。
— ライコニ


2
@BMOそこに行きます:)
— ライコニ

2

JavaScript(ES6)、12バイト(ひび割れ)

これはかなり簡単です。

n=>n*(8*n+1)

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

これはA139275です。

a(n)=n(8n+1)

0≤n<9

0,9,34,75,132,205,294,399,520

また、チャレンジルールに従って、それはそれを超えて分岐する必要があります。


n=>8*n*n+nとは異なりn=94906273、これは有効なクラックですか?
— ngn

@ngnチャレンジルールに従って私には有効に見えますが、精度の損失が有効な発散としてカウントされるかどうかをOPに尋ねるべきでしょうか?n=9ただし、意図したクラックはに対して異なります。
— アーナルド

@CatWizard ^
— ngn

有効なクラックだと思います。
— 小麦ウィザード

2
ひびが入った(の|代わりに+)
— ngn


2

> <>、276バイト(クラック)

1$1-:?!v$:      1[0$          >:?!va2[$:{:@%:{$-{,]v
       >$n; v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

オンラインでお試しください!-v nn番目の要素(1から始まる)を取得するには、これを呼び出します

1$1-:?!;$::n84*o1[0$          >:?!va2[$:{:@%:{$-{,]v
            v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

オンラインでお試しください!with -v nを呼び出して、1から始まるn-1個の要素のリストを取得します

オンライン魚通訳

長くて複雑なもの、これはOEIS A004000です。

a(n)= kとし、kの桁を逆にしてmを形成し、mをkに加算してから、合計の桁を昇順に並べ替えてa(n + 1)を取得します。

例:668-> 668 + 866 = 1534-> 1345。

n=34

1 2 4 8 16 77 145 668 1345 6677 13444 55778 133345 666677 1333444 5567777 12333445 66666677 133333444 556667777 1233334444 5566667777 12333334444 55666667777 123333334444 556666667777 1233333334444 5566666667777 12333333334444 55666666667777 123333333334444 556666666667777 1233333333334444 5566666666667777

どのようにプログラムを実行して、特定の単一の出力を生成しnますか(質問の要求に応じて)?
— ジョナサンアラン

魚には実際には「機能」がないため、n番目を取得するために呼び出すことができるバージョンを追加しました(以前のn-1個の要素を計算する必要があるため、基本的に同じです)
— crashoz

さらに重要なことは、単一の出力を生成する同じ入力インデックス付けに適合する亀裂がありますか?
— ジョナサンアラン

1
私はそう思う、私は同じシーケンスを行う関数を行うことができます 1<=n<=34 でも違う n>34ながら〜30は、短いバイト
— crashoz


2

ゼリー、6 バイト、安全!

<4+ạ2ȯ

これは、ゼロインデックスシーケンスを定義します。

a(n)={1n<32n=3n−2n>3

そのため、最初の16個の値 a(0)⋯a(15) は 1,1,1,2,2,3,4,5,6,7,8,9,10,11,12,13

オンラインでお試しください!(こちらは単一値バージョンです)

これは現在OEISにはありません(ただし、A34138は十分に短い場合はクラックとして機能します)

意図した亀裂

上記のシーケンスは、最初の10進数の桁数と一致します 16A062569の項、の階乗の約数の合計n(また、インデックスがゼロ)。
の17番目ただし、A062569の期間は107004539285280 持っている 15 数字ではなく 14=a(16).

The required code is five bytes in Jelly, !ÆsDL.


1

JavaScript, 26 bytes (Cracked)

let f=x=>x>1?f(x-1)*f(x-2)+1:1

for (x of [0,1,2,3,4,5,6,7]) {
  console.log(x + ' -> ' + f(x))
}

OEIS A007660

Output is the first 6 elements with 0 indexing (1,1,2,3,7,22)

(somewhat shifted from what OEIS has it listed as)

Just creating a simple to solve answer to kick things off

Try it online!



Your example snippet's output starts at 1, not at 0?
— Paŭlo Ebermann

@PaŭloEbermann Fixed that
— fəˈnɛtɪk






0

><>, 42 bytes, cracked

i3%0v
642 .
840
789
159
a 1
v<<
n
l
?
\/
;

Try it online!

Sequence to crack (0-indexed): 101786, 5844, 19902 (not on OEIS).

Intended solution, for reference.



Usually the robbers should be hard coding the output
— Jo King

@JoKing Your crack doesn't seem to produce any values different from mine (or maybe I haven't tested it thoroughly enough to find which values differ), but that's probably easily rectifiable. While there doesn't seem to be anything in the rules forbidding hardcoding, I agree that it may not fit the spirit of the challenge -- in any case you've demonstrated that hardcoding (for a cop) comes with its own risks.
— Aidan F. Pierce

1
I've updated my answer to produce a different value for 4
— Jo King

0

Perl 6, 53 bytes

{(1,2,2,{$!=++$;prepend(@,2-$!%2 xx$_).pop}...*)[$_]}

Try it online!

Anonymous code-block that returns the 0-indexed Kolakoski sequence (OEIS A000002). Solutions are required to match the first 130 elements, so that for some n > 129 it differs from the Kolakoski sequence.


0

Pascal (FPC), 86 bytes (cracked)

var n:word;begin read(n);write(n div 2+n div 4+n div 8+n div 16+n div 32+n div 64)end.

Try it online!

The sequence must be equal up to n=120. The sequence from input 0 to input 120 is

0   0   1   1   3   3   4   4   7   7   8   8  10  10  11  11  15  15  16  16  18  18  19  19  22  22  23  23  25  25  26  26  31  31  32  32  34  34  35  35  38  38  39  39  41  41  42  42  46  46  47  47  49  49  50  50  53  53  54  54  56  56  57  57  63  63  64  64  66  66  67  67  70  70  71  71  73  73  74  74  78  78  79  79  81  81  82  82  85  85  86  86  88  88  89  89  94  94  95  95  97  97  98  98 101 101 102 102 104 104 105 105 109 109 110 110 112 112 113 113 116


My original solution was

var n,i,s:word;begin read(n);i:=2;repeat s:=s+n div i;i:=i*2until i>n;write(s)end.

but r_64 made it even better!


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