Tarefa: Dada uma entrada que consiste exatamente de um dos caracteres <>^v
, produza uma segunda entrada que consiste nos caracteres ASCII imprimíveis (do espaço ao til), orientados com a seta.
Vamos supor que a segunda entrada para o programa seja ABC
. Isto é o que deve fazer:
- Entrada
>
: impressãoABC
. - Entrada
<
: impressãoCBA
. - Entrada
^
: impressãoC\nB\nA
ou a entrada girou -90 °. - Entrada
v
: imprimaA\nB\nC
ou a entrada girou 90 °.
Casos de teste
input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t
s
i
s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>
Este é um código de golfe , portanto o programa mais curto em bytes vence.
>ABC
>
orientação.Respostas:
MATL ,
106 bytes4 bytes salvos graças ao Martin!
Experimente online!
Versão antiga, sem operações de módulo: 10 bytes
Experimente online!
fonte
mod 11
truque (você terá que girar o contrário) .Python 3,
645148 bytesEconomizou 6 bytes graças ao xnor.
Economizou 7 bytes graças a Lynn.
Economizou 3 bytes graças ao DSM e Morgan de tão python.
A função aceita um dos caracteres de
<>^v
como o primeiro argumento e a string que precisa ser girada como o segundo argumento.Aqui está uma versão mais legível:
fonte
s[1|-(c in'<^')]
esep='\n'*(c in'^v')
lambda
se usassejoin
com o seu sep em vez de imprimir.Haskell, 57 bytes
Exemplo de uso:
f "v" "ABC"
->"A\nB\nC"
.Direction
>
é a função de idendidade,<
inverte seu argumento,v
acrescenta uma nova linha a cada caractere na string e descarta o último e^
év
seguido por<
.fonte
Japonês, 9 bytes
Inspirado na resposta de @ DonMuesli, embora eu tenha acabado de notar que o CJam usa exatamente a mesma técnica. Teste online!
Como funciona
fonte
Error: Japt.stdout must be sent to an HTMLElement
etc.CJam, 13 bytes
Entrada é o caractere de orientação seguido diretamente pela sequência a ser girada.
Teste aqui.
Explicação
Yay para módulo de magia. Tomando os quatro caracteres, o módulo 11 os mapeia para:
Estes são todos modulo distinta 4 e mais importante é que eles são nitidamente crescente:
3, 0, 1, 2
. Isso significa que podemos apenas usar o resultado demod 11
para determinar com que freqüência girar (sem precisar de um explícitomod 4
, pois quatro rotações são opcionais). Normalmente, teríamos que compensar esses números por 1, de modo que>
realmente produza8
e se torna um no-op, mas a maneira como estou girando-os, na verdade, inverte a string no primeiro aplicativo, para que sempre tenhamos uma rotação gratuitamente.fonte
Pyth,
1715Experimente aqui ou execute o Test Suite
2 bytes salvos graças ao Jakube!
Como alternativa, usando truques de mod:
Experimente aqui .
fonte
Julia, 51 bytes
Esta é uma função que aceita
Char
uma string e retorna uma string.Seja
d
o caractere que indica a direção es
seja a string. Sed
for deixado para cima ou para cima, usamos o inverso des
, caso contrário, usamoss
como fornecido. Construímos um separador como a string vazia, sed
for esquerda ou direita, ou uma nova linha, sed
estiver acima ou abaixo. Passe a string e o separador parajoin
, que inserirá o separador entre cada caractere da string e retornará uma string.Verifique todos os casos de teste online
fonte
Utilitários Bash + GNU, 67
fonte
-q
's, mas você precisa #JavaScript (ES6),
766765 bytesPorto da resposta de @Alex A. na Julia. Editar: salvou 9 bytes graças a @ETHproductions. Salvou dois bytes separadamente graças a @ edc65.
fonte
/[v^]/.test(a)
=>'Z'<a
?:
versão chata era 1 byte menor.(/v|>/.test(a)?[...b]:[...b].reverse())...
deve ser 65Perl,
5451 + 1 = 52 bytesRequer a
-n
bandeira e o livre-M5.010
|-E
. Aceita as seguintes entradasdirection\nline
:Eu gosto disso
$/x/[v^]/
parece uma substituição.Como funciona:
fonte
PowerShell, 84 bytes
Isso será uma bobagem completa para pessoas não familiarizadas com o PowerShell. Vamos passar por isso.
Recebe entrada
param([char]$a,$b)
, com um elenco explícito para caractere$a
. O restante do programa é uma declaração. Começaremos com o primeiro semestre, até o-join
.Estamos criando uma nova matriz dinâmica
(...,...)
e fazendo a indexação nela$a%7-eq6
. Os valores ASCII parav
e>
são116
e62
, respectivamente, e116%7 = 62%7 = 6
, e essas são as duas direções que "aumentam" para baixo e para a direita. Então, se isso-eq
é$true
, vamos dar o segundo valor, o que é$b[0..$c]
, ou uma matriz de caracteres de$b
até o final . Nós obtemos o valor$c
do primeiro valor,$b[($c=$b.length)..0]
que é selecionado se o caractere de entrada é^
ou<
( ou seja, ele passa a string para trás). Importante notar que, mesmo que o segundo valor seja selecionado, o$c
valor ainda será calculado e armazenado, para que possamos reutilizá-lo como um atalho como esse.Então, agora temos uma variedade de caracteres indo para frente ou para trás. Em seguida,
-join
esses caracteres são combinados com o resultado de outro índice de matriz dinâmica. Desta vez, selecionamos com base se o valor ASCII para$a
está abaixo90
(realmente muitos valores funcionariam, selecionei este apenas porque). Como>
e<
ambos têm um valor abaixo90
, o-lt
é$false
, então selecionamos a string vazia""
e, portanto, o array de caracteres é simplesmente concatenado. Caso contrário, selecionamos o caractere de nova linha"`n"
para associar o conjunto de caracteres a novas linhas.Essa sequência resultante é deixada no pipeline e a saída é implícita.
Exemplo
fonte
C,
123119117114 bytesGolfe:
Programa de teste, com explicações e código não-destruído:
Dicas bem-vindas!
fonte
Retina , 60 bytes
Precisa de golfe ...
A entrada é toda como uma sequência, por exemplo
^ABC
.^
ou<
, inverta a sequência<
ou>
, remova as novas linhasExperimente online.
fonte
Dyalog APL , 15 bytes
⍪
transformar string em tabela de 1 coluna⍣(
…)
repetir ( n ) vezes⍞
obter⎕UCS
conversão de entrada de string em ponto de código UCS11|
resto de divisão de quando dividido por 11⌽∘⍉
gire -90 ° (transposição invertida)Método alternativo (mesmo comprimento):
⎕
obter entrada avaliada (para que seja necessário inserir, por exemplo, '^' ou o nome de um programa / variável que retorna o caractere desejado), o'<^>v'⍳
índice na stringfonte
Jolf, 22 bytes
Experimente aqui! Você deve substituir
ƒ
por\x9f
. Toma a picada, depois o caractere direcional.fonte
JavaScript ES6,
918384 bytesConstrói as seqüências necessárias e obtém o índice em que se
a
encontra.indexOf
É usado porque^
é um token regex. Obrigado a ETHproductions pela correção de bugs e bytes raspados!fonte
f("v","abc")
retornac\nb\na
para mim.(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
c
é literalmented
.JavaScript (ES6) 71
Teste
fonte
Perl 5, 67 bytes
66 mais um para
-p
A entrada é uma única sequência cujo primeiro caractere define a orientação.
fonte
DUP , 48 bytes
Try it here.
Lambda anônima que aceita entrada de argumento e STDIN. Uso:
Explicação
fonte
Sério, 41 bytes
Leva a string como a primeira entrada e a direção (
><v^
) como a segunda entrada.Experimente online!
fonte
D, 198 bytes
: c
Menos golfe:
fonte