이중 : 중요한 쓸모없는 연산자


33

입력

  • 2 내지 1의 1 내지 255의 양수 (포함), 각각의리스트 32 - 1 (포함).
  • 입력 형식이 테스트 사례와 동일 할 필요는 없습니다.
  • 선행 0이없는 입력이 승인되어야합니다.
  • 선행 0이있는 입력은 허용되지 않습니다.
  • 정수 사이에 원하는 구분 기호를 사용할 수 있습니다.
  • 정수는 문자열로 표시 될 수 있지만 특정 정수의 개별 숫자는 연속적이어야합니다.
  • 출력이 해당 기본에있는 경우 입력에 이진 및 단항을 포함한 모든 기본을 사용하도록 선택할 수 있습니다.

산출

  • 단일 정수
  • 출력에는 선행 0이 없어야합니다.
  • 출력은 입력과 동일한베이스에 있어야합니다.
  • 원하는 방식으로 출력을 계산할 수 있지만 다음 계산 결과와 일치해야합니다.

이중 계산

  • 이진 표현의 비트는 0부터 시작하여 오른쪽부터 번호가 매겨 지므로 비트 i 는 2 i를 나타내는 열에 있습니다.
  • I 번째 bitsum는 의 합인 I 번째 입력 번호의 각각의 이진 표현의 비트.
  • 최대 비트 섬비트 섬취하는 최대 값입니다.
  • 비트 섬 최소값비트 섬취하는 0이 아닌 가장 낮은 값입니다.
  • I 번째 출력의 이진 표현의 숫자이다 :
    • i 번째 비트 섬이 최대 비트 수 또는 최소 비트 수와 같은 경우 1 입니다.
    • 그렇지 않으면 0입니다.

작동 예

이 예에서는 입력 및 출력에 이진을 사용합니다.

Input:    100110
         1101110
         1100101
         _______
Bitsums: 2301321

Output:   101101

최대 bitum은 3이고 최소 bitum은 1이므로 출력의 모든 위치에 1이 있고, bitum이 3 또는 1이고 다른 곳에 0이 있습니다.


테스트 사례

테스트 사례는 다음과 같은 형식입니다.

Input => Output

이진 테스트 사례 :

[1] => 1
[10] => 10
[1, 10, 101] => 111
[11111111111111111111111111111111] => 11111111111111111111111111111111
[10010010010010010010010010010010, 10101010101010101010101010101010, 11011011011011011011011011011011] => 11100011100011100011100011100011
[10001011100010100110100101001001, 10110000111110010000111110111010, 1101110001101101011010010100101, 1010101010001011101001001010101] => 11 

10 진수로 동일한 테스트 사례 :

[1] => 1
[2] => 2
[1, 2, 5] => 7
[4294967295] => 4294967295
[2454267026, 2863311530, 3681400539] => 3817748707
[2341103945, 2969112506, 1849078949, 1430639189] => 3

리더 보드

Martin의 리더 보드 스 니펫 덕분에


연산자는 chat에서 토론 한 후 biplex로 명명되었으며, 바이너리 평면 극단의 줄임말입니다 .


예제와 같이 입력을 이진으로 요구할 수 있습니까?
feersum

1
@feersum You may choose to use any base for input and output (including binary and unary), provided they are both in the same base. 그래서 그래, :) 그것을 위해 이동
trichoplax

[[1,0,1], [1,1,0,0], [1,0,0,1]]와 같은 표기법을 사용할 수 있습니까?
Akangka

아마 아닙니다. 가장 제한적인 것으로 가정하십시오.
Akangka

@ChristianIrwan 입력은 정수 (각각 인접한 숫자로 구성됨) 형식이어야합니다. 정수는 문자열로 표시 될 수 있지만 숫자 사이에 구분 기호가 없어야합니다.
trichoplax 10

답변:


1

경쟁하지 않는 젤리

14 바이트이 대답은 젤리의 생성 이전의 도전이므로 경쟁이 아닙니다.

BUSµḟ0Ṣ.ịe€@UḄ

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

작동 원리

BUSµḟ0Ṣ.ịe€@UḄ    Main link. Input: A (list)

B                 Convert each item in A to binary.
 U                Reverse each array of binary digits.
  S               Add them across columns.

   µ              Monadic chain. Argument: S (list of column sums)
    ḟ0            Remove all occurrences of 0.
      Ṣ           Sort the remaining sums.
       .ị         Take the elements with indices around 0.5.
                  Indices are 1-bases, so this selects the last and the first one.
             U    Yield S, reversed.
            @     Reverse the arguments.
         e€       Test each item in the left list for membership in the right one.
              Ḅ   Convert from binary to integer.                

정확하게 판단하는 방법에 대한 의견 이 다르지만 , 이 메타 질문 은 공동체가 도전이 언어의 생성을 시작하기 전에 경쟁이 아닌 것으로 더 이상 답변을 표시하지 않는 것을 강력하게 제안합니다. 따라서이 답변을 수락합니다.
trichoplax

11

Pyth, 26 25 바이트

JsM.T_MjR2Qi_}RhM_BS-J0J2

온라인으로 사용해보십시오 : 데모 또는 테스트 스위트

설명

JsM.T_MjR2Q
       jR2Q      convert each input number to binary (lists of 1s and 0s)
     _M          reverse each list
   .T            transpose (with top justify)
 sM              sum up each list (numbers of 1s at each position)
J                store this list in J

i_}RhM_BS-J0J2
         -J0     J without 0s
        S        sorted
      _B         create the list [sorted, reverse(sorted)]
    hM           take the first elments of each (bitsum-min and bitsum-max)
  }R        J    check for each value in J, if it is part of ^
 _               reverse this list of booleans
i            2   convert from binary to base 10 and print

1
_B사용은 훌륭
isaacg

9

J, 31 30 24 23 21 바이트

+/(e.>./,<./@#~@)&.#:

이것은 십진 정수 목록을 가져와 십진수 이중을 반환하는 암묵적인 동사입니다.

그의 제안에 대한 @ Zgarb 덕분에 4 바이트를 직접 절약하고 2 개 더 길을 열었습니다!

2 바이트 더 떨어져서 골프를 한 @randomra에게 감사드립니다!

테스트 사례

   biplex =: +/(e.>./,<./@#~@)&.#:

   biplex ,1
1
   biplex ,2
2
   biplex 1 2 5
7
   biplex ,4294967295
4294967295
   biplex 2454267026 2863311530 3681400539
3817748707
   biplex 2341103945 2969112506 1849078949 1430639189
3

작동 원리

                 &.    Dual. Apply the verb to the right, the verb to the left,
                       and finally the inverse of the verb to the right.
                   #:  Convert the input list from integer to base 2.
  (            @)      Define an adverb, i.e., an operator that takes a verb as
                       its left argument.
+/                     Call it with "reduce by sum". This calculates the sum of
                       the corresponding binary digits of all integers before
                       executing the remainder of the adverb's body, i.e, this:
             #~          Replicate the sum N a total of N times, i.e., turn
                         0 1 2 3 into 1 2 2 3 3 3. This eliminates zeroes.
         <./@            Calculate the minimum of the result.
     >./                 Calculate the maximum of the sums.
        ,                Append; wrap both extrema into a list.
   e.                    Check if each of the sums is in the list of extrema.
                         This yields 1 if yes and 0 if no.
                       (from &.) Convert from base 2 to integer.

9

Minkolang 0.10 , 109 79 바이트

(n1$(d2%$r2:d)99*I-DmI2:[+1R]$I)rI$d$(s0(x0gd,)Ik3R2g1-X0I3-[2*2gd0c=$r1c=++]N.

입력과 출력은 10 진수입니다. 여기에서 시도하십시오.

설명

(                            $I)    Loop until input is empty
 n                                  Read in number from input
  1$(       d)                      Start a while loop with only the top of stack
     d2%                            Next least-significant bit (modulo by 2)
        $r                          Swap top two values
          2:                        Divide by 2
              99*I-D                Pad with 0s
                                    (when the while loop exits, top of stack is 0)
                    m               Merge (interleave) stack
                     I2:[   ]       For each pair...
                         +1R        Add and rotate stack to the right
                                    <<This does the work of computing bitsums>>

r       Reverse stack
 I      Push length of stack
  $d    Duplicate whole stack
        <<This lets me sort the bitsums without affecting the original order>>

$(                      Start while loop with <top of stack> elements
  s                     Sort
   0(     )             Push a 0 and start another while loop
     x                  Dump top of stack
      0g                Get front of stack and put it on top
        d,              Duplicate and <not> for end-while condition check
           Ik           Push length of stack and break out of while loop
             3R         Rotate [min, max, length] to front
               2g1-     Get length and put it on top, then subtract 1
                   X    Dump that many elements off the top of stack
                        <<Now I have min and max>>

0                        Initialize decimal with 0    
 I3-[               ]    For as many bits as there are...
     2*                  Multiply by 2
       2gd               Get the next most significant bit and put it on top
          0c=            Copy min and check for equality
             $r          Swap top two elements of stack
               1c=       Copy max and check for equality
                  ++     Add 1 if bitsum item is equal to min or max, 0 otherwise
N.                       Output as integer and stop

구 버전:

$nI[(d2%i1+0a+i1+0A00ai`4&i00A2:d)x]00a1+[i1+0a]s0(x0gd,)rI2-[x]00a1+[i1+0ad0c=$r1c=+]0gx0gx0(xd,)0I1-[2*+]N.

여기 사용해보십시오!

설명

이것의 핵심은이다 어레이 기능 무겁게 (사용 a A후, 최소 및 최대 발견되는의 bitsums를 저장하는) 1S와 0S 선도의 투기에 적절히 출력되는 0두 위치에서 S.

$n                                      Read in whole input as integers
  I[(                             x]    Convert each number to binary
     d2%                                Get next least significant bit (modulo by 2)
        i1+0a                           Get current value in array for that position
             +                          Add
              i1+0A                     Put current value in array for that position
                   00ai`                Get first value of array (bitsum length)
                      i`                Greater than loop counter?
                        4&i00A          If not, put loop counter there
                              2:        Divide by 2
                                d)      If 0, exit loop

00a                Get first value of array (maximum length
   1+              Add one
     [i1+0a]       Get bitsum values from array and push on stack
            s      Sort
0(                 Push a 0 (for dump) and start a while loop -- dumps leading 0s
  x                Dump top of stack
   0g              Get bottom of stack
     d,            Duplicate and <not> it
       )           Exit loop when top of stack is non-zero (i.e., the minimum)
        r          Reverse stack (so now it's [min, max, <stuff>])
         I2-[x]    Dump everything else

00a1+[               ]    Get bitsum length and loop that many times
      i1+0a               Get bitsum value at current position
           d              Duplicate
            0c=           Copy front of stack and check for equality
               $r         Swap
                 1c=      Copy next-to-front of stack and check for equality
                    +     Add (so it's 1 if it's equal to min or max, 0 otherwise)

0gx0gx       Dump front two elements of stack (the min and max)
0(xd,)       Dump leading 0s
0            Push 0 for conversion to decimal
 I1-[   ]    For each bit...
     2*+     Multiply by 2 and add
N.           Output as integer and stop

온라인 인터프리터에서 십진수 입력을 사용하고 이진 출력을 제공합니까?
trichoplax

예. 변경해야합니까?
El'endia Starman 20

1
아아, 나는 총알 포인트에서 그것을 찾고 있었고 첫 문장에서 그것을 놓쳤다. 오늘 언젠가 고칠 게요.
El'endia Starman

1
결정된! 그리고 2 바이트 만 더! : D
El'endia Starman

1
내 +1을 받았습니다. Minkolang에 대해 알게되어 기쁩니다.
lirtosiast

8

Brainfuck , 619 바이트

첫 번째 답변은 여기까지 너무 길어서 좋은 일을한다고 생각했습니다!

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

내가 이겼어?

이 프로그램 10은 모든 이진수 다음에 개행 (ASCII )을 기대 32하며 끝에 공백 (ASCII )이 필요합니다 .

시운전 :

Me$ bf bpx.bf
1
10
101

111

Me$ bf bpx.bf
11111111111111111111111111111111

11111111111111111111111111111111

Me$ bf bpx.bf
10010010010010010010010010010010
10101010101010101010101010101010
11011011011011011011011011011011

11100011100011100011100011100011

Me$ bf bpx.bf
10001011100010100110100101001001
10110000111110010000111110111010
1101110001101101011010010100101
1010101010001011101001001010101

11

( ++++++++++.프로그램 종료시 추가 된 각 경우에 추가 된 줄 바꿈 )

설명

여전히 진행중인 작업이지만 느린 작업입니다. 시간이 부족하기 때문에이 프로그램을 작성하는 동안 작성한 메모를 방금 복사했습니다. 현재 설명으로는 충분합니다.

[Biplex Calculator]

[

Bitsum writing philosophy: 

Start with [0 255 255 255 ...].
The 255s will be markers that we can 'search' for to get back to the start.
After that, the next byte should be a 0, fairly permanently. (The first reference 0)
It is useful to have 0-bytes handy for general calculations. 
The next byte is where we will read the first digit of any binary number. (The first read)
The next byte holds the first bitsum.
Afterward, the next byte is 0, the following byte is the place
to read the second binary digit, the following byte is the second bitsum,
and so on.
I'll use the terminology nth reference 0, nth read, and nth bitsum to refer to
each part of the triplet of bytes.

The location three places after the final bitsum will be 255,
and the location three places after the final read will be 255.
We can move entire numbers by lining up these 255s after every binary number.

]


>->->->>>~                  [0 255 255 255 0 0 0 0 0                ]

[From the first bitsum, read input to create an initial set of bitsums                  ]
,----------
[
    --<++++++[>------<-]            [Convert the input '1' or '0' into a bit        ]
    >>>>,---------- 
]~                      
-<<<+[-<<<+]->>                 [Mark 255 after the last bit, then go back to first read]

,<++++[>--------<-]             [Check for space, using the first reference 0       ]
>
[
    <++++[>+++++<-]             [Check for \n                       ]
    >++
    [
        --<++++++[>------<-]        [It wasn't \n, so convert the input into a bit      ]
        >>>+>               [Write 1 to the next reference 0, and go to next read   ]
    ]
    <-
    [
        +>              [It was \n                      ]
        -<              [Mark 255 on this (nth) read and go to (n-1)th bitsum   ]
        <+[-<<<+]           [Search for a 255 off to the left           ]

        [We've either struck our marker, or the last bitsum. We need to check.          ]
        -<<+
        [
            -           [We hit the last bitsum. Move the bitsums right.    ]
            >+
            [
                ->[-[->>>+<<<]<<<+] [Move until we reach the start          ]
                +[-->>>++]      [From the start, move to our last bitsum    ]
                [Repeat this move until the read here is a 255              ]
                -<+
            ]
            [We now need to go to the first reference zero, and put a 1 there       ]
            <<<+[-[->+<]<<<+]->>+>      [Add bits to bitsums and end on first read  ]
        ]
        <-
        [
            +>->>>>+[->>>+]     [Go to the 255 after our reads              ]
            ->+
            [
                -<[-[->>>+<<<]<<<+] [Move until we reach the start          ]
                +[-->>>++]      [From the start, move to the 255 after our reads]
                [Repeat this move until we see the 255 bitsum               ]
                ->+
            ]
            [We now need to go to the first read                        ]
            -<+<<<+[-[->+<]<<<+]->>     [Add bits to bitsums and end on first read  ]
        ]
        >>>>>>>>>>>>>>>>>>>>>>>>>~<<<<<<<<<<<<<<<<<<<<<<<<<
    ]

    [We're at the reference 0 to the left of our next read                      ]
    >,<++++[>--------<-]            [Check for space, using the first reference 0       ]
    >
]

[

Let BN be the nth bitsum. Then our situation at the moment is:

[0 255 255 255 0 0 B1 0 0 B2 ... 0 0 BN 0 0 255] 
                 ^
I'm just happy nothing's exploded yet.

]

[Next goal: Mark the minimums                                       ]

>+[->>>+]>->->>~            [Zero the 255 and put 2 255s after it, then move after it   ]

-[
    +<<<<<<
    +[-<-<<+]               [Subtract one from each bitsum              ]
    ->>
    [
        +>>>[>>>]           [Find the first 0 bitsum                ]
        >+
        [
            <<->>[->>>+]->>>[-]     [Mark the zero as a minimum, and set a flag     ]
            +<<<<<+[-<<<+]+>->
        ]
        <
    ]
    >->>+>-
]~

[Hey, that worked. Weird. Alright, moving on...                             ]
[Reset the bitsums to what they were before we messed them all up                   ]

<[<<<<<+[-<+<<+]->>[-]>+[->>>+]->>-]>~

[After the stuff up there, that's not too bad.                              ]
[Now it's time to mark the maximums, in virtually the opposite way we did the minimums.         ]

-[
    +<<<<<<
    +[-<+<<+]               [Add one to each bitsum                 ]
    ->>
    [
        ->>>[>>>]           [Find the first 0 bitsum                ]
        >+
        [
            <<<->>>[->>>+]->>>[-]   [Mark the zero as a maximum, and set a flag     ]
            +<<<<<<+[-<<<+]+>>+>
        ]
        <
    ]
    >->>>-
]~

[Alright, now OR the maxs and mins, take care of leading zeros, output, and cross fingers       ]
<<<<->>~<<<<<<~+[->[-]<[->+<]<[->>[-]+<<]<<+]>-[+>>>-]++[->++++++[-<++++++++>]<.>>>+]

줄 바꿈이 구분되고 공간이 종료되었습니다. +1
trichoplax

7

CJam, 27 바이트

q~2fbWf%:.+_0-$(\W>|fe=W%2b

기본 10 CJam 스타일 목록으로 입력을받습니다. 여기에서 테스트하십시오.또는 모든 테스트 사례를 실행하십시오 (스크립트는 예상 출력을 버리고 필요에 따라 입력 형식을 변환합니다).

설명

q~    e# Read and evaluate input.
2fb   e# Convert each number to base 2.
Wf%   e# Reverse each digit list, to align digits in case there are numbers with different 
      e# widths.
:.+   e# Add up the bit planes.
_0-   e# Make a copy and remove zeroes.
$     e# Sort the bit plane sums.
(\W>| e# Get the first and last element. We use set union instead of addition so that the
      e# resulting array will contain only one value if min = max.
fe=   e# For each element in the bit plane sums, count how often it appears in the min/max
      e# array, which is either 1 or 0.
W%    e# Reverse the digits again (to undo the initial reversing).
2b    e# Interpret as base-2 digits.

출력이 최대 및 최소값이어야합니까?
DavidC

1
@DavidCarraher 아니요, 예를 참조하십시오. 출력은 1최소값과 최대 값이 발생한 비트 평면에 해당하는 비트에서 이진 표현이 s 인 숫자 여야합니다 .
Martin Ender

6

자바 스크립트 (ES6) 215 185 176 바이트

f=a=>{s=[];for(i of a)for(b=i.toString(2),d=l=b.length;d--;)s[x=l-d-1]=(s[x]|0)+(b[d]|0);q=255;for(r of s)d=r>d?r:d,q=r<q?r||q:q;o="";s.map(r=>o=(r==q|r==d)+o);return+("0b"+o)}

용법

f([2454267026, 2863311530, 3681400539])
=> 3817748707

설명

f=a=>{

  // Create an array of bitsums
  s=[];                   // s = bitsums
  for(i of a)             // iterate through the passed array of numbers
    for(
      b=i.toString(2),    // b = number as binary string
      d=l=b.length;       // l = number of digits in b
      d--;                // iterate through each digit of the binary string
    )
      s[x=l-d-1]=         // add to the digit of the bitsum array
        (s[x]|0)+         // get the current value of the bitsum array (or 0 if null)
        (b[d]|0);         // add the result to the bitsum array

  // Get the maximum and minimum bitsums
  q=255;                  // q = min bitsum
  //d=0;                  // d = max bitsum
  for(r of s)             // iterate through the bitsums
    d=r>d?r:d,            // set d to maximum
    q=r<q?r||q:q;         // set q to minimum

  // Calculate the result
  // (unfortunately JavaScript only supports bitwise operations on signed 32-bit
  // integers so the temporary binary string is necessary)
  o="";                   // o = output
  s.map(r=>               // iterate through the bitsum digits
    o=(r==q|r==d)+o       // add a 1 to the string if the digit is equal to min or max
  );
  return+("0b"+o)         // convert the binary string to a number
}

3
PPCG에 오신 것을 환영합니다! 이것이 더 짧아 질 수있는 몇 가지 방법이 있습니다. 1) 하나의 매개 변수로 화살표 기능을 정의 할 때 괄호가 필요하지 않습니다. f=(a)=>{}= f=a=>{}2) for...in루프를 루프로 전환하여 for...of몇 바이트를 절약 할 수 있습니다. for(i in a)for(b=a[i]...= for(i of a)for(b=i..., for(i in s)r=s[i],d=...= for(r of s)d=...3) 비트 OR은 |자동으로 true를 1로 변경하고 false를 0으로 변경하므로 o+=r==q|r==d?1:0;와 동일합니다 o+=r==q|r==d;.
ETHproductions

1
마지막으로 당신은 할 수 있습니다 return parseInt(o,2):return+('0b'+o)
Downgoat

1
2 바이트를 저장하려면, 당신은 대체 할 수 s[l-d-1]=(s[l-d-1]|0)와 함께 s[T=l-d-1]=(s[T]|0). 2 더 면도 교체 b=i.toString(2),l=b.length,d=l와 함께 d=l=(b=i.toString(2)).length.
Ismael Miguel

4

줄리아, 141 바이트

A->(s=reduce(.+,map(i->digits(i,2,maximum(map(i->ndigits(i,2),A))),A));parse(Int,reverse(join([1(iextrema(filter(j->j>0,s)))for i=s])),2))

언 골프 드 :

function biplex(A::AbstractArray)
    # Get the maximum number of binary digits in each element
    # of the input array
    L = maximum(map(i -> ndigits(i, 2), A))

    # Create an array of arrays of binary digits corresponding
    # to the inputs
    B = map(i -> digits(i, 2, L), A)

    # Get the bitsums
    S = reduce(.+, B)

    # Replace the minimum and maximum bitsums with ones and
    # the rest with zeros
    s = [1 * (i in extrema(filter(j -> j > 0, S))) for i in S]

    # Join this into a string and parse it as a base 2 integer
    # Reverse is required because digits() returns the digits
    # in reverse order
    p = parse(Int, reverse(join(s)), 2)

    return p
end

3

심플 렉스 v.0.7 , 38 바이트

단순화 된 의견. 바이너리로 입력되었으며 현재 통역사가 없습니다. 잘하면 의견이 충분하기를 바랍니다.

hj&=j&Lun?&RvRpp]{Ri}^XKRJ@jqLhR@LhuTo
h               ]                        ~~ define macro 0
 j&                                      ~~ insert a new byte and write register to it
   =                                     ~~ equal to the previous byte?
    j&                                   ~~ insert a new byte and write register to it
      L                                  ~~ return to equality
       u    v                            ~~ go up/down a strip
        n?&                              ~~ write the register iff byte = 0
           R                             ~~ go right
             Rpp                         ~~ remove two bytes
                 {Ri}                    ~~ take input until input = 0
                     ^X                  ~~ take the sum of the strip
                       K                 ~~ split that sum into digits
                        RJ@              ~~ take the max; write to register
                           jq            ~~ take the min
                             Lh          ~~ call macro 0
                               R@        ~~ set min to register
                                 Lh      ~~ apply macro 0
                                   uTo   ~~ output result 

3

옥타브, 50 바이트

@(a)["" ((b=sum(a-48))==max(b)|b==min(b(b>0)))+48]

예:

octave:1> g = @(a)["" ((b=sum(a-48))==max(b)|b==min(b(b>0)))+48] ;
octave:2> g(["10010010010010010010010010010010"; "10101010101010101010101010101010"; "11011011011011011011011011011011"])
ans = 11100011100011100011100011100011

이것에 대한 설명을보고 싶습니다.
trichoplax

2
@trichoplax 나는 matlab / octave에 너무 훌륭하지는 않지만 도움이되기를 바랍니다 . @(a)입력 벡터 를 취하는 익명 함수를 정의합니다 a. ["" 출력을 문자열로 강제합니다 (믿습니다). 비트 섬을 포함하는 벡터로 (b=sum(a-48))정의 b합니다. b==max(b)갖는 벡터 것이다 1bitsum가 최대이고, 만약 주어진 장소에서 0달리. b(b>0)b보다 큰 모든 요소의 벡터 0이므로 비트 섬이 최소 일 때를 b==min(b(b>0))포함하는 벡터도 그렇지 않은 경우입니다. 그런 다음 OR과 함께 ASCII로 표시됩니다. 10+48
BrainSteel

@BrainSteel 모두 이제 의미가 있습니다-감사합니다
trichoplax

때로는 Octave와 MATLAB이 얼마나 다른지 잊어 버립니다. 나는 미래에 골프를 위해 Octave를 실제로 사용해야한다고 생각합니다. 가장 짧은 MATLAB 시도는 60 바이트입니다. 인라인 할당을 사용할 수 없으며 function o=b(i)(줄 바꿈)으로 끝날 수 있습니다.r=sum(i>48);o=['' (r==max(r)|r==min(r))+48];
Sanchises

3

자바 스크립트 (ES6), 158

숫자 형 배열 매개 변수를 가진 함수로 숫자를 반환합니다. 동일한 바이트 수와 문자열 배열 변수 (rapresentations 함유베이스 (2))를 얻을 수 및베이스 (2) 스트링을 반환 할 수 - 단지 이동 .toString(2)후 끝에 r.

f=l=>(l.map(v=>[...v.toString(2)].reverse().map((x,i)=>t[i]=~~t[i]-x),t=[]),t.map(v=>(r+=v==Math.min(...t)|v==Math.max(...t.filter(x=>x))&&b,b+=b),r=0,b=1),r)

// More readable

u=l=>(
  t=[],
  l.map(v =>
    [...v.toString(2)]
    .reverse()
    .map((x,i) => t[i] = ~~t[i] - x)
  ),
  r=0,b=1,
  t.map(v => (
    r += v==Math.min(...t) | v==Math.max(...t.filter(x=>x)) && b, b+=b
  )),
  r
)

// Test
console.log=s=>O.innerHTML+=s+'\n'

;[
 [[1], 1]
,[[2], 2]
,[[1, 2, 5], 7]
,[[4294967295], 4294967295]
,[[2454267026, 2863311530, 3681400539], 3817748707]
,[[2341103945, 2969112506, 1849078949, 1430639189], 3]
].forEach(t =>{ 
  r=f(t[0])
  x=t[1]
  console.log('Test '+(r==x?'OK':'Fail (Expected: ' + x +')')
  +'\nInput: '+t[0]+'\nResult: ' +r+'\n')                       
})  
<pre id=O></pre>


3

하스켈 198 182 178 161 특성

나는 아직도 골프 초보자입니다. 80 명성 만 대답에서 비롯됩니다.

m=map
v=reverse
(b:x)&(c:y)=(b+c):x&y
[]&a=a
b&_=b
l=(show=<<).v.(\a->m(fromEnum.(`elem`[maximum a,minimum$(replicate=<<id)=<<a]))a).foldl1(&).m(m(read.(:[])).v)

어떻게 작동합니까?

패딩 대신 배열을 뒤집은 다음 사용자 정의 (&)를 사용하여 추가합니다. zipWith가 superflous 항목을 삭제하기 때문에 더 짧은 foldl1 (zipWith (+))을 사용하지 않습니다. 그런 다음 사용자 정의 함수가 필요한 최대 및 최소가 아닌 최소값을 찾습니다. 그런 다음 항목을 최대 및 최소가 아닌 최소값과 일치시킵니다. 일치하는 경우 1, 일치하지 않으면 0입니다. 그런 다음 뒤집어서 이진수로 바꿉니다.

할 것:

  1. 사용 Data.List

2
의 정의에서 k, c필요가에 넣어 없습니다, 그래서 한 번만 사용되는 where절. 직접 사용하십시오 : ...||(x==a#b).... 왜 중괄호? 년은 l: concat.map show입니다 concatMap show더 나은 또는 >>=: l=(>>=show).v.... (참고 : =<<동일한 기능을 수행하지만 인수가 뒤집힌 것도 있습니다 :) (show=<<).v.... >>=그리고 =<<여기리스트 문맥에서의 작업과는 기능이나 다른 상황에서 다른 일을.
니미

2
당신은 대체 할 수있는 []마지막의 경우 &#_: b&_=b_#l=l.
nimi

2
(x==b)||(x==c)(또는 (x==b)||(x==a#b)제거 할 때 c)를 elem x[b,c](resp :) 로 바꿀 수 있습니다 elem x[b,a#b].
nimi

2
u=maximumk a=m(\x->fromEnum$elem x[u a,a#u a])a작동합니다.
니미

1
하지 말고 _&a=a그대로 두어야합니다 []&a=a. 그렇지 않으면 두 번째 목록이 비어 있으면 첫 번째 목록이 손실됩니다. _마지막 경우에만 사용하십시오 -아마도 오류 일 것입니다.
nimi

3

파이썬 3 181 126 122 바이트

(조금 이상해지기 때문에 대부분의 바이트 수 슬래시를 제거했습니다.) 이상해 Sp3000 줄었습니다 !

*z,=map(sum,zip(*[map(int,t.zfill(99))for t in input().split()]))
k=0
for x in z:k=k*10+(x in[min(z)or 1,max(z)])
print(k)

약간 덜 골프 :

s=input().split()
k=list(map(lambda t:list(map(int,t))[::-1],s))
z=list(map(sum,zip(*k)))
y=z[:]
while min(y)==0:y.remove(0)
a,b=min(y),max(y)
f=''.join(map(lambda x:str(1*(x in[a,b])),z[::-1]))
print(int(f))

공백으로 만 숫자를 구분하는 입력은 바이너리로 예상됩니다. 출력도 바이너리입니다.


3

자바 스크립트, 154150 바이트

t=i=>(m=0,r=[],i.map(n=>{for(j=31;j+1;r[k=31-j]=(r[k]|0)+((n>>>j)%2),--j);}),r.map(n=>m=(n==Math.min(...r.filter(x=>x))|n==Math.max(...r)?1:0)+m*2),m)

최소 / 최대 계산을위한 edc65 방법 덕분에 코드가 4 바이트 단축되었습니다.

설명

t=i=>(
    m=0,//m=>output
    r=[],//Bitsum then final number in binary
    i.map(
        n=>
        {
            //Decimal to binary + bitsum
            for(j=31;j+1;r[k=31-j]=(r[k]|0)+((n>>>j)%2),--j);
        }),
    //Output formatting
    r.map(
        n=>
            m=(n==Math.min(...r.filter(x=>x))|n==Math.max(...r)?1:0)+m*2
        ),
    m
)

+1 좋아요 비트 산술은 문자열 변환을 훨씬 능가합니다. 그리고 나는 그것을 더 짧게하는 두 가지 방법을 봅니다.
edc65

132 :f=i=>(m=0,r=[],i.map(n=>{for(k=32;k--;n=n/2|0)r[k]=~~r[k]+n%2}),r.map(n=>m+=m+(n==Math.min(...r.filter(x=>x))|n==Math.max(...r))),m)
edc65

더 나은! 나는 루프를위한 골프에 대해 더 배울 필요가 있지만 여전히 지침을 얻기 위해 사용하지는 않습니다.
Naouak

3

ShapeScript , 186 바이트

'"1
"$0?_1-"+"*":2"@~@"0
"~"0
"$"
"~+'1?_*!"2"$"0"~"
"$""~":"1?'@1?"+"$_1>"+"*+@1?"0"+$""~'1?_*!#"0"+@":+"'1?1?"0"+$_2<"+"*+'1?_*!"0"+$"1"~@$"1"~":"$""~"+"$""~'"
"@+"
0"$""~'1?_*!"
"$""~

중요하고 쓸모없는 운영자에게 중요하고 쓸모없는 언어.

I / O는 바이너리입니다. 프로그램은 각 줄이 줄 바꿈으로 끝나는 별도의 줄에 있어야합니다.

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

테스트 사례

$ echo -e '1' | shapescript biplex.shape; echo
1
$ echo -e '10' | shapescript biplex.shape; echo
10
$ echo -e '1\n10\n101' | shapescript biplex.shape; echo
111
$ echo -e '11111111111111111111111111111111' | shapescript biplex.shape; echo11111111111111111111111111111111
$ echo -e '10010010010010010010010010010010\n10101010101010101010101010101010\n11011011011011011011011011011011' | shapescript biplex.shape; echo
11100011100011100011100011100011
$ echo -e '10001011100010100110100101001001\n10110000111110010000111110111010\n1101110001101101011010010100101\n1010101010001011101001001010101' | shapescript biplex.shape; echo
11

이 쓰레기가 당신이 언어 라고 부르는 것이 무엇인지 모르겠지만 그것을 좋아합니다!
단계

2

APL, 27 바이트

{2⊥S∊(⌈/,⌊/)0~⍨S←+/⍵⊤⍨32⍴2}

이것은 십진 정수 목록을 가져오고 십진수 이중을 리턴하는 모나드 함수입니다.

온라인에서 사용해보십시오 ngn / apl 데모 .

작동 원리

                     32⍴2  Create a list of 32 2's.
                  ⍵⊤⍨      Base-encode the right argument.
                +/         Add the corresponding binary digits.
              S←           Save the sums in S.
           0~⍨             Remove 0's.
    (⌈/,⌊/)                Apply minimum (⌊/), maximum (⌈/) and concatenate.
  S∊                       Check which binary digits are in the extrema list.
2⊥                         Convert from base 2 to integer.

2

볼프람 언어, 113 바이트

이 버전은 팝업 창에서 숫자를 입력하고 "{x, y, z, ...}"형식으로 따옴표없이 입력합니다.

FromDigits[#/.{Max[#]->1,Min[#/.{0->Nothing}]->1,_Integer->0},2]&@Total[PadLeft[IntegerDigits[#,2],33]&/@Input[]]

입력:

팝업 창 동적

산출:

산출

x, y 및 z가 기본 10 개의 정수 (앞에 0이 있거나없는) 인 "{x, y, z}"형식의 문자열로 동적 조작 입력을받습니다. 출력은 10 진입니다.

Manipulate[FromDigits[#/.{Max[#]->1,Min[#/.{0->Nothing}]->1,_Integer->0},2]&@Total[PadLeft[IntegerDigits[#,2],33]&/@ToExpression@i],{i,"{1}"}]

예

문자 수를 줄이는 방법으로 이것을 입력하는 다른 방법이 있지만이 솔루션은 계산을 수행하는 동적 GUI를 훌륭하게 사용한다고 생각합니다

클라우드에서이를 실행하려면 CloudDeploy를 사용할 수 있습니다.

o=CloudDeploy[FormPage[{"i"->"String"},(FromDigits[#/.{Max[#]->1,Min[#/.{0->Nothing}]->1,_Integer->0},2]&@Total[PadLeft[IntegerDigits[#,2],33]&/@ToExpression@#i])&]];SetOptions[o,Permissions->{All->{"Read","Execute"},"Owner"->{"Read","Write","Execute"}}];o

클라우드 배포는 문자 수를 최대 256 개까지 가져옵니다.

FormPage에 대한 입력도 "{x, y, z}"형식의 문자열이며 x, y 및 z는 기본 10 개의 정수입니다.

나는 이것을 직접 클라우드 배포했으며 https://www.wolframcloud.com/objects/97b512df-64f8-4cae-979b-dba6d9622781 에서 사용해 볼 수 있습니다.

클라우드 예


나는 앞에 0이없이 클라우드 링크를 테스트했는데 여전히 제대로 3. 출력
trichoplax

GUI가없는 짧은 코드가있는 경우이 답변으로 코드를 편집하여 점수를 높이고 대안으로 GUI 버전을 대안으로 남겨두고 가능한 것을 보여줄 수 있습니다. 두 세계의 최고 ...
trichoplax

@trichoplax 참고로, Input []으로 가장 짧은 버전이라고 생각하는 것을 추가했습니다. 또한 숫자가 변수에 저장되어 문자 수를 줄일 수 있다고 가정 할 수 있지만 입력에 입력하는 방법에 대해서는 모호합니다.
Ian Johnson

변수에 숫자를 저장하는 것은 기본 입력 방법 중 하나가 아닙니다 ... 추가 단계를 사용할 수는 없지만 지금까지 가지고있는 것은 훌륭합니다 :)
trichoplax

1

파이썬 3, 197

import itertools
o='0'
d=[sum(map(int,n))for n in itertools.zip_longest(*map(reversed,input().split(' ')),fillvalue=o)]
m=max(d),min(d)or 1
print(''.join((o,'1')[g in m]for g in d[::-1]).lstrip(o))

공백으로 구분 된 이진수를 사용합니다.

언 골프 버전 :

import itertools
nums = map(reversed, input().split(' '))
digits = []
for num in itertools.zip_longest(*nums, fillvalue='0'):
    current_digit = sum(map(int,num))
    digits.append(current_digit)
bit_max = max(digits)
bit_min = min(digits) or min(digits) + 1
print(''.join(('0','1')[digit in(bit_max,bit_min)]for digit in digits[::-1]).lstrip('0'))

1

C #, 255

완전한 프로그램, 명령 행 인수로 입력-공백으로 구분-10 진수

using System.Linq;class P{static void Main(string[]l){var n=new uint[32];uint i,r=0,b;foreach(var v in l)for(i=0,b=uint.Parse(v);b!=0;b/=2)n[i++]+=b&1;b=1;foreach(var v in n){r+=(v==n.Max()|v== n.Min(x=>x>0?x:n.Max()))?b:0;b+=b;}System.Console.Write(r);}}

더 읽기 쉬운 :

using System.Linq;

class P
{
    static void Main(string[] l)
    {
        var n = new uint[32];
        uint i, r = 0, b;

        foreach (var v in l)
            for (i = 0, b = uint.Parse(v); b != 0; b /= 2) n[i++] += b & 1;
        b = 1;
        foreach (var v in n)
        {
            r += (v == n.Max() | v == n.Min(x => x > 0 ? x : n.Max())) ? b : 0;
            b += b;
        }
        System.Console.Write(r);
    }
}

1

루비, 127 바이트

def f l;a=[];32.times{|i|a[i]=0;l.each{|n|;a[i]+=n[i]}};a.map{|b|a.reject{|c|c==0}.minmax.index(b)?1:0}.reverse.join.to_i 2;end

배열을 입력으로받습니다.


1

CoffeeScript, 194 바이트

입력을 쉼표로 구분 된 이진수로 가져오고 이진수로 출력합니다.

a=(s.split('').reverse()for s in prompt().split(','))
for i in b=[0..31]
 b[i]=0
 b[i]+=+c[31-i]||0for c in a
m=1/M=0
for d in b
 M=d if d>M;m=d if m>d&&d
alert +(+(d in[m,M])for d in b).join ''

시도 해봐.


1

GolfScript, 46 바이트

~{2base-1%}%zip{{+}*}%-1%.$0-)\1<|`{&,}+%2base

Web GolfScript에서 온라인으로 사용해보십시오 .

테스트 사례

$ golfscript biplex.gs <<< '[1]'
1
$ golfscript biplex.gs <<< '[2]'
2
$ golfscript biplex.gs <<< '[1 2 5]'
7
$ golfscript biplex.gs <<< '[4294967295]'
4294967295
$ golfscript biplex.gs <<< '[2454267026 2863311530 3681400539]'
3817748707
$ golfscript biplex.gs <<< '[2341103945 2969112506 1849078949 1430639189]'
3

1

C ++, 192 바이트

32 비트 부호없는 정수 배열과 해당 배열의 항목 수를 입력합니다.

typedef unsigned long U;U b(U*a,int c){U x[32],t,i,j,M=0,m=c,r=0;for(i=0;i<32;x[i++]=t,m=t&&m>t?t:m,M=M<t?t:M)for(t=j=0;j<c;)t+=a[j++]>>i&1;for(i=0;i<32;++i)r|=(x[i]==m||x[i]==M)<<i;return r;}

언 골프 :

unsigned long b(unsigned long*a, int c){
    unsigned long x[32],t,i,j,M=0,m=c,r=0;
    for(i=0;i<32;x[i++]=t){
        m = (t && m > t)?t:m;
        M = M < t ? t:M;
        for(t=j=0;j<c;){
            t+=a[j++]>>i&1;
        }
    }
    for(i=0;i<32;++i)
        r|=(x[i]==m||x[i]==M)<<i;
    return r;
}

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