거짓을 반감


19

직무

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

입력

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

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

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

  • [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

우리가 취할 수 truefalse대신 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.