Baseado em Chunky vs. Smooth Strings .
Rabiscos /\_/\/\__/\/\/\/\_/\_/\
são divertidos de fazer no teclado quando você está realmente entediado. Mas nem todos os rabiscos são criados iguais. Alguns rabiscos são suaves, tipo \___/
, e alguns são grossos, tipo /\/\/\/\
. Outros são simplesmente quebrados, como////_\\\
Dentro de cada rabisco de N
caracteres, há N-1
junções de rabiscos. Cada junção de rabisco é classificada em um dos três tipos:
Suave (ângulo> "90 graus"):
\_ __ _/
Robusto (ângulo = "90 graus")
/\ \/
Quebrado (qualquer coisa que não se conecte)
// \\ /_ _\
Vamos definir a suavidade como a proporção de junções que são suaves, com robustez e quebra definidas de maneira semelhante. Cada valor varia entre 0
e 1
. A soma da suavidade, robustez e quebra de um rabisco é sempre igual a 1.
Por exemplo, o rabisco /\/\\_//\_
possui 3 junções suaves, 4 junções grossas e 2 junções quebradas. É, portanto 0.3333
, suave, 0.4444
robusto e 0.2222
quebrado.
Seqüências de caracteres vazias e com apenas um caractere têm valores indefinidos, todas as entradas terão pelo menos 2 caracteres.
Desafio
Escreva um programa que controla um comprimento arbitrário e produz dois de seus valores de suavidade, robustez e quebra.
- Você pode escrever um programa ou função, com entrada via STDIN, linha de comando ou como argumento de string.
- Você pode supor que a entrada tenha pelo menos comprimento> = 2 e consiste apenas nos caracteres
/\_
com uma nova linha à direita opcional. - Imprima (ou retorne se uma função) os dois flutuarem com uma precisão de pelo menos 4 casas decimais, arredondadas ou truncadas. Se o valor verdadeiro for
2/3
, valores aceitáveis incluem qualquer valor entre0.6666
e0.6667
, até coisas como0.666637104
. Se o valor exato for1/3
, qualquer resposta que contenha0.3333
é válida. Você pode deixar zeros à direita ou o zero à esquerda se o valor for menor que um. - Saída qualquer par dos três valores como você preferir, apenas certifique-se de indicar quais dois e em que ordem.
O código mais curto em bytes vence.
Exemplos
/\/\\/\//\\
→ Suavidade 0
, Robustez 0.7
, Fragilidade0.3
_/\\_/\\/__/\\\//_
→ Suavidade 0.29411764705
, Robustez 0.29411764705
, Fragilidade0.41176470588
//\\__/_\/
→ Suavidade 0.3333333
, Robustez 0.2222222
, Fragilidade0.4444444
Pergunta bônus: Qual você prefere, rabiscos suaves, grossos ou quebrados?
fonte
Respostas:
Pitão, 25 bytes
Suíte de teste
Produz suavidade, robustez. Basicamente, ele pega a corda codificada e a corta pela metade. Cada metade é decomposta em suas substrings de 2 caracteres e o mesmo é feito para a entrada. Tomamos a interseção, resultando nos pares sul e robusto. Então, pegamos o comprimento, dividimos pelo número de pares e imprimimos.
fonte
Japonês, 42 bytes
Saídas quebradas, grossas. Experimente online!
Como funciona
Versão não concorrente, 36 bytes
Funciona basicamente da mesma maneira que a outra, com algumas pequenas alterações:
ä
agora funciona em strings. Os caracteres são passados para a função em ordem(X, Y, X+Y)
.è
conta o número de ocorrências do argumento na string / array.fonte
Python 3, 149 bytes
Isso gera suavidade e robustez.
Ungolfed:
fonte
Ruby, 71
Produz suavidade, robustez.
Pega as seqüências suaves e robustas mínimas e as procura por cada sequência de dois caracteres na sequência inicial.
Agradecimentos a Kevin Lau por OITO bytes!
fonte
(0..x.size-2).count{|i|t[x[i,2]]}
economiza 5 bytesx.chars.each_cons(2).count{|i|t[i*'']}
. E agora que você está usandox.size
duas vezes na função, atribuindo-a a uma variável e usando isso economiza um byte extra.