Muitos de vocês podem ter interagido com pessoas da Rússia na internet em algum momento, e um subconjunto de vocês deve ter notado o método um pouco estranho que eles têm para se expressar.
por exemplo удали игру нуб)))
onde )))
são adicionados para enfatizar a declaração anterior, tenho trabalhado em uma teoria de que a proporção de )
s para o restante da string é diretamente proporcional à quantidade de ênfase implícita; no entanto, muitas vezes acho difícil calcular a proporção em tempo real, como também estou tentando lidar com uma série de abusos, então eu gostaria que o código mais curto possível me ajudasse a calcular qual deveria ser a sequência resultante, para um valor de entusiasmo entre 0 e 500%, dado o original , seqüência sem entusiasmo, isso ajudará muito minha pesquisa, pois não precisarei digitar scripts volumosos toda vez que desejar testar minha hipótese.
Então, o desafio:
escreva um programa ou função completo que, desde dois argumentos, uma sequência de comprimento desconhecido e um número, seja no formato inteiro (entre 0 e 500) ou no formato decimal (entre 0 e 5, com 2 pontos de precisão)
- retorno / exibir a string original, seguida de uma série de
)
's - o número será calculado como uma proporção do número de entrada para o comprimento da string.
- portanto, se o número 200 ou 2,00 foi fornecido, 200% da string deve ser sufixado como
)
's - o número de parênteses arredondados para situações decimais não importa.
- É necessário um script para suportar caracteres ASCII imprimíveis.
- só precisa suportar um formato de número de entrada, de sua escolha.
Exemplos:
"codegolf" 125 = codegolf))))))))))
"codegolf" 75 = codegolf))))))
"noob team omg" 0.5 = noob team omg))))))
"hi!" 4.99 = hi!)))))))))))))))
Código de exemplo (PowerShell) (com entrada decimal):
Function Get-RussianString ([string]$InputStr,[decimal]$Ratio){
$StrLen = $InputStr.Length
$SuffixCount = $StrLen * $Ratio
$Suffix = [string]::New(")",$SuffixCount)
return $InputStr + $Suffix
}
Get-RussianString "codegolf" 0.5
codegolf))))
Isso é código-golfe, então o código mais curto vence!
)
para enfatizar como um!
? É algum problema de codificação?!
s, mas eles as digitam como estão, não é super comum, mas é bastante icônico.)
é um emoticon reduzido:)
. É muito comum entre os jovens, tanto quanto eu sei.)
não é uma ênfase, é simplesmente o smiley. Tanto quanto eu sei, é mais difícil digitar:
ao usar o layout do teclado russo, portanto eles sorriem sem olhos.:
no layout russo (ЕНКЕН) quanto digitar^
no QWERTY. Mas, de fato, o)
é uma versão reduzida do:)
. É muito mais fácil pressionar e manter pressionada a tecla Shift-0 do que com as teclas alternadamente repetidas.Respostas:
Geléia , 7 bytes
Experimente online!
Usa o formato decimal.
Quão?
fonte
Perl 6, 21 bytes
fonte
Lisp comum,
595250.Parênteses? Eu estou dentro
Detalhes
Cadeia de controle de formato
~a
: argumento de impressão bonita (aqui a string especificada)~v@{...~}
: bloco de iteração, limitado à iteração V, onde V é tomado como argumento, a(* ...)
expressão. A iteração deve iterar sobre uma lista, mas quando você adiciona o@
modificador, a lista é a lista restante de argumentos para a função de formato. Deve haver pelo menos um elemento na lista iterada (caso contrário, sairemos, desconsiderando V). É por isso que existe um argumento adicional para formatar (0).Como nenhum elemento da lista é consumido pelo formato, o loop é infinito, mas felizmente também é limitado por V, também conhecido como número de parênteses a serem impressos.
Edit: obrigado a Michael Vehrs por apontar que não há necessidade de arredondar o argumento numérico (a pergunta permite truncar / arredondar como quisermos, portanto o comportamento padrão funciona aqui).
fonte
format
aceita um argumento decimal parav
. Talvez o Common Lisp's também?format
aceita ...", já que o esquema padrãoformat
não suporta~r
; e Guileformat
segue o exemplo do Common Lisp.JavaScript ES6,
383130 bytesfonte
s=>n=>s+')'.repeat(s.length*n)
(seria, então, ser chamado assimf("hi!")(4.99)
)Python 2 , 29 bytes
s na string, p é a porcentagem (inteiro).
Experimente online!
fonte
05AB1E ,
98 bytesExperimente online!
Funciona para números inteiros e decimais, ordem dos argumentos:
f(String, Double)
fonte
ï
é feito implicitamente para×
com o argumento float.Python, 30 bytes
Usa a entrada decimal.
Experimente online!
fonte
Pitão, 8 bytes
Teste Online! Toma primeiro a razão de excitação, depois a corda para se entusiasmar.
Explicação:
fonte
PowerShell , 33 bytes
Experimente online!
Suporta formato decimal.
fonte
R,
624642 bytesFunção anônima que recebe string
a
e decimaln
, imprime a saída em stdout.fonte
Pitão, 9 bytes
Toma duas linhas de entrada: sequência e proporção (decimal).
Experimente em pyth.herokuapp.com
Explicação
A
denota o primeiro argumento de uma função,B
seu segundo argumento.fonte
TI-Basic, 33 bytes
Toma entrada decimal.
fonte
Perl 5, 29 bytes
(O número é o primeiro argumento, a sequência é o segundo.)
Experimente online!
fonte
CJam , 9 bytes
Experimente online!
Insira a string na primeira linha, a taxa de ênfase no intervalo de 0 a 5 na segunda.
Explicação
fonte
MATL,
11108 bytesEsta solução usa a forma decimal da segunda entrada
Experimente online!
Explicação
fonte
sB ~, 17 bytes
Explicado:
Parênteses são fechados automaticamente
Aqui está a saída do compilador, se você estiver interessado:
Esta versão do compilador foi escrita em 27/01/2017 às 23:12, o que pode ter ocorrido alguns minutos após a publicação desta pergunta. Então, aqui está uma versão que funciona na versão mais antiga do compilador, escrita uma hora antes:
iS$,N?S$;')'*(N*l(S$))
(22 bytes)fonte
PostgreSQL, 102 bytes
Detalhes
Usa o formato de entrada inteira.
Isso simplesmente acerta a seqüência de entrada com o tamanho do alvo.
Chamado com
fonte
Bash + coreutils, 45 bytes
Experimente online!
Entrada inteira.
fonte
echo $1`jot -b \) -s '' $[${#1}*$2/100]`
40 bytes :) experimenteGroovy, 27 bytes
Solução simples
Programa de teste:
fonte
Rebol, 39 bytes
fonte
Clojure, 40 bytes
Solução bastante chata:
Apenas reduz a
str
função em uma lista de parênteses de fechamento com uma string como parâmetro inicial.Veja on-line: https://ideone.com/5jEgWS
Solução não tão chata (64 bytes):
Converte uma cadeia de entrada para um símbolo (para se livrar de aspas) e repetidamente aplica a função
list
nele gerando sequência infinita como este:(a (a) ((a)) (((a))) ... )
. Onth
elemento Takes converte-o em string e substitui todos os parênteses de abertura por nada.Veja on-line: https://ideone.com/C8JmaU
fonte
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")
1 byte a menos (yay). Eu queria fazer comp, mas não consigo obtê-lo abaixo de 70 bytes.")"
para\)
salvar um byte.SimpleTemplate, 92 bytes
Leva a string como o primeiro parâmetro e a "proporção" como o segundo.
A proporção está entre 0 e 5, com 2 casas decimais.
Como você pode ver, não é o ideal.
O número 2
{echo}
pode ser reduzido para 1.Devido a um erro no compilador, esse código não pode ser reduzido muito mais.
Ungolfed:
Se nenhum erro existisse, o código ficaria assim: 86 bytes:
fonte
C # interativo,
7767 bytesC # interativo é legal.
fonte
using System;
ou se qualifique totalmenteMath
. Além disso, não tenho certeza se você pode fazê-lo de forma interativa, mas você pode compilar umFunc<string, Func<int, string>>
para salvar bytes, ou seja,s=>p=>s+new...
Math.Round
apenas lançando a umint
deve chamarFloor
eo OP disse querFloor
ouCeiling
é bomSmileBASIC, 29 bytes
fonte
3*4.99
=14.97
, apenas14
ou15
seria aceitável como resposta, a versão de 29 bytes deve funcionar bem, desculpe!Gol> <> (Golfe), 17 bytes
Experimente aqui .
A linha superior lê caracteres (
i
) até encontrar uma nova linha (ASCII 10,a
) e depois desce (v
).Então descartamos um caractere (a nova linha) com
~
, pressionamos o comprimento da pilha (l
), lemos um float (I
), multiplicamos os dois e repetidamente (R
) pressionamos o caractere ")" várias vezes. Finalmente, inverta a pilha (r
), faça a saída e pare (H
).fonte
PHP, 50 bytes
toma string e número decimal como argumentos de linha de comando; corta o estofamento. Corra com
-r
;demolir
fonte
Ruby, 25 bytes
Estou usando lambdas . O programa de teste seria algo como:
fonte
Clojure, 68 bytes
Uma função anônima que aceita entrada decimal.
Literalmente, o primeiro programa Lisp que eu já escrevi! Eu já estou me divertindo.
fonte
#(...)
e se livrar delasprint
(já que o retorno da função deve ser aceitável). Você pode mudarreduce
paraapply
para astr
função e pode mudar")"
para\)
, o que faz a mesma coisa. Assim, o código final deve ser:#(str %(apply str(repeat(*(count %)%2)\)))))
.(#(...) "codegolf" 125)
deve adicionar 125 % do comprimento do "codegolf" em vez de 125 vezes o comprimento do "codegolf". Portanto, o programa fixo seria:,#(str %(apply str(repeat(*(count %)%2 1/100)\))))
que é de 49 bytes.C ++ 14, 43 bytes
Como lambda sem nome, modificando sua entrada, assumindo que
s
é semelhante astd::string
(has.append(int,char)
e assumindop
ser do tipo de ponto flutuante:Uso:
fonte
Haskell , 37 bytes
Experimente online! Uso:
"codegolf" ! 125
Uma versão que usa um número decimal: (41 bytes)
Experimente online! Uso:
"codegolf" ! 1.25
fonte