História de fundo
Conheça meu amigo Jimmy:
/o\
Jimmy é um pequeno personagem que gosta de ficar em plataformas. Aqui está o Jimmy em pé com segurança em uma plataforma:
/o\
-------------
Agora, Jimmy tem um bom senso de equilíbrio, para que ele possa ficar em pé com segurança com uma perna fora da plataforma, assim:
/o\
-------------------
Embora se ele fique com duas ou mais partes do corpo fora da plataforma, ele cairá. Ambos são exemplos em que Jimmy cairá:
/o\ /o\
---------- ----------------------
O desafio
Seu desafio é escrever um programa para determinar, com base na posição e na plataforma de Jimmy, se Jimmy pode ficar na plataforma sem cair.
Entrada: Duas linhas mostrando a posição de Jimmy e a posição da plataforma embaixo dele. Isso pode ser de duas entradas separadas, uma única entrada ou uma matriz de algum tipo.
- Você pode receber informações de qualquer forma razoável, incluindo funções e informações padrão. Recorra apenas à codificação codificada se o seu idioma não suportar os outros métodos de entrada.
Saída: os valores booleanos true e false, ou os números inteiros 1 ou 0 para representar true / false, respectivamente.
- O valor booleano baseia-se em se Jimmy pode permanecer na plataforma ou não - verdadeiro se Jimmy pode permanecer na plataforma ou falso se ele cair.
O tamanho da plataforma é arbitrário e pode ser alterado à vontade. Seu programa deve responder por isso.
A plataforma não pode ter um comprimento igual a zero e deve estar completa (sem buracos na plataforma).
Lembre-se de que Jimmy cai quando duas partes de seu corpo estão penduradas na plataforma. Uma parte do corpo é um caractere ASCII do seu corpo.
O espaço em branco à direita no final da plataforma não é necessário, mas seu programa deve ser responsável pelas duas situações: onde há espaço em branco após a plataforma e onde não há.
Esteja atento às brechas padrão que são proibidas.
Casos de teste
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
Pontuação
Isso é código-golfe , então a menor contagem de bytes vence.
Entre os melhores
Você pode visualizar o cabeçalho desta postagem expandindo o widget / snippet abaixo. Para que sua postagem seja incluída na classificação, você precisa de um cabeçalho ( # header text
) com as seguintes informações:
O nome do idioma (termine com vírgula
,
ou hífen-
), seguido por ...A contagem de bytes, como o último número a aparecer no seu cabeçalho.
Por exemplo, JavaScript (ES6), 72 bytes
é válido, mas Fortran, 143 bytes (8-bit)
é inválido porque a contagem de bytes não é o último número no cabeçalho (sua resposta será reconhecida como 8 bytes - não tire proveito disso).
<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github --> <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187586" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
Respostas:
Gelatina , 6 bytes
Experimente online!
Explicação:
fonte
S
soma as colunas em vez das linhas? : S Se eu olhei para o wiki corretamente, o código:n⁶
verifica se cada caractere não é igual a um espaço (ie['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
lista de soma (mas, por algum motivo, isso soma colunas em vez de linhas ... então[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
conte a quantidade de 2s;Ẓ
verifique se isso é primo (então 2 ou 3), depois que o resultado é gerado implicitamente. Mas eu esperava[[1,1,1],[0,1]]
somar[3,1]
..S
é equivalente a0;+/Ɗ
, ou seja, reduzir por adição (que vetoriza) com valor inicial0
.§
faz o que você esperavaS
fazer.JavaScript (ES6), 38 bytes
Toma entrada como0 ou 1 .
(a)(b)
. RetornaExperimente online!
Quão?
Procuramos a posição da parte
"o"
do meio do corpo de Jimmy na primeira corda e testamos se há um traço na segunda corda na mesma posição.O único caso em que Jimmy seria inseguro nessa situação é com uma plataforma de traço único:
Além disso, garantimos que a plataforma tenha uma largura de pelo menos2 :
JavaScript (ES6), 36 bytes
Versão alternativa se assumirmos que sempre há traços ou espaços abaixo de Jimmy (ou seja, a entrada é retangular).
Experimente online!
Aproveita o fato de que a coerção para um valor numérico é0 para um espaço e NaN para um traço.
fonte
"/o\\\n__"
Excel,
674544 bytesColoque Jimmy em
A1
uma plataformaA2
.2 condições verificadas:
o
) está na plataforma?-
?fonte
<>
para>
Python 3,
8843 bytesA entrada é fornecida na forma de uma lista contendo duas strings: a primeira string é a primeira linha; a segunda corda é a segunda linha.
Experimente online!
Outra versão, com 43 bytes (não consegui obtê-lo com menos de 43):
Experimente online!
Redução de 42 bytes graças a uma dica de Jo King.
Versão antiga:
-2 bytes graças ao Sriotchilism O'Zaic.
Isso funciona com duas entradas separadas e emparelhando as letras correspondentes. Ele conta o número de pares em que nenhum caractere é um espaço e, em seguida, retorna True se esse número for maior que 1.
fonte
Perl 6 , 18 bytes
Experimente online!
Toma dois parâmetros e retorna um valor booleano de se Jimmy permanecerá na plataforma. Isso funciona juntando as duas linhas ao XOR e verificando se alguma parte do Jimmy ainda está na plataforma.
Explicação:
fonte
Python 2 ,
4237 bytesExperimente online!
5 bytes thx para sete negativos
fonte
"--"in [...]
para -5 bytesHaskell , 34 bytes
Experimente online!
Eu peguei esse aqui combinando minha técnica abaixo com a outra resposta haskell .
Haskell , 45 bytes
Experimente online!
Isso conta o número de partes do corpo (caracteres que não são do espaço) que estão no topo da plataforma e, em seguida, verifica se é maior que 1. O motivo pelo qual contamos partes do corpo na plataforma em vez de partes do corpo é que
zipWith
cortará a linha superior para ser o comprimento do fundo e, portanto, pode cortar partes do corpo de Jimmy. Isso nos impede de ter que fazer algo comocycle" "
preencher a lista.fonte
MathGolf ,
614 bytesExperimente online!
8 bytes tiveram que ser adicionados para explicar o caso apresentado por Nick Kennedy.
Verifica se
"-o-"
há uma subcadeia de caracteres da seqüência compactada das duas linhas e da seqüência compactada em que a primeira linha de entrada tem o primeiro caractere removido. Recebe a entrada como duas cadeias separadas, com a única alteração que o caractere é inserido como/o\\
, já que\\
é a maneira correta de inserir uma barra invertida em uma string no MathGolf.Explicação
fonte
05AB1E (legado) ,
987 bytes-1 byte graças a @ Mr.Xcoder com a abordagem de
ðм2ù
.Entrada como uma lista de duas cadeias.
Funciona apenas na versão herdada de 05AB1E, porque
ζ
pode transpor uma lista de seqüências de caracteres e uma lista 2D de caracteres, enquanto queζ
na nova versão 05AB1E funciona apenas com a lista 2D de caracteres.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
bytes
página de código para que você saiba que ela não está codificada em UTF-8, mas usa uma codificação personalizada. ;) Se você quiser, posso editar minha resposta para colocar a codificação abaixo do título, mas, honestamente, o código do placar deve ser capaz de lidar com isso imho.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
tornar 7 o último número sem invalidar o URL?Ruby , 28 bytes
Experimente online!
fonte
Dyalog APL estendido,
11108 bytesExperimente online!
Explicação:
-2 graças a Adám.
fonte
2≤1⊥∧⌿⍤<
Excel, 36 bytes
Jimmy em
A1
uma plataforma emA2
.Localiza a posição de Jimmy, pega os 3 bytes da plataforma e apara os espaços. Se o comprimento da plataforma resultante for longo o suficiente, Jimmy se mantém.
fonte
EXCEL,
9471 bytes.VBA (Excel), 87 bytesA1
= Jimmy,A2
= plataforma-23 bytes. Obrigado @Wernisch.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
fonte
trim
vez delen(replace
?/// ,
85 9387 bytesExperimente online!
A saída é 1 se Jimmy estiver seguro. Caso contrário, não gera nada. (Unário 1 e 0.) Como não há outra maneira de obter informações em ///, ele precisa ser codificado:
Por exemplo:
( Experimente online! )
Observe o espaço após o
<INPUT HERE>
.Explicação:
NOTA! O código de explicação não pode ser executado devido aos comentários. Os comentários são colocados entre chaves. Além disso, o código original usa um campo de golfe onde
//
é substituído por~
. Este código é omitido da explicação.///
truque de golfe padrão .fonte
R , 35 bytes
Experimente online!
Com base na excelente resposta da @ EriktheOutgolfer Jelly, por favor, vote também nessa!
A entrada é uma matriz 2D de caracteres.
fonte
Haskell, 59 bytes
Experimente online!
A função é chamada assim:
f "/o\\ " " -- "
Como funciona (para
f "/o\\" " -"
):b++cycle" "
- Adiciona um número infinito de espaços depoisb
para garantir que Jimmy esteja sempre acima de um-
ou(
" -"
→" - ..."
zip a$b++cycle" "
- Fecha as duas cordas juntas ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- Para cada par na lista compactada[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Gera uma lista de1
s, cujo comprimento é o número de pares que satisfazem as condições:elem p"/o\\"
- O personagem na corda superior é uma das partes do corpo de Jimmy. (Satisfeito pelos três pares neste exemplo)q==' '
- O caractere na string inferior é um espaço. (Satisfeito por('/', ' ')
e('\\', ' ')
)Então, o par deve ser aquele em que uma das partes do corpo de Jimmy esteja acima de um espaço.
Como neste exemplo, dois pares atendem às duas condições, a lista é
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Pegue a soma desses1
s (isto é, o comprimento da lista), que neste exemplo é2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Verifique se o número de partes do corpo acima de um espaço é menor que 2. Neste exemplo, não é, para que Jimmy caia. :(fonte
C (gcc) , 73 bytes
Experimente online!
fonte
index()
vez destrchr()
Kotlin, 60 bytes
Explicação:
fonte
/// , 57 bytes
Experimente online!
Anexe a entrada ao final do programa para executar. Retorna a string vazia se Jimmy cair da plataforma, caso contrário, uma string de pontos de exclamação.
/|/\/\//
substitui|
por//
, o que torna o código mais curto e mais legível (|
é usado para demarcar cada substituição)/\/o\\/J| J/J*/
substitui JimmyJ
por brevidade e altera o espaço à esquerda dele para*
à direita dele/* /| -/ | //
cancela se*
e com o espaço à esquerda da plataforma. Se houver dois ou mais espaços restantes, Jimmy está caindo para a esquerda e a plataforma é excluída. Esta parte também remove qualquer espaço em branco à direita da plataforma./*-/|--/!/
cancela se*
e com o comprimento da plataforma. Se houver pelo menos dois-
, Jimmy não está caindo para a direita, então eles são substituídos por a!
./-/|*/|J//
exclui todos os caracteres restantes que não são!
fonte
Japonês , 8 bytes
Tente
fonte
Retina 0.8.2 , 16 bytes
Experimente online! O link inclui o conjunto de testes. Explicação:
Enquanto ainda houver um espaço na primeira linha e as duas linhas ainda tiverem mais de um caractere, exclua o espaço e o primeiro caractere da próxima linha. Nota: Isso pressupõe que não haja espaço à direita após Jimmy. É necessário um byte de +1 se for necessário permitir espaço à direita.
Verifique se há pelo menos duas peças de plataforma sob Jimmy.
fonte
Perl 5
-pl
, 42 bytesExperimente online!
fonte
Ruby 2.5.3, 44 bytes
Entrada tomada como duas matrizes. Definitivamente, não é a abordagem mais favorável ao golfe (consulte a resposta do GB), mas eu gosto de qualquer desculpa para usar a
zip
função.fonte
PowerShell ,
63..5553 bytes-1 byte graças a mazzy
Experimente online!
Aceita entrada como duas linhas.
Desenrolado:
fonte
C # (compilador interativo do Visual C #) ,
444039 bytes-4 bytes graças a Jo King
Experimente online!
fonte
Python 3.7 ,
7156 bytesVersão muito simples e a mais curta que consegui pensar em usar essa abordagem. Input
s
é uma lista de duas strings, a primeira para a linha Jimmy, a segunda para a plataforma. Coloque os caracteres que estão acima um do outro e verifique se-
há uma parte de Jimmy em pelo menos duas instâncias.EDIT: Reduzido em alguns bytes, graças ao Blue!
fonte
s
deve haver duas listas, uma para o jimmy e outra para a plataforma?). Além disso, existem alguns lugares em que você pode salvar bytes: em vez de somar uma lista, você pode somar o iterador bruto (remova os colchetes); em vez de verificar>=2
, verifique>1
; você pode somarTrue
eFalse
gostar de 1 e 0, sem necessidade do if-else. Por fim, antes de postar uma nova resposta no mesmo idioma, observe as anteriores para ver se você pode melhorar.Chevron,
8487 bytesEssa é uma linguagem bastante nova de minha própria criação - intérpretes de protótipo, documentação e programas de exemplo podem ser encontrados em https://github.com/superloach/chevron .
Explicação:
>^__>^j
- tome jimmy como entrada TXT^i<<0
- inicialize o índice para 0^i<<^i+1
- índice de incremento^h<^i>^j
- obtém o personagem de jimmy no índice->+2??^h=/
- pule fora de loop na perna esquerda de jimmy->-3
- volte para o início do loop>^__>^p
- tome a plataforma como entrada TXT^q<^i|2>^p
- recorte 3 caracteres em jimmy->+2??^q<--
- se 2 traços sob jimmy, pule para a verdadeira saída><0
- saída falsa><1
- saída de verdadefonte
C (gcc), 103 bytes
Experimente online!
Seria muito menor ( 75 bytes ), se se pudesse supor que há espaço em branco após a plataforma.
fonte
Japonês
-¡
, 9 bytes-1 byte se a entrada puder ser revertida.
Experimente online
fonte
V , 18 bytes
Experimente online!
Espaço em branco de saída somente se jimmy cair da plataforma. Saída de algo que não seja espaço em branco se o jimmy permanecer na plataforma.
fonte