A soma manual de faces de um cubo Cubically é entediante e demorada, como escrever código no próprio Cubically.
No cubificador Mais eficiente , pedi para você traduzir o ASCII para o código-fonte Cubically. Uma das respostas lá usa uma sequência de inicialização do cubo e modifica o cubo resultante com base nas somas do cubo pré-inicializado. Este método tem sido usado em muitos programas relacionados ao Cubically desde então. Ao testar uma nova sequência de inicialização, é necessário adicionar todos os valores em todas as faces, o que geralmente leva dois ou três minutos.
Sua tarefa é automatizar esse processo para nós!
Você receberá duas entradas, um inteiro n
e uma string c
. Eles podem ser lidos a partir de argumentos de linha de comando, argumentos de função, entrada padrão, um arquivo ou qualquer combinação desses. c
será um cubo de tamanho cúbico de memória,n
conforme impresso pelo intérprete.
O intérprete Cubically despeja seu cubo no STDERR após o término do programa, formatado de maneira agradável para visualização simples. Execute um programa vazio no interpretador Cubically e abra a seção de depuração para ver o despejo de cubo de um cubo inicializado. Adicione um argumento 4
para ver um 4x4x4 ou 5
5x5x5 etc.
Se n
for 3, c
seguirá este formato (os números inteiros serão variáveis):
000
000
000
111222333444
111222333444
111222333444
555
555
555
Espaços, novas linhas e tudo. Se n
for 4, c
ficará assim (também com números inteiros variáveis):
0000
0000
0000
0000
1111222233334444
1111222233334444
1111222233334444
1111222233334444
5555
5555
5555
5555
Et cetera.
Seu programa produzirá seis números inteiros. O primeiro número inteiro será a soma de todos os números na face superior.
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 bottom face
555
O segundo número inteiro será a soma da face esquerda, o terceiro a frente, o quarto a direita, o quinto atrás e o sexto inferior.
Então, se n
foi 3 e c
foi isso:
242
202
242
000131555313
010121535343
000131555313
424
454
424
Seu programa seria exibido 20 1 14 43 24 33
.
Regras adicionais:
- Os números inteiros de saída devem ser delimitados por caracteres não inteiros. Você também pode optar por retornar uma matriz.
- Você pode assumir que a entrada está correta -
n
é um número inteiro ec
é um cubo da saída de depuração do Cubically . Portanto, sen
foi3.0
ec
foifoo bar
, seu programa pode ser interrompido e ainda ser válido. - Seu programa precisa apenas trabalhar para
n > 1
en < 1260
. Ele pode (tentar) lidar com tamanhos maiores ou menores do cubo, mas não é necessário.
Isso é código-golfe , então o código mais curto vence! Se precisar de ajuda, não hesite em perguntar na sala de bate-papo do Cubically .
fonte
n
espaços após cada linha, não. Eles não estão incluídos no despejo.Respostas:
Geléia ,
161413 bytes3 bytes graças a Erik, o Outgolfer.
Experimente online!
fonte
Z
:ḟ⁶ỴV€€sS€ẎsS€
(ouḟ⁶ỴV€€sS€FsS€
)Python 2 ,
155150147123121120 bytesProvavelmente poderia ser jogado um pouco
Editar: -5 bytes usando um método melhor para remover os espaços em branco
Edit: -3 bytes graças a @Leaky Nun
Editar: -24 bytes, não removendo espaços em branco
Editar: -2 bytes, explorando a precedência
Experimente online!
fonte
05AB1E , 16 bytes
Experimente online!
fonte
Casca , 15 bytes
3 se
ṁ
2m
sExperimente online!
Explicação
fonte
mṁṁi
É realmente bom!Oitava,
645954 bytesExperimente online!
Resposta anterior:
Experimente online!
Retorna uma matriz como saída.
fonte
Perl 5 , 66 + 1 (-n) = 67 bytes
Experimente online!
fonte
Python 2 ,
137127 bytes-10 bytes graças a @Halvard Hummel
Experimente online!
fonte
Haskell, 128 bytes
Aceita uma string com quebras de linha.
fonte
PowerShell , 236 bytes
Experimente online!
Ooof, isso é longo. Mas dividir e cortar cordas não é um dos pontos fortes do PowerShell, então acho que é algo esperado. Também. Muitos. Dólares.
Toma em parâmetros
$n
e$z
como o tamanho e a rede do cubo, respectivamente. Em seguida, constrói uma função que é usada por toda parte. Aqui, estamos removendo espaços, dividindo cada dígito individual, removendo os caracteres vazios no meio, juntando todos os caracteres com+
ae executando a instrução resultante para obter um número. Por exemplo, isso se transforma"123"
no1+2+3
qual, quando executado, é6
.A próxima linha
split
é a rede do cubo de entrada em novas linhas, armazenando o resultado na matriz$a
. Em seguida, executamos a função nas primeiras$n
linhas e produzimos a face superior do cubo.Para o próximo conjunto, precisamos dividir as seqüências de caracteres com base no tamanho do cubo. Então, percorremos cada linha, construindo
$x
como o padrão regex apropriado (por exemplo, para o tamanho que$n=3
será esse"(...)"
), dividimos a string com base nesse padrão, removendo novamente elementos vazios e armazenando-os em quatro variáveis que representam as quatro faces. Aqueles são então concatenados nah
passagemk
.A próxima linha é enviada
h
atravésk
da função para exibir os lados (esquerdo, dianteiro, direito, traseiro) do cubo.Finalmente, executamos as últimas
$n
linhas através da função para exibir a face inferior do cubo.Todos os números são deixados no pipeline e a saída está implícita.
fonte
APL (Dyalog Classic) ,
3027 bytesRaspou 3 bytes graças a @ Adám
⍺
é n⍵
é cExplicação
Experimente online!
fonte
⊆
por⎕U2286
adicionará apenas 5 bytes.3
e⍺
.(6,⍺*2)
→6(⍺*2)
,
depois,⍴
como⍴
sempre, usa o argumento certo em ordem de classificação.Cubicamente , 19 bytes
Leva o cubo de STDIN e o tamanho como argumento da linha de comando para o intérprete. Produz a soma da face superior, um byte nulo, a face esquerda, um byte nulo, ... a face inferior e um byte nulo.
Experimente online!... que aparentemente exibe bytes nulos como algum tipo de espaço em branco no meu navegador.
Esse idioma não foi feito para esse desafio, mas o desafio foi feito para o idioma ... ainda está trapaceando? ;)
fonte