Tarea: Dada una entrada que consiste exactamente en uno de los caracteres <>^v
, genera una segunda entrada que consiste en los caracteres ASCII imprimibles (desde el espacio hasta la tilde), orientados con la flecha.
Supongamos que la segunda entrada al programa es ABC
. Esto es lo que debe hacer:
- Entrada
>
: imprimirABC
. - Entrada
<
: imprimirCBA
. - Entrada
^
: imprimirC\nB\nA
, o la entrada giró -90 °. - Entrada
v
: imprimirA\nB\nC
, o la entrada giró 90 °.
Casos de prueba
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 es un código de golf , por lo que gana el programa más corto en bytes.
>ABC
>
orientación.Respuestas:
MATL ,
106 bytes¡4 bytes guardados gracias a Martin!
Pruébalo en línea!
Versión anterior, sin operaciones de módulo: 10 bytes
Pruébalo en línea!
fuente
mod 11
truco (aunque tendrás que girar al revés) .Python 3,
645148 bytesGuardado 6 bytes gracias a xnor.
Guardado 7 bytes gracias a Lynn.
Guardado 3 bytes gracias a DSM y Morgan de manera pitón.
La función acepta uno de los caracteres
<>^v
como primer argumento y la cadena que debe rotarse como segundo argumento.Aquí hay una versión más legible:
fuente
s[1|-(c in'<^')]
ysep='\n'*(c in'^v')
lambda
si lo usarajoin
con su sep en lugar de imprimir.Haskell, 57 bytes
Ejemplo de uso:
f "v" "ABC"
->"A\nB\nC"
.La dirección
>
es la función de identidad,<
invierte su argumento,v
agrega una nueva línea a cada carácter en la cadena y suelta el último y^
esv
seguido por<
.fuente
Japt, 9 bytes
Inspirado por la respuesta de @ DonMuesli, aunque acabo de notar que el CJam usa exactamente la misma técnica. ¡Pruébelo en línea!
Cómo funciona
fuente
Error: Japt.stdout must be sent to an HTMLElement
etc.CJam, 13 bytes
La entrada es el carácter de orientación seguido directamente por la cadena a rotar.
Pruébalo aquí.
Explicación
Yay para módulo de magia. Tomando los cuatro caracteres, el módulo 11 los asigna a:
Estos son todos distintos módulo 4 y más importante es que están aumentando claramente:
3, 0, 1, 2
. Eso significa que podemos usar el resultado demod 11
para determinar con qué frecuencia rotar (sin necesidad de un explícitomod 4
, ya que cuatro rotaciones son un no-op de todos modos). Normalmente tendríamos que compensar estos números por 1, de modo que>
realmente rinda8
y se convierta en un no-op, pero la forma en que los estoy rotando, en realidad invierte la cadena en la primera aplicación de modo que siempre obtengamos una rotación gratis.fuente
Pyth
1715Pruébelo aquí o ejecute Test Suite
¡2 bytes guardados gracias a Jakube!
Alternativamente usando trucos mod:
Probar aquí .
fuente
Julia, 51 bytes
Esta es una función que acepta una
Char
y una cadena y devuelve una cadena.Deje
d
ser el personaje que denota la dirección ys
sea la cadena. Sid
se deja hacia arriba o hacia arriba, usamos el reverso des
, de lo contrario, usamoss
como se indica. Construimos un separador como la cadena vacía sid
es izquierda o derecha, o una nueva línea sid
es arriba o abajo. Pasan la cadena y el separador ajoin
, que insertará el separador entre cada carácter de la cadena y devolverá una cadena.Verifique todos los casos de prueba en línea
fuente
Bash + GNU Utilities, 67
fuente
-q
's, pero síJavaScript (ES6),
766765 bytesPuerto de la respuesta de @Alex A. Julia. Editar: Guardado 9 bytes gracias a @ETHproductions. Guardado dos bytes por separado gracias a @ edc65.
fuente
/[v^]/.test(a)
=>'Z'<a
?:
versión aburrida era 1 byte más corta.(/v|>/.test(a)?[...b]:[...b].reverse())...
debería ser 65Perl,
5451 + 1 = 52 bytesRequiere la
-n
bandera y la libre-M5.010
|-E
. Toma datos como los siguientesdirection\nline
:Me gusta que
$/x/[v^]/
parece una sustitución.Cómo funciona:
fuente
PowerShell, 84 bytes
Esto será un completo galimatías para las personas que no están familiarizadas con PowerShell. Vamos a atravesarlo.
Toma entrada
param([char]$a,$b)
, con un elenco explícito para el personaje$a
. El resto del programa es una declaración. Comenzaremos con la primera mitad, hasta la-join
.Estamos creando una nueva matriz dinámica
(...,...)
e indexándola con ella$a%7-eq6
. Los valores ASCII parav
y>
son116
y62
, respectivamente, y116%7 = 62%7 = 6
, y esas son las dos direcciones que "aumentan" hacia abajo y hacia la derecha. Entonces, si-eq
es así$true
, tomaremos el segundo valor, que es$b[0..$c]
, o una matriz de los caracteres$b
hasta el final . Obtenemos el valor$c
del primer valor,$b[($c=$b.length)..0]
que se selecciona si el carácter de entrada es^
o<
(es decir, pasa por la cadena hacia atrás). Es importante tener en cuenta que incluso si se selecciona el segundo valor, el$c
valor aún se calcula y almacena, por lo que podemos reutilizarlo como un acceso directo como este.Entonces, ahora tenemos una variedad de personajes que van hacia adelante o hacia atrás. Luego,
-join
esos caracteres junto con el resultado de otro índice de matriz dinámica. Esta vez estamos seleccionando en función de si el valor ASCII para$a
está por debajo90
(realmente funcionarían muchos valores, seleccioné este solo porque). Dado que>
y<
ambos tienen un valor a continuación90
, el-lt
es$false
, por lo que seleccionamos la cadena vacía""
y, por lo tanto, la matriz de caracteres simplemente se concatena. De lo contrario, seleccionamos el carácter de nueva línea"`n"
para unir el conjunto de caracteres junto con las nuevas líneas.Esta cadena resultante se deja en la tubería y la salida es implícita.
Ejemplo
fuente
C,
123119117114 bytesGolfizado:
Programa de prueba, con explicaciones y código un tanto descuidado
Consejos bienvenidos!
fuente
Retina , 60 bytes
Necesita golf ...
La entrada es todo como una cadena, por ejemplo
^ABC
.^
o<
, invierta la cadena<
o>
, elimine las nuevas líneasPruébalo en línea.
fuente
Dyalog APL , 15 bytes
⍪
convierta la cadena en una tabla de 1 columna⍣(
...)
repita ( n ) veces⍞
obtenga la entrada de la cadena,⎕UCS
convierta a la11|
división del punto de código UCS, descanse cuando se divida entre 11⌽∘⍉
gire -90 ° (flip-transpose)Método alternativo (misma longitud):
⎕
obtener una entrada evaluada (por lo que se debe ingresar, por ejemplo, '^' o el nombre de un programa / variable que devuelve el carácter deseado)'<^>v'⍳
índice en la cadenafuente
Jolf, 22 bytes
Pruébalo aquí! Deberías reemplazar
ƒ
con\x9f
. Toma el aguijón, luego el carácter direccional.fuente
JavaScript ES6,
918384 bytesConstruye las cadenas necesarias y obtiene el índice en el que se
a
encuentra.indexOf
Se utiliza porque^
es un token regex. ¡Gracias a ETHproductions por la corrección de errores y los bytes afeitados!fuente
f("v","abc")
vuelvec\nb\na
por mi(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
c
es literalmented
.JavaScript (ES6) 71
Prueba
fuente
Perl 5, 67 bytes
66 más uno para
-p
La entrada es una sola cadena cuyo primer carácter define la orientación.
fuente
DUP , 48 bytes
Try it here.
Lambda anónima que toma tanto el argumento como la entrada STDIN. Uso:
Explicación
fuente
En serio, 41 bytes
Toma la cadena como la primera entrada y la dirección (
><v^
) como la segunda entrada.Pruébalo en línea!
fuente
D, 198 bytes
:do
Menos golfizado:
fuente