Escreva um programa ou função que inclua uma sequência de caracteres -=o.
onde os -=o
'e .
' sempre se alternam, caractere para caractere. A string terá um comprimento ímpar maior que um e sempre começará e terminará em um de -=o
.
Basicamente, a entrada parecerá uma linha de rostos de emoticons que compartilham olhos em vários estados de sonolência, por exemplo
o.=.=.-.-.o.o
Seu objetivo é imprimir ou devolver o rosto que é o mais sonolento ou o mais acordado (a escolha é sua). Se houver várias opções para quem está mais sonolento / acordado, qualquer uma delas pode ser exibida.
Existem nove rostos distintos e cinco níveis de sonolência:
-.- is 100% sleepy
-.= is 75% sleepy
-.o is 50% sleepy
=.- is 75% sleepy
=.= is 50% sleepy
=.o is 25% sleepy
o.- is 50% sleepy
o.= is 25% sleepy
o.o is 0% sleepy
No caso, não está claro, o percentual sonolência é calculado atribuindo 1
a -
de totalmente adormecido, 0.5
para =
por meio adormecida, e 0
que o
para acordado. Então a soma dos dois valores oculares divididos por dois é a porcentagem.
O código mais curto em bytes vence.
Casos de teste
Sonolento
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES -.=
=.-.= GIVES =.- OR -.=
o.-.= GIVES -.=
-.-.= GIVES -.-
o.o.- GIVES o.-
=.=.=.o GIVES =.=
-.=.=.= GIVES -.=
=.o.-.= GIVES -.=
o.-.o.=.= GIVES o.- OR -.o OR =.=
-.o.-.=.= GIVES -.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES -.-
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES -.= OR =.-
Mais Desperta
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES o.-
=.-.= GIVES =.- OR -.=
o.-.= GIVES o.-
-.-.= GIVES -.=
o.o.- GIVES o.o
=.=.=.o GIVES =.o
-.=.=.= GIVES =.=
=.o.-.= GIVES =.o
o.-.o.=.= GIVES o.=
-.o.-.=.= GIVES -.o OR o.- OR =.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES o.o
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o
-.-
Respostas:
Pitão,
1210 bytesIsso imprime o emoticon mais sonolento. Verifique todos os casos de teste de uma vez no Pyth Compiler .
O crédito vai para o Sp3000 na idéia de usar a classificação .
Como funciona
fonte
hS%2.:z3
?=.-
ter mais sono do que isso-.o
, mas eles são classificados de outra maneira. Eu cometi o mesmo erro.Python 2,
5453 bytesEsta é uma função que retorna o rosto que está mais acordado.
Muito obrigado ao xnor por fornecer muitos truques táticos para reduzir meu algoritmo original.
fonte
max
vez de iteração-lo através de:f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, pois=.-
vs-.o
é a exceção à regra de classificação.,key=sorted
que seria uma solução, mas isso é 11 caracteres, então o seu provavelmente é menor.CJam, 12 bytes
Isso imprime o emoticon mais sonolento. Experimente este violino ou este conjunto de testes no intérprete CJam.
O crédito vai para o Sp3000 na idéia de usar a classificação .
Como funciona
fonte
Dyalog APL,
3528 bytesEsta é uma função monádica que pega a corda à direita e produz a face mais sonolenta.
fonte
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
também é desnecessário.Prolog,
205189 bytesCódigo
Explicação
Exemplo
Editar: salvou 16 bytes unificando cláusulas r com OR.
fonte
Clojure, 82 bytes
Bônus: a seguinte função menor imprime a mesma face, mas com mais estilo!
Teste aqui.
fonte
Ruby, 59 bytes
A função retorna o rosto mais sonolento, usando o truque de classificação.
Chamado assim:
Funciona na ordem dos olhos desajeitada devido ao tipo interno de olhos:
fonte
Minkolang 0.12 , 119 bytes
No começo, eu tentei fazer isso curto e muito golfe. Desisti e fui para algo um pouco mais "divertido", mas ainda relativamente golfista.
Experimente aqui!
Explicação
Mas na verdade, clique no link acima e clique Slow! De qualquer forma...
Isso pula sobre o
fv
que será importante mais tarde.O que tudo o que fez foi colocar
^
ao lado dos rostos que combinavam. Então agora o codebox pode ficar assim:Sem os comentários, é claro. Agora, o
40w
buraco de minhoca enviou o ponteiro de instrução parav
, o qual o redireciona imediatamente paraF
. Agora,F
é um comando "gosub". É como um goto, mas você pode voltar para onde o chamou. No momento em queF
é encontrada, a pilha é[3,1]
, então ela pula para o1
(talvez) na segunda linha. Enquanto o contador de programa estava descendo, ele continua empurrando1
s para a pilha ao longo do caminho. Isso é ... até que ele atinja a^
, quando for redirecionado de volta para onde ele será pressionado1
novamente. O ponteiro de instrução então pressionaf
, o que restaura sua posição e direção (quandoF
foi encontrado anteriormente). Por conveniência, vou pegar o código a seguir e alterar seu layout. (O</\
servem para redirecionar o ponteiro de instruções, conforme necessário.)Na verdade, estou meio orgulhoso de como usei vários recursos exclusivos do Minkolang que não costumava usar antes. Principalmente o ternário e o gosub. Enfim, aí está!
fonte
C, 70 bytes
A função retorna a face mais acordada. Ele modifica a string de entrada no lugar, para retornar uma string terminada em nulo.
fonte
Python 2/3, 54
56bytesSó queria adotar uma abordagem alternativa à resposta recursiva do xsot.
Isso pega a melhor (ou pior?) Tupla de pares de olhos adjacentes e os une.
Substitua max por min para retornar o mais sonolento (pois isso retorna o mais acordado)
Parece funcionar, usando o seguinte teste:
O que fornece o seguinte resultado:
fonte
f=
peça é necessária como parte do tamanho do código para este desafio? Se eu não fizer isso ele vai criar o lambda e, em seguida, simplesmente jogá-lo imediatamente de novo ...f=
, em seguida, o consenso atual parece ser que as funções anônimas estão bem por padrão, então você pode soltar af=
neste caso ( necessidades de xsot ele desde que ele de recursiva)Braquilog , 10 bytes
Experimente online!
Traduzido da resposta de Dennis 'Pyth.
fonte
Mathematica, 61 bytes
Vai para o mais sonolento.
fonte
%
que se baseia.F # 60
Retorna o rosto acordada a maior (mudança
max
pormin
pelo dormes)fonte
Perl 5, 127 bytes
(Tenho certeza de que é possível fazê-lo mais brevemente.) Como funciona:
--pos
faz).fonte
ES6,
8172 bytesProvavelmente requer o Chrome 45 ou o Firefox 41.
Agradecemos a @ETHproductions por salvar 9 bytes.
fonte
"=.-"
deve ser trocado com"-.o"
; mesmo com"=.o"
e"o.-"
. Além disso, você poderá salvar alguns bytes colocando tudo em uma sequência, separada por vírgulas e usando.split`,`
.> <> , 55 bytes
tente aqui!
Saídas mais acordadas.
Como os valores ASCII para -, = e o aumentam respectivamente, eu poderia usar isso para minha vantagem. Basicamente, ele adiciona os valores da parte atual e anterior dos olhos, verifique se é um valor mais alto do que antes, se salva o novo valor e atualiza o rosto que representa, depois faz um loop até o final da entrada. Em seguida, gera a face que permanece. (Estou muito satisfeito com a adequação de todo o código)
fonte
Perl 5
-MList::Util=max -p
, 68 bytesExperimente online!
Pega cada conjunto de três caracteres, ignora o
.
meio, mapeia a adição dos outros dois a um número inteiro no intervalo de 0 a 4, concatena isso na frente do rosto do emoticon e depois classifica por isso. Agarra a última entrada (mais acordada), remove o número da frente e o gera.fonte