Entrada
Te dan un mapa 2D con bolas y tierra en él. Se parece a esto:
1 5 2
3
4
__________________________
Cada número es una bola y el _
nivel del suelo. El _
carácter de subrayado no está permitido en ninguna otra línea que no sea la línea a nivel del suelo. Solo se permiten espacios, líneas nuevas y dígitos 0-9
sobre el nivel del suelo. No puede asumir que la última línea es el nivel del suelo: se permiten líneas vacías debajo del nivel del suelo. También puede agregar espacios, para llenar líneas vacías, si eso le ayuda.
Las bolas pueden tener números del 0
al 9
, pueden colocarse una encima de la otra, pero no debajo del suelo. Los números de la pelota serán únicos.
Suponga que cada personaje es un metro .
Obtener mapa de pastebin!
Caso de prueba 1 - debería mostrar algo como esto
Caso de prueba 2 - debería producir los mismos resultados que el primer mapa
Desafío
Su desafío es leer un mapa como ese de un archivo o de stdin
- se le permite usar cat balls.txt | ./yourexecutable
- y la velocidad de salida de cada bola cuando toca el suelo.
Aquí está la fórmula para la velocidad:
Suponga que esa h
es la diferencia del número de línea entre el número de línea del suelo y el número de línea de la pelota, y eso g
es igual10m/s^2
.
Salida
Debes sacar el número y la velocidad de cada bola m/s
al nivel del suelo. Por ejemplo N - Vm/s
, donde N
es el número de bola y V
es su velocidad. También puede generar una matriz si lo desea.
¡Feliz codificación! :)
Respuestas:
MATL ,
31302725 bytesLa entrada es una matriz de caracteres 2D con un
;
separador de filas:Pruébalo en línea! O incluya una inicial
t
en el código para mostrar el mapa para mayor claridad.Aquí están los otros casos de prueba: primero , segundo .
Explicación
fuente
C,
125122121 bytesCompilar y ejecutar con
gcc -w golf.c -lm && cat balls.txt | ./a.out
.fuente
0 ... 9
genera nada, cuando el carácter no aparece en el archivo de texto. De todos modos, +1, porque no señalar esto es mi culpa_
. Sin embargo, esto podría solucionarse con un byte adicional (en!=
lugar de<
).C -
194 (-5)150137 bytesCon un poco más de tiempo y pensando, jugué 44 bytes.
Gracias a orlp por ayudarme a ahorrar 13 bytes.
Comenzaré con mi código C:
Y versión legible por humanos:
Compila y ejecuta así:
gcc -o balls ballsgolf.c -lm && cat 1.txt | ./balls
Salida
fuente
~(c=getchar())
lugar de(c=getchar())!=EOF
.if (x != -1)
es lo mismo queif (~x)
(en las máquinas complementarias de dos) porque~-1
es (únicamente)0
. En C el golf nunca se usawhile(cond)
, ya quefor(;cond;)
es igual de largo y ofrece más oportunidades para jugar al golf. En tu ejemplo esto puede convertirsefor(;~(c=getchar());n=c==95?l:n)b[c]=(l+=c==10);
.l=1
se puede eludir haciendol
el primer argumento paramain
, ya que el tiempo de ejecución de C pasa el número de argumentos a main como su primer argumento (argc
), y cuando llama a un programa sin ningún argumento de línea de comandos (./a.out
), entoncesargc = l = 1
.n=0;
es innecesario, ya que los enteros globales se inicializan automáticamente a 0. Por lo tanto,n;
será suficiente.Pyth,
27262524 bytesPruébalo en línea!
fuente
Matlab,
100968990 bytesMuchos bytes guardados gracias a Luis Mendo
Formato de entrada:
Explicación:
fuente
Python 3, 84 bytes
Versión 6, 84 bytes: (¡Gracias a Leaky Nun!)
Versión 5, 91 bytes:
Versión 4, 92 bytes:
Versión 3, 99 bytes:
Versión 2, 102 bytes:
Las versiones anteriores toman una serie de cadenas como entrada.
Versión 1, 140 bytes:
Esto toma el directorio del archivo como entrada del usuario.
fuente
1 for l in i
->1for l in i
(n-1)*20
->~-n*20
print
llamada?e
, porque entonces el tokenizer de Python intentará analizarlo como notación científica de coma flotante (por ejemplo1e5
). Ejemplo que falla:f = lambda n:-1if n<0else 1
. Un ejemplo que falla en ambas versiones de Python es0or 1
, porque el tokenizer piensa que0o
comienza un número octal.Python 3, 84 bytes
Una función anónima que acepta la entrada por argumento como una cadena de varias líneas con todas las líneas vacías llenas de espacios, y devuelve una matriz donde cada elemento tiene la forma [número de bola, velocidad].
Cómo funciona
Pruébalo en Ideone
fuente
f = MyAnswer
y luego llamar usandof(x)
. Existe un consenso de que no hay necesidad de nombrar lambdas . Buen desafío, por cierto!JavaScript (ES6) 93
Editar 2 bytes guardados gracias a @Jacajack
Una función con una cadena multilínea como parámetro de entrada. La salida no está ordenada (ya que esto no se solicita)
Prueba
fuente
sqrt(x)
sería más corto quepow(x,.5)
?