객관식 시험 부정 행위


41

소개

공부하면서 객관식 시험을 치르는 몇 가지 방법을 생각해 냈습니다. 기본적으로 객관식 답변의 압축 버전입니다. 방법은 다음과 같습니다.

시험에 대한 답변 :

BCAABABA

이것들은 3 개의 다른 배열로 변환 될 수 있으며, 현재 문자가 답이면 참 또는 거짓을 나타냅니다.

    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를 이진수로 변환하면 다음과 같은 결과가 발생합니다.

A: 00110101
B: 10001010

즉, 8 개의 객관식 답변을 2 바이트로 압축 할 수 있습니다!


태스크

이진수로 된 두 개의 숫자 또는 길이가 같은 0과 1로만 구성된 두 개의 배열이 주어지면 객관식 답변을 출력합니다.


규칙

  • 입력은 [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 바이트 이길.
Conor O'Brien

58
@ CᴏɴᴏʀO'Bʀɪᴇɴ 슬프게도, 영어프로그래밍 언어에 대한 우리의 표준을 만족하지 않으므로 유효한 제출물이 아닙니다 : p
Adnan

17
실제로 답을 기본 3으로 해석하여 8 개의 객관식 질문을 1.625 바이트 (13 비트)로 압축 할 수 있으므로 기술적으로 가장 효율적인 방법은 아닙니다. : P
Doorknob

4
답 a, b, c 또는 d에 대해 두 개의 비트 00, 01, 10, 11의 4 가지 조합을 모두 사용하여 동일한 공간에 다른 답을 추가 할 수 있습니다. 11을 사용하고 있지 않습니다.
Filip Haglund

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
삼성의 클립 보드 기록. 쉽지 않았습니다.
lirtosiast

9
: -DD 그리고 10k 축하합니다!
Luis Mendo

7
Lol, 영어와 같은 크기 @ 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. 우리는 두 번째 문자열과 같은 위치에 B있는지 확인하여 잘못된 것을 식별 할 수 있습니다 B.

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

lookahead는 고전적인 밸런싱 그룹 카운팅 기술로 두 개의 위치를 ​​일치시킵니다 B. (.)*카운트 최초의 후 접미사 B그룹에 하나의 캡처를 밀어 1각 문자에 대해. 그런 다음 (?<-1>.)*해당 그룹에서 다시 나타납니다. $우리가 같은 문자열의 끝에 도달 할 수 있도록 보장하고, (?(1)!)보장하지만 우리는 실제로 전체 그룹을 소진했다고.

마지막으로 분리 공간과 두 번째 문자열을 제거합니다.

 .+


1
게시 첫 15 초 동안 3 개의 업 보트; 그것은 일종의 기록이어야합니다.
코너 O'Brien

8
@ CᴏɴᴏʀO'Bʀɪᴇɴ Flattering,하지만 그 3 명의 지지자 중 15 명만이 실제로 그 답을 읽고 이해 한 사람이 몇 명인지 궁금합니다. : /
Martin Ender

4
나는했다. 나는 정규식과 망막을 읽는 데 능숙합니다.
코너 오브라이언


11

자바 스크립트 ES6, 36 바이트

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

매우 간단하고 이해하기에 분명합니다. 각 항목과 색인 a을의 char 위치 ( x*2+ index yin b)에 매핑 하십시오 "CBA".


7
이것을 ungolfed 버전으로 추가 하십시오 : 3
Conor O'Brien

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ 그는 CBA그렇게합니다. 또한 do예약 키워드이므로 구문이 유효하지 않기 때문에 어쨌든 할 수 없습니다 .
Patrick Roberts

@ 패트릭 간단한 수정 : Do (...)
코너 오브라이언

11

MATL , 14 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을 곱하기'와 어떻게 다릅니 까?
Vincent

1
@Vincent Sure! 다음 날에 좀 더 자세한 설명을 추가하겠습니다
Luis Mendo

@Vincent Done! 더 분명한지 알려주세요
Luis Mendo

10

자바, 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 좋아. 그래도 당신은 약간의 영감을 얻었습니다. ;)
Addison Crump

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을 사용하여 몇 바이트를 절약 할 수 있었지만 부정 행위처럼 느껴졌습니다.

전략을 알아 낸 후에는이 프로그램을 작성하는 것이 매우 쉬웠습니다. 출력 할 n 번째 문자를 찾으려면 0x43(ASCII의 대문자 C)로 시작하고 ((첫 번째 시퀀스의 n 번째 요소) * 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

하스켈, 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 바이트

번째 시도 : 10 바이트

FryAmTheEggman의 존재를 상기시켜 주셔서 감사합니다 G!

VCQ@<G3xN1

입력은 [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]] 형식이며 기본적으로 행렬입니다. row 질문 번호에 대한 선택과 열.

수동 컴파일 된 파이썬 의사 코드 :

              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
                  ]

번째 시도 : 16 바이트

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

입력은 [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]] 형식이며 기본적으로 행렬입니다. row 질문 번호에 대한 선택과 열.

이 컴파일

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")))

좋아, 나는 그것이 지저분 해 보인다는 것을 안다. 그래서 파이썬 의사 코드로 직접 컴파일하자.

                 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] 형식으로 입력하면 본질적으로 두 목록이 연결됩니다. 이 컴파일

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
Adnan

Pyth를 배우는 사람을 항상 만나서 반갑습니다! 당신은 골프 .)가 될 수 있고 e, 나는 그것이 훨씬 더 골프 를 칠 수 있다고 생각합니다. G소문자 알파벳을 포함 하는 변수 를 고려해보십시오. 나는 그것을 사용하여 약 10 바이트에 도달 할 수 있다고 생각합니다. 행복한 골프! :)
FryAmTheEggman

@FryAmTheEggman 아 전자! 몇 분 동안 검색했습니다! 또한 G를 상기시켜 주셔서 감사합니다. 10 바이트가 맞습니다!
busukxuan

7

파이썬 3, 39 바이트.

FryAmTheEggman 덕분에 1 바이트를 절약했습니다.
histocrat 덕분에 2 바이트를 절약했습니다.

한 번에 하나의 라이너로 해결할 수 없었습니다!

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배열의 페어를 통해 반복하고 문자열로 인덱스는 원하는 문자를 선택 할 수 있습니다. 이것은 모두 목록 이해에서 발생하므로 자동적으로 목록이됩니다. 이 해결책의 핵심은 유일한 가능한 조합이다 a하고 b있다 [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

apt, 13 바이트

¡#C-X*2-VgY)d

온라인으로 사용해보십시오!

작동 원리

¡#C-X*2-VgY)d  // Implicit: U, V = input lists
¡              // Map each item X and index Y in U to:
 #C-X*2        //  The char code of C (67), minus 2X,
       -VgY)   //  minus the item at index Y in V.
            d  //  Convert to a char code.

4

옥타브, 19 바이트

@(x,y)[67-y-2*x,'']

테스트:

f([1 0 0 0 1 1],[0 1 0 0 0 0])
ans = ABCCAA

나중에 컴퓨터가 있으면 설명을 추가하겠습니다. 이것은 내 셀의 옥타브 온라인 에서 작성되고 테스트되었습니다 .


4

TI-BASIC, 59 57 50 37 36 바이트

에서 하나의 목록을 가져 Ans오고에서 다른 목록을 가져 옵니다 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₁와 함께 Prompt XL₁함께 ∟X. 더 많지만 찾아 보도록하겠습니다.
lirtosiast

@ThomasKwa L1은 1 바이트 토큰이며 마지막으로 확인했습니다. list + x로 다시 참조하면 2 바이트가됩니다 ... 정확하지 않습니까?
코너 O'Brien

L1은 2 바이트입니다.
lirtosiast

@ThomasKwa 오. 댕
Conor O'Brien

현재 상태는 37 바이트입니다. (35를 얻을 수 있습니다.)
lirtosiast

4

녹, 79

Shepmaster 덕분에 8 바이트를 절약했습니다.
ker 덕분에 23 바이트를 절약했습니다.

나는 이것이 골프를 많이 할 수 있다고 긍정적이지만, 이것은 처음으로 전체 녹 프로그램을 작성하는 것입니다.

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

누구나 축소하려는 경우를위한 ungolfed 코드 및 테스트 사례가 있습니다.

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

이 접근법은 내 파이썬 답변과 매우 비슷합니다. 가장 큰 차이점은 문자열을 직접 색인 할 수 없으므로 c-d트릭을 수행 할 수 없다는 것 입니다.


함수 대신 클로저를 사용하는 것이 합법적입니까? 당신은 선언의 모든 유형을 건너 뛸 수 있습니다 그냥 통과 a[0]하고 a[1]두 개의 별도의 인수로.
oli_obk

또한 사용 64-y-2*x옥타브 솔루션에서 트릭 인해 사용 할 수있는 아주 몇 바이트를 저장 u8하는 대신 usize: is.gd/GNPK76
oli_obk

@ker 클로저를 사용하는 것이 확실하지 않습니다. 본질적으로 익명의 기능이기 때문에 괜찮다고 가정합니다.
Morgan Thrapp

주변 환경을 포착하지 않는 한 익명 함수와 같습니다.
oli_obk

@ker 그렇다면, 폐쇄는 괜찮을 것입니다.
Morgan Thrapp

4

Vitsy, 40 바이트

한숨 내 아기는 배열 조작을하지 않았습니다.

Leading과 함께 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!
코너 O'Brien

@Adnan tryitonline의 입력 탭이지만 로컬 인터프리터에서 프로그램을 실행하고 프로그램을 실행하는 동안 선행 "및 후행 줄 바꿈으로 각 0과 1 세트를 입력하면됩니다 ( W기술적으로 프롬프트가 표시됨)
Addison Crump

아, 나는 인수 섹션에 입력을주었습니다 : p. 그래도 좋은 답변 :)
Adnan

@Adnan 이것을 알아내는 데 시간이 걸렸습니다-Vitsy는 입력이 두 배임을 인식하면 입력을 자동 구문 분석합니다. 기술적으로 숫자를 제외한 다른 모든 것을 가질 수 있으며 동일하게 작동합니다.
애디슨 크럼

허, 그것은 이상하다. 그러나 다른 한편으로는 유용 할 수있다.
Adnan

3

CJam, 10 바이트

'Cq~z2fbf-

예를 들어 두 목록의 목록으로 입력

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

여기에서 테스트하십시오.

설명

쌍을 기본 2 숫자의 비트로 취급하면 2for A, 1for B0for 를 얻 습니다 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

파이썬 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

자바 (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를 반환하는 것이 좋습니다.
lirtosiast

어떻 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 바이트)? 함수에 대한 정적 선언이 필요하지 않습니다.
애디슨 크럼

먼저 +4 바이트를 선언해야합니다. : D
Bifz

3

R 29 16 바이트

LETTERS[3-2*A-B]

다른 콘테스트에서 흔히 볼 수 있으므로 기능 선언을 제거했습니다.


2

PowerShell, 40 바이트

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

예를 들어 입력을 두 개의 명시 적 배열로 사용합니다. 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". 색인은 현재 값의 두 배로 결정 되고 사전에 추가 된 다음 빼는 도우미 변수에 의해 색인 된 $_값이 결정됩니다 $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 바이트를 저장할 수 있습니다. 함수 본문은 단일 명령문으로 구성되므로 필요하지 않습니다.
Alex A.

2

펄 5-47

이미 30 개의 답변이 있고 펄이 없습니까? 다음은 순진한 첫 번째 시도입니다 :-) 그냥 기능 :

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

자바 스크립트 ES6, 75 바이트

배열 인수 대신 정수 인수를 허용하기 위해 여분의 마일을 보냈습니다.

(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

루아, 87 바이트

단순히 배열의 값을 테스트하고, 합치 A, B또는 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)

그것은 두 개의 int 시퀀스를 취하는 부분적으로 적용되는 함수입니다. 두 개의 배열은 잘 작동합니다. 그리고 정답을 나타내는 새로운 문자 시퀀스를 반환합니다. =)


1

진심으로, 14 바이트

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

온라인으로 사용해보십시오

아마도 인터프리터의 안전 모드 버전의 버그로 인해 X온라인 버전에서 제대로 작동하려면를 추가해야합니다 . 위의 프로그램을 그대로 작동 시키려면 로컬 버전을 다운로드하십시오.

전체 설명을 보증하기에는 너무 짧으므로 간단히 말하면 젤리 답변과 동일한 알고리즘을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.