Torcendo palavras!
Dada uma string e um número inteiro positivo. Você deve torcer a corda, para frente e para trás.
Exemplo de entrada / saída
Entrada
Programming Puzzles & Code Golf
4
Saída
Prog
mmar
ing
zzuP
les
oC &
de G
flo
Entrada
A entrada pode ser recebida através de STDIN, ou argumento de função. A entrada consistirá em uma sequência e um número inteiro positivo, n . O número inteiro determinará o comprimento de cada linha torcida.
A corda é torcida para frente e para trás. Uma entrada de HELLO, WORLD!
e 5 seria semelhante a:
Saída
A saída será o texto distorcido. Pode não haver espaço em branco à direita. Se o comprimento da sequência de entrada não for divisível, seja o comprimento da linha, adicione um espaço até que a linha seja preenchida:
Um exemplo disso:
Entrada
Hello, World!
5
Saída (observe o espaço em branco no final)
Hello
roW ,
ld!
Respostas:
Pitão,
1915Prepara previamente a corda e depois inverte a outra linha conforme a imprime. O preenchimento é igual ao tamanho da caixa, mas a última linha após cortar a entrada é descartada.
Experimente aqui
fonte
CJam, 19 bytes
Exemplo de entrada:
Explicações
fonte
Boneco de neve 1.0.1 , 91 bytes
Ou tudo em uma linha (para estética, ou mais especificamente, antiestética), ao custo de 2 bytes:
Isso é muito curto, para Snowman. (É provavelmente o menor tempo possível; trabalhei no golfe por um longo tempo.)
Isso tem uma ressalva: ele sairá com um erro (mas ainda produzirá a saída correta) 50% do tempo, quando a última linha não for revertida. (Isso ocorre porque eu uso
ag
para agrupar os elementos da matriz em grupos de dois para que eu possa reverter todos os outros, mas não verifico se o último elemento tem os dois elementos esperados, portanto, ele tentará acessar um elemento inexistente se existe um número ímpar de linhas.)Ungolfed / explicação:
fonte
Python 2, 60
Pega
n
caracteres de cada vez a partir des
, imprime-os com uma direçãod
que alterna entre1
e-1
. Para espaçamento na última linha,s
é preenchido comn
espaços no final antes de ser cortado, o que só afeta quando há menos den
caracteres restantes.Uma solução recursiva salvaria um caractere (59), exceto que ele deixa uma nova linha à direita, o que não é permitido.
fonte
Haskell ,
8375 byteschunksOf
Implementação simples com take and drop, aplicando um número par ou ímpar de reversões à saída à medida que avançamos.Obrigado ao @BMO por cinco bytes e ao ØrjanJohansen por três bytes!
Experimente online!
fonte
cycle
economiza 5 bytes, experimente online!g
e trocandon
el
: Experimente online!Preso ,
42414038 BytesIsso é um pouquinho longo demais, provavelmente tentará jogar mais!
A entrada deve ser como
"string"|n
.Explicação:
fonte
Haskell, 108 bytes
Isso é meio tempo, caramba. Aqui está em ação:
fonte
let
expressão?let
declaração dois em um separada por ponto e vírgula - normalmente você usaria novas linhas e recuo, mas Haskell também permite que você escrevalet a=b; c=d in expr
.(%) :: String -> String -> String
vez deIO ()
.Python 2, 109 bytes
Teve que adicionar preenchimento com espaços para a última linha estar correta.
Experimente aqui
fonte
Lua,
918888848382 bytesVersão antiga:
Nova versão:
fonte
O, 60 bytes
Meu primeiro programa de O, e muito longo!
Demonstração ao vivo.
fonte
Perl, 87 bytes
Versão antiga (imprime uma nova linha à direita):
String é passada como um argumento de função sem nova linha à direita. Ligue assim:
fonte
Caxumba, 86 bytes
Embora possa ser 2 bytes mais curto se você remover o primeiro ',!' caracteres na instrução R (leia de STDIN); isso adiciona um retorno de carro entre a entrada e a saída. Se isso não existisse, a saída seria tecnicamente correta, mas a primeira linha apareceria anexada à sequência de entrada. [[O terminal Mumps padrão que eu uso não tem eco local. ]] Como está, aqui está o teste:
Observe também que, na verdade, há um retorno de carro / tecla Enter entre o '123' e o '6' no final da entrada. [[O eco local novamente. ]]
Se alguém estiver interessado, posso descrever o que está acontecendo com o código; mas percebo que não há muitos entusiastas de caxumba por aí ... :-)
fonte
PowerShell, 102 bytes
Chamado da seguinte forma (se salvo no arquivo
CodeGolf55051.ps1
)Tentativas anteriores
(mais longo ou inválido)
PowerShell, 110 bytes
PowerShell, 111 bytes
Explicação
PowerShell, 180 bytes
PowerShell, 196 bytes
Explicação
(
{...}
nos comentários acima é realmente{0}|{1}|{2}
; eu coloquei{...}
para melhorar a legibilidade.Powershell, 120 bytes (inválido)
fonte
param($s,$i)$s+' '*($i-$s.Length%$i)-replace'(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n"-split"`n"|?{$_-ne""}
que irá levá-lo para baixo para 108.[$r]
índice final com[-not$r]
... caso contrário, a primeira linha lê o oposto (ou seja, da direita para a esquerda) do que nos exemplos fornecidos. Caso contrário, execução realmente lisa!n
é positivo e garantimos que o comprimento da string não é negativo (por definição), isso significa que(($i-$l%$i)%i)
é equivalente a($i-$l%$i)
salvar quatro caracteres.(-$l)%$i
. Não sei de onde isso veio. Interessante, no entanto, que não é equivalente, embora deva ser. Aparentemente, é uma peculiaridade de como o PowerShell (entre outros idiomas) implementa a função modulo, que é diferente do que eu (sendo um especialista em matemática) ou o Wolfram-Alpha esperado. Aparentemente, você precisará ficar com a versão mais longa. Prova de referência ->((y-x%y)%y) ==> ((y%y)-(x%y%y))%y ==> ((0)-(x%y))%y ==> (-x%y)%y ==> (-x)%y
Clojure, 83 bytes,
87 bytes,79 bytesvárias correções após os comentários abaixo, obrigado Ørjan .
Experimente online!
Clojure parece muitas vezes tristemente ausente das respostas do código de golfe. Certamente não pode competir em comprimento de bytes com idiomas de golfe, mas acho que a ausência total é um tanto injustificada.
Explicação:
s
-a em uma sequência de listas de caracteres em que as listas têm comprimenton
. O último pedaço será preenchido com espaços no comprimenton
usando a "coleção de blocos" retornada da(repeat " ")
qual retorna uma sequência infinita de espaços lenta#(..)
)#(or %)
que funciona como a função de identidade e a inversa (ou seja[#(or %) reverse #(or %) reverse ...]
), retornada pelo ciclo .#(apply ...)
:identity
oureverse
alternadamente em um pedaço. Isso é feito através da(% %2)
expressão que chama a função enviada como o primeiro argumento para a função anônima [ieidentity
oureverse
] usando o segundo argumento [ie o pedaço] para a função anônima como argumento para a chamada.(apply str ...)
para converter a lista de caracteres em uma sequênciaUm truque que usamos aqui é que muitas funções de clojure
map
usam um número arbitrário de coleções como args, ou seja,(map f coll1 coll2 coll3 ...)
onde a função f só precisa aceitar tantos argumentos quanto coleções. Nesse caso, enviamos duas coleções, uma coleção de referências de função alternadas e a string fragmentada.fonte
ld!
.fn
oudefn
é bom.) Por outro lado, sua função pode retornar apenas o resultado, em vez de imprimi-lo.APL (Dyalog Unicode) , 19 bytes
Experimente online!
Tomou o
⊢∘⌽\
truque da brilhante resposta da ngn ao desafio dos boferedados .Depois de perceber que meu envio quebra para linhas com novas linhas principais, adicionei mais dois bytes. Abaixo está o envio mais antigo.
APL (Dyalog Unicode) , 17 bytes
Experimente online!
fonte
Python 3,
110108107103 bytes(olhando para outras respostas), com
rjust
:95939290 bytesfonte
PHP, 135 bytes
Leva dois argumentos de linha de comando, como mostrado em
$argv
.fonte
CoffeeScript, 131 bytes
Isso parece muito longo.
fonte
Julia, 104 bytes
Ungolfed:
fonte
Python 3, 101 bytes
Experimente aqui
fonte
q, 46
.
fonte
{-1@[l;(&)(til(#)l:y cut x)mod 2;'[neg[y]$;|:]];}
(49 bytes). Obrigado pela inspiração! :)Q,
6456 bytes{}
é uma função que deve ser chamada como{}[x;y]
.x
será a string.y
será o comprimento das linhas resultantes.Teste:
editar : Utilizou funções mais curtas, inspiradas na outra resposta q de @tmartin
fonte
Python 2,
8275 bytesNão pude comentar no @willem, mas reduzi o código dele.
Experimente aquiExperimente aquifonte
Perl, 72 bytes
70 bytes, mais 2 bytes para
-p0
.Demo:
Observe que a entrada lida no STDIN não pode terminar com uma nova linha (isso custaria 2 bytes extras).
Explicação:
fonte
JavaScript ES6, 123 bytes
Call with
t(input_string, twist_length)
, que retorna a string de saída.fonte
Perl 5 , 51 bytes
Experimente online!
fonte
Ruby, 80
Demonstração on-line: http://ideone.com/w6o8PI
fonte
Coffeescript, 151 bytes
Demais = (
fonte
Bash,
8374Isso alterna entre
cat
erev
para substrings do primeiro argumento com um comprimento do segundo argumento.Variáveis especiais usadas incluem
${#1}
(o comprimento da corda$1
)((i/$2%2))
(uma expressão aritmética dividindo incrementor$i
por$2
e, em seguida, tendo o seu módulo para determinar estranho vs mesmo, que ditada ou não ao usorev
)${1:i:$2}
(substring de$1
iniciar na posição$i
com um comprimento de$2
).fonte
bash
resposta, que acabei de ver agora. Temos efetivamente a mesma lógica. ... na verdade, a resposta de viktorahlström me deixou cortar outros 9 caracteres.JavaScript ES6, 113 bytes
Apenas meu próprio crack na minha própria pergunta. Ele adicionará espaços para que seja divisível
n
, dessa forma é simplesmente dividir e reverter.fonte