줄기-잎 그림 만들기


14

관련 : 줄기 및 잎 플롯 검증

입력

비어 있지 않은 양의 정수 목록. 필요한 경우 문자열로 사용할 수 있습니다. 정렬 된 것으로 가정 할 수 없습니다.

산출

숫자 의 줄기-잎 그림 . 에서 수만에 의해, 그 줄기에 맞게 모든 숫자가 사람이 줄기에 위치 값 및 모든 분류되어있는 줄기에이 줄기 - 잎 그림, 숫자가 정렬됩니다. 이 도전에서 줄 바꿈은 줄기를 분리하고 공간은 줄기와 잎을 분리합니다.

비어 있지 않은 줄기 사이에있는 빈 줄기를 모두 포함하거나 제외 할 수 있습니다.

테스트 사례

(목록은 귀하의 언어 목록 기본값으로 가져올 수 있습니다. 아래에 JSON을 사용했습니다)

빈 줄기 포함 :

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
2
3
4
5
6
7
8
9
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010 0

빈 줄기 제외 :

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

0 11233333
1 0558
10 0

[55, 59, 49, 43, 58, 59, 54, 44, 49, 51, 44, 40, 50, 59, 59, 59]

4 034499
5 0145899999

[10000, 10100]

1000 0
1010 0


입력 순서를 정렬하거나 유지해야합니까?
Rod

@Rod 정의에 따라 입력을 수십 씩 정렬 한 다음 1 씩 정렬합니다. 입력 순서는 중요하지 않습니다.
Stephen

2
출력 형식은 반드시 그래야합니까? 가 내 대답은 유효?
Rod

1
@totallyhuman 튜플은 괜찮지 만 네, 나뭇잎을 정렬해야합니다. 패턴과 분포를 시각화하기 위해 줄거리의 요점입니다.
Stephen

답변:


2

R , 12 바이트

stem(scan())

온라인으로 사용해보십시오!

설명:

s               # imports RAND's "Million Random Digits"
  e  )          # cooks a pound of spaghetti and places it on the stack
 t              # transposes the output 42 times
       can      # goes for a pee
   m(           # grows moustache, turns head to side and frowns
      s   (     # implicitly ignores all criticism
           )    # makes a stemplot of the input

stem배열을 입력으로 사용하기 때문에 충분 하다고 생각 합니다.
주세페

이것이 실제로 TIO에 대한 예제를 얻을 수있는 유일한 방법이었습니다. 그리고 나는 "프로그램 또는 기능"스타일의 응답에 익숙하다고 생각하며 다른 형식에 대해서는 확신 할 수 없습니다.
ngm 2016 년


@Giuseppe에 동의, 대답은해야한다 stem:
JayCe



3

망막 , 38 30 바이트

2 바이트를 절약 한 Neil과 다른 6 개를 절약 한 Leo에게 감사합니다.

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

O#`
.\b
 $&
\B 
0 
D$`¶?.+ 
$*

입력은 줄 바꿈으로 구분 된 정수 목록입니다. 출력은 빈 접두사를 생략합니다.

온라인으로 사용해보십시오!


(?<=(\b.+ ).)¶\12 바이트를 절약합니다.
Neil

교체 단계 대신 중복 제거 단계를 마지막 단계로 사용하여 바이트를 절약 할 수 있습니다 (그런 다음 첫 줄을 처리해야 함) tio.run/##K0otycxL/…
Leo

@ 레오 감사합니다, 나는 선도적 인 줄 바꿈으로 끝나지 않는 약간의 변형을 사용하고 있습니다.
Martin Ender 2016 년

2

자바 스크립트 (ES6), 89 바이트

a=>a.sort((a,b)=>a-b).map(e=>r[d=e/10|0]=(r[d]||d+` `)+e%10,r=[])&&r.filter(e=>e).join`
`

2

파이썬 (2) , 146 (140) 133 124 120 118 109 107 90 86 84 91 82 81 70 63 바이트

Rod 덕분에 -6 바이트 ovs 덕분에 -9 바이트

lambda l:{i/10:[j%10for j in sorted(l)if j/10==i/10]for i in l}

온라인으로 사용해보십시오!

좋아, 뭔가 이상한 것 같아 모든 파이썬 프로그래머가 알고 있듯이 dicts는 순서가 없으므로 키-값 쌍의 원래 순서가 유지되지 않습니다. 그러나 현재 코드에서 결과 dict을 전혀 정렬하지 않습니다. 그러나 나는 매번 평등과 질서를 확인하면서 여러 번 테스트했으며, 그 지시는 항상 올바르게 나옵니다. 누군가 그것이 항상 올바르게 나온다는 것을 반증하거나 이것이 왜 효과가 있는지 알고 있다면, 알고 싶습니다.

파이썬 목록으로 입력하고 dict로 출력합니다. 예:

입력:

[1, 2, 3, 3, 3, 3, 3, 10, 15, 15, 18, 1, 100]

산출:

{0: [1, 1, 2, 3, 3, 3, 3, 3], 1: [0, 5, 5, 8], 10: [0]}


1
r[i/10]=r.get(i/10,'')+`i%10`for 82 bytes
ovs

dicts는 기본적으로 정렬되어 있다고 생각합니까? 원래 순서대로가 아닙니다
Destructible Lemon

1

수학, 103 바이트

@ user202729의 삭제 된 답변에서 가져온 코드

Grid[Table[{Keys[#][[i]],""<>ToString/@#[[i]]},{i,Length@#}]]&@(GroupBy[Sort@#,⌊#/10⌋&]~Mod~10&@#)&

1

> <> , 84 바이트

1&0\n~a7+3.
 :}<$?)@:$@:v!?
r~&^?-l&:+1&/&:,a-%a::
&=?v~&1+:&ao>n" "o:?!;::a%:@-a,&:

온라인으로 사용해보십시오 또는 물고기 놀이터 에서 !

입력 번호가 이미 스택에 있다고 가정 .

먼저, 다음 코드를 사용하여 bubble sort를 사용하여 스택을 정렬합니다 .

1&0\
 :}<$?)@:$@:v!?
   ^?-l&:+1&/

다음으로를 사용하여 스택에서 첫 번째 것의 정수 몫을 10 ::a%-a,으로 계산하고 레지스터에 넣고 첫 번째 숫자가 레지스터와 동일하지 않을 때까지 숫자의 마지막 숫자를 인쇄합니다. 그런 다음 레지스터를 증가시키고 계속합니다. 목록 끝에 도달하면로 표시 0가 멈 춥니 다.


1

PostgreSQL, 53 바이트

SELECT n/10,json_agg(n%10ORDER BY n)FROM t GROUP BY 1

정수 목록은 기존 테이블 의 integer열에 있어야합니다.nt . 결과는 2 열 테이블입니다. 각 행은 "줄기"열과 "잎"열로 구성됩니다. "잎"열은 JSON 배열 형식입니다. (의견에서 언급했듯이 "테스트 사례"에 표시된 형식을 정확하게 준수 할 필요는 없습니다.)

스템의 순서는 보장되지 않지만 (10 바이트를 절약하기 위해, ORDER BY 1 쿼리의 끝에서 생략 됨) 테스트에서 스템은 올바른 순서로 끝나는 것처럼 보입니다.

SQL Fiddle에서 결과보기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.