この整数シーケンスを出力するプログラムを見つけます(Copsのスレッド)


39

これは警官のスレッドです。強盗のスレッドはここに行きます

最後のスレッドはすでに4か月前です。

警官の仕事

  • 警官の仕事は、正の(または負でない)整数を受け取り、別の整数を出力/返すプログラム/関数を作成することです。
  • プログラムがゼロに耐えられない場合、警官はそれを述べなければなりません。
  • 警官は、少なくとも2つのサンプル入力/出力を提供します。
  • たとえば、フィボナッチ数列を記述することにした場合、答えにこれを記述します。
a(0)は0を返します
a(3)は2を返します
  • 例の数は、警官の裁量次第です。
  • ただし、シーケンスは実際にIntegerSequences®のオンライン百科事典に存在する必要があるため、擬似乱数ジェネレーターはありません。:(
  • 警官は、好きなだけキャラクターを隠すことができます。
  • たとえば、私のプログラムが次の場合:

function a(n)
    if n>2 then
        return n
    else
        return a(n-1) + a(n-2)
    end
end

  • 次に、これらの文字を必要に応じて非表示にします。

function a(n)
    if ### then
        ########
    else
        ######################
    end
end

強盗の仕事

  • 明らかに元のソースコードを見つけることです。
  • ただし、同じ出力セットを生成する提案されたソースコードも、OEISで検出されている限り、有効と見なされます。

警官のためのヒント

  • OEISの検索機能は連続した用語に対してのみ機能するため、シーケンスを非表示にする場合は、どこかに穴を空けてください。
  • どうやらシーケンスを非表示にする方法はありません。シーケンスを選択するとき、これを念頭に置いてください。

スコアは、コードのバイト数です。

勝者は、7日間でクラックされていない最低スコアの提出物になります。

2016年4月に投稿された提出物のみが勝利の対象となります。これより後の投稿は歓迎されますが、勝つことはできません。

勝利を主張するには、完全なコードとOEISシーケンスを明らかにする必要があります(7日後)。

投稿は次のようにフォーマットする必要があります(NNは文字数です):


Lua、98バイト

出力:

a(0) returns 0
a(3) returns 2

コード(#公開されていない文字をマーク):

function a(n)
    if ### then
        ########
    else
        ######################
    end
end

コードがクラックされている場合は[Cracked](link to cracker)、ヘッダーに挿入します。提出が安全な場合は、ヘッダーに「Safe」を挿入し、回答の完全なコードを明らかにします。完全なコードを明らかにした回答のみが勝利の対象となります。


2
また、OEIS検索では_、fyi
Sp3000

9
変更するには遅すぎるかもしれませんが、OEISシーケンスの倍数であるシーケンスを許可するか、n番目の用語ごとにのみ含めると、この課題ははるかに改善されます。 サンドボックス、ヒント、ヒント
ネイサンメリル

6
たとえば、フィボナッチ数列を選択して提供するだけa(1000)ですか?(これはシーケンスの一部ですが、OEISで検索するには大きすぎます)
-Sp3000

2
選択したシーケンスに対して値が正しいことを簡単に検証できるように、OEISで実際に値を検索できる必要があると思います。
メゴ

3
「ゼロへの不寛容」は意味をなしません。どういう意味なの?
-feersum

回答:


11

Vim、36回のキーストローク-安全!

i****<esc>:let @q="^*i****$**@***"<cr><n>@qbD

(注:<n>入力を入力する場所です)

数値生成とは関係のないコードを次に示します。

          :let @q="              "<cr><n>@qbD

意味19文字のうち5文字を公開しています。

<n>入力です。以下に出力例を示します。

1@q:    1
2@q:    3
6@q:    18

回答

このコードは、ルーカス番号(A000032)を出力します。これは、フィボナッチシーケンスと似ていますが、の2, 1代わりに開始する点が異なり1, 1ます。最初の15個の数字は次のとおりです。

2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, 521, 843

明らかになったコードは次のとおりです。

i2 1 <esc>:let @q="^diwwyw$pb@-<c-v><c-a>"<cr><n>@qbD

説明:

i2 1 <esc>                          "Insert the starting numbers
          :let @q="....."<cr>       "Define the macro 'Q'

マクロの説明:

^                      "Move to the first non-whitespace character on the line.
 diw                   "(d)elete (i)nner (w)ord. This is different then 'dw' because it doesn't grab the space. 
                      "It also throws people off since 'i' is usually used for inserting text.
    wyw$               "Move to the next number, yank it then move to the end of the line 
        pb             "(p)aste the yanked text and move (b)ack
          @-     <c-a> "@- is the register holding the word we deleted. Increment the current number that many times.
            <c-v>      "Since we're adding <c-a> this from the command line, we need to type it as a literal.

最初の番号は必要なルーカス番号なので、2番目の番号を削除するだけです。だから

b   "move (b)ack
 D  "(D)elete to the end of the line.

また、私が間違っていなければ、これは最初の安全な提出です!それはちょっとクールです。


シーケンスを知っていると思います。Vimのキーストロークに変換する方法がわかりません。
ニックハートリー

出力は単なる数字ですか、それとも行全体ですか?
ASCIIThenANSI

@ASCIIThenANSI bD最後にヒットした後、出力は1つの数字と余分な空白だけです。
DJMcMayhem

シーケンスが正しくなりました!
ニックハートリー

8

05AB1E、5バイト、安全

今日の最後の1つです。出力:

a(0) = 9
a(5) = 4
a(10) = 89

コード:

___m_

難読化された文字はで示され_ます。オンラインでお試しください!-リンク。CP-1252エンコードを使用します。


溶液:

žhžm‡

説明:

žh       # Short for [0-9].
  žm     # Short for [9-0].
    ‡    # Translate.

オンラインでお試しください!またはすべてのテストケースで試してください!


私はシーケンスを知っていますが、ほんの数バイトでそれを生成する方法ではありません
...-LegionMammal978

@ LegionMammal978はい、それがこの部分の最も難しい部分になると思います。
アドナン

5バイトで取得できg°<¹-ますがm、このサイズで使用する方法がわかりません!D:
user81655

@ user81655はい、それは代替ソリューションでした:)。
アドナン

6

エレメント、7バイト、クラック

出力:

a(3) = 111
a(7) = 1111111

#隠された文字であり、それらは、すべての印刷可能なASCIIです。これは実際にはかなり難しいと思います(5つの欠落文字があるため)。

###,##}

便宜上、Try It OnlineEsolang wikiページがあります。


私の元のプログラムは:

_'[,$ ` }

秘trickは

]そして}(両方ともに変換する機能的に同一である}Perlで)。また、以前は混乱の追加層として,$aを生成していましたが、代わりに行う1ことで,完全に無視することも可能,1です。


(私はこれを尋ねるべきではないことを知っていますが)それが正しいと確信していますか?特に、}代わりに]
リーキー修道女

@KennyLau }は正しく、私のプログラム(私が知る限り)はElementのすべてのバージョンで動作します。
PhiNotPi


元のコードのフォーマットが間違っていると思いますか?
Rɪᴋᴇʀ

@EasterlyIrkです。あなたがそれを修正する方法を知っていれば、私のゲストになります。
PhiNotPi


5

JavaScript(ES7)、10バイト、クラック

出力

f(0) -> 1
f(1) -> -1

コード

t=>~t##**#

Firefoxで毎晩テストします。コードは匿名関数です。隠されているのは3文字だけなので、これはおそらく簡単ですが、少なくとも短いです!:P


私の元のコードは:

t=>~top**t

しかし、ソリューションのために自分のコードを強引に強制した後、すぐに気付きました

t=>~t.x**t(ここで、x任意の変数名文字を使用できます)

使用することもできます。これが機能するのは

元のES7べき乗演算子の仕様では、演算子は単項演算子よりも優先順位が低かった(従来の数学や他のほとんどの言語とは異なります)。()または()で~ビット単位のNOTを実行し、NOTを実行する(そうなる)前に、これらを32ビット符号付き整数にキャストします(これらのようなキャスト不可はになります)。私はこれをさらに調べましたが、ごく最近、このようなあいまいな参照を許可しないように仕様が変更されました(将来のゴルフD:には適していません)が、ほとんどのES7エンジンはまだ仕様の最新バージョンに更新されていません。t.xundefinedtopObject00-1


1
@insertusernamehere不正な表現が含まれていると思われるようです。ただし、Firefoxでは毎晩動作します。ES7仕様の実装方法が異なると思います。
-user81655

私は毎晩Firefoxを手に入れましたが、これそこで機能しないことを不満に思う必要があります。ここ
コナーオブライエン

**同等であると仮定するとMath.pow、私は自分自身のテストをいくつか行い、ブルートフォースを実行しました。これはクラックするのが非常に難しいです!
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ私のFirefoxのナイトリーは昨日現在最新です。私はOS Xを使用していますが、Windowsでも動作するはずです。適切なES7オプションを有効にしたTraceurは、適切にトランスパイルします。
user81655

@CᴏɴᴏʀO'Bʀɪᴇɴあなたのリンクから32ビットWindowsで試してみただけで、それも動作します。あなたのブルートフォース検索で解読できなかったことに驚いています。実際、これには多くの解決策があることに気付きました!D:
user81655

4

05AB1E、4バイト(クラック

サンプル出力:

a(5) = 51
a(8) = 257

そして、コードの場合:

###^

最後の1つを明らかにしました。しかし、十分に簡単なはずですが、シーケンスを見つけるのは非常に困難でした:(

非表示の文字はすべて印刷可能です。



4

MATL、5バイト、クラック

非表示の文字はで示され%ます。

%5%*%

出力:

a(1) = 3
a(2) = 6
a(4) = 12

入力0は有効です。


元のコード:

35B*s

あれは、

35    % push number 35
B     % convert to binary: array [1 0 0 0 1 1]
*     % multiply element-wise by implicit input n: gives [n 0 0 0 n n]
s     % sum of array: gives 3*n

2
うーん、コードの5つは非常に迷惑です!
アドナン

技術的には、これはプログラムによって強引に強制される可能性があります...しかし、私はそれを行いません。
リーキー修道女


4

SWIFT、55バイト、クラック

func M(n:Int)->Int{
return(n*****) ?M(**n****):n***;
}

* 非表示のキャラクターをマークします

出力:

M(30) -> 91
M(60) -> 91
M(90) -> 91
M(120)-> 110
M(150)-> 140

関数は受け入れます 0



4

ルビー、46バイト、安全

免責事項/謝罪を追加するための編集:このシーケンスはf [0]で始まり、OEISエントリはf [1]で始まります。値は同じです。

難読化されたコード(#任意の文字):

->####or x##1###(#..##0#);x*=3;end;#.###ect:+}

のような呼び出し

->####or x##1###(#..##0#);x*=3;end;#.###ect:+}[3] (returns 39)

出力:

f[0] = 0
f[1] = 3
f[2] = 12
f[3] = 39
f[4] = 120
f[5] = 363
f[6] = 1092
f[7] = 3279
f[8] = 9840
f[9] = 29523

溶液:

f=->*x{for x[-1]in(0..x[0]);x*=3;end;x.inject:+}

シーケンス:

http://oeis.org/A029858

説明:

ここでの小さなトリックは、パラメータをとして*xではなくとして宣言することですx。つまり、を渡すと2、最初は...にx設定され[2]ます。主要なトリックは奇妙な利用、および公正不明瞭、あなたは代わりのようなイテレータ変数の、代入式の任意の有効な左手側にforループでイテレータを設定することができRubyの構文i。したがって、これは0から(この例では)2にループし、各番号をx[-1]に割り当てます。つまり、xの最後の値が上書きされます。次に、ループ本体x*=3がさらにxを3回連結してxを変化させます。したがって、最初のxはになり[0]、次にになり[0,0,0]ます。次のループでは[0,0,1]、になり[0,0,1,0,0,1,0,0,1]ます。最後に2を渡すと[0,0,1,0,0,1,0,0,2][0, 0, 1, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 2]。次に、injectメソッドを使用して結果を合計します。このメソッドは、+(渡されたメソッド)を各要素に順番に適用して配列を縮小します。各反復で合計がどのように変化するかを考慮すると、1を効果的に追加し(最後の要素を1つ上の要素で上書きする)、3を乗算することがわかります。これは3*(n+1) = 3*n + 3、上で説明したように、ページ。


私はここであなたの警官、特にこれが本当に好きです。よくやった。
チャールズ


3

六角形、7バイト、クラック

出力:

a(1) = 2
a(2) = 4

隠されたコード:

?#####@

または、代わりに:

 ? #
# # #
 # @

オンラインで試してみると便利です。



ちょっと待って、あなたのコードは入力に対して機能し0ますか?
マーティンエンダー

@MartinBüttnerああ、そうではない、悪い。しかし、あなたのソリューションは正しいものでした。
アドナン

3

PHP、41バイト、クラック

うん、ついに別の警官と強盗の挑戦。私がそれを簡単にしなかったことを願っています。

出力

a(5)   = 0
a(15)  = 1
a(35)  = 0
a(36)  = 1
a(45)  = 1

ソース

____________________$argv[1]____________;
####################        ############

ノート


割れた

私は明らかに簡単にし、十分な例を提供しませんでした。私が念頭に置いていたシーケンスはA010054でした

nが三角数の場合はa(n)= 1、それ以外の場合は0。

元のソースコードは次のとおりです。

echo(int)($r=sqrt(8*$argv[1]+1))==$r?1:0;

入力が三角形の数であるかどうかをテストし、1それに0応じて出力します。



3

Jolf、11バイト、ひび割れA011551

c*______x__

c*mf^+91x~P

元のコード:

c*^c"10"x~P

例:

0 -> 1

12 -> 1618033988749


@Adnan良い仕事ですが、私のものとは異なります。そして、最初の操作を理解できませんでした。:P
Rɪᴋᴇʀ16年

ええ、私はそれが何をするのか理解できませんでした:p
アドナン

@Adnanはint関数へのキャストで、フロア1として誤用されていました。
Rɪᴋᴇʀ

3

MATL、9バイト、クラック

コード:

3#2###*##

出力:

a(1)  = 3
a(2)  = 6
a(4)  = 12
a(12) = 37

a(0) 有効です。


割れた

元のシーケンス: A059563

元のコード:

3L2^Ze*sk
3L          % Push [1 -1j] from the clipboard
  2^        % square
    Ze      % exp
      *     % times input
       s    % sum
        k   % floor


3

Java、479バイト、クラック

出力:

a(10) = 81
a(20) = 35890

(入力はコマンドライン引数を介して提供されます)

コード(#非表示の文字をマーク):

import java.util.*;
public class A{

    public static int#########
    public boolean###########

    static A a = new A();

    public static void main(String[] args){
        int input = Integer.parseInt(args[0]);

        LinkedList<Integer> l = new LinkedList<>();
        l.add(1);
        l.add(0);
        l.add(0);

        for(int ix = 0; ################if(##>##{
            ###########d#
            #######+##p##########+##########(#######
        }

        System.out.println(#########################
            ###(A.#############(#5#####)));
    }
}

プログラムはインデックス0から始まります。

(SEはすべての\tインデントを4つのスペースに置き換えるため、バイトの合計は569になります。スペースインデントではなくインデントを使用したプログラムを表示するには、ここをクリックてください\t。)

元のコード:

import java.util.*;
public class A{
    public static interface B{
    public boolean C(int i);} 

    static A a = new A();

    public static void main(String[] args){
        int input = Integer.parseInt(args[0]);

        LinkedList<Integer> l = new LinkedList<>();
        l.add(1);
        l.add(0);
        l.add(0);

        for(int ix = 0; ix<input; ix++)cif(i->  {
            return l.add(
            l.pop()+l.peekFirst()+l.peekLast());});{    
        }

        System.out.println(l.get(1));}static boolean 
            cif(A.B b5){return (b5.C((0)));
    }
}

(同じコードですが、通常の形式です):

import java.util.*;

public class A {
    public static interface B { //functional interface for lambda expression
        public boolean C(int i); //void would have given it away
    }

    static A a = new A(); //distraction

    public static void main(String[] args) {
        int input = Integer.parseInt(args[0]);//Input

        LinkedList<Integer> l = new LinkedList<>();
        l.add(1);//Set up list
        l.add(0);
        l.add(0);

        for (int ix = 0; ix < input; ix++)
            cif(i -> { //Fake if statement is really a lambda expression
                return l.add(l.pop() + l.peekFirst() + l.peekLast());
            });
        { //Distraction
        }

        System.out.println(l.get(1));//Output
    }

    static boolean cif(A.B b5) { //Used to pass in lambda expression.
                  //The A. and b5 were both distractions
        return (b5.C((0)));
    }
}

どうして488のバイトカウントに達するのですか?私はから545カウントiしますか}?また、0許容値を指定してください。
ヴァンパイア

あなたの例ではないa(9)a(19)かはa(8)a(18)あなたが取っOEIS上のそれのどのバージョンによると、?
ヴァンパイア

@BjörnKautler家に帰ったら、バイトカウンターへのリンクを投稿します。0トレランスとはどういう意味ですか?最初の値は、(1)= 0である
ダニエルM.

OPから:「警官の仕事は、正の(または負でない)整数を取り、別の整数を出力/返すプログラム/関数を書くことです。したがって、入力1を0として、これもOEISシーケンスに従って位置のシフトを説明すると思います。
ヴァンパイア

@BjörnKautlerOK、ありがとう。0が入力されてもプログラムはクラッシュしませんが、シーケンスはインデックス1から始まります。
ダニエルM.


3

C、71バイトのクラック

############
#####
main(){
 scanf("%d",##);
 ###6#;
 printf("%d",##);
}

出力:

a(1) = 0   a(2) = 0   a(5) = 1
a(6) = 1   a(7) = 1   a(9) = 2

これはgccで機能し、完全なプログラムです。入力として0を受け入れます。



まあ、私はもっと多くのキャラクターを明らかにすべきだった。別のものを投稿し、関数呼び出しを避けようとしました。codegolf.stackexchange.com/a/77583/52554
mIllIbyte

3

Pyth、70バイト、クラック

DhbI|qb"#"qb"#"R!1Iqb"#"#####+""s####2###;##lY+Q1Ih+""Z#####)=Z+Z1;@YQ

# 隠されたキャラクターは

クラックされているので、ここに隠された文字のないバージョンがあります:

DhbI|qb"4"qb"0"R!1Iqb"1"R!0Rh+""sm^sd2cb1;W<lY+Q1Ih+""Z=Y+YZ)=Z+Z1;@YQ

サンプル出力:

a(2) -> 10
a(4) -> 19

OEISでこれを見つけることができたのは幸いです。私は個人的にそれらの例からそれを見つけることができませんでした(シーケンスを見つけるのは非常に簡単です)。



3

Ruby、38バイト、クラック

難読化されたコード(#任意の文字を使用できます):

->#{(s=#########).sum==#3333&&eval(s)}

出力:

入力に10を掛けます(A008592)。0を含む任意の整数で機能します。例えば

->#{(s=#########).sum==#3333&&eval(s)}[3]  => 30
->#{(s=#########).sum==#3333&&eval(s)}[10] => 100




3

Lua、45バイト、クラック

小さなヒント:

a(0) will make the program crash :)

出力

a(1)=>0
a(2)=>1

コード

#コードを隠すために使用します:)。

a=function(n)#####n###### and #or ########end

次のコードでOEIS A007814を使用していました。

a=function(n)return n%2>0 and 0or 1+a(n/2)end


@KennyLauよくやった、私は考えていたOEISと意図したコードを追加しました、これを防ぐために少なくとももう1つの出力を追加する必要がありました:p
Katenkyo

3

Pyke、15バイト、SAFE

出力

a(2) = 21
a(15) = 17

明らかになったコード:

#R#D######+##)#

溶液:

OEIS A038822
wR}DSR_Q*L+#P)l
ここでwR}は、数100を生成し、R通常スタックを回転させるために使用されるキャラクターを明らかにするために、いくつかの赤いニシンを使用しました。また、シーケンス内の素数の数を数えるため#P)lに、より単純な代わりに使用しmPsました。


問題のシーケンスは、n = 0ではなくn = 1から始まります。
ブルー

あなたが述べたように、n = 1ではなくn = 0で始まることを除いて、それはそのシーケンスだと思いました。
エミグナ

3

C、82バイト、安全

####=############
main(i){scanf("%d",##);
for(i=1;i++/4<#;)##=2;
printf("%d",##);}

gccで動作し、完全なプログラムであり、stdinから入力を読み取り、出力をstdoutに出力します。ここでは、シーケンスはA004526、floor(n / 2)です。

a(0) = 0    a(1) = 0    a(2) = 1
a(3) = 1    a(4) = 2    a(5) = 2
a(6) = 3    a(7) = 3    a(8) = 4

溶液:

a;*b=(char*)&a+1;
main(i){scanf("%d",&a);
for(i=1;i++/4<2;)a*=2;
printf("%d",*b);}

これは、リトルエンディアンのマシンでのみ機能し、サイズcharが1バイトの場合にのみ機能します。
の最上位バイトよりも上位のバイトのa値が0の場合のみ。デフォルトでは初期化されていないグローバル変数がbssセグメントに入り、初期化されたグローバル変数がデータセグメントに入るため、これはgccに当てはまると思います(https:// stackoverflow.com/questions/8721475/if-a-global-variable-is-initialized-to-0-will-it-go-to-bss)。
したがってa、bss のみになります(他のグローバル変数のみbが初期化され、データセグメントに入ります)。aがbssの最後にない場合、の最上位バイトよりも上位のバイトaもbssであるため、値は0です。


今すぐ関数呼び出しを行ってみてください:)
mIllIbyte

1
シーケンスを指定する必要はないと思います
...-FliiFe

@FliiFe-修正済み:)
mIllIbyte


2

エレメント、10バイト、クラック

出力:

a(3) = 6561
a(4) = 4294967296

Elementでこのシーケンスを計算する方法はたぶん数通りしかありません。9文字のソリューションを見つけましたが、この10文字のソリューションは実際にはもっと難しいと思いました。#隠された文字です。

#_####@^#`

便宜上、Try It OnlineEsolang wikiページがあります。


オリジナルは

2_3:~2@^^`

もう1バイト表示します。
リーキー修道女

@KennyLau 5つのうち1つだと思った?10バイトで、3を表示しています
。– PhiNotPi

あなたは8つのバイトを持っているので、入力と出力は、カウントされません、あなたは1示した
漏れ修道女

@KennyLauできました。
PhiNotPi



2

05AB1E、5バイト、クラック

この投稿が他の投稿ほど簡単ではないことを願っています:p。出力:

a(0) = 0
a(1) = 1
a(2) = 6
a(3) = 24
a(4) = 80
a(5) = 240

難読化されたコード:

####O

ただし、一部の非ASCII文字が含まれ、CP-1252エンコードが使用されます。

オンラインでお試しください!役に立つかもしれません:p。



なぜ私は前にそれを見たような気がしますか?
リーキー修道女

@KennyLau¯\ _(ツ)_ /¯
アドナン・

2

Jolf、11バイト、ひび割れ

出力:

a(10) = 4
a(20) = 6
a(30) = 8

そして、部分的に隠されたコード:

####xd###x#

ヒント:

シーケンスを順番に見ていくと、これを見つけるまでさほど遠くに行かなかった。

クラックされたバージョンは、元のコードとまったく同じではありません。私は現在自分のコンピューターにいないので、正確には持っていませんが、次のようなものでした:

l fzxd!m%xH

(私が確信できない唯一の部分は!m。です。変数がゼロかどうかをチェックするものは何でもです。)


私はシーケンスを見つけました...残念私はJolfやjavascriptをよく知らない:(
Blue

@muddyfish、Same here ...
LegionMammal978

まあ、それはマスターがそれをする時間だと思います...私ができますか?
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ他の人が困惑している場合-そして、彼らがそうであるように見える-気軽に。
ニックハートリー


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