Ручное суммирование граней кубического куба утомительно и отнимает много времени, что-то вроде написания кода в самой кубической форме.
В наиболее эффективном кубизаторе я попросил вас перевести ASCII на кубический источник. В одном из ответов используется последовательность инициализации куба, а затем изменяется полученный куб на основе сумм предварительно инициализированного куба. С тех пор этот метод использовался во многих кубических программах. При тестировании новой последовательности инициализации необходимо сложить все значения на всех гранях, что обычно занимает две или три минуты.
Ваша задача - автоматизировать этот процесс для нас!
Вы получите два ввода, целое число n
и строку c
. Они могут быть прочитаны из аргументов командной строки, аргументов функции, стандартного ввода, файла или любой их комбинации. c
будет куб кубической памяти размером, n
как красиво напечатано переводчиком.
Интерпретатор кубически выдает свой куб в STDERR после завершения программы, отформатированный для простого просмотра. Запустите пустую программу в интерпретаторе Cubical и откройте раздел отладки, чтобы увидеть дамп куба инициализированного куба. Добавьте аргумент, 4
чтобы увидеть 4x4x4 или 5
5x5x5 и т. Д.
Если n
3, c
будет следовать этот формат (целые числа будут переменными):
000
000
000
111222333444
111222333444
111222333444
555
555
555
Пробелы, переводы строк и все. Если n
равно 4, c
будет выглядеть так (также с переменными целыми числами):
0000
0000
0000
0000
1111222233334444
1111222233334444
1111222233334444
1111222233334444
5555
5555
5555
5555
И так далее.
Ваша программа выведет шесть целых чисел. Первое целое число будет суммой всех чисел на верхней грани.
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 bottom face
555
Второе целое число будет суммой левой грани, третьей - передней, четвертой - правой, пятой - задней и шестой - нижней.
Так что если n
было 3 и c
было это:
242
202
242
000131555313
010121535343
000131555313
424
454
424
Ваша программа будет выводить 20 1 14 43 24 33
.
Дополнительные правила:
- Выходные целые числа должны быть разделены нецелыми символами. Вы также можете вернуть массив.
- Вы можете предположить, что ввод правильный -
n
это целое число иc
куб из кубического отладочного вывода . Так что, еслиn
было3.0
иc
былоfoo bar
, ваша программа могла сломаться и все еще быть действительной. - Ваша программа должна работать только для
n > 1
иn < 1260
. Он может (пытаться) обрабатывать кубы большего или меньшего размера, но это не обязательно.
Это код-гольф , поэтому выигрывает самый короткий код! Если вам нужна помощь, не стесняйтесь спрашивать в кубическом чате .
n
пробелы после каждой строки, нет. Они не включены в свалку.Ответы:
Желе ,
161413 байт3 байта благодаря Эрику Аутгольферу.
Попробуйте онлайн!
источник
Z
:ḟ⁶ỴV€€sS€ẎsS€
(илиḟ⁶ỴV€€sS€FsS€
)Python 2 ,
155150147123121120 байтВероятно, может быть в гольф совсем немного
Изменить: -5 байт, используя лучший метод для удаления пробелов
Редактировать: -3 байта благодаря @ Leaky Nun
Изменить: -24 байта, не удаляя пробелы
Изменить: -2 байта, используя приоритет
Попробуйте онлайн!
источник
05AB1E , 16 байтов
Попробуйте онлайн!
источник
Шелуха , 15 байт
3
ṁ
с и 2m
сПопробуйте онлайн!
объяснение
источник
mṁṁi
действительно приятно!Октава,
645954 байтаПопробуйте онлайн!
Предыдущий ответ:
Попробуйте онлайн!
Возвращает массив в качестве вывода.
источник
Perl 5 , 66 + 1 (-n) = 67 байт
Попробуйте онлайн!
источник
Python 2 ,
137127 байт-10 байт благодаря @Halvard Hummel
Попробуйте онлайн!
источник
Haskell, 128 байт
Принимает строку с разрывом строки.
источник
PowerShell , 236 байт
Попробуйте онлайн!
Ох, это долго. Но разбиение и нарезка строк не является сильной стороной PowerShell, поэтому я думаю, что это вполне ожидаемо. Также - итак. Много. Доллары.
Принимает в качестве параметров
$n
и$z
размер, и размер куба соответственно. Затем конструирует функцию, которая используется во всем. Здесь мы удаляем пробелы, разделяя каждую отдельную цифру, удаляя пустые символы между ними, соединяя все символы вместе с a+
, а затем выполняя результирующий оператор, чтобы получить число. Например, это превращается"123"
в то,1+2+3
когда выполняется6
.Следующая строка -
split
это входная сеть кубов на новых строках, где результат сохраняется в массиве$a
. Затем мы выполняем функцию в первых$n
строках и выводим верхнюю грань куба.Для следующего набора нам нужно соединить строки в зависимости от размера куба. Итак, мы перебираем каждую строку,
$x
создавая соответствующий шаблон регулярного выражения (например, для размера,$n=3
который будет"(...)"
), разбиваем строку на основе этого шаблона, снова удаляя пустые элементы, и сохраняем их в четыре переменные, представляющие четыре грани. Это то строка сцеплены наh
счетk
.Следующая строка затем
h
проходитk
через функцию для вывода сторон (слева, спереди, справа, сзади) куба.Наконец, мы
$n
пропускаем последние строки через функцию для вывода нижней грани куба.Все числа остаются на конвейере, и вывод неявен.
источник
APL (Dyalog Classic) ,
3027 байтовСкинул 3 байта благодаря @ Adám
⍺
это н⍵
собъяснение
Попробуйте онлайн!
источник
⊆
с⎕U2286
только добавит 5 байт , хотя.3
и⍺
.(6,⍺*2)
→6(⍺*2)
,
после того,⍴
как⍴
всегда использует правильный аргумент в порядке расстановки.Кубически 19 байтов
Принимает куб из STDIN и размер в качестве аргумента командной строки для интерпретатора. Выводит сумму верхней грани, нулевого байта, левой грани, нулевого байта, ... нижней грани и нулевого байта.
Попробуйте онлайн! ... который, по-видимому, отображает нулевые байты в качестве своего рода пробела в моем браузере.
Этот язык не был создан для этой проблемы, но проблема была сделана для языка .... это все еще обман? ;)
источник