Introducción:
Aunque originalmente tenía una canción holandesa en mi cabeza, donde están las letras: " Doe 'n stapje naar voren, en' n stapje terug " (que se tradujo como " Da un pequeño paso adelante y un poco atrás "), cuando Busqué la letra completa, me di cuenta de que solo iban y venían, y nunca de lado.
Entonces, en cambio, ahora uso la letra de Mr C The Slide Man, también conocido como DJ Casper - Cha-Cha Slide para este desafío.
Si ignoramos todo lo demás y solo miramos las palabras "izquierda", "derecha", "atrás" y "salto" (conté "salto" como adelante), incluidas las cantidades mencionadas, la canción completa tendrá la siguiente lista ( Estoy usando las abreviaturas LRBH aquí):
LBHRLLBHRLBHHRRLLLRLBHHHHRRLLLBHHHHHRLRLRLHRLLBHHLRLBHH
Aquí la letra de la canción completa en un fragmento de código JavaScript ocultable (para ahorrar espacio), donde los movimientos y las cantidades están rodeados de paréntesis bloqueados:
Desafío:
Ahora en el desafío en sí. Tomamos una, dos o tres entradas † . Uno de ellos es una lista de enteros de índice (por lo tanto, no es negativo para 0 indexado o positivo para 1 indexado). (Las otras entradas son opcionales y se explican en las reglas de desafío).
Cada caso de prueba comenzará en una posición {x=0, y=0}
.
Ahora use la lista de letras de movimientos y elimine todos los movimientos en los índices dados de la lista de entrada. Luego 'camine' sobre los movimientos (hasta el índice más grande de la matriz de entrada) y genere la posición en la que terminará.
Los movimientos cambiarán las coordenadas de la siguiente manera:
- R
: x+1
- L
: x-1
- H
: y+1
- B
:y-1
Reglas de desafío:
- Se puede acceder a la lista de movimientos de la forma que desee. †: puede ser una entrada adicional; puede estar en un archivo separado en el disco del que leerá; puede estar en una variable de nivel de clase a la que accede. Tendrá que ser en forma de
L
,R
,B
yH
aunque (puede ser una cadena o un personaje-list / matriz), por lo que no puede guardar la lista como se mueve-1
s y-1
s o enteros. - La lista de movimientos dada anteriormente está codificada y siempre será la misma. (Por eso también está bien ponerlo como un campo de nivel de clase en lugar de tomarlo como entrada si esto ayuda al conteo de bytes de su respuesta).
- La lista de entrada puede ser indexada 0 o indexada 1 (depende de usted)
- Solo 'caminamos' los movimientos hasta y excluyendo el índice más grande de la lista.
- †: También puede tomar este último elemento como entrada entera separada, en lugar del último elemento de la matriz de entrada.
- La salida de las coordenadas x e y en las que terminamos puede estar en cualquier formato razonable (matriz entera que contiene dos elementos, cadena delimitada, impresa en STDOUT en dos líneas separadas, etc.)
- Puede suponer que la lista de entrada se ordena de menor a mayor (o de mayor a menor si eso es lo que prefiere, en cuyo caso el primer elemento es el tamaño inicial de la lista de movimientos, si no se toma como entrada separada). Y tampoco contendrá índices duplicados.
- Si el índice más grande de la lista de entrada es más grande que la lista de movimientos de arriba (55 movimientos están en la lista de movimientos de arriba), volveremos al principio de la lista nuevamente (tantas veces como sea necesario dependiendo del índice más grande) de la entrada).
- Se le permite producir en
y,x
lugar dex,y
, pero especifique esto en su respuesta si lo hace.
Ejemplo:
Entrada: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
Aquí los movimientos e índices (indexados a 0) por encima de otro:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
L, B, H, R, L, L, B, H, R, L, B, H, H, R, R, L, L, L, R, L, B, H, H, H, H, R, R, L, L, L, B, H, H, H, H, H, R, L, R, L, R, L, H, R, L, L, B, H, H, L, R, L, B, H, H, L, B, H, R, L, L, B, H, R, L
Eliminando los índices de la lista de entrada, tendremos los siguientes movimientos-lista restantes:
1, 2, 3, 5, 6, 7, 9,11,12,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40,41,45,46,47,48,49,51,52,54,55,57,58,61,62,63
B, H, R, L, B, H, L, H, H, L, L, L, R, L, B, H, H, H, H, R, R, L, L, B, H, H, H, H, R, L, R, L, R, L, L, B, H, H, L, L, B, H, L, H, R, B, H, R
Ahora, si caminamos desde la posición {0, 0}
sobre los movimientos restantes, tendremos las siguientes coordenadas nuevas después de cada movimiento:
{0,0};B,{0,-1};H,{0,0};R,{1,0};L,{0,0};B,{0,-1};H,{0,0};L,{-1,0};H,{-1,1};H,{-1,2};L,{-2,2};L,{-3,2};L,{-4,2};R,{-3,2};L,{-4,2};B,{-4,1};H,{-4,2};H,{-4,3};H,{-4,3};H,{-4,5};R,{-3,5};R,{-2,5};L,{-3,5};L,{-4,5};B,{-4,4};H,{-4,5};H,{-4,6};H,{-4,7};H,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};L,{-5,8};B,{-5,7};H,{-5,8};H,{-5,9};L,{-6,9};L,{-7,9};B,{-7,8};H,{-7,9};L,{-8,9};H,{-8,10};R,{-7,10};B,{-7,9};H,{-7,10};R,{-6,10}
Entonces el resultado final será: {-6, 10}
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
0-indexed input: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
1-indexed input: [1,5,9,11,14,15,28,35,43,44,45,51,54,57,60,61,65]
Output: {-6, 10}
0-indexed input: [55] (Note: There are 55 moves in the unmodified list)
1-indexed input: [56] (Note: There are 55 moves in the unmodified list)
Output: {-6, 11}
0-indexed input: [0,1,4,5,6,9,10,15,16,17,19,20,27,29,30,37,38,39,41,44,45,46,49,51,52]
1-indexed input: [1,2,5,6,7,10,11,16,17,18,20,21,28,30,31,38,39,40,42,45,46,47,50,52,53]
Output: {10, 16}
0-indexed input: [2,3,7,8,11,12,13,14,18,21,22,23,24,25,26,31,32,33,34,35,36,38,40,42,43,47,48,50,53]
1-indexed input: [3,4,8,9,12,13,14,15,19,22,23,24,25,26,27,32,33,34,35,36,37,39,41,43,44,48,49,51,54]
Output: {-18, -7}
0-indexed input: [0]
1-indexed input: [1]
Output: {0, 0}
0-indexed input: [4,6,7,11,12,13,15,17,20,28,31,36,40,51,59,66,73,74,80,89,92,112,113,114,116,120,122,125,129,134,136,140,145,156,161,162,165,169,171,175,176,178,187,191,200]
1-indexed input: [5,7,8,12,13,14,16,18,21,29,32,37,41,52,60,67,74,75,81,90,93,113,114,115,117,121,123,126,130,135,137,141,146,157,162,163,166,170,172,176,177,179,188,192,201]
Output: {-17, 37}
0-indexed input: [25,50,75,100,125,150,175,200,225,250]
1-indexed input: [26,51,76,101,126,151,176,201,226,251]
Output: {-28, 49}
fuente
Respuestas:
05AB1E ,
1512 bytesGuardado 3 bytes gracias a Erik the Outgolfer
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Æ
. Manera inteligente de contar todos los movimientos y usarÆ
para calcular la diferencia para los paresRL
yBH
.Æ
ha existido para siempre, ¿no? Supongo que sí, ya que no lo sabía. Parece que los comandos que creo que son "nuevos" han existido desde el inicio, pero nunca supe cómo usarlos jajaja. Oh, +1Ruby ,
98 ... 5855 bytesPruébalo en línea!
Explicación:
El truco principal es usar números complejos para representar movimientos: 'B' es -i, 'H' es + i, 'L' es -1 y 'R' es +1. Si convertimos todos los movimientos en números complejos, con una sola suma obtenemos el resultado correcto.
Intenté diferentes formas, pero luego encontré el número mágico 19: no necesitamos jugar con la coincidencia de expresiones regulares porque:
Entonces, junta todo eso, suma, invierte el signo y listo.
Gracias Jakob por -3 bytes
fuente
(m*c+m)[c]
porm[c%55]
.JavaScript (ES6), 85 bytes
Según las reglas de desafío, este código espera que la cadena de alcance global m contenga la lista de movimientos. (Ahorrando 3 bytes, como lo sugiere @KevinCruijssen.)
Toma la entrada como una lista de índices basados en 0, ordenados de menor a mayor.
Pruébalo en línea!
¿Cómo?
Cada personaje de movimiento se convierte a su posición en la cadena de movimiento
"LBHR..."
. Multiplicamos el resultado por 3 y aplicamos un módulo 5 , que da p . Entonces tenemos:Donde el signo de un mod b es el de a .
fuente
Jalea , 14 bytes
Pruébalo en línea!
Argumento 1 / Argumento a la izquierda: Índice máximo basado en 1.
Argumento 2 / Argumento correcto: índices basados en 1.
Argumento 3: Lista de movimientos como una cadena. La función sigue siendo reutilizable si se utiliza el tercer argumento de línea de comandos para este propósito.
fuente
Java 10,
12911911210710086 bytesToma el máximo como entrada adicional; move-list es una matriz de caracteres a nivel de clase.
Inspirado por @Emigna respuesta 05AB1E 's .
-7 bytes gracias a @Jakob .
-14 bytes gracias a @Geobits .
Pruébalo en línea.
Explicación:
s[m%55]/73
se asigna a la coordenada x o y según el carácter ( Pruébelo en línea ):s[m%55]*3%5-2
asigna al personaje correcto+1
o-1
dependiendo del personaje ( Pruébelo en línea ):fuente
a.add(m)
comoif
condición.int c[]
puede serint[]c
.int c[]
era de una versión anterior donde todavía usaba un índice eni
lugar de usarm
. E inteligente de usar un Set enadd
lugar de!contains
, ¡gracias!c[2]
for axis (withs[m%55]/73
) y caminando con algo como3*s[m%55]%5-2
(ojalá pudiera ver una forma de acortar eso, pero ...). Junto con un ternario, esa->m->{var c=new int[2];for(;m-->0;)c[s[m%55]/73]-=a.add(m)?3*s[m%55]%5-2:0;return c[1]+","+c[0];}
por 98.int[]
lugar de una cadena. :)Python 3, 85 bytes
b
es la lista de índice (aset
) yl
es el índice final. La lista de movimientos (una cadena o lista de caracteres) aparece libre comos
. Este es un puerto de la respuesta Ruby de GB , y una explicación del enfoque se puede encontrar allí.Pruébalo en línea
Sin golf
fuente
MATL , 16 bytes
Pruébalo en línea!
Toma 3 entradas como la respuesta Jelly, el índice más grande, la lista de índices para omitir y la matriz de 55 caracteres.
fuente
Limpio ,
148... 130 bytesPruébalo en línea!
Define la función
$ :: [Int] -> (Int, Int)
, tomando una lista de (ordenados de menor a mayor) índices que se eliminarán de los movimientos antes defoldr
finalizar las operaciones correspondientes(0,0)
.fuente