다차원 레이블 조판


12

스팀 펑크 다차원 세계에서, 우리 상사는 인쇄 된 인덱스 라벨을 우리 회사의 다차원 파일 캐비닛에있는 각 서랍에 부착하려고합니다.

보스는이 목적으로 만 구입 한 글꼴을 사용하여 전체 레이블 시트를 단일 형식으로 조판하려고하므로 정렬 (금속 기호 조각) 을 주문해야합니다 . 정렬은 매우 비싸기 때문에, 우리의 순서는 각 숫자 기호의 정확한 수에 대한 것이어야합니다.

주어진 길이의 ≥ 0 길이의 세트에 대해, 모든 데카르트 좌표를 조판하는 데 필요한 빈도수 자릿수 인 우리의 순서를 어떤 방식 으로든 반환하십시오. 키보드 순서로 배열해야합니다 (예 : 9 이후 0). 정렬이 전혀없는 경우 (차원의 길이가 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 등일 수 있습니다. ?
Adám

답변:


6

Dyalog APL, 10 7

코드 길이는 10 바이트이며 보너스를받을 자격이 있습니다.

3 바이트에 대해 user46915에게 감사합니다!

,∘≢⌸∊⍕¨∊⍳⎕

참고 TryAPL 작업을하지 않는 (입력); 여기서 함수 형태를 시도해 볼 수 있습니다 .

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

나는 연산자를 완전히 이해하지 못하지만 {⍺}⌸취한 고유 값을 {⍵}⌸나열하고 인수에서 그 위치를 나열합니다.

이것은 다차원 레이블 배열에 숫자가 나타나는 순서이므로 올바른 순서를 갖습니다.


1
그래, 그것이 내가 생각한 해결책이다. 이것은 Key 연산자를 이해하는 데 도움 될 수 있습니다 .
Adám

1
APL은 항상 codegolf에서 승리 하지 않습니까?
vy32

@ vy32 아니요. APL이 가장 간결한 범용 언어 일 수는 있지만, 특정 범용 도메인보다 특정 도메인에서 더 나은 도메인 별 언어가 항상 존재합니다. 코드 골프의 특정 영역 내에서 Pyth 및 CJam과 같은 골프 언어가 일반적으로 승리합니다. 그러나 대기업의 생산에 사용되는 상용 언어 인 APL은 더욱 가까워지고 있습니다. 또한 좀 더 장황한 가격으로 인해 골프 언어보다 인간이 APL을 읽는 법을 배우는 것이 더 쉬울 것입니다.
Adám

잠깐, 그래서 ,∘≢⌸독창적이고 그런 외부 제품없이 간단히 전체 히스토그램을 만들 수 있습니까 ?! Dyalog는 정말 대단합니다. 또한 ,∘≢⌸보다 짧습니다 {⍺,≢⍵}⌸.
user46915

3
@NBZ, APL이 그립습니다. 1982 년에 데이지 휠 프린터를 구동하는 그래픽 패키지를 APL로 작성했습니다. 한 달 후에 쓴 내용을 이해하지 못했지만 그것은 예술 작품이었습니다.
vy32


2

수학, 111 85 바이트

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

여기에서 대부분의 작업은에 의해 수행됩니다 DigitCount.


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

2

R, 110 바이트

Alex A. 덕분에 4 개를 구했습니다 (감사합니다!)

U=unlist
X=table(U(strsplit(as.character(U(expand.grid(Map(seq_len,scan())))),"")))
z=Map(cat,names(X),X,"\n")

당신은 사용 x방금 중 하나 개 발생 대체 할 수 있어야하므로 한 번 x에를 scan(). 또한 왜 할당 z합니까?
Alex A.

감사. 를 사용하지 않는 것에 동의하십시오 x. 나는의 출력 할당 MapA와 z변수가 다른 Mapstdout으로 출력을 인쇄 할 것입니다. 더 나은 연습은 Map내부 를 감싸는 invisible()것이지만 많은 캐릭터입니다.
flodel

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

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

하스켈, 125 바이트

import Data.List
l=mapM_(putStrLn.(\(h:r)->h:' ':show(length r+1))).group.sort.concatMap show.concat.sequence.map(\n->[1..n])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.