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 11truco (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
<>^vcomo 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')lambdasi lo usarajoincon 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,vagrega una nueva línea a cada carácter en la cadena y suelta el último y^esvseguido 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 HTMLElementetc.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 11para 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 rinda8y 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
Chary una cadena y devuelve una cadena.Deje
dser el personaje que denota la dirección yssea la cadena. Sidse deja hacia arriba o hacia arriba, usamos el reverso des, de lo contrario, usamosscomo se indica. Construimos un separador como la cadena vacía sides izquierda o derecha, o una nueva línea sides 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
-nbandera 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 paravy>son116y62, respectivamente, y116%7 = 62%7 = 6, y esas son las dos direcciones que "aumentan" hacia abajo y hacia la derecha. Entonces, si-eqes así$true, tomaremos el segundo valor, que es$b[0..$c], o una matriz de los caracteres$bhasta el final . Obtenemos el valor$cdel 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$cvalor 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,
-joinesos 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$aestá por debajo90(realmente funcionarían muchos valores, seleccioné este solo porque). Dado que>y<ambos tienen un valor a continuación90, el-ltes$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,⎕UCSconvierta 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
aencuentra.indexOfSe 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\napor mi(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]ces literalmented.JavaScript (ES6) 71
Prueba
fuente
Perl 5, 67 bytes
66 más uno para
-pLa 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