코드 페이지 코딩


15

소개

코드 페이지는 정수 값을 특정 문자에 매핑합니다. 다음과 같은 코드 페이지를 시각화 할 수 있습니다.

+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- +- -+ --- + --- + --- + --- +
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | 전자 | F |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- +- -+ --- + --- + --- + --- +
| 0 | q | 승 | 전자 | r | t | z | u | 나는 | o | p | | s | d | f | g | j |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- +- -+ --- + --- + --- + --- +
| 1 | k | l | y | x | c | v | b | n | m | Q | 승 | 전자 | R | T | Z | U |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- +- -+ --- + --- + --- + --- +
| 2 | 나는 | 오 | P | A | S | D | F | G | H | J | | | | | | |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- +- -+ --- + --- + --- + --- +

행은 16 진수의 첫 번째 숫자와 열의 두 번째 숫자를 지정합니다.

도전

16-255 개의 고유 한 문자로 구성된 문자열이 있으면 문자열에서 각 문자의 인덱스 (0부터 시작)를 값으로 사용하여 해당 코드 페이지를 출력하십시오. qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJ예를 들어 입력 하면 위의 테이블이 생성됩니다.

  • 출력은 위 표와 정확히 같은 형식이어야합니다. 후행 줄 바꿈 만 선택 사항입니다.
  • 입력 길이가 16의 배수가 아닌 경우 나머지 문자에 대해 새 행을 시작하고 사용하지 않는 셀을 비워 두십시오 (= 공백으로 채워짐).
  • 각 문자는 셀의 가운데에 정확히 왼쪽과 오른쪽에 한 칸씩 채워집니다.
  • 첫 번째 행과 열의 값은 숫자가있는 16 진수로 표시됩니다 0123456789ABCDEF. 그것들은 왼쪽과 오른쪽에 하나의 공간으로 채워져 있습니다. 소문자 16 진수를 사용하도록 선택할 수 있지만 하나를 고수해야합니다.
  • 출력에 존재하는 유일한 문자는 하이픈 -, 더하기 +, 파이프 |, 공백 , 16 진수 숫자 및 입력 문자입니다.
  • ASCII 아트 테이블과 관련되거나 어떤 식 으로든 문제를 사소한 내장은 금지되어 있습니다.
  • 입력이 특정 인코딩의 문자로만 구성되어 있다고 가정 할 수 있습니다. 이 경우를 지정하십시오.
  • 언어가 ASCII 입력 처리 할 수있는 경우 ASCII 전용 입력과 반복 문자를 가정 할 수 있습니다.

규칙

  • 기능 또는 전체 프로그램이 허용됩니다.
  • 입 / 출력의 기본 규칙 .
  • 표준 허점이 적용됩니다.
  • 이것은 이므로 바이트 수가 가장 적습니다. Tiebreaker는 이전에 제출되었습니다.

행복한 코딩!


소문자 16 진수를 사용할 수 있습니까?
Doorknob

@Doorknob 예, 도전 과제에서 명확하게 설명했습니다.
덴커

1
입력이 ASCII라고 가정 할 수 있습니까 (반복되는 문자 포함)?
Luis Mendo

@DenkerAffe "unique"또는 "255"라는 단어와 충돌 할 것 입니다. 16-255 개의 고유 한 문자열이 있습니다 .
Luis Mendo

1
@LuisMendo 흠 그래, 맞아. ASCII 만 처리 할 수있는 언어의 경우 허용됩니다.
Denker

답변:


7

Pyth, 60 바이트


K+*"+---"hJ16\+Vm++"| "j" | "d" |"+]+]d.HMJ.e+.Hk.[bdJczJNK

주요 줄 바꿈이 중요합니다.

여기에서 시도하십시오.


번역 된 코드를 보여줄 수 있습니까?
CalculatorFeline

@CatsAreFluffy 온라인 인터프리터에서 디버그 모드를 활성화하십시오.
Denker

개행은 무엇을합니까?
Leaky Nun

@Adnan Whoops, 그것은 저의 감독이었습니다. 고마워
Doorknob

@KennyLau 처음 인쇄합니다 +---+---+---[...]. Pyth에서 줄 바꿈 함수는 인수를 인쇄하고 반환합니다.
Doorknob

5

Python 3.5, 326 355 바이트 :

( 마지막 행의 길이가 16의 배수 가 아닌 경우 +29 바이트 , 사용하지 않는 셀은 비워 두어야합니다 (비록 빈 셀이 표시되지 않으면 훨씬 나아 보입니다) )

def f(r):o=' 0123456789ABCDEF';r=[r[0+i:16+i]for i in range(0,len(r),16)];print('+---'*17+'+\n|',end='');[print(' {} |'.format(h),end='')for h in o];print(''.join([str(e+' | ')if e.isdigit()or e.isalpha()else str(e)for e in''.join([str('\n'+'+---'*17+'+\n| '+x[0]+x[1])for x in zip(o[1::1],r)])]),end='');print('  |'+'   |'*(15-len(r[-1]))+'\n'+'+---'*17+'+')

매력처럼 작동합니다!

샘플 입력 및 출력 :

Input: 'hopper'

Output:

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | h | o | p | p | e | r |   |   |   |   |   |   |   |   |   |   |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Input: 'honkhonkhonkhonkhonk'

Output:

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | h | o | n | k | h | o | n | k | h | o | n | k | h | o | n | k | 
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 1 | h | o | n | k |   |   |   |   |   |   |   |   |   |   |   |   |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Input: 'hi'

Output: 

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | h | i |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

나는 이것이 괜찮기를 바랍니다.

또한이 도전을 위해 만든 또 다른 버전이 있습니다. 길이가 16이 아닌 경우 마지막 행에 대해 빈 셀을 추가로 인쇄 하지 않기 때문에 잘못된 후보이지만 , 내 의견으로는 훨씬 더 나은 페이지를 출력합니다. 마지막 행이 16의 배수가 아닌 경우 빈 셀을 표시하지 않고 채워진 셀만 표시하기 때문에 OP에 필요한 것보다 주로 다음과 같습니다.

def f2(r):o=' 0123456789ABCDEF';r=[r[0+i:16+i]for i in range(0,len(r),16)];print('+---'*17+'+\n|',end='');[print(' {} |'.format(h),end='')for h in o];print(''.join([str(e+' | ')if e.isdigit()or e.isalpha()else str(e)for e in''.join([str('\n'+'+---'*17+'+\n| '+x[0]+x[1])for x in zip(o[1::1],r)])]));print('+---'*(len(r[-1])+1)+'+')

위의 해당 코드에 대한 샘플 입력 및 출력은 다음과 같습니다.

Input: 'ggreuuobgugoubgoubguorgoruguor'

Output:

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | g | g | r | e | u | u | o | b | g | u | g | o | u | b | g | o | 
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 1 | u | b | g | u | o | r | g | o | r | u | g | u | o | r | 
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

    (As you can see, there are no empty cells shown in the entire table. This looks much better to me.)

" 입력 길이는 16의 배수가 아닌 경우, 나머지 문자를 새 행을 시작하고 사용되지 않는 세포가 비어 (= 3 개 공간 가득) 떠날 필요가있다. "
새는 수녀

@KennyLau 아, 그렇습니다. 나는 그것을 보지 못했다. Dang ... 지금 편집 중입니다. 솔직히 이것은 OP 쇼보다 훨씬 나아 보입니다. 그렇지 않습니까?
R. Kap

왜 다운 투표?
R. Kap

@ R.Kap 나는 당신에게 말할 수 없었지만, 여기에 공감대가 있습니다
고양이


1

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

s=>(s=' 0123456789ABCDEF'+s+' '.repeat(15)).match(/(?!^).{16}/g).map((t,i)=>d+`+
| `+[s[i],...t].join` | `,d=`+---`.repeat(17)).join` |
`+` |
${d}+`

' 0123456789ABCDEF'첫 번째 열을 채우는 존재하지만, 편리 또한 첫 번째 행을 다룹니다. 그런 다음 입력 문자열은 공백으로 채워져 길이가 16 인 하위 문자열로 분할 될 수 있습니다.(?|^) 선행 공백이 일치하지 않도록합니다. 나머지는 조각들을 합치고 있습니다.


1

Excel VBA, 157 바이트 (Cheating?)

익명 VBE 직접 창 파괴적 범위로부터 입력을 받아 기능 [A1]받는 출력한다ActiveSheet 객체로 합니다.

골프

[B1:Q1]="=Dec2Hex(Column(B1)-2)":L=[Len(A1)]:For i=0To l:Cells(Int(i/16)+2,i Mod 16+2)=Mid([A1],i+1,1):Next:For i=1To Int(l/16)+1:Cells(i+1,1)=i:Next:[A1]=""

형식화

[B1:Q1]="=Dec2Hex(Column(B1)-2)"
L=[Len(A1)]
For i=0To l:Cells(Int(i/16)+2,i Mod 16+2)=Mid([A1],i+1,1):Next
For i=1To Int(l/16)+1:Cells(i+1,1)=i:Next
[A1]=""

입출력

주어진:

[A1]="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJ"

생성 된 출력은

테이블 물건


유효하지 않지만 어쨌든 시원합니다. 더 유사하게 만들려면 (그러나 여전히 유효하지 않습니까?) 적절한 셀 보더를 켜야합니다.
Lyndon White
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.