多肢選択式テストの不正行為


41

前書き

勉強しながら、複数選択テストをごまかすためのいくつかの方法を考え出そうとしました。基本的には、多肢選択式回答の圧縮バージョンです。メソッドは次のようになります。

テストへの回答:

BCAABABA

これらは3つの異なる配列に変換でき、現在の文字が答えであればtrueまたはfalseを示します。

    B  C  A  A  B  A  B  A
A: [0, 0, 1, 1, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 1, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]

これらの数値をバイナリとして解釈すると、これが大幅に圧縮されます。しかし、これは実際にはもう少し圧縮できます。AとBの位置がわかっている場合、Cの位置は必要ありません。これは、ビット単位のNOT演算子で実行できます。

A: [0, 0, 1, 1, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 1, 0]

A+B: [1, 0, 1, 1, 1, 1, 1, 1]
C:   [0, 1, 0, 0, 0, 0, 0, 0]

配列AおよびBを2進数に変換すると、次のようになります。

A: 00110101
B: 10001010

つまり、8つの多肢選択式回答を2バイトに圧縮できるということです。


仕事

2進数の2つの数値、または同じ長さの0と1のみで構成される2つの配列が与えられた場合、複数の選択肢の答えを出力します


ルール

  • 入力は、[1, 0, 0, 1]またはなどの任意の形式にすることができます1001
  • プログラムまたは機能を提供できます。
  • 入力は常に有効であると仮定することができます。
  • スペースなどで区切られたリストとして出力することもできます。
  • 複数選択の回答は、A、B、Cのみで構成されています。ただし、代わりに小文字を使用できます。
  • これはであるため、バイト数が最小の提出が勝ちです!

テストケース

Input: [1, 0, 0, 1, 0, 0, 1] [0, 1, 0, 0, 1, 0, 0]
Output: ABCABCA

Input: [0, 0, 0, 0, 1, 0, 1, 1] [1, 0, 1, 0, 0, 0, 0, 0]
Output: BCBCACAA

Input: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Output: CCCCCCCCCC

リーダーボード

var QUESTION_ID=69770,OVERRIDE_USER=34388;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important;font-family:Arial}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


75
これが私の解決策です。英語で書かれており(通訳者はどこにいても自由に利用できます)、そしてですStudy.。6バイト。それを打ちます。
コナーオブライエン

58
@CᴏɴᴏʀO'Bʀɪᴇɴ悲しいことに、英語プログラミング言語の標準を満たしいないため、有効な提出ではありません:p
Adnan

17
実際には、回答をベース3として解釈することにより、8つの多肢選択問題を1.625バイト(13ビット)に圧縮できるため、技術的にはこれは最も効率的な方法ではありません。:P
ドアノブ

4
回答a、b、c、またはdに2つのビット00、01、10、11の4つの組み合わせすべてを使用して、同じスペースに別の回答を追加できます。あなたは11を使用していない
フィリップハグランド

5
英語はすべての基準を満たしています。唯一の問題は、この質問をする前に通訳がいないことです。
jimmy23013

回答:


50

ゼリー、7 6バイト

_/ị“ḃ»

電話で入力します。説明を追加します。

(1,0)行くA(0,1)B、と(0,0)C。Jellyの配列は1ベースで、インデックス機能は周期的に機能します。したがって、入力に対して減算を折り畳むことができます。

_              [vectorized] subtraction
_/             Fold subtraction over the input
   “ḃ»         "ABC" compressed. '»' terminates a compressed string.
  ị            Vectorized cyclic index.

ここで試してみてください


54
一体どうやって電話で入力したの?oO
コナーオブライエン

34
サムスンのクリップボード履歴。簡単ではありませんでした。
リトシアスト

9
:-DDそしておめでとうございます!
ルイスメンドー

7
笑、今CᴏɴᴏʀO'Bʀɪᴇɴ@英語と同じサイズ
RK。

13
私は「研究」への答えをゴルフで習います。私は、文法上の間違いで大丈夫な通訳を使用しています。@RK。
コナーオブライエン

12

網膜、44バイト

T`d`BA
B(?=(.)* .*B(?<-1>.)*(?(1)!)$)
C
 .+

後続の改行は重要です。入力は

001101010 100010100

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

説明

T`d`BA

回して開始0に秒B1によA。これにより、前半が正しくなりますBが、を含める必要がある場合にリストされますC。2番目の文字列の同じ位置にBaがあるかどうかをチェックすることにより、これらのエラーのあるs を特定できBます。

B(?=(.)* .*B(?<-1>.)*(?(1)!)$)
C

先読みは、2つBのsの位置を一致させる古典的なバランスグループカウント手法です。(.)*最初の後に接尾辞を数えるBグループに1つのキャプチャを押すことにより、1各文字のために。その後(?<-1>.)*、そのグループから再びポップします。これ$により、そのような文字列の最後に到達できるようになり、(?(1)!)グループ全体が実際に使い果たされます。

最後に、分離スペースと2番目の文字列を取り除きます。

 .+


1
投稿の最初の15秒間に3つのアップ投票。それはある種の記録でなければなりません。
コナーオブライエン

8
@CᴏɴᴏʀO'Bʀɪᴇɴお世辞ですが、3人のアップボッターのうち15人が実際に15秒以内に答えを読んで理解したのは何人でしょうか。:/
マーティンエンダー

4
やった。私は正規表現と網膜を読むのがかなり流amです。
コナーオブライエン


11

JavaScript ES6、36バイト

(a,b)=>a.map((x,y)=>"CBA"[x*2+b[y]])

非常に単純な、そしておそらく明らか十分に理解する:地図の各項目とインデックスa位置にある文字に(x*2インデックスで+アイテムybで)"CBA"


7
これを未使用バージョンとして追加てください:3
コナーオブライエン

2
@CᴏɴᴏʀO'Bʀɪᴇɴ彼CBAはそれをする。また、do予約キーワードであるため、とにかくできません。そのため、構文は無効です。
パトリックロバーツ

@パトリックの簡単な修正:Do(...)
コナー・オブライエン

11

MATL14 9バイト

2*+ 67w-c

現在のバージョン(10.1.0)を使用します

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

説明

コードの機能の概要

2*       % implicitly input array and multiply it by 2
+        % implicitly input array and add it to the first one
67w-    % subtract from 67
c        % convert to char. Implicitly display

仕組みの詳細な説明

2        % Push number 2 onto the stack
*        % Multiply the top two stack elements. Since there's only one
         % element, this triggers implicit input of a (yet inexistent)
         % element below the existing one. This is the first input array,
         % which will be called "A". Both "A" and number 2 are consumed,
         % and the array 2*A is left on the stack.
+        % Add the top two stack elements. Again, since there's only
         % one element (namely array 2*A) this triggers implicit input
         % of the second array, call it "B". Both 2*A and B are consumed
         % and 2*A+B is left on the stack
         % A blank space is needed after the "+" symbol to prevent it from
         % being interpreted as part of number "+67"
67       % Push number 67 onto the stack. The stack now contains, bottom
         % to top, 2*A+B and 67.
w        % Swap top two elements. The stack now contains 67 and 2*A+B
-        % Subtract top two elements. These are consumed and the result
         % 67-A*B is left on the stack
c        % Convert to char array, interpreting each number as ASCII code.
         % Number 67 corresponds to letter 'C'. Therefore at positions
         % where both arrays A and B were 0 this gives 'C' as result.
         % Where A was 1 and B was 0, i.e. 2*A+B is 2, this gives 'A'.
         % Where A was 0 and B was 1, i.e. 2*A+B is 1, this gives 'B'.
         % The stack contents, namely this char array, are implicitly
         % displayed at the end of the program.

これは素晴らしいです!これがなぜ機能するかについてもう少し書いていただけますか?なぜ67?そして、入力配列を2倍してから入力配列を追加する方法は、「入力配列を3倍する」とどう違うのですか?
ビンセント

1
@Vincent Sure!その日の後半に詳細な説明を追加します
ルイスメンドー

@Vincent完了!今より明確かどうか教えてください
ルイスメンドー

10

Java、81バイト

既存のJavaソリューションについてコメントする評判はありません。

void x(int[]a,int[]b){int j=0;for(int i:a)System.out.printf("%c",67-2*i-b[j++]);}

1
これは賢いです。:DI好き。しかし、あなたはほんの少しのインスピレーションを得たようです。;)
アディソンクランプ

1
くそー、それは賢い。私はforeachループをどのように適合させることができるかを理解しようと
長い歳月を費やしました...-CameronD17

9

brainfuck、52バイト

,+[->>----[<--->----],+]<[<[>--<-]<]>>[<,[>-<-]>.>>]

セル0から左に移動でき、8ビットの折り返しセルがあるインタープリターが必要です。私の回答のほとんどとは異なり、EOFの動作は重要ではありません。

0xFF区切り文字として、バイト入力を受け取ります。「テストケース」の下の最初の入力を表すバイトストリームは次のようになります。

0x01 0x00 0x00 0x01 0x00 0x00 0x01 0xFF 0x00 0x01 0x00 0x00 0x01 0x00 0x00

私はカップルが持つことでバイトを救うことができる0x00区切り文字として使用し、0x01かつ0x02、それぞれ0と1のように、しかし、不正行為のようなものフェルト:Pを

私の戦略を考え出したら、このプログラムを書くのはとても簡単でした。出力するn番目の文字を見つけるには、0x43(ASCIIの大文字C)で始まり、((最初のシーケンスのn番目の要素)* 2 + 2番目のシーケンスのn番目の要素)を減算します

価値のあるものとして、52バイトのプログラムを3行に分割し、その横にいくつかの単語を示します。

Get input until hitting a 255 byte; put a 67 byte to the right of each one
,+[->>----[<--->----],+]

For each 67 byte: Subtract (value to the left)*2 from it
<[<[>--<-]<]

For each byte that used to contain 67: Subtract input and print result
>>[<,[>-<-]>.>>]

9

Haskell、29バイト

zipWith(\x y->"BCA"!!(x-y+1))

匿名関数。次のように使用します:

>> zipWith(\x y->"BCA"!!(x-y+1)) [1, 0, 0, 1, 0, 0, 1] [0, 1, 0, 0, 1, 0, 0]
"ABCABCA"

関数をポイントフリーにしようとしましたが、完全に混乱しました。


6
同じ長さのポイント-無料版:zipWith((!!).(["CB","AC"]!!))
nimi

8

Pyth、18 16 10バイト

3 回目の試行:10バイト

の存在を思い出させてくれたFryAmTheEggmanに感謝しGます!

VCQ@<G3xN1

入力の形式は[[0,0,1,1,0,1,0,1]、[1,0,0,0,1,0,1,0]]であり、基本的には行列です。質問番号の選択と列。

手動でコンパイルされたpythonic擬似コード:

              G = "abcdefghijklmnopqrstuvwxyz"    // preinitialized var
VCQ           for N in transpose(Q):    // implicit N as var; C transposes 2D lists
   @<G3           G[:3][                // G[:3] gives me "abc"
       xN1            N.index(1)        // returns -1 if no such element
                  ]

2 回目の試行:16バイト

VCQ?hN\A?.)N\B\C

入力の形式は[[0,0,1,1,0,1,0,1]、[1,0,0,0,1,0,1,0]]であり、基本的には行列です。質問番号の選択と列。

これはコンパイルして

assign('Q',Pliteral_eval(input()))
for N in num_to_range(Pchr(Q)):
   imp_print(("A" if head(N) else ("B" if N.pop() else "C")))

わかりました、私はそれが乱雑に見えることを知っているので、pythonic擬似コードに手でコンパイルしましょう

                 Q = eval(input())
VCQ              for N in range transpose(Q): // implicit N as var; transposes 2D lists
   ?hN               if head(N):              // head(N)=1st element of N
      \A                 print("A")           // implicit print for expressions
                     else:
        ?.)N             if pop(N):
            \B               print("B")
                         else:
              \C             print("C")

1 回目の試み:18のバイト

V8?@QN\A?@Q+8N\B\C

[0,0,1,1,0,1,0,1,1,0,0,0,1,0,1,0]という形式の入力で、本質的に2つのリストを連結します。これはコンパイルして

assign('Q',Pliteral_eval(input()))
for N in num_to_range(8):
   imp_print(("A" if lookup(Q,N) else ("B" if lookup(Q,plus(8,N)) else "C")))

繰り返しますが、手作業でコンパイルする

                   Q = eval(input())
V8                 for N in range(8):
  ?@QN                 if Q[N]:
      \A                  print("A")
                       else:
        ?@Q+8N            if Q[N+8]:
              \B              print("B")
                          else:
                \C            print("C")

そして、私の人生で最初のコードゴルフがあります!!! 昨日Pythを学んだばかりで、コードゴルフに参加したのはこれが初めてです。


プログラミングパズルとコードゴルフへようこそ!これは初めてとても素敵に見えます。+ 1
アドナン

誰かがPythを学んでいるのを見るのはいつも素敵です!あなたはゴルフ.)をすることができますe、そして私はそれがかなり多くゴルフされることができると思います。G小文字のアルファベットを含む変数を考えてみてください。これを使用すると、約10バイトが得られると思います。:)
FryAmTheEggman

@FlyAmTheEggmanああe!私はそれを数分間探していました!また、Gを思い出させてくれてありがとう。あなたは正しい、10バイト!
-busukxuan

7

Python 3、39バイト。

FryAmTheEggmanのおかげで1バイト節約されました。
histocratのおかげで2バイト節約されました。

しばらくの間、ライナー1つで解決できませんでした!

lambda*x:['CBA'[b-a]for a,b in zip(*x)]

これが私のテストケースです。また、この関数が呼び出されると仮定している方法も示しています。

assert f([1,0,0,1,0,0,1], [0,1,0,0,1,0,0]) == ['A', 'B', 'C', 'A', 'B', 'C', 'A']
assert f([0, 0, 0, 0, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0, 0]) == ['B', 'C', 'B', 'C', 'A', 'C', 'A', 'A']
assert f([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) == ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C']

zipペアを使用して配列を反復処理し、文字列にインデックスを付けて正しい文字を選択します。これはすべてリスト内包で行われるため、自動的にリストになります。この溶液のコアは、その唯一の可能な組み合わせであるabされています[0, 1], [1, 0], [0, 0]。したがって、それらを差し引くと-1, 0, 1、最後の、最初の、中間の要素をそれぞれ取得します。



5

ルビー、35バイト

->a,b{a.zip(b).map{|x,y|:CAB[x-y]}}

使用法:

->a,b{a.zip(b).map{|x,y|:CAB[x-y]}}[[1,0,0],[0,1,0]]
=> ["A", "B", "C"]

「CAB」の(xy)番目のゼロインデックス文字を取得します。(1-0)は1を与えるので、A。(0-0)は0を与え、したがってC.(0-1)は-1を与え、Bに折り返します。

奇妙な出力を持つ代替の短いソリューション:

->a,b{a.zip(b){|x,y|p :CAB[x-y]}}

出力は、改行で区切られた引用符付きの文字列であり、これはどういうわけかブリッジのようです。




4

TI-BASIC、59 57 50 37 36バイト

から1つのリストを取得しAns、からもう1つのリストを取得しますPrompt L₁。分岐からに切り替えるというThomas Kwaの提案のおかげで、13バイト節約されましたsub(

Prompt X
For(A,1,dim(∟X
Disp sub("ACB",2+∟X(A)-Ans(A),1
End

トーマス・クワが明日コメントで見つけたと言ったことを探す必要があります。¯\ _(ツ)_ /¯


保存するバイトがまだあります!Prompt L₁with Prompt XおよびL₁withを置き換え∟Xます。さらにありますが、見つけてもらいます。
リルトシアスト

@ThomasKwa L1は1バイトのトークンで、最後にチェックしました。list + xで再度参照すると、2バイトになります...間違っていますか?
コナーオブライエン

L1は2バイトです。
リトシアスト

@ThomasKwaああ。ダン。
コナーオブライエン

現在は37バイトを数えています。(35を取得できます。)
リトシアスト

4

さび、79

Shepmasterのおかげで8バイト節約されました。
kerのおかげで23バイト節約されました。

私はこれがたくさんゴルフダウンされる可能性があると確信していますが、完全なRustプログラムを書くのはこれが初めてです。

fn b(a:&[&[u8]])->Vec<u8>{a[0].iter().zip(a[1]).map(|(c,d)|67-d-c*2).collect()}

誰もがそれを縮小しようとする場合に備えて、ここに未改変のコードとテストケースがあります。

fn b(a:&[&[u8]])->Vec<u8>{
    a[0].iter().zip(a[1]).map(|(c,d)|67-d-c*2).collect()
}
fn main() {
    assert_eq!("ABCABCA", b(&[&[1, 0, 0, 1, 0, 0, 1], &[0, 1, 0, 0, 1, 0, 0]]));
    assert_eq!("BCBCACAA", b(&[&[0, 0, 0, 0, 1, 0, 1, 1], &[1, 0, 1, 0, 0, 0, 0, 0]]));
    assert_eq!("CCCCCCCCCC", b(&[&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]));
}

このアプローチは、私のPythonの答えとよく似ています。主な違いは、文字列を直接インデックス付けできないため、このc-dトリックを実行できないことです。


関数の代わりにクロージャーを使用することは合法ですか?あなたは、宣言内のすべてのタイプをスキップすることができ、ちょうど渡すa[0]a[1]二つの別々の引数として。
oli_obk

また64-y-2*x、Octaveソリューションのトリックを使用u8すると、usize次の代わりに使用できるため、かなりのバイト数を節約できます。is.gd
oli_obk

@kerクロージャーの使用について完全に確信はありません。本質的に匿名関数なので、大丈夫だと思いますよね?
モーガンスラップ

周囲をキャプチャしない限り、匿名関数とまったく同じです。
oli_obk

@kerええ、閉鎖は問題ないはずです。
モーガンスラップ

4

Vitsy、40バイト

ため息私の赤ちゃんはアレイ操作をするように作られていませんでした。

STDIN(私が決してしないこと)を介して入力を期待します"

WX&WXl\[68*-1+m]
?68*-2*"C"-i*O?
"B"O?X?

(まもなく利用可能)詳細モードでの説明:

0:
STDIN;
remove top;
make new stack;
STDIN;
remove top;
push length of stack;
repeat next instruction set top times;
begin recursive area;
push 6;
push 8;
multiply top two;
subtract top two;
push 1;
add top two;
goto top method;
end recursive area;
1:
rotate right a stack;
push 6;
push 8;
multiply top two;
subtract top two;
push 2;
multiply top two;
toggle quote;
push cosine of top; // this is character literal "C"
toggle quote;
subtract top two;
push input item;
multiply top two;
output top as character;
rotate right a stack;
2:
toggle quote;
B;
toggle quote;
output top as character;
rotate right a stack;
remove top;
rotate right a stack;

人々、これはすぐに良くなります。私は現在の長さにとても申し訳ありません。

基本的に、入力を文字列として扱い、そこから操作します。

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


:O詳細モードになるまで待機できません。それは面白いでしょう。の使用のようにW
コナーオブライエン

(これはtryitonlineで入力タブであるが、プログラムの実行中にローカルインタプリタに、単にリーディング0と1の各セット」と末尾の改行をプログラムし、入力を実行@Adnan W技術プロンプトで)。
アディソンCrumpの

ああ、引数セクションで入力を行いました:p。いい答え:)
アドナン

@Adnanこれを理解するのに時間がかかりました-Vitsyは、それがdoubleであると認識すると入力を自動解析します。技術的には、数字以外の先頭に立つことができますが、同じように機能します。
アディソンクランプ

へえ、それは非常に奇妙ですが、反対側では便利です。
アドナン

3

CJam、10バイト

'Cq~z2fbf-

2つのリストのリストとして入力、例えば

[[1 0 0 1 0 0 1] [0 1 0 0 1 0 0]]

ここでテストしてください。

説明

ペアを基数2のビットとして扱い、2for A1for Bおよび0for を取得しCます。

'C  e# Push the character C.
q~  e# Read and evaluate input.
z   e# Transpose the pair of lists to get a list of pairs.
2fb e# Convert each pair from base 2.
f-  e# Subtract each result from the character C.

3

Pythonの3、48の 45バイト

エレガントな解決策があると思って、@ Morgan Thrappの答え​​を見ました...

編集:前述のおかげで3バイトを保存しました。

lambda*x:['A'*a+b*'B'or'C'for a,b in zip(*x)]

lambda *x:[a*'A'or b*'B'or'C'for a,b in zip(*x)]


あ、いいね。見ませんでしたlamba*x:。私はいつもそれができる限りコンパクトだと思って、それからもっと多くのトリックを教えられます/見つけます。私はあなたのソリューションが本当に好きです、とてもいいです。
Ogaday

3

Java、131 122 110 90バイト

編集:Bifz / FlagAsSpamに助けとインスピレーションをありがとう

void x(int[]a,int[]b){int j=0;for(int i:a){System.out.print(i>0?"A":b[j]>0?"B":"C");j++;}}

最初の提出、素朴なJavaソリューション。ほとんど確実に改善できます:)

static String x(int[]a,int[]b){String o="";for(int i=0;i<a.length;i++)o+=a[i]>0?"A":b[i]>0?"B":"C";return(o);} 


==1することができます>0; また、印刷するよりもoを返す方が良いでしょう。
リルトシアスト

どうですか:void x(int[]a,int[]b){for(int i=0;i<a.length;i++)System.out.print(a[i]>0?"A":b[i]>0?"B":"C");}(94バイト)?関数の静的宣言は必要ありません。
アディソンクランプ

最初にiを宣言する必要があります、+ 4バイト:D
Bifz

3

R 29 16バイト

LETTERS[3-2*A-B]

他のコンテストでは一般的だと思ったため、関数の宣言を削除しました。


2

PowerShell、40バイト

param($a,$b)$a|%{"CBA"[2*$_+$b[++$d-1]]}

入力を2つの明示的な配列として受け取ります。PS C:\Tools\Scripts\golfing> .\cheating-a-multiple-choice-test.ps1 @(1,0,0,1,0,0,1) @(0,1,0,0,1,0,0)、格納しで$a$b。次に、でループスルー$a$a|{...}ます。各ループでは、文字列"CBA"にインデックス付けされた文字を出力します。インデックスは、現在の値の2倍と、事前に追加されて減算されたヘルパー変数によってインデックス付けされ$_た値によって決まり$bます。

例として、最初のテストケースの場合、$a = @(1,0,0,1,0,0,1)および$b = @(0,1,0,0,1,0,0)。最初のループ反復にはが$_ = 1あります$d = $null$d以前に宣言されていないため)。$dそのため$_ = 1$d = 1(PowerShellでは$null + 1 = 1)今すぐ追加し$b[1-1] = $b[0] = 0ます。その後2 * 1 + 0 = 2、私たちのインデックス"CBA"[2]、またはA



2

R 36 34バイト

function(a,b)c('B','C','A')[a-b+2]

不要な中括弧を削除して2バイト節約


関数定義の中括弧を削除することにより、2バイトを節約できます。関数本体は単一のステートメントで構成されるため、これらは必要ありません。
アレックスA.

2

Perl 5-47

すでに30の回答があり、perlはありませんか?ここに、素朴な最初の試みがあります:-)ちょうど機能:

sub x{($g,$h)=@_;map{$_?a:$h->[$i++]?b:c}@{$g}}

使用法:

@f = (0, 0, 0, 0, 1, 0, 1, 1);
@s = (1, 0, 1, 0, 0, 0, 0, 0);

print x(\@f, \@s);

正規表現を使用するともっと良いことができると確信していますが、その方法がわかりません。


1

JavaScript ES6、75バイト

私は、配列引数の代わりに整数引数を受け入れるために、さらに1マイル進みました。

(a,b)=>[...Array(8)].map((_,n)=>'CBA'[(a&(s=128>>n)*2+b&s)/s]).join('')

説明:

(a,b)=>              // input of two integers representing 8 answers (max value 255 each)
[...Array(8)]        // generates an array with 8 indices that allows .map() to work
.map((_,n)=>         // n is each index 0-7
'CBA'[...]           // reading character from string via index reference
      (...)          // grouping for division
       (a&...)       // AND operator to test if answer is A
          (s=128>>n) // calculating binary index in integer input and storing reference
       *2            // bias index in 'CBA' so truthy is 2 instead of 1
       +(b&s)        // AND operator to test if answer is B
      /s             // divide by binary index to convert AND operators to increments of 1
.join('')            // convert to string without commas

文字列インデックスロジックの@ETHproductionsの功績。

ここでテスト

f=(a,b)=>[...Array(8)].map((_,n)=>'CBA'[((a&(s=128>>n))*2+(b&s))/s]).join('');

console.log(f(0b01001001, 0b00100100));
console.log(f(0b00001011, 0b10100000));
console.log(f(0b00000000, 0b00000000));
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

プッスト

3バイト余分に、最大30の回答の表現を表示できます。

(a,b)=>[...Array(30)].map((_,n)=>'CBA'[((a&(s=1<<30>>n))*2+(b&s))/s]).join('')


1

Lua、87バイト

単純に配列内の値をテストし、連結するABまたはC

function f(a,b)s=""for i=1,#a do s=s..(0<a[i]and"A"or 0<b[i]and"B"or"C")end print(s)end

1

F#、33バイト

Seq.map2(fun a b->67-a*2-b|>char)

これは、2つのintシーケンス(2つの配列は正常に機能します)を取り、正解を表す新しい文字シーケンスを返す、部分的に適用される関数です。=)


1

真剣に、14バイト

,,Z`i-"CBA"E`M

オンラインで試す

おそらくインタープリターのセーフモードバージョンのバグが原因Xで、オンラインバージョンで正しく動作させるためにを追加する必要があります。ローカルバージョンをダウンロードして、上記のプログラムをそのまま正常に動作させます。

完全な説明を保証するには短すぎますので、私はただ言います:それはジェリーの答えと同じアルゴリズムを使用しています。

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