Кодуйте кодову сторінку


15

Вступ

Кодова сторінка відображає цілі значення певного символу. Ми можемо візуалізувати кодову сторінку так:

+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + - - + --- + --- + --- + --- +
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | Б | C | Д | Е | Ж |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + - - + --- + --- + --- + --- +
| 0 | q | ш | е | r | т | z | u | я | о | р | а | s | d | f | г | j |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + - - + --- + --- + --- + --- +
| 1 | k | l | у | х | c | v | б | n | м | Q | W | Е | R | Т | Z | U |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + - - + --- + --- + --- + --- +
| 2 | Я | O | П | А | S | Д | Ж | Г | Н | J | | | | | | |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + - - + --- + --- + --- + --- +

Рядки вказують першу цифру, а стовпці - другу цифру шістнадцяткового числа.

Змагання

Враховуючи рядок 16-255 унікальних символів, виведіть відповідну кодову сторінку, використовуючи нульовий індекс кожного символу в рядку як його значення. Наприклад, введення даних qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJдасть таблицю вище.

  • Вихід повинен бути в точно такому ж форматі, як у таблиці вище. Не потрібна лише нова затримка.
  • Якщо довжина вводу не кратна 16, потрібно почати новий рядок для решти символів і залишити невикористані комірки порожніми (= заповнено 3 пробілами).
  • Кожен символ розміщується рівно посередині комірки, обкладений одним пробілом зліва та справа.
  • Значення в першому рядку та стовпці задаються шістнадцяткові числа з цифрами 0123456789ABCDEF. Вони також прокладені одним пробілом зліва та справа. Ви можете скористатися малими шістнадцятковими цифрами, але вам потрібно дотримуватися однієї.
  • Єдині символи, що присутні у висновку - це дефіси -, плюси +, труби |, пробіли , цифри для шістнадцяткових чисел та символи з вводу.
  • Будь-які вбудовані файли, пов’язані з таблицями мистецтва ASCII або вирішують проблему будь-яким способом, заборонені.
  • Можна припустити, що вхід складається лише з символів певного кодування. Вкажіть, будь ласка, чи це так.
  • Якщо ваша мова може обробляти лише введення ASCII, ви можете вважати введення лише ASCII та повторні символи.

Правила

Щасливе кодування!


Чи можемо ми використовувати шістнадцяткові цифри?
Дверна ручка

@Doorknob Так, уточнив це у виклику.
Денкер

1
Чи можна припустити, що вхід ASCII (з можливо повтореними символами)?
Луїс Мендо

@DenkerAffe Це суперечило б слову "унікальний" або "255" у " Враховуючи рядок 16-255 унікальних символів , хоча ...
Луїс Мендо

1
@LuisMendo Хм, так, це правда. Зробимо це для мов, які можуть працювати лише з ASCII.
Денкер

Відповіді:


7

Pyth, 60 байт


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

Провідний новий рядок є вагомим.

Спробуйте тут.


Чи можете ви показати перекладений код?
CalculatorFeline

@CatsAreFluffy Просто ввімкніть режим налагодження в онлайн-перекладачі.
Денкер

Що робить новий рядок?
Leaky Nun

@Adnan Whoops, це був недогляд з мого боку. Виправлено, спасибі.
Дверна ручка

@KennyLau Він друкує перше +---+---+---[...]. У Pyth функція нового рядка друкує та повертає свій аргумент.
Дверна ручка

5

Python 3.5, 326 355 байт:

( +29 байт, оскільки якщо довжина останнього ряду не кратна 16, невикористані комірки повинні залишатися порожніми (хоча, на мою думку, це виглядає набагато краще, якщо ці порожні клітинки просто навіть не показані) )

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, а натомість просто показує заповнені комірки, і все:

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 пробілами) ".
Leaky Nun,

@KennyLau Ага, так. Я цього не бачив. Данг ... редагувати зараз. Чесно кажучи, це виглядає набагато краще, ніж показує ОП, ви не думаєте?
Р. Кап

Чому голосування "за"?
Р. Кап

@ R.Kap Я не міг тобі зовсім сказати, але ось, знайомлячись
кіт


1

JavaScript (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 байт (обман?)

Анонімна функція негайного вікна 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"

генерований вихід є

Стіл обтяжений


probs не дійсні, але круті в будь-якому випадку. Щоб зробити його подібнішим (але все-таки недійсним?), Слід увімкнути відповідні межі комірок.
Ліндон Уайт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.