Espere ... isso não é corrico.
fundo
Atualmente, no YouTube, as seções de comentários estão repletas de padrões:
S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S
onde String
é um mero marcador de posição e refere-se a qualquer combinação de caracteres. Esses padrões são geralmente acompanhados por um It took me a lot of time to make this, pls like
ou algo assim, e muitas vezes o OP consegue reunir vários gostos.
A tarefa
Embora você tenha um grande talento para acumular votos positivos no PPCG com suas habilidades encantadoras de golfe, você definitivamente não é a melhor opção para fazer comentários espirituosos ou fazer referência a memes nas seções de comentários do YouTube. Assim, seus comentários construtivos feitos com pensamento deliberado acumulam alguns "gostos" no YouTube. Você quer que isso mude. Portanto, você recorre aos padrões clichês mencionados acima para alcançar sua ambição final, mas sem perder tempo tentando escrevê-los manualmente.
Simplificando, sua tarefa é pegar uma string, digamos s
, e 2*s.length - 1
gerar substrings s
delimitadas por uma nova linha, de modo a cumprir o seguinte padrão:
(para s
= "Olá")
H
He
Hel
Hell
Hello
Hell
Hel
He
H
Entrada
Uma única sequência s
. Os padrões de entrada da comunidade se aplicam. Você pode assumir que a sequência de entrada conterá apenas caracteres ASCII imprimíveis.
Resultado
Várias linhas separadas por uma nova linha, constituindo um padrão apropriado, conforme explicado acima. Os padrões de saída da comunidade se aplicam. Linhas em branco à esquerda e à direita (que não contêm caracteres ou caracteres que não podem ser vistos, como um espaço) na saída são permitidas.
Caso de teste
Um caso de teste com várias palavras:
Input => "Oh yeah yeah"
Output =>
O
Oh
Oh
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah
Oh yeah
Oh yea
Oh ye
Oh y
Oh
Oh
O
Observe que há distorções aparentes no formato da saída do caso de teste acima (por exemplo, a linha dois e a linha três da saída parecem iguais). Isso ocorre porque não podemos ver os espaços em branco à direita. Seu programa NÃO precisa tentar corrigir essas distorções.
Critério vencedor
Isso é código-golfe , então o código mais curto em bytes em cada idioma vence!
YouTube Comments #1
no título.""
? Que tal um único personagem como"H"
? Em caso afirmativo, qual deve ser o resultado para ambos os casos?Respostas:
brainfuck , 32 bytes
Experimente online!
O mesmo loop é usado para as duas metades do padrão.
Explicação:
fonte
JavaScript (ES6), 36 bytes
Experimente online!
Comentado
fonte
Unix (LF)
. Problema resolvido de uma vez por todas. :)05AB1E (legado) ,
43 bytesRiscado
4
já não é 4 :)Experimente online ou verifique todos os casos de teste .
Explicação:
Na nova versão do 05AB1E,
»
é necessário explícito após oη
, e é por isso que eu uso a versão herdada do 05AB1E aqui para salvar um byte.fonte
\xce\xb7\x2e\xe2\x88\x8a
08 2e 17
, que você pode executar e verificar com o--osabie
sinalizador: tio.run/…IBM PC DOS, montagem 8088,
4443Desmontado:
Explicação
Loop
2 * input length - 1
para cada linha. A função de exibição de seqüência de caracteres da API do DOS (INT 21H,9
) grava uma$
seqüência de caracteres terminada na tela, portanto, toda vez que o loop é executado, o caractere após o último a ser exibido é trocado pelo terminador de fim de sequência.O contador de loop é comparado com o comprimento da string e, se for maior (significando a parte ascendente da saída), a posição da string / swap é incrementada; caso contrário, é decrementada (na verdade,
-1-1+1
são menos bytes que uma estrutura de ramificação if / else).Programa executável autônomo, pega a string de entrada da linha de comando.
Resultado
Download YT2.COM (43 bytes)
fonte
SHR SI, 1
.Python 2 ,
6052 bytesExperimente online!
Python 3.8 (pré-lançamento) , 50 bytes
Experimente online!
fonte
x:=s[:n]
.MATL , 8 bytes
Experimente online!
Por favor, goste deste post para o smiley
:)
no código que demorei muito tempo para fazer.fonte
J , 11 bytes
Função de prefixo tácito anônimo. Retorna uma matriz de caracteres preenchida com espaço.
Experimente online!
]\
a lista de prefixos[:(
…)
Aplique a seguinte função a essa lista|.
a lista inversa,
anexado com}:
a lista reduzida (sem último item)fonte
[:(
e}:,|
parece tão triste…Perl 6 , 31 bytes
Experimente online!
Bloco de código anônimo que pega uma string e retorna uma lista de linhas.
Explicação:
fonte
Japt -R , 4 bytes
Redução cumulativa em uma string.
-1 byte graças a @Shaggy
Experimente online!
fonte
-flag
ou <language>-flag
. Também: | Eu esqueci que a redução cumulativa era uma coisa, eu juro que pulava toda vez que a via-flag
?Japonês
-R
,97 bytes-2 bytes graças a Shaggy
Experimente online!
fonte
Ã
é uma coisaPerl 5 (
-p
), 26 bytesTIO
fonte
Haskell,
5250.44 bytesinstance Semigroup b => Semigroup (a -> b)
Experimente online!
fonte
inits
requer que uma importação seja usada para que você precise adicionarimport Data.List
ou algo semelhante.import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
R ,
79656258 bytesExperimente online!
-14 pelo conhecimento da função superior de Giuseppe
-3 com indexação mais limpa
-4 graças à mudança de Nick Kennedy e Giuseppe para
scan
ewrite
Evitar loops (e
substr
) é bom.fonte
sapply
-substring
farão o que você deseja (com uma linha vazia à direita) e por 65 bytes ! Definitivamente, eu não teria pensadosubstring
se não tivesse visto seu bom usosubstr
aqui.scan
ewrite
? Apenas 59 bytes!""
por1
.Geléia ,
54 bytes-1 byte graças a @ JonathanAllan !
Experimente online! Eu acho que esta é a minha segunda resposta Jelly?
Não sei se isso é ótimo.Estou mais convencido de que isso é ótimo. Retorna uma matriz de linhas.Explicação
Outra abordagem, proposta por @ JonathanAllan, é a
;\ŒḄ
que reduz cumulativamente (\
) a concatenação (;
), que é outra maneira de gerar prefixos.fonte
Y
no código (eu faria o rodapéÇY
ouÇŒṘ
para evitar uma impressão de esmagamento implícita de um programa completo). Em uma nota lateral, isso também é implementado de forma equivalente;\ŒḄ
à mesma contagem de bytes (você também pode passar o argumento,"blah"
pois Jelly interpreta isso como uma lista de caracteres - a sua é realmente uma lista de listas de caracteres, como você verá se você fizer o rodapéÇŒṘ
)Python 3.8 (pré-lançamento) , 48 bytes
Experimente online!
Usa expressões de atribuição com
:=
para acumular uma lista de prefixos e, em seguida, novamente para salvar o resultado para concatenar seu reverso (sem o primeiro caractere).Python 2 , 51 bytes
Experimente online!
Quase temos a seguinte solução agradável de 45 bytes, mas ela possui a string original duas vezes e não vejo uma maneira curta de corrigir isso.
Experimente online!
fonte
print('\n'.join(f(s)))
?x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]
. Veja os exemplos no topo aqui .Carvão , 5 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
G
desenha um polígono preenchido,^
especifica que os lados estão para baixo à direita e para baixo à esquerda (o polígono se fecha automaticamente),Lθ
especifica o comprimento desses lados como sendo o comprimento da entrada original e o finalθ
especifica a sequência de preenchimento.fonte
C # (Compilador interativo do Visual C #) ,
1231099484 84bytesSupõe que podemos retornar uma matriz de matriz de caracteres (acredito que podemos, pois uma matriz de caracteres é uma representação válida para uma string e uma matriz de strings é uma representação válida para várias linhas)
Experimente online!
fonte
Anexo , 15 bytes
Experimente online!
Bem simples.
Bounce
s (acrescenta reverso sem centro) oPrefixes
da entrada.Como alternativa, 21 bytes
Bounce@{_[0..0:~-#_]}
:, reimplementando o prefixo.fonte
Braquilog (v2), 6 bytes
Experimente online!
Envio de função, retornando uma matriz de linhas. Vagamente baseado na resposta de @ Fatalize .
Explicação
A ordem de desempate aqui é definida pelo
⊆
, que, quando usado com esse padrão de fluxo, prefere a saída mais curta possível, com quebra de empate, colocando os elementos fornecidos o mais cedo possível . A saída mais curta possível é o que queremos aqui (porque não é possível ter prefixos duplicados), e colocar os elementos fornecidos (ou seja, os prefixos) o mais cedo possível os colocará na primeira metade (arredondada para cima) do resultado. Como também exigimos que eles sejam colocados na mesma ordem, obtemos exatamente o padrão necessário, embora a descrição que fornecemos ao Brachylog seja muito geral; acontece que os tiebreaks funcionam exatamente da maneira certa, fazendo com que o Brachylog escolha a saída que queremos, em vez de alguma outra saída que obedeça à descrição.fonte
PowerShell,
898766 bytes-2 bytes graças a @AdmBorkBork
Experimente online!
Na verdade, não funcionou como especificado antes, desculpe por isso! Eu editei e também consegui raspar alguns bytes.
fonte
--$d
vez de($d-1)
salvar um casal no final.PowerShell , 46 bytes
Experimente online!
PowerShell , 42 bytes (especial do YouTube, sujo)
Sabe-se que o tamanho máximo de um comentário no youtube é de 10.000 caracteres. Ok, use isso como o limite superior.
Experimente online!
fonte
APL (Dyalog Unicode) , SBCS de 9 bytes
Função de prefixo tácito anônimo. Retorna a lista de strings.
Experimente online!
,\
a lista de prefixos (lit, a concatenação cumulativa)(
…)
Aplique a seguinte função a essa lista:⌽
a lista invertida1↓
largue o primeiro item,
preceder⊢
a lista não modificadafonte
Ruby ,
514240 bytesExperimente online!
Graças à maçaneta da porta por -2 bytes.
fonte
...
por,
JavaScript (Node.js) , 90 bytes
Provavelmente isso pode ser jogado muito mais, Arnauld já tem um caminho bem mais curto, mas eu me diverti pelo menos!
Experimente online!
fonte
SNOBOL4 (CSNOBOL4) , 118 bytes
Experimente online!
Parece haver um erro nesta implementação do SNOBOL; tentar substituir o rótulo
D
pelo rótulo2
causa um erro, embora o manual do Vanilla SNOBOL indique isso (ênfase adicionada)Minha suposição é que o interpretador CSNOBOL suporta apenas um único rótulo que começa com um número inteiro.
fonte
APL + WIN, 31 bytes
Solicita a entrada da string:
Explicação:
fonte
F # (.NET Core) ,
6761 bytesExperimente online!
A entrada é a
string
e a saída é umaseq<string>
Outra solução pode ser
let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]
para bytes 80ish ... Não tenho certeza de que vale a pena investigar.fonte
sed ,
3135 bytesExperimente online!
Explicação
No início de cada iteração do loop, o espaço do padrão é um "pedaço central" da saída desejada e cada loop adiciona uma cópia abreviada à parte superior e inferior.
fonte
sed
. O mesmo no TIO. Qualsed
implementação você usa e como passa a entrada? (BTW, alterando a substituição paras/.\n.*\|.$//
sed
implementação (usando o GNU versão 4.2.1), simplesmente não percebi o bug. Eu brinquei com algumas outras correções e não consigo encontrar nada que adicione menos de quatro bytes, por isso estou adotando sua correção, obrigado.Python 2 ,
13110084 bytesMinha primeira resposta no Code Golf!
-47 bytes em geral, graças a @ SriotchilismO'Zaic
Experimente online!
fonte
;
s em vez de novas linhas para evitar o recuo. Também não há necessidade de espaços entreprint
e''
a
uma string em vez de uma lista, não precisará mais dissojoin
e poderá apenasprint a
.x
.J , 12 bytes
Experimente online!
Ainda 1 byte mais longo que o de Adám
K (oK) ,
1211 bytes-1 byte graças a ngn
Experimente online!
fonte
{x,1_|x}@,\