Sua tarefa é pegar uma sequência de caracteres de entrada de caracteres ascii e produzir a sequência como uma série de palavras verticais separadas por espaços. Um exemplo é mostrado abaixo:
Dada a sequência:
Hello, World! My name is Foo.
a saída deve ser:
H W M n i F
e o y a s o
l r m o
l l e .
o d
, !
10 pontos de bônus serão concedidos se o seu programa manipular corretamente as strings que precisam envolver o terminal, que definiremos com 80 caracteres.
50 pontos se o seu programa também puder fazer o contrário!
code-golf
string
printable-ascii
Foo Barrigno
fonte
fonte
Respostas:
J, 15
Uso:
fonte
Javascript -
228172145126Meu primeiro código de golfe :)
fonte
"Input ?"
não afeta o comportamento do programa, removê-lo também.length
vez de perguntar duas vezes, algumas chaves inúteis, alguns pontos e vírgulas desnecessários.A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)
. (Nos Padrões JavaScript para IO questão meta a opinião principalmente acordado foi que depender de saída implícita de REPL não deve ser considerada correta.)if(A[i][y]){B+=A[i][y];}else{B+=" ";}
=>B+=(x=A[i][y])?x:" "
APL, 22
Explicação
Exemplo
fonte
Ruby,
9187Viva, eu venci o Perl! : D
Rubi, bônus de 150 a 50 = 100
Ele apenas detecta novas linhas e aplica tratamento especial se elas forem detectadas.
Execute como
fonte
Javascript
184149123Com a sequência de exemplo definida:
Você pode copiar a segunda instrução no console do seu navegador.
Desminificado:
Link JsFiddle: http://jsfiddle.net/FzMvK/
Meu primeiro post de código de golfe: P
fonte
float:right
para reverso?Perl - 92
97Faz o trabalho de uma maneira bastante direta.
fonte
while
conforme usado aqui, também é um modificador de instrução.do{}while()
loop?do
em si não tem mais nada, apenas um bloco. Owhile
é uma coisa separada.K, 33
Exemplo de entrada e saída:
fonte
"
deveriam estar lá?{-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}
(37 caracteres), o que produziria a saída sem"
Pitão:
Uma linha de código para processar a picada:
fonte
Python 2.7,
108103Tenho certeza de que isso pode ser mais eficaz, mas aqui está uma solução inicial em python.
Melhorias:
fonte
i=m
e laço para baixo a 0, você pode raspar mais 3 personagens para um mesmo 100.F #, 187
fonte
Ruby, 63
O algoritmo é muito direto; só jogava golfe. O código tem 61 bytes, mais 2 bytes para as
-na
opções necessárias para o trabalho. Deruby -h
:Exemplo de execução:
fonte
Python 2.7 -
137112 bytesAlguém já fez isso melhor, mas é melhor que eu vomite isso. Adiciona espaços a cada palavra na entrada até que ela tenha o mesmo comprimento que a mais longa (para evitar erros de índice para a próxima parte) e, em seguida, imprime ac
letra da cada palavra enquantoc
passa de 0 ao comprimento de cada sequência.Eu vim com uma maneira muito melhor de fazer isso e recortei 25 bytes. Em vez de preencher cadeias de caracteres com espaços para evitar o erro de índice, eu trato o erro diretamente! Sempre que não há nada para impressão, imprimo um único espaço em seu lugar com
try:print w[c],
,except:print' ',
. Lembrei-me também de que não preciso de um espaço entre uma instrução print e uma string literal, que salvou um byte.Observe que o Python 2 permite combinar guias e espaços e os considera níveis separados de indentação. O intérprete Markdown do SE substitui um caractere de tabulação por quatro espaços, mas todas as linhas deste programa, exceto a primeira, têm exatamente um byte de recuo.
A formatação foi bem fácil, pois
print 'something',
imprime'something '
e não'something\n'
. Fiz isso para cada personagem e usei umaprint
declaração vazia para obter a nova linha onde eu precisava.fonte
C,
1111109590 bytesEsta solução usa códigos de controle VT-100 para mover o cursor no terminal
a
^[
sequência é um espaço reservado para o único caractere ASCII ESC, que não pode ser exibido aqui.^[7
salva a posição atual do ponteiro^[8
restaura a posição do cursor na posição salva^[[2C
move 2 passos para a direita^[[B
move-se 1 passo para baixoedit 1: o
^[[D
código VT-100 (1 passo à esquerda) foi substituído por um backspace (mostrado^H
aqui, mas é apenas um caractere ASCII); também esqueceu a instrução "separados por espaços", agora corrigidaeditar 2:
7 caracteres salvos usando um
for
loop em vez dewhile
e em32
vez de' '
:Mais 8 caracteres salvos chamando um a menos
printf
: o?:
operador ternário agora é usado nosprintf
parâmetroseditar 3:
Livre-se da variável local
s
, trabalhando diretamente com oargv
akav
. Isso é totalmente hediondo. Mas salvou 4 caracteres. Também substituído==
por^
e, portanto, comutado os?:
operandos, para economizar mais 1 caractere.Uso
Versão sem golfe (primeira versão)
Versão sem golfe (última versão)
fonte
Eu respondi a essa pergunta há muito tempo. Foi uma das minhas primeiras contribuições ao site, na verdade. Recentemente, me deparei com isso novamente e fiquei meio envergonhada. 112 bytes ?! Inaceitável. Então eu dei outra chance:
Python 3-92 bytes
Nos 109 dias desde que publiquei a primeira resposta, gosto de pensar que percorri um longo caminho. Mesmo algo como usar Python 3 acima de 2,7 1 não teria me ocorrido. Com esse código abaixo de 100 bytes, minha alma pode finalmente descansar e eu posso prosseguir para a vida após a morte.
Explicação
Isso obtém uma linha
stdin
e cria uma lista dividindo-a em caracteres de espaço em branco. O único espaço em branco que provavelmente está na entrada são os espaços, portanto essa linha obtém uma lista de palavras.Vamos pegar a segunda linha de dentro para fora:
map
assume uma função e um iterável como argumentos. Aplica a função a cada elemento do iterável e retorna uma nova iterável dos resultados. Aqui, crio um iterável com os comprimentos de cada palavra de entrada.max
obtém o valor máximo de um iterável. Isso nos dá a palavra mais longa na entrada.Uma compreensão de lista é semelhante a
map
. Faz algo para todos os elementos de uma iterável e retorna uma lista dos resultados. Para cada palavra na entrada, eu façothat_word.ljust(
um código)
.ljust
é a abreviação de "justificar à esquerda". Ele usa um número inteiro como argumento e adiciona espaços à string até que ela seja longa.Este é um truque legal. Nesse contexto,
*
significa "descompacte este iterável como vários argumentos". Dessa forma,zip
pode ser usado para transpor uma matriz (por exemplo,zip(*[(1,2),(3,4)])
->[(1,3),(2,4)]
). A única restrição é que todas as linhas da matriz precisam ter o mesmo comprimento ou elementos de todas as linhas, mas os menores são cortados para corresponder.Nós já sabemos o que
map
faz. A única coisa nova aqui éjoin
, que pega uma iterável de strings e a transforma em uma única string usando o delimitador ao qual está anexado. Por exemplo,'a'.join(['I', 'can', 'play', 'the', 'saxophone'])
2 se tornaIacanaplayatheasaxophone
.Isso
join
pega um monte de strings e os separa por novas linhas. Tudo o que resta éprint
fazerstdout
e pronto!Todos juntos agora:
Encontre o comprimento da palavra mais longa da entrada, acrescente espaços a cada palavra até que tenham o mesmo comprimento, transponha com o truque
zip(*
3 , usejoin
para separar cada caractere em uma linha de espaços,join
novamente para separar cada linha com uma nova linha, e imprima! Nada mal para a única linha sem manipulação de entrada em um programa de 92 bytes.1. Os caracteres extras gastos
print()
entre parênteses são superados pelos 4 caracteres que eu solto deraw_input()
->input()
.2. Na verdade, não consigo tocar saxofone.
3
)
. Seja bem-vindo.fonte
print("\n".join(...))
para*map(print,...),
. Experimente online!05AB1E , pontuação
8-20-21 (3029 bytes - bônus 50):Experimente on-line (entrada comum de linha única).
Experimente on-line (entrada reversa de várias linhas).
Explicação:
Resposta original de 8 bytes:
Experimente online.
Explicação:
fonte
Mathematica 49
Claramente, o Mathematica não é o melhor para este:
fonte
Javascript, 141
Amostra
fonte
GolfScript [41 bytes]
Como funciona:
Você pode ver a demonstração online aqui .
PS: Este é o meu primeiro código GolfScript de todos os tempos, então não me julgue estritamente;)
fonte
R, 116
fonte
Bash + coreutils, 54
Resultado:
fonte
$()
Agora, o uso da construção é o método comum para substituição de comandos.APL: 18
Explicação:
a ← '', coloque um espaço na frente da string e atribua a um
'' = encontrar espaços, produz um valor booleano
1 ↓ ¨a⊂⍨ cria substrings começando onde o booleano tem 1's e solta o primeiro elemento de cada um (assim o espaço)
Make ↑ Faça a matriz com as substrings resultantes e inverta-a ao longo da diagonal
fonte
R , 81 bytes
Salve um byte armazenando uma nova linha como
e
, que pode ser usada nas duasscan
chamadas, na chamada de comparação ecat
.Experimente online!
fonte
K (oK) , 26 bytes
Solução:
Experimente online!
Explicação:
fonte
Python 2.7 -
119106Pegue 1 - 166. A reversão das listas era necessária para fazer o pop funcionar na ordem que eu queria, mas isso parecia um desperdício. E quando tentei combinar em uma única compreensão por diversão, o pop estragou tudo.
Pegue 2 - 119. Então mudei para uma indexação de lista simples. Ainda parece desajeitado, especialmente o preenchimento de espaços e novas linhas.
Tome 3 - graças a @grc
fonte
[len(l)for l in w]
pode ser reduzido paramap(len,w)
,.split(' ')
para.split()
e.join([...])
para.join(...)
.v.pop(0)
para exibir o primeiro elemento em vez do último?Python 3, 124
fonte
Haskell, 112
Golfe:
Explicado:
Exemplo:
fonte
JavaScript, 139 (156 com saída console.log)
Eu acho que isso é o mais golfe possível. Acabei de dividir, encontrar a maior palavra e transpor de acordo, adicionando espaços se o caractere não existir nas palavras mais curtas. Mais do que a resposta JavaScript enviada anteriormente, mas essa resposta parece não funcionar?
fonte
Japonês
-R
, 5 bytesTente
Explicação
fonte
Pitão, 8 bytes
Experimente online!
Bem direto. Pega a entrada entre aspas, ou seja,
"Hello World"
fonte
C
trunca para o comprimento da entrada mais curta, portanto, isso não funciona . Aqui está uma solução rápida, que também é de 8 bytes.APL (NARS), 79 caracteres, 158 bytes
teste:
A função antiga possui saída não perfeita:
fonte