거짓을 반감


19

직무

및의 비어 있지 않은 배열이 주어지면 의 런 길이의 절반이됩니다 .010

입력

0및 의 배열입니다 1. 허용되는 형식 :

  • 귀하의 언어로 실제 배열
  • 줄 바꿈으로 구분 된 0및1
  • 의 연속 문자열 0및1
  • 다른 합리적인 형식

예를 들어, 다음 세 가지 입력이 모두 허용됩니다.

  • [1, 0, 0, 1]
  • "1\n0\n0\n1"( \n라인 피드 U + 000A는 어디에 있습니까 )
  • "1001"

런의 길이0 는 짝수 라고 가정 할 수 있습니다 .

산출

위의 허용 가능한 형식으로 된 0및 의 배열입니다 1.

테스트 케이스

input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]

채점

이것은 입니다. 바이트 단위의 짧은 대답이 이깁니다.

표준 허점이 적용됩니다.


마지막 테스트 사례에서 0의 런 길이는 균등하지 않습니까?
— OldBunny2800

@ OldBunny2800 테스트 케이스를주의해서 읽으십시오. 0- 런의 길이는 4, 2, 2, 2, 2, 2입니다.
— HyperNeutrino

우리가 취할 수 true및 false대신 1하고 0?
— Cyoce

@Cyoce 어떤 언어?
— Leaky Nun

진실하다고 생각되는 @LeakyNun Ruby 0.
— Cyoce

답변:



11

05AB1E , 5 바이트

00¤.:

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

설명

00     # push 00
  ¤    # tail, pushes 0
   .:  # replace

2
그것은 쉽다; 왜 그렇게 생각하지 않았습니까?
— Leaky Nun

00이상한 행동입니다 ...
— Outgolfer Erik

@EriktheOutgolfer : 순차적 숫자는 숫자를 형성하기 위해 연결되어 있으므로 1111이 아닙니다 1,1. 그 부작용 즉 00되고 00대신 0,0:)
— Emigna

@Emigna 나는 그것이 0또는 0 0대신 될 것으로 기대 했지만, 무엇이든.
— 아웃 골퍼 에릭 10


7

C (gcc) , 35 바이트

f(char*s){while(*s)putchar(*s),*s++-48?:s++;}

48은 '0'의 ASCII 코드입니다.

Neil이 제안한 더 나은 버전 43 바이트

f(char*s){while(*s)putchar(*s),s+=2-*s%2;}

이번에는 또 하나의 40 바이트 (Neil & VisualMelon이 제안한대로) :)

f(char*s){for(;*s;s+=50-*s)putchar(*s);}

Khaled.K 덕분에 35 바이트

f(char*s){*s&&f(s+50-putchar(*s));}

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


1
시겠습니까 s+=2-*s%2일?
— Neil

1
올바르게 계산 for(;*s;s+=2-*s%2)putchar(*s);하면 다른 바이트를 절약 한다고 생각합니다 .
— Neil

1
무엇이 잘못 되었나요 s+=50-*s? (아무도 없다 C 번호에서 오는)하지 완료 연령대 C와 정의되지 않은 동작을 호출하여 자신을 난처하게하고 싶지 않아
— VisualMelon

1
putchar문서를 보면 할 수 f(char*s){for(;*s;s+=50-putchar(*s));}있습니까?
— VisualMelon

3
재귀 적으로 만들어서 5 바이트를 절약 할 수 있습니다f(char*s){*s&&f(s+50-putchar(*s));}
— Khaled.K



6

자바, 50 바이트

String f(String s){return s.replaceAll("00","0");}

온라인 시도


1
매우 좋은 입력 선택! 그건 그렇고, Java 8 + 솔루션으로 전환하려면 람다를 사용할 수 있습니다 s->s.replaceAll("00","0").
— Jakob

더 좋은 replace방법은 replaceAll3 바이트를 절약 하는 대신 사용하십시오
— Benjamin Urquhart

@BenjaminUrquhart replace는 첫 번째 사건
— Khaled.K

자바 스크립트에서 @ Khaled.K, 예. 자바에서는 모든 발생을 대체합니다
— Benjamin Urquhart

5

하스켈 , 28 바이트

f(h:t)=h:f(drop(1-h)t)
f e=e

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

첫 번째 요소를 재귀 적으로 가져 와서 첫 번째 요소가 0 인 경우 두 번째 요소는 비어있는 목록이 될 때까지 삭제합니다. 첫 번째 항목이 h인 경우 첫 번째 항목이 1-h나머지에서 삭제됩니다.


5

Japt , 7 6 5 바이트

d'0²0

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

입력에서 두 개의 0으로 구성된 각 런을 하나의 0으로 간단히 대체합니다. 문자열 입력을 사용합니다 (예 :) "1001001".


1
좋은! 당신은 '내가 생각할 필요조차 없습니다
— ETHproductions

아, :-) 로 대체 "00"하여 다른 바이트를 절약 할 수 있습니다.'0²
— ETHproductions

글쎄, 그건 이상하다. 그래도 고마워!
— Luke


4

Alice , 13 바이트

/oe00/
@iS0e\

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

설명

/.../
@...\

이것은 서수 모드에서 완전히 작동하는 선형 프로그램을위한 간단한 템플릿입니다. 이니셜 /은 IP가 남동쪽으로 이동하는 것을 반영한 다음 끝에 미러가 나타날 때까지 코드를 통해 대각선으로 위아래로 튀어 오릅니다. 이들은 단순히 위치를 1 씩 상쇄하여 IP가 뒤로 이동하여 나머지 셀을 통과하도록합니다. 이 지그재그 방식으로 코드를 읽으면 다음과 같이됩니다.

ie00e0So@

이것은 간단한 문자열 대체입니다.

i   Read all input.
e   Push an empty string.
00  Append two zeros to create the string "00".
e   Push an empty string.
0   Append a zero to create the string "0".
S   Substitute all occurrences of "00" in the input with "0".
o   Output the result.   
@   Terminate the program.

예를 들어 '00'0또는 두 문자열을 푸시하는 몇 가지 다른 방법이 e000t있지만 5 바이트를 초과하는 것을 찾지 못했습니다 (및 프로그램을 단축하려면 2 바이트를 면도해야합니다).


2
최근에 Alice와 사랑에 빠진 것 같습니다 ...
— Leaky Nun

6
@LeakyNun 제발 아내에게 말하지 말아주세요 ...
— Martin Ender

@MartinEnder 나는 엔더 부인에게 말할거야!
— 아웃 골퍼 Erik



3

자바 스크립트 (ES6), 26 21 바이트

입력을 문자열로 받아서 문자열을 반환합니다.

s=>s.replace(/00/g,0)

시도 해봐

f=
s=>s.replace(/00/g,0)
i.addEventListener("input",_=>o.innerText=f(i.value))
console.log(f("1001001")) // "10101"
console.log(f("110011001")) // "1101101"
console.log(f("11001110011")) // "110111011"
console.log(f("111")) // "111"
console.log(f("001")) // "01"
console.log(f("00")) // "0"
console.log(f("11100001111001001100111100100")) // "1110011110101101111010"
<input id=i><pre id=o>


3

루아, 33 바이트

print((io.read():gsub("00","0")))

입력을 통해 문자열을 가져와 더블 제로를 압축합니다. 쉬운.


3

젤리 , 8 바이트

ṣ1j1,1m2

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

어쩌면 .replace()비슷한 언어가 아닌 다른 언어의 대답 도이 방법을 사용할 수 있습니다.

설명

ṣ1j1,1m2 - (duplicates the 1s, then halves all lengths)
ṣ1       - split by the element 1
  j1,1   - join the elements with the two-element list 1,1
      m2 - get every second element

3

Alice , 12 10 바이트

Martin Ender 덕분에 2 바이트 절약

i.h%.7%$io

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

설명

이것은 기본 모드에서 작동하는 1D 코드이므로 흐름을 쉽게 따라갈 수 있습니다.

i                   Read a byte from input (pushes -1 on EOF)
 .h                 Duplicate it and add 1 to the copy
   %                Compute n%(n+1). This will exit with an error on n==-1
                    and return n for any non-negative n.
    .7%             Duplicate the input again and compute its value modulo 7
                    This returns 6 for '0' (unicode value 48) and 0 for '1'
                    (unicode value 49)
       $i           If this last result was not 0, input another number.
                    This ignores every other '0' in the input
                    and moves to the following number (another '0')
         o          Output the last byte read

                    At the end, wrap back to the beginning of the line

당신은 실제로 2 바이트를 더 절약 할 수 있습니다i.h%...
— Martin Ender

@MartinEnder 당신은 사악한 사람입니다, 사람들에게 더러운 것을 가르치는 것을 가르치고 있습니다. : D
— Leo

2

Python (목록 I / O), 36 바이트

f=lambda l:l and l[:1]+f(l[2-l[0]:])

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

재귀 적으로 첫 번째 요소를 가져온 다음 첫 번째 요소가 0 인 경우 나머지 요소를 제거합니다.


38 바이트 :

lambda l:eval(`l`.replace('0, 0','0'))

온라인으로 시도하십시오. 이것은 파이썬 목록을 가져 와서 문자열 표현을 대체하여 파이썬 목록을 출력합니다. 문자열 I / O는 다음과 같이보다 직접적이고 짧은 솔루션을 허용합니다.

lambda s:s.replace('00','0')

에 대한 '1001' 형식입니다.


형식이 지정된 첫 번째 답변입니다.
— Leaky Nun

1
문자열 I / O 가 허용됩니다. lambda s:s.replace('00','0')괜찮을거야.
— Jonathan Allan


2

Perl 5, 7 + 1 (-p 플래그) = 8 바이트

<>if/0/

줄 바꿈으로 구분 된 숫자로 입력을받습니다. 0이 보이면 다음 줄을 건너 뜁니다.



2

MATL , 5 바이트

FFOZt

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

설명

이것은 Stewie Griffin의 Octave 답변 과 유사합니다 .

FF     % Push [0 0]
O      % Push 0
Zt     % Implicitly take input. Replace [0 0] by 0. Implicitly display

8 바이트

vy~f2L)(

이렇게하면 내장 된 문자열 / 배열 교체가 방지됩니다.

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

설명

[1,0,0,1,0,0,1]예를 들어 입력 을 고려하십시오 .

v      % Concatenate stack (which is empty): pushes []
       % STACK: []
y      % Implicit input. Duplicate from below
       % STACK: [1,0,0,1,0,0,1], [], [1,0,0,1,0,0,1]
~f     % Negate, find: gives indices of zeros
       % STACK: [1,0,0,1,0,0,1], [], [2,3,5,6]
2L     % Push [2,2,1i]. As an index, this is interpreted as 2:2:end
       % STACK: [1,0,0,1,0,0,1], [], [2,3,5,6], [2,2,1i]
)      % Reference indexing. This selects the even-indexed entries
       % STACK: [1,0,0,1,0,0,1], [], [3,6]
(      % Assignment indexing. This deletes the specified entries
       % (assigns them the empty array). Implicitly display
       % STACK: [1,0,1,0,1]

1

Brachylog , 10 바이트

ḅ{cẹ|ḍh}ᵐc

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

이것이 아직 최적인지 확실하지 않습니다…

설명

이것은 c선행 0을 갖는 정수 목록에서 실패 하는 버그를 이용합니다 .

ḅ               Blocks; group consecutive equal elements together
 {     }ᵐ       Map on each block:
  c               It is possible to concatenate the block into an int (i.e. it contains 1s)
   ẹ              Split it again into a list of 1s
    |             Else
     ḍh           Dichotomize and take the head
         c      Concatenate the blocks into a single list

그게 어떻게 버그 야?
— Leaky Nun

우리는 연결할 수 있어야 @LeakyNun [0,0,4,2]에 42. 선행 0은 입력이 변수 일 때 무한 선행 0을 방지하기 위해 여기에 있기 때문에 지금 실패합니다. 그러나 입력이 완전히 접지되어 제한이 없어야합니다.
— 페이탈 라이즈

프롤로그 답변을 작성 하시겠습니까?
— Leaky Nun

1

C #, 191 바이트

string a(string s){var l=(s+'1').ToCharArray();s="";int b=0;for(int i=0;i<l.Length;i++){if(l[i]=='1'){if(b>0){s+=new string('0',b/2);b=0;}s+=l[i];}else b++;}return s.Substring(0,s.Length-1);}

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

깨끗하거나 짧지는 않지만 작동합니다.

입력을 연속 된 문자열로 취하여 동일한 형식으로 출력합니다.

설명:

string a(string s){                  //Define method a that takes input string s and returns a string
  var l=(s+'1').ToCharArray();       //Add a 1 to the end of s and split into char array l
  s="";                              //Empty s
  int b=0;                           //Initialize int b with value 0
  for(int i=0;i<l.Length;i++){       //Loop through l
    if(l[i]=='1'){                   //If current char is 1
      if(b>0){                       //If b is not 0
        s+=new string('0',b/2);      //Add half the amount of 0s we've counted to s
        b=0;                         //Reset b
      }                              //End if b is not 0
      s+=l[i];                       //Add current char to s
    }                                //End if current char is 1
    else b++;                        //If current char is not 1, increment b
  }                                  //End loop
  return s.Substring(0,s.Length-1);  //Return string minus last char
}                                    //End method

노트

예, 이것을 사용하여 간단하게 수행 할 수 있다는 것을 알고 있습니다 s.Replace("00","0"). 제 목표는 명확한 솔루션을 사용하지 않는 것입니다. 결국, PPCG의 요점은 재미를 갖는 것입니다. ;)


@ Mr.Xcoder 사실이 아닙니다. 이것은 언어의 내장 기능을 사용하지 않고 얻을 수있는 수준입니다 Replace .C #을 사용하고 있으므로 가능한 한 가장 짧은 코드를 얻는 것에 대한 망설임이 없습니다. 특히 젤리와 같은 언어에서 약간의 재미가있을 수도 있습니다. 진행중.
— Skidsdev

물론 재미도 중요합니다. 위의 의견에 대해 사과 드리며 귀하의 답변 (당신이 사용한 기술)을 직접 좋아한다는 것을 인정해야합니다.
— Mr. Xcoder

@ Mr.Xcoder 어려운 감정은 없습니다. 궁극적으로 우리는 코드를 압축 할 수있는 다른 쓸모없는 능력을 재미 있고 유연하게 활용합니다.)
— Skidsdev

교체하지 않고 이보다 훨씬 짧은 시간을 할 수 있습니다 ! string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;} (이것은 기본적으로 C 답변 인 것 같습니다)
— VisualMelon

1

Pyth, 8 바이트

:z"00"\0

시도 링크.

설명:

:z"00"\0 Takes unquoted contiguous 1-line input.
 z       Initialized to unevaluated first input line (Q won't be any shorter)
  "00"   Matching regex pattern /00/g
      \0 Substitution string "0"
:        Regex find-and-replace

1

Awk-18 바이트

먼저 Awk로 무엇이든 해보십시오. 그래서 골프를 더 많이 할 수 있습니다.

{gsub(00,0);print}

용법: echo "1001001" | awk '{gsub(00,0);print}'


1

배치, 24 바이트

@set/ps=
@echo %s:00=0%

STDIN에서 입력을받습니다. 한 번만 경쟁하십시오.


1

공통 리스프, SBCL, 48 32 바이트

Julian Wolf 덕분에 -16 바이트

(format t"~{~[0~*~;1~]~}"(read))

입력:

(1 0 0 0 0 1 1 1 0 0)

산출:

1001110

설명

입력 목록을 읽습니다. 리스트는 format기능에 사용됩니다 . 이 출력을 통해 우리는 루프 1요소 인 경우, 1및 출력 0과에 대한 목록의 다음의 요소를 건너 뛰는 0.


사용 ~[이 아닌 것은 ~:[당신에게 바이트의 무리 저장해야합니다 직접적으로 0과 1 인덱스, 수
— 줄리안 늑대

@JulianWolf 감사합니다!

1

Mathematica, 24 바이트

StringReplace["00"->"0"]

"0"s 및 "1"s 문자열을 예상 하고 유사한 문자열을 반환하는 함수입니다 . 자기 설명 구문. Mathematica에는 많은 변형 내장 기능이 있습니다. 핵심은 (와는 달리 /.) 모든 관련 하위 표현식을 변환 하지만 (와는 달리 //.) 한 번만 표현식을 통과 하는 것을 사용하는 것입니다 .


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