Este é o primeiro de uma série, o segundo é Duas estradas divergindo em uma madeira amarela (parte 2)
Este desafio é inspirado no famoso poema de Robert Frost, "The Road Not Taken":
Duas estradas divergiam em um bosque amarelo.
E , desculpe, eu não podia viajar pelas duas.
E ser um viajante, por muito tempo eu fiquei.
E olhei para uma delas o mais longe que pude
.Então pegou o outro, tão justo quanto possível,
e talvez com a melhor reivindicação,
porque era gramado e queria roupas;
Embora a passagem por lá os
tivesse usado da mesma maneira,E ambas as manhãs jaziam igualmente
em folhas, nenhum passo pisara em preto.
Oh, eu fiquei com o primeiro por mais um dia!
No entanto, sabendo como o caminho leva ao caminho,
duvidava que algum dia voltasse.Vou contar isso com um suspiro
Em algum lugar, eras e eras daqui em diante :
Duas estradas divergiam em um bosque, e eu -
eu peguei a menos percorrida,
e isso fez toda a diferença.
Observe a penúltima linha I took the one less traveled by,
,.
Seu verdadeiro desafio
Você receberá entradas no formato como:
# ##
# ##
# ##
#
#
#
e você tem que encontrar a estrada mais fina.
A estrada começa no fundo com a #
. As outras 2 estradas, que sempre terminam na linha superior, são as que você deve examinar. A estrada mais espessa é a mais percorrida e, portanto, não é o que você deseja. O outro é o menos percorrido, e é o que você deseja.
Resultado
Seu programa / função deve gerar um dos 2 valores distintos (por exemplo, 0 ou 1, verdadeiro ou falso), um para cada posição possível da estrada não percorrida. Por exemplo, você pode gerar 0 se a estrada não percorrida estiver à esquerda da estrada percorrida e 1 caso contrário, ou você poderá gerar a string "left" ou "right", true, false, etc.
Casos de teste:
## #
## #
###
#
#
#
Pode sair "certo".
## #
## #
###
##
#
#
#
Pode sair "certo".
## #
## #
###
##
#
#
#
Pode sair "certo".
## #
## #
###
#
#
#
#
Pode sair "certo".
# ##
# ##
###
#
#
#
#
Pode sair "esquerda"
# ##
# ##
###
#
#
#
#
Pode sair "esquerda"
Notas
- Isso é código-golfe , então a resposta mais curta em bytes vence
- Lacunas padrão proibidas
- Você deve especificar suas saídas para "esquerda" e "direita" e elas devem ser distintas
- A entrada será uma string grande e pode ter qualquer quantidade de linhas
- Você não precisa se preocupar com entrada válida.
- A estrada é sempre em forma de Y, então você só precisa olhar para o topo.
- Tem alguma pergunta? Comente abaixo:
Menor contagem de bytes ganha!
fonte
Respostas:
CJam , 1 byte
r
coloca a primeira sequência de caracteres adjacentes não-em branco do STDIN na pilha, para que seja impressa##
para a esquerda e#
para a direita .Experimente online!
fonte
JavaScript (ES6),
1912 bytesEditar:
Uma versão mais golfe é
Retorna
#
para a direita e um espaço para a esquerda.Original:
Explicação
Ungolfed :
A primeira coisa que essa função faz é remover o espaço em branco no início e no final da entrada. Isso significa que o primeiro caractere é sempre
#
. A partir daí, verifico o segundo caractere (o JavaScript começa em 0) e vejo se é um#
caractere. Isso retorna um valor booleano. Se for o caminhoright
, serátrue
, se for deixado, retornaráfalse
.Como eu jogava golfe
No ES6, existe uma abreviação de função anônima chamada função de seta . Isso significa que eu posso pegar minha função de wrapper e transformá-la em:
Devido às regras das funções das setas, ele retornará o restante do código. De lá, eu converti
charAt(1)
para[1]
, pois é uma maneira mais curta, embora não seja recomendado . Então eu peguei===
e transformei==
. Embora eles sejam diferentes neste caso, não importa. Finalmente, eu renomeadoinput
paraa
e removidos todos os espaços em branco.Saída direita e esquerda
Embora o quebra-cabeça não precise realmente do programa para saída direita e esquerda, aqui está um exemplo de outras saídas:
A única parte adicionada é
?'right':'left'
. Isso cria um operador ternário , uma instrução if condensada, isso significa que o código (não-bloqueado) é igual a *:Exemplo
fonte
Pitão, 2 bytes
Saídas
#
para esquerda e##
direita.Experimente online
Explicação
fonte
Acc !! , 30 bytes
Por causa da maneira Acc !! recebe entrada, ele fornecerá a saída depois que apenas uma linha de entrada for inserida. Mas se você inserir a entrada ou redirecioná-la de um arquivo, não perceberá a diferença.
Recebe entrada de stdin. Saída
se a estrada da esquerda for menos percorrida ou
#
se a estrada da direita for menos percorrida. Experimente online!Explicação
N
lê o valor ASCII de um caractere de stdin toda vez que é referenciado. Nós fazemos um loop enquanto35-N
é verdade; isto é, enquanto35-N != 0
ouN != 35
. Portanto, quando o loop termina, acabamos de ler o primeiro#
caractere na linha. O próximo caractere é então lidoN
e escrito de volta para stdout withWrite
.fonte
Retina, 5 bytes
Saídas
1
se direita,0
se esquerda.Experimente online
Se os valores para um resultado positivo não precisassem ser distintos (5 bytes):
Emite um número inteiro positivo, se direito, e zero, se deixado.
Experimente online
fonte
IBM / Lotus Notes Formula Language,
373526 bytesEditar Eu sempre esqueço que
@Like
com caracteres curinga é 2 bytes mais barato que@Contains
.Editar 2 Na verdade, não é necessário
@if
, pois apenas imprime1
ou0
depende da fórmula resultar em@True
ou@False
.Fórmula de campo computado. Basta levar tudo para a esquerda do primeiro
##
que encontrar no campoa
e, se houver um#
, ele sai1
para a esquerda ou então0
para a direita.Graças a @DavidArchibald, aqui está uma solução para 22 bytes. Por respeito à solução de Davids, não a postarei como minha principal resposta.
Este gera
1
para a direita e0
para a esquerda.fonte
Pip ,
86 bytesRecebe a entrada como um argumento da linha de comando (que precisará de aspas e escape de novas linhas quando executado a partir de uma linha de comando real). Saída
#
se a estrada da esquerda for menos percorrida e##
se a estrada da direita for menos percorrida. Experimente online!Explicação
Isso usa o operador de primeira correspondência de regex adicionado recentemente do Pip.
A solução simples para regex (uma porta da resposta Retina de mbomb007 ) é de 9 bytes:
fonte
a
para paraq
e obter a entrada de stdin.Chip , 7 bytes
Experimente online!
Saídas
0x0
para esquerda e0x1
direita. (O TIO inclui sinalizador-v
para que você possa ver os valores binários no stderr. Para ver a saída em ASCII,e*f
pode ser anexado ao final da primeira linha.)O chip opera em bits individuais dentro de um fluxo de bytes, o que realmente o torna bastante bom nesse problema específico.
A
é o bit menos significativo do byte de entrada e '#' é o único caractere de entrada para o qual esse bit está definido. Quando esse bit é encontrado pela primeira vez, atingimos o primeiro '#' da primeira linha.Z
atrasa esse sinal por um ciclo, de modo que agora estamos olhando para o próximo caractere.t
agora está ativado, o que significa encerrar a execução após a conclusão desse ciclo. Não precisamos olhar além da largura da primeira estrada.~S
suprime a saída para todos os ciclos, exceto o final. Se isso não estivesse aqui, teríamos uma saída em cada ciclo.a
coloca o valor atual de seus vizinhos (apenasA
neste caso) no bit menos significativo do byte de saída.Tudo isso significa que obtemos um
0x1
se o primeiro '#' é imediatamente seguido por outro '#', e0x0
caso contrário.fonte
C, 35 bytes
Mesma idéia que a resposta do PragmaticProgrammer : encontre o primeiro
#
e dê saída ao que vem depois dele -#
para "direita" e<space>
"esquerda".C (brecha), 16 bytes
De acordo com os casos de teste, parece que a estrada esquerda está sempre exatamente a um espaço da margem esquerda. Então...
fonte
Lote, 46 bytes
Lê uma linha de STDIN, divide-a em espaços e imprime a primeira palavra; assim, as saídas
#
para esquerda e##
para a direita. Se uma matriz de parâmetros de linha de comando entre aspas for aceitável, então para 36 bytes:Entre aspas o primeiro argumento para que ele seja dividido em espaços e imprima sua primeira palavra.
fonte
Python 2, 21 bytes
Experimente online
Saída
#
para esquerda e##
direitafonte
Retina , 5 bytes
Experimente online!
Uma solução alternativa de 5 bytes. Imprime
#
para a esquerda e##
para a direita. A idéia é combinar todas as execuções de#
s (#+
) e imprimir (!
) apenas a primeira delas (1
).fonte
Haskell, 21 bytes
ou no estilo sem ponto:
"#" significa direita e "" significa esquerda
A função pega apenas uma string, elimina os espaços iniciais e, em seguida, assume o segundo caractere (espaço se a esquerda for fina e # se a esquerda for grossa)
EDIT: Salva três bytes graças a Laikoni e nimi!
fonte
(!!2).dropWhile(' '==)
basta como resposta.!!1
para o segundo elemento. Você pode encurtar o teste para<'!'
. Na versão sem ponto, você pode substituirdropWhile
porsnd.span
.Brainfuck, 32 bytes
Ungolfed:
Imprime
#
para a direita epara a esquerda.
Experimente online!
fonte
Perl 5 , 8 + 1 = 9 bytes
Experimente online!
Corra com
-a
(penalidade de 1 byte).A saída é (onde nome do arquivo é o nome do arquivo do script) se a estrada esquerda for menos percorrida ou se a estrada direita for menos percorrida.
# at filename line 1, <> line 1
## at filename line 1, <> line 1
Explicação
A
-a
opção lê automaticamente a entrada e a divide em colunas em torno do espaço em branco, ignorando o espaço em branco inicial. Como tal, o primeiro dado de entrada é o que precisamos; é isso$F[0]
. Ele também coloca o programa em um loop implícito, o que não queremos. No entanto, o uso dedie
nos permite produzir uma string e sair do loop implícito, ao mesmo tempo (e sem mais caracteres quesay
, a maneira mais comum de imprimir uma string).fonte
C 54 bytes
C ++ 58 bytes
Como o OP especificou, pode ser um "programa / função" que eu escolhi para escrever uma função para salvar caracteres. No entanto, eu ainda incluí a instrução "#include" e a quebra de linha associada na contagem de caracteres, pois elas são necessárias para compilar a função.
Resultado
Retorna um
" "
caractere de espaço para indicar à esquerda ou um"#"
caractere de hash para indicar à direita.Explicação
A função strchr () percorre uma determinada sequência e retorna um ponteiro para a primeira ocorrência de um caractere especificado. Ele tem uma sobrecarga que aceita um número inteiro como o segundo argumento, em oposição a um caractere que me salva 1 caractere. Por exemplo, '#' pode ser substituído por 35. Em seguida, adiciono um ao ponteiro retornado da função para obter o caractere imediatamente a seguir e desreferenciá-lo, depois retornamos o caractere resultante.
Nota
Também gostaria de aproveitar esta oportunidade para expressar formalmente meu aborrecimento no Visual Studio de formatar automaticamente meu código quando estou tentando jogar golfe (╯ ° □ °) ╯︵ ┻━┻.
Edit: Obrigado a Ray por apontar algumas diferenças em C e C ++ e onde eu poderia salvar caracteres <3.
fonte
#include <string.h>\n
comchar*strchr();
e salvar 6 bytes, enquanto continuam sendo perfeitamente legal. (E se você prefere C ++, por qualquer motivo, você pode substituir#include <string.h>
com#include <cstring>
e salvar 1 byte.)JavaScript (ES6), 37 bytes
Explicação:
p
é uma função que retornatrue
se a estrada menos percorrida estiver à esquerda e falsa. Esta é a minha primeira resposta neste site, por isso provavelmente poderia ser mais praticado (talvez a regex).Ele funciona pegando a linha superior da entrada e verificando se ele corresponde ao regex
/^ *#( |$)/
(início da string, qualquer quantidade de espaços, um # e um espaço ou final da string).Isso é apenas para esclarecer as pessoas sobre o formato e gerar idéias. Estou certo de que pode ser melhorado e jogado mais. Feliz golfe!
fonte
[^#]
Japonês , 3 bytes
(2 bytes para
-g1
sinalizador) Saídas#
para a direita e um espaço para a esquerda. Com base no resposta JavaScript de David Archibald.Experimente online!
fonte
Excel, 17 bytes
Assume entrada na célula
A1
.Retorna
##
para direita e#
(#
e espaço) para esquerda.fonte
Dyvil , 12 bytes
Explicação:
Uso:
Retorna
(espaço em branco) para esquerda e
#
direita.fonte
Java 7,
16666635243 bytesSaídas
35
para direita e32
esquerda.Baseado em @Clashsoft resposta Dyvil 's .
Explicação:
Código do teste:
Experimente aqui.
Resultado:
fonte
Entre 98, 11 bytes
Experimente Online!
Imprime
32
para a esquerda e35
para a direita, ambas com um único espaço à direita.Explicação
Um truque que usei foi colocar o
-!jv
primeiro, mesmo que não tenha feito nada. Isso permitiu que eu me livrasse do espaço após a'
gravação e economizasse algum preenchimento. Com este último, o código seriapor 15 bytes.
fonte
Ruby, 20 bytes
Retorna verdadeiro para esquerda, falso para direita.
fonte