Tarefa
Dada uma matriz não vazia de 0
e 1
, reduza pela metade os comprimentos das execuções de 0
.
Entrada
Uma matriz de 0
e 1
. Formato aceitável:
- Matriz real no seu idioma
- Sequência separada por avanço de linha de
0
e1
- Sequência contígua de
0
e1
- Qualquer outro formato razoável
Por exemplo, as três entradas a seguir são aceitáveis:
[1, 0, 0, 1]
"1\n0\n0\n1"
(onde\n
é um avanço de linha U + 000A)"1001"
Você pode supor que as execuções de 0
terão duração uniforme .
Resultado
Uma matriz de 0
e 1
, nos formatos aceitáveis acima.
Casos de teste
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]
Pontuação
Isso é código-golfe . A resposta mais curta em bytes vence.
Aplicam-se brechas padrão .
code-golf
array-manipulation
Freira Furada
fonte
fonte
true
e emfalse
vez de1
e0
?0
ser verdade.Respostas:
Retina , 4 bytes
Experimente online!
fonte
05AB1E , 5 bytes
Experimente online!
Explicação
fonte
00
é um comportamento estranho ...11
como onze e não1,1
. Um efeito colateral que é que00
se torna00
, em vez de0,0
:)0
ou melhor0 0
, mas tanto faz.Haskell , 33 bytes
Experimente online! Uso:
f[1,1,0,0,1,1,0,0,1]
. Repete a lista e substitui dois zeros consecutivos por um zero.fonte
C (gcc) , 35 bytes
48 é o código ascii de '0'
versão melhorada de 43 bytes, conforme sugerido por Neil
outro de 40 bytes desta vez (novamente como sugerido por Neil & VisualMelon) :)
e, em seguida, 35 bytes, graças a Khaled.K
Experimente online!
fonte
s+=2-*s%2
?for(;*s;s+=2-*s%2)putchar(*s);
salva outro byte.s+=50-*s
? Não Realizado C para idades e não quero me envergonhar invocando um comportamento indefinido (vindo do C #, onde não há nenhum)putchar
documentos, você pode fazerf(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 bytes
Experimente online!
fonte
0
s por0
.Oitava, 22 bytes
Verifique todos os casos de teste aqui.
Esta é uma função anônima que recebe uma string no formato
'1001000011'
como entrada e substitui dois zeros consecutivos por um único zero.fonte
Java, 50 bytes
Experimente on-line
fonte
s->s.replaceAll("00","0")
.replace
vez dereplaceAll
salvar 3 bytesreplace
substituirá apenas a primeira ocorrênciaHaskell , 28 bytes
Experimente online!
Recursivamente leva o primeiro elemento, descartando o segundo se o primeiro for zero, até a lista de vazio. Se a primeira entrada for
h
, a primeira1-h
será descartada do restante.fonte
Japonês ,
7 65 bytesExperimente online!
Simplesmente substitui cada execução de dois zeros na entrada por um zero. Usa entrada de string (ou seja
"1001001"
).fonte
'
eu penso"00"
com'0²
:-)PHP, 26
simplesmente substitua tudo
00
por0
.fonte
Alice , 13 bytes
Experimente online!
Explicação
Este é um modelo simples para programas lineares que operam inteiramente no modo Ordinal. A inicial
/
reflete o IP para se mover para o sudeste e, em seguida, salta na diagonal para cima e para baixo através do código até os espelhos no final. Eles simplesmente deslocam a posição em um para que, no caminho de volta, o IP atravesse as células restantes. Lendo o código dessa maneira em zigue-zague, ele se torna:Esta é uma substituição simples de string:
Existem algumas outras maneiras de enviar as duas strings, por exemplo,
'00'0
oue000t
, mas eu não encontrei nada que ultrapasse 5 bytes lá (e eu teria que cortar dois bytes para reduzir o programa).fonte
Prolog (SWI) , 42 bytes
Experimente online!
fonte
*
operador.Java ,
131123 bytesExperimente online!
fonte
JavaScript (ES6),
2621 bytesPega a entrada como uma sequência e retorna uma sequência.
Tente
fonte
Lua, 33 bytes
Toma uma string via entrada e condensa zeros duplos. Fácil.
fonte
Gelatina , 8 bytes
Experimente online!
Possivelmente outras respostas em idiomas sem um
.replace()
ou similar podem usar esse truque.Explicação
fonte
Alice ,
1210 bytes2 bytes economizados graças a Martin Ender
Experimente online!
Explicação
Este é um código 1-D que opera no modo cardinal, por isso é fácil seguir seu fluxo:
fonte
i.h%...
Python (E / S da lista), 36 bytes
Experimente online!
Pega recursivamente o primeiro elemento e remove o restante se o primeiro for zero.
38 bytes:
Experimente on-line Isso pega uma lista de Python e gera uma lista de Python, substituindo sua representação de string. A E / S da string permitiria uma solução mais direta e mais curta, como
para o
'1001'
formato.fonte
lambda s:s.replace('00','0')
deve ficar bem.APL (Dyalog) , 9 bytes
Experimente online!
fonte
Perl 5, 7 + 1 (sinalizador -p) = 8 bytes
Recebe a entrada como números separados por nova linha. Pula a próxima linha se encontrar um zero.
fonte
V , 4 bytes
Experimente online!
fonte
MATL , 5 bytes
Experimente online!
Explicação
Isso é semelhante à resposta Octave de Stewie Griffin :
8 bytes
Isso evita a substituição de string / array incorporada.
Experimente online!
Explicação
Considere a entrada
[1,0,0,1,0,0,1]
como um exemplo:fonte
Braquilog , 10 bytes
Experimente online!
Ainda não tenho certeza de que isso é ótimo…
Explicação
Isso explora o erro que
c
em uma lista de números inteiros com zeros à esquerda irá falhar.fonte
[0,0,4,2]
em42
. Zeros à esquerda fazem com que falhe agora, porque está aqui para evitar zeros à esquerda infinitos quando a Entrada é uma variável, mas aqui a Entrada é totalmente aterrada para que a limitação não exista.C #, 191 bytes
Experimente online!
Não é limpo nem curto, mas funciona.
Recebe entrada como uma sequência de caracteres contígua, produz no mesmo formato
Explicação:
Nota
Sim, eu sei que isso pode ser feito simplesmente usando
s.Replace("00","0")
, meu objetivo era evitar o uso da solução óbvia. Afinal, o objetivo do PPCG é se divertir, certo? ;)fonte
Replace
Estou usando C #; portanto, não tenho ilusões em obter o código mais curto possível, especialmente em idiomas como o Jelly, por isso é muito divertido. no processo.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(parece que este é, basicamente, a resposta C)Pitão, 8 bytes
Link Try-it.
Explicação:
fonte
Awk - 18 bytes
Primeiro, tente fazer qualquer coisa com o Awk, para que seja possível jogar mais.
Uso:
echo "1001001" | awk '{gsub(00,0);print}'
fonte
Lote, 24 bytes
Recebe entrada em STDIN. Um pouco competitivo pela primeira vez.
fonte
Lisp comum, SBCL,
4832 bytes-16 bytes graças a Julian Wolf
entrada:
resultado:
Explicação
Lemos a lista de entrada. Lista é usada em
format
função. Nós passamos por ele emitindo1
se o elemento estiver1
e emitindo0
e pulando o próximo elemento da lista para0
.fonte
~[
ao invés de~:[
deixa-o índice com 0 e 1 diretamente, o que deve poupar um monte de bytesMathematica, 24 bytes
Uma função que espera uma série de
"0"
s e"1"
s e retorna uma string similar. Sintaxe auto-explicativa. O Mathematica possui muitas funções de transformação; a chave é usar uma que transforme cada subexpressão relevante (diferente/.
), mas só passe pela expressão uma vez (diferente//.
).fonte
Gelatina , 10 bytes
Experimente online!
Explicação
fonte