Usando la menor cantidad de caracteres Unicode, escriba una función que acepte tres parámetros:
- Numero total de fichas de dominó
n
domino afectado- Derribar la dirección del dominó afectado (
0
oL
hacia la izquierda1
oR
hacia la derecha)
Una vez que se derriba un dominó, también debe derribar los dominós restantes en la misma dirección.
Debe generar las fichas de dominó |
representando una ficha de dominó permanente \
y /
representando una ficha de dominó derribada a la izquierda y a la derecha, respectivamente.
Ejemplos
10, 5, 1
debería regresar ||||//////
6, 3, 0
debería regresar\\\|||
if(third_parameter)
lugar deif(third_paramter=='l')
Respuestas:
Ruby, 38 (46) personajes
Esta función toma la dirección como un entero (
1
para la derecha,0
para la izquierda). Una función que toma una cadena es 8 caracteres más larga:Ejemplos de uso:
fuente
Haskell, 70
suponiendo que es un tipo de dirección , que tiene constructores R y L .
fuente
J -
3226 charJ no puede manejar más de dos argumentos sin usar una lista, y no puede manejar listas no homogéneas sin boxeo. Por lo tanto, tener la entrada como una lista de tres enteros es ideal. El orden de los parámetros es el reverso del estándar: 0 para la izquierda o 1 para la derecha, luego la posición, luego el número total de fichas de dominó. La razón de esto es porque J terminará yendo a través de ellos de derecha a izquierda.
Esto es lo que está pasando.
F`G/
aplicado a una listax,y,z
evaluaráx F (y G z)
.y G z
construye ambas formas posibles en que las fichas de dominó podrían haberse derrumbado, y luegoF
usax
para seleccionar cuál de las dos usar.A continuación hay un intercambio de información con J REPL que explica cómo se construye la función: las líneas sangradas se ingresan en REPL y las respuestas se alinean con el margen izquierdo. Recuerde que J evalúa estrictamente de derecha a izquierda a menos que haya parens:
A expensas de unos pocos caracteres, podemos hacer que la orden sea la orden estándar: solo agregue
@|.
al final de la función:Sin embargo, adaptar esto para trabajar con un argumento de cadena para la dirección sería mucho más costoso.
fuente
/
también la forma en que construye dos salidas y selecciona la deseada. Creo que siento que esto carece del reconocimiento que merece.PowerShell, 66
Probablemente la misma idea que todos los demás tenían.
fuente
Golfscript (44
53)Mi primer programa Golfscript. Me llevó mucho más tiempo del que debería y probablemente se pueda hacer de una manera más inteligente y concisa (estoy seguro de que alguien probará eso :)):
Una entrada de muestra es
10 5 0
.Sin golf:
fuente
d
ser0
/ en1
lugar de'l'
/, lo'r'
que le da un código más corto. De lo contrario, si almacenad'l'=
en una variable, oyu puede usarlo en lugar de la segunda comparación cond
. En el términox i j
, puede guardar ambos espacios en blanco si usa un nombre de variable no alfanumérico en lugar dei
.'l'
/'r'
porque en ese momento aún no veía que somos libres de usar números enteros. El truco no alfanumérico es ingenioso, ¡gracias! Tal vez actualice la respuesta más tarde.GolfScript,
2823 caracteresArgumentos en la cima de la pila, intente en línea :
fuente
Python - 45
52Esto requiere
1
para la derecha y0
para la izquierda.Aquí hay una versión que toma
r
yl
correctamente, en 58 :Algunos ejemplos de uso ...
fuente
JS (ES6) -
7974726562gracias a @nderscore!
El tercer parámetro es un booleano (0: izquierda / 1: derecha)
fuente
d=(a,b,c)=>"\\"[r="repeat"](!c&&a-b+1)+"|"[r](--b)+"/"[r](c&&a-b)
[r='repeat'][r]
15 caracteres.repeat.repeat
14 caracteresPython2 / 3 - 54
El último agregado en la regla fue bastante bueno (el 0/1 en lugar de 'l' / 'r'). Hizo la mía realmente más pequeña que la solución existente de python. 0 izquierda, 1 derecha
fuente
Haskell , 42 bytes
Pruébalo en línea!
Toma datos como
(%) n k b
paran
dominó,k
'dominó derribado, direcciónb
.Encuentra el carácter en cada posición
c
, desde1
an
utilizando una expresión aritmética para calcular el índice de caracteres 0, 1 o 2.Casos de prueba tomados de aquí .
Haskell , 44 bytes
Pruébalo en línea!
Una estrategia interesante que resultó un poco más larga. Genera la cadena
"\\|/"<*[1..n]
conn
copias consecutivas de cada símbolo, luego toma una porción den
caracteres contiguos con la posición de inicio determinada aritméticamente.fuente
Python 2.7,
68 65 61 5958 caracteresUsar
d=1
para izquierda yd=0
derechaNota: Gracias a @TheRare por seguir jugando al golf.
fuente
d and'\\'...or'/'...
?('\\'...,'/'...)[d]
f=lambda a,p,d:('|'*(p-1)+'/'*(a-p+1),'\\'*p+'|'*(a-p))[d]
Also, I don't think your code works when falling left.
¿Podría dar un caso de prueba para probar?Javascript, 46 caracteres
Parece que hacer trampa para hacer 0 = ly 1 = r pero la hay. Lo encogió con un poco de recursión.
editar: se perdió un personaje obvio
fuente
JavaScript (ES6) 61
63Editar Fue buggy - lástima de mí.
No es tan diferente de @xem, pero lo encontré yo mismo y es más corto. El parámetro d es 0/1 para izquierda / derecha
Prueba en la consola de Firefox
Salida
fuente
--p
?Perl
6765 caracteresAsigne los primeros tres parámetros (total, posición, dirección como un entero [0 izquierda, 1 derecha]). Los extras van al éter. Resta 1 de la posición si nos dirigimos a la derecha para que el dominó en la posición X también se voltee.
fuente
$p--if$d
con$p-=$d
para perder dos caracteres :)Haskell , 57 bytes
4 bytes guardados gracias a este consejo
Pruébalo en línea!
Haskell ,
69616058 bytesPruébalo en línea!
No es una respuesta muy compleja, pero supera las dos respuestas Haskell existentes.
fuente
R ,
75686157 bytesUna función anónima. Publicaré una explicación más completa si hay interés.
Pruébalo en línea!
fuente
Haskell , 51 bytes
a
= número de fichas de dominó,b
= índice basado en 1 del tocado,c
= dirección (0
izquierda y1
derecha).Pruébalo en línea!
fuente
(a#b)c= ...
.PHP - 64
Un bucle simple, y haciendo eco del personaje.
Genera un
Notice: Undefined variable: i
, aquí hay otra versión que silencia el error (65 caracteres):Y una versión sin ningún error (69 caracteres):
Otras funciones en PHP:
sprintf
/printf
rellenorelleno a través de
str_pad
/str_repeat
funcionesusando ambos
printf
ystr_repeat
funcionesfuente
Scala 75 caracteres
fuente
CJam - 20
El código principal está en la segunda línea, la primera línea es solo para obtener los parámetros de la entrada estándar (de lo contrario, debe poner los parámetros en el código).
Pruébalo en http://cjam.aditsu.net/
Ejemplos:
Explicación:
:X
almacena el último parámetro (dirección 0/1) en la variable X-
resta X de la posición de arrastre, obteniendo la longitud de la primera secuencia de caracteres (llamémosla L)_
hace que una copia de L"\|"X=
obtenga el carácter para usar primero:\
para X = 0 y|
para X = 1*
repite que el carácter L veceso
imprime la cadena, quitándola de la pila-
resta L del número de fichas de dominó, obteniendo la longitud de la segunda secuencia de caracteres (llamémosla R)"|/"X=
hace que el carácter use siguiente:|
para X = 0 y/
para X = 1*
repite ese carácter R vecesfuente
Lisp común
Esto no ganará en un código de golf, pero destaca la directiva de formato de justificación de Common Lisp:
La aritmética no es mala:
n
es el número total de fichas de dominó;p
es la posición del primer dominó derribado;d
es0
o1
, representando a la izquierda y a la derecha (según lo permitido en los comentarios), y se usa como índice enx
;x
es una cadena de\
,|
y/
. La cadena de formato utiliza dos directivas de justificación (anidadas), cada una de las cuales permite un carácter de relleno. Así:fuente
PHP, 89 caracteres
Solo porque amo PHP.
EDITAR: El siguiente código hace lo mismo.
fuente
($i+1>$p)
. 2) Reescribiendo su expresión ternaria para$d?($i+1<$p?'|':'/'):$i+1>$p?'|':'\\'
guardar otros 3 bytes. O simplemente elimine==0
e invierta las direcciones. 3) Con$i++<$a
puede eliminar$i++
de la condición de publicación y usar en$i
lugar de$i+1
(-6 bytes). 4)$i=0
no es necesario; pero tendría que suprimir avisos (opción--n
) si lo elimina (-4 bytes).J ,
23 2119 bytesPruébalo en línea!
La entrada es una lista de enteros en el orden estándar.
fuente
05AB1E , 19 bytes
Todavía tengo la sensación de que es un poco largo, pero funciona ... Y mejor que la solución inicial de 23 bytes que tuve con la construcción if-else, que rápidamente eliminé ...
El orden de entrada es el mismo que en el desafío: longitud total, índice,
1
/0
para izquierda / derecha, respectivamente.Pruébelo en línea o verifique ambos casos de prueba .
Explicación:
fuente
C ++ 181
fuente
return 0
amain
.C(n)>>k>>p
sería corto deC(n)C(k)C(p)
lo que no? Y si la definición de P () pudiera stringificar el argumento, ¿eso no guardaría caracteres para todas las comillas? Y cuando compara p con 'l' y 'r': 0 y 1 serían más cortos, específicamente> 0 en lugar de == 'r' y <1 en lugar de == 'l' (suponiendo que esté bien usando números en lugar de r / l - si no <'r' todavía es más corto que == 'l' y> 'l' aún es más corto que == 'r')PHP -
105,97, 96Resultados de ejemplo:
fuente
Javascript,
8185 caracteresLa primera vez que probé codegolf, fue divertido gracias :)
fuente
JavaScript: 85 caracteres
1 = Izquierda, 0 = Derecha
fuente
Clojure, 81 caracteres
fuente
vb.net (~ 75c)
fuente