As linguagens de programação bidimensionais geralmente têm comandos de espelho como /
e \
para redirecionar o ponteiro de instruções na grade:
>>>>\
v
v
<<<</
Neste desafio, você recebe uma direção de entrada e um espelho e precisa determinar a direção de saída.
Regras
A direção de entrada será dada como um dos caracteres NESW
e o espelho será dado como /
ou \
. Você pode recebê-los em qualquer ordem. Você deve usar letras maiúsculas.
Você pode inserir dados em qualquer formato conveniente, incluindo uma sequência de dois caracteres, uma sequência usando algum separador entre os caracteres, um par de caracteres em uma lista ou até mesmo um par de sequências singleton. Se você usar uma seqüência de caracteres com separador, o separador não poderá usar nenhum dos caracteres NWSE\/
.
A saída deve ser um caractere NESW
ou uma cadeia de caracteres únicos.
Você pode escrever um programa ou uma função e usar qualquer um dos nossos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Casos de teste
Existem apenas 8 entradas possíveis que você precisa manipular, portanto, não há desculpa para não testar seu código em todas elas:
N / --> W
N \ --> E
E / --> S
E \ --> N
S / --> E
S \ --> W
W / --> N
W \ --> S
fonte
\
. Se sua resposta for um envio de função que usa uma string, é claro que você precisará\\
no código-fonte para chamá-lo corretamente, mas se estiver lendo sua entrada da entrada padrão, por exemplo, deve ser uma única\
. Em outras palavras, se você chamar a respectiva função de comprimento de seqüência de caracteres do idioma na entrada, o resultado sempre será o mesmo, independentemente de a entrada conter/
ou\
.readline()
posso lidar com isso.Respostas:
Python,
4038 bytes-2 bytes graças a @MitchSchwartz
(ord(d)+ord(m))%8
->ord(d)+ord(m)&7
pesquisa simples de resposta em uma lista (string AKA) indexada pelo menor mod da soma dos ordinais que funciona.
Os casos de teste são em ideone
fonte
%8
os e fazendo um índice. Então vejo que você postou a mesma solução há mais de uma hora. Hah. Tenha um +1.Python 2, 40 bytes
O Sp3000 salvou um byte (
.index
→.find
).Explicação
Queremos mapear as direções da seguinte forma:
Podemos atribuir as direções códigos de 2 bits e visualizar os dois movimentos como XOR no primeiro e no segundo bits:
O mapeamento entre cadeias de bits e direções acontece usando a cadeia
k
. Agora só precisamos mapear caracteres de espelho'/'
e'\\'
os valores1
e2
. Desde então'/' < '\\'
, poderíamos ingenuamente usar(m>'/')+1
como uma fórmula. Mas espere! Lexicograficamente,e nós
'NWES'
atribuímos muito bem ak
! Então, podemos usar em seu(m>k)+1
lugar.fonte
CJam, 14 bytes
(@MartinEnder portou minha resposta em Python )
Quão?
Os testes estão no aditsu
fonte
Javascript (ES6),
50414037 bytesEconomizou mais 3 bytes usando a comparação, graças à resposta de Lynn
Uso
fonte
MATL ,
1917 bytesExperimente online! Ou verifique os oito casos .
Explicação
fonte
Pitão,
171615 bytesGraças a @Jakube e @Maltysen por -1 byte cada
Um programa que recebe entrada de duas seqüências de caracteres entre aspas separadas por nova linha, primeiro a direção e depois o espelho e imprime o resultado.
Esta é uma porta da resposta Python do @ Lynn .
Experimente online
Como funciona
fonte
<QE
por>E
.05AB1E , 14 bytes
Experimente online!
fonte
Geléia ,
14 1312 bytes(uma porta da minha resposta Python )
-1 byte graças a @MartinEnder (adicione um espaço no final da string e remova a necessidade do módulo 8)
-1 byte graças a @LuisMendo (use um argumento de string única em vez de dois)
Quão?
Teste no TryItOnline
fonte
Java 7,
717068 bytesPena que
charAt
eindexOf
ocupa tantos bytes ..Casos não testados e todos os testes:
Experimente aqui.
Saída:
fonte
Python,
636159 bytesBem simples. Definitivamente pode ser jogado mais. Decide se deve adicionar 1 ou -1 ao índice da entrada em
'NESW'
.Esta é uma expressão lambda; para usá-lo, prefixe-o com
f=
.Ideone it!
fonte
Java 8,
625856 bytesPrograma de teste ungolfed
fonte
PowerShell v2 +, 34 bytes
Recebe a entrada como dois
char
s explícitos , produz achar
.Isso funciona da seguinte maneira: se classificarmos a saída, queremos,
S
/
de alguma forma, igual aN
\
,W
/
igual aE
\
etc. etc. Ou, pelo menos, produzir números que sejam "próximos o suficiente" e ainda assim distintos. Se olharmos para os valores ASCII, obtemos uma tabela como a abaixo:A execução rápida de um forçador bruto na coluna de somas (derivada da soma dos pontos de código ASCII das entradas) mostra que, se usarmos o módulo de somas
8
, obtemos o seguinte2 2 | 6 1 | 3 4 | 5 7
. Isso é evidenciado na string"xNESSWNW"
, comoE
está no índice2
,N
está em6
e1
, e assim por diante.Então, só precisamos somar as entradas (convertendo implicitamente de
char
aoint32
longo do caminho), pegar isso%8
e usá-lo para indexar em nossa string.Casos de teste
fonte
Lote, 111 bytes
Aceita, por exemplo,
W/
como um parâmetro de linha de comando de cadeia de dois caracteres. O\
e/
torna o loop estranho; levaria 124 bytes.fonte
\r
isso?Oitava, 30 bytes
Usou a mesma ordem de argumentos que Jonathan Allan.
Toma a entrada como uma sequência de dois caracteres
'W\'
.Experimente online .
fonte
'NESSWNW 'is)
(veja todos os casos de teste ).i
éinput
,s
ésum
e)
está indexando, que é modular. I adicionado um espaço na cadeia de modo a que o módulo é de 8C,
44,35,34 bytesRequer dois caracteres como duas variáveis. É preciso tanto maiúsculas e minúsculas. Ele usa muita manipulação de bits. O fragmento
a&a/2
resulta em um valor que possui valores exclusivos para os dois bits inferiores,&3
corta todos os bits superiores. Isso é usado como um índice para a sequência "NWES" do\
espelho. Felizmente, os dois bits inferiores dos caracteres ASCII\
e/
são 00 e 11 respectivamente, o que é perfeito para o XOR com o índice mencionado acima para obter a direção correta para o/
espelho.fonte
return"NWES"[...]
(omita o espaço).CJam , 17 bytes
A entrada é separada por espaço.
Experimente online!(Como um conjunto de testes separado por avanço de linha.)
Essa é a solução que encontrei antes de postar o desafio. Não é tão curto quanto a indexação cíclica de Jonathan, mas achei que essa abordagem é bastante interessante (e inovadora).
Explicação
O objetivo é usar a transliteração (isto é, usando um mapeamento de caractere a caractere) para substituir o caractere de entrada pelo caractere de saída. Para fazer isso, precisamos selecionar o mapa correto com base em se o espelho é
/
ou\
. Mapearemos daSWEN
lista para outra que selecionaremos condicionalmente. Se a lista de entrada forSWEN
, os dois mapas de saída precisam ser os seguintes:Observe que eles estão na ordem classificada e na ordem inversa (e é por isso que escolhemos a
SWEN
ordem aparentemente aleatória como o conjunto de entrada). Poderíamos gerá-los classificando a lista de entradas e revertendo o resultado, se a entrada tiver\
, mas existe uma maneira melhor:fonte
SED
48(42 + 1 para -r) 43Guardado 5 graças a Martin Ender ♦
Recebe a entrada como uma sequência de dois caracteres.
fonte
Mathematica, 98 bytes
Função anônima. Pega duas seqüências como entrada e retorna uma sequência como saída.
fonte
C, 81 bytes
Uso
Saída:
fonte
Pitão, 13 bytes
Suíte de teste
Soma os pontos de código, índice modular, sequência compactada.
fonte
TI-Basic, 40 bytes
Codifica as entradas. Chato, mas o caminho mais curto.
fonte