Sumar manualmente las caras de un cubo cúbico es tedioso y requiere mucho tiempo, como escribir código en el propio cubo.
En Cubifier más eficiente , le pedí que tradujera ASCII a Cubically source. Una de las respuestas allí utiliza una secuencia de inicialización del cubo y luego modifica el cubo resultante en función de las sumas del cubo preinicializado. Este método se ha utilizado en muchos programas relacionados con el Cubic desde entonces. Al probar una nueva secuencia de inicialización, uno tiene que sumar todos los valores en todas las caras, lo que generalmente toma dos o tres minutos.
¡Su tarea es automatizar este proceso para nosotros!
Tomarás dos entradas, un entero n
y una cadena c
. Estos pueden leerse desde argumentos de línea de comando, argumentos de función, entrada estándar, un archivo o cualquier combinación de ellos. c
será un cubo de memoria de tamaño cúbicon
tal como lo imprime el intérprete.
El intérprete Cubically volca su cubo a STDERR al finalizar el programa, formateado muy bien para una visualización simple. Ejecute un programa vacío en el intérprete Cubically y abra la sección de depuración para ver el volcado de cubo de un cubo inicializado. Agregue un argumento 4
para ver un 4x4x4, o 5
para ver un 5x5x5, etc.
Si n
es 3, c
seguirá este formato (los enteros serán variables):
000
000
000
111222333444
111222333444
111222333444
555
555
555
Espacios, líneas nuevas y todo. Si n
es 4, c
se verá así (también con enteros variables):
0000
0000
0000
0000
1111222233334444
1111222233334444
1111222233334444
1111222233334444
5555
5555
5555
5555
Etcétera.
Su programa generará seis enteros. El primer entero será la suma de todos los números en la cara superior.
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 bottom face
555
El segundo número entero será la suma de la cara izquierda, el tercero al frente, el cuarto al derecho, el quinto al reverso y el sexto al final.
Entonces si n
fue 3 y c
fue esto:
242
202
242
000131555313
010121535343
000131555313
424
454
424
Su programa saldría 20 1 14 43 24 33
.
Reglas adicionales:
- Los enteros de salida deben estar delimitados por caracteres no enteros. También puede optar por devolver una matriz.
- Puede suponer que la entrada es correcta:
n
es un número entero yc
es un cubo de la salida de depuración de Cubically . Entonces sin
fue3.0
yc
fuefoo bar
, su programa podría romperse y seguir siendo válido. - Su programa solo necesita trabajar para
n > 1
yn < 1260
. Se puede (intentar) manejar tamaños de cubos grandes o más pequeñas, pero no es necesario.
Este es el código de golf , por lo que gana el código más corto. Si necesita ayuda, no dude en preguntar en la sala de chat de Cubically .
fuente
n
espacios después de cada línea, no. No están incluidos en el basurero.Respuestas:
Jalea ,
161413 bytes3 bytes gracias a Erik the Outgolfer.
Pruébalo en línea!
fuente
Z
:ḟ⁶ỴV€€sS€ẎsS€
(oḟ⁶ỴV€€sS€FsS€
)Pitón 2 ,
155150147123121120 bytesProbablemente podría jugar al golf bastante
Editar: -5 bytes utilizando un método mejor para eliminar los espacios en blanco
Editar: -3 bytes gracias a @Leaky Nun
Editar: -24 bytes al no eliminar espacios en blanco
Editar: -2 bytes explotando la precedencia
Pruébalo en línea!
fuente
05AB1E , 16 bytes
Pruébalo en línea!
fuente
Casco , 15 bytes
3
ṁ
sy 2m
sPruébalo en línea!
Explicación
fuente
mṁṁi
¡es realmente agradable!Octava,
645954 bytesPruébalo en línea!
Respuesta anterior:
Pruébalo en línea!
Devuelve una matriz como salida.
fuente
Perl 5 , 66 + 1 (-n) = 67 bytes
Pruébalo en línea!
fuente
Python 2 ,
137127bytes-10 bytes gracias a @Halvard Hummel
Pruébalo en línea!
fuente
Haskell, 128 bytes
Acepta una cadena con saltos de línea.
fuente
PowerShell , 236 bytes
Pruébalo en línea!
Ooof, esto es largo. Pero dividir y cortar cuerdas no es uno de los puntos fuertes de PowerShell, así que supongo que es algo esperado. Asi mismo. Muchos. Dólares
Toma en parámetros
$n
y$z
como el tamaño y el cubo neto, respectivamente. Luego construye una función que se utiliza en todo momento. Aquí, estamos eliminando espacios, dividiendo cada dígito individual, eliminando los caracteres vacíos intermedios, uniendo todos los caracteres junto con un+
, y luego ejecutando la declaración resultante para obtener un número. Por ejemplo, esto se convierte"123"
en1+2+3
que cuando se ejecuta es6
.La siguiente línea
split
es la red del cubo de entrada en las nuevas líneas, almacenando el resultado en una matriz$a
. Luego realizamos la función en el primer$n
líneas y sacamos la cara superior del cubo.Para el siguiente conjunto, necesitamos empalmar las cadenas según el tamaño del cubo. Entonces, recorremos cada línea, construyendo
$x
como el patrón de expresión regular apropiado (por ejemplo, para el tamaño$n=3
que será"(...)"
), dividimos la cadena en función de ese patrón, nuevamente eliminamos elementos vacíos y los almacenamos en cuatro variables que representan las cuatro caras. Esos son entonces cadenas concatenadas ah
travésk
.La siguiente línea se envía a
h
través dek
través de la función para generar los lados (izquierdo, frontal, derecho, posterior) del cubo.Finalmente, corremos el último
$n
líneas a través de la función para generar la cara inferior del cubo.Todos los números se dejan en la tubería, y la salida es implícita.
fuente
APL (Dyalog Classic) ,
3027 bytesAfeitado 3 bytes gracias a @ Adám
⍺
es n⍵
es cExplicación
Pruébalo en línea!
fuente
⊆
con⎕U2286
sólo añadir 5 bytes sin embargo.3
y⍺
.(6,⍺*2)
→6(⍺*2)
,
después,⍴
ya que⍴
siempre usa su argumento correcto en orden desordenado.Cúbicamente , 19 bytes
Toma el cubo de STDIN y el tamaño como argumento de línea de comandos para el intérprete. Emite la suma de la cara superior, un byte nulo, la cara izquierda, un byte nulo, ... la cara inferior y un byte nulo.
Pruébalo en línea! ... que aparentemente muestra bytes nulos como una especie de espacio en blanco en mi navegador.
Este lenguaje no fue hecho para este desafío, pero el desafío fue hecho para el idioma ... ¿sigue siendo trampa? ;)
fuente