Верстка многомерных этикеток

12

В многомерном мире steam-панк наш босс хочет прикрепить напечатанные индексные этикетки к каждому ящику в многомерной картотеке нашего конгломерата.

Начальник хочет набрать весь лист с надписью в виде единой формы, используя шрифт, купленный только для этой цели, поэтому мы должны заказать сортировки (металлические символы). Так как сортировки очень дороги, наш заказ должен быть для точного подсчета каждого цифрового символа.

Для заданного (любым способом) набора длин измерений ≥ 0 верните (любым способом) наш порядок, который представляет собой частотную таблицу цифр, необходимую для набора всех декартовых координат. Он должен быть упорядочен в соответствии с порядком появления на клавиатуре (т. Е. 0 после 9), и может не включать в себя порядки с 0 сортировками, поэтому, если сортировки вообще не должны быть упорядочены (так как измерение имеет длину 0); ничего не печатать

  • Бонус -3 сортирует, если ваш код может обрабатывать (т.е. ничего не печатать) тоже 0 измерений.
  • Окончательные символы новой строки являются приемлемыми.
  • Запрет на стандартные лазейки применяются.
  • Как уже упоминалось, сортировки стоят дорого, поэтому это .

Добрый человек может отредактировать этот вызов, чтобы включить автоматический подсчет очков, поэтому добавьте заголовок, например:
# LanguageName, 123 sorts

Контрольные примеры

Учитывая 11, выведите:

1 4
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
0 1

потому что необходимые ярлыки 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, и 11.


Учитывая 2 3, выведите:

1 5
2 5
3 2

потому что необходимые ярлыки 1 1, 1 2, 1 3, 2 1, 2 2, и 2 3.


Учитывая 2 0, выведите пустую строку:

или ничего.


Учитывая 1 2 3, выведите:

1 11
2  5
3  2

потому что необходимые ярлыки 1 1 1, 1 1 2, 1 1 3, 1 2 1, 1 2 2, и1 2 3


Учитывая 5 5 5 5, выведите:

1 500
2 500
3 500
4 500
5 500

И нет, я не собираюсь перечислять все 625 ярлыков.

Адам
источник
Я немного неясен относительно требований к выходу. В тексте написано «Возврат (любыми средствами)», но остальное говорит о том, что требуется очень специфический формат вывода и его необходимо распечатать. Который из них? Например, говорить о конце новой строки кажется совершенно излишним, если формат вывода может быть чем угодно.
Рето Коради
1
@RetoKoradi формат должен выглядеть примерно так, как показано, но это может быть интерактивный сеанс, файл, всплывающее окно, STDOUT и т. Д. У вас есть предложение относительно того, как я мог бы сформулировать это, чтобы сделать его более понятным ?
Адам

Ответы:

6

Дьялог АПЛ, 10 7

Код имеет длину 10 байтов и соответствует условиям бонуса.

Спасибо пользователю 46915 за 3 байта!

,∘≢⌸∊⍕¨∊⍳⎕

Обратите внимание, что (вход) не работает на TryAPL; Вы можете попробовать форму функции здесь .

            ⎕      Get input
           ⍳       Index vector
       ∊⍕¨∊        Flatten, stringify, flatten again
      ⌸            From the key, display the
{⍺,  }             elements concatenated with the
   ≢⍵              number of times they occur

Я не совсем понимаю оператор, но {⍺}⌸перечисляет принятые уникальные значения и {⍵}⌸перечисляет их места в аргументе.

Это имеет правильный порядок, потому что это порядок, в котором цифры появляются в многомерном массиве меток.

lirtosiast
источник
1
Да, это решение, которое я имел в виду. Это может помочь понять ключевой оператор.
Адам
1
Разве APL не всегда побеждает в Codegolf?
vy32
@ vy32 Нет. APL может быть самым кратким языком общего назначения, но всегда будут языки, специфичные для предметной области, которые лучше в определенной ограниченной области, чем любой язык общего назначения. В конкретной области игры в гольф, такие языки, как Pyth и CJam, обычно выигрывают. Однако примечательно, что APL, будучи коммерческим языком, используемым в производстве очень крупными компаниями, подходит даже близко. Кроме того, по цене немного более многословно, людям, вероятно, легче научиться читать APL, чем языкам игры в гольф.
Адам
Подожди, так ты имеешь в виду, что я могу сделать всю гистограмму просто ,∘≢⌸без каких-либо внешних продуктов с уникальными и такими ?! Дьялог, конечно, потрясающий. И ,∘≢⌸короче чем {⍺,≢⍵}⌸.
user46915
3
@NBZ, я скучаю по APL. Еще в 1982 году я написал графический пакет в APL, который управлял принтером с гирляндой. Это было произведение искусства, хотя я не понимал, что написал месяц спустя.
vy32
10

Mathematica, 48 байтов - 3 = 45

Grid@Tally@Flatten@IntegerDigits@Tuples@Range@#&
alephalpha
источник
1
Это красиво.
lirtosiast
2

Mathematica, 111 85 байт

Grid[Thread@{Range@10~Mod~10,DigitCount@Tuples@Range@#~Total~2}~DeleteCases~{_,‌​0}]&

Большая часть работы здесь сделана DigitCount.

LegionMammal978
источник
Grid[Thread@{Range@10~Mod~10,DigitCount@Tuples@Range@#~Total~2}~DeleteCases~{_,0}]&
alephalpha
2

R, 110 байт

Сохранено 4 благодаря Алексу А. (спасибо!)

U=unlist
X=table(U(strsplit(as.character(U(expand.grid(Map(seq_len,scan())))),"")))
z=Map(cat,names(X),X,"\n")
flodel
источник
Вы можете использовать только xодин раз , так что вы просто должны быть в состоянии заменить одно вхождение xс scan(). И зачем назначать z?
Алекс А.
Благодарю. Согласитесь не использовать x. Я назначил выход Mapк zпеременной иначе Mapбудет печатать свой вывод на стандартный вывод. Mapinvisible()
Лучшей
1

Рубин, 92 байта

f,*r=$*.map{|n|[*1..n.to_i]}
a=f.product(*r)*''
puts a.chars.uniq.map{|c|[c,a.count(c)]*" "}

Принимает длины в качестве аргументов командной строки:

$ ruby foo.rb 1 2 3
1 11
2 5
3 2
daniero
источник
0

CJam, 31 байт

Laq~{,m*}/e_:)s{_'0=A*+}$e`{(S\N}%

Попробуйте онлайн

Код составляет 34 байта и занимает 3 байта бонуса за работу с пустым списком ввода. Входные данные представляют собой список в формате CJam, например:

[1 2 3]

Объяснение:

La    Push list containing empty list to seed Cartesian products.
q~    Get and interpret input.
{     Loop over values in input list.
  ,     Built range from 0 to value-1.
  m*    Form Cartesian product with the list we already have.
}/    End loop over values in input list.
e_    Resulting list has extra nesting. Flatten it.
:)    Increment all values in list, since it is 0-based, and we need 1-based.
s     Convert it to string, so we can operate on digits.
{     Block to calculate source key, needed to get 0 to the end.
  _     Copy the digit.
  '0=   Compare with '0.
  A*    Multiply comparison result by 10...
  +     ... and add it to digit.
}$    End of sort key block.
e`    RLE.
{     Start of loop over RLE entries, for generating output in specified format.
  (     Pop off the first value, which is the count.
  S     Push a space...
  \     ... and swap it with the count.
  N     Push a newline.
}%    End of loop over RLE entries.
Рето Коради
источник
0

Haskell, 125 байт

import Data.List
l=mapM_(putStrLn.(\(h:r)->h:' ':show(length r+1))).group.sort.concatMap show.concat.sequence.map(\n->[1..n])
Лейф Виллертс
источник