Ваша задача, если вы хотите принять это, - написать программу, которая выводит собственный исходный код в двоичном представлении UTF-8 .
правила
Источник должен иметь длину не менее 1 байта.
Ваша программа не должна принимать данные (или иметь неиспользуемые пустые данные).
Вывод может быть в любом удобном формате.
Необязательный трейлинг перевод строки разрешен.
Обратите внимание, что один байт равен 8 битам, а длина двоичного представления UTF-8 обязательно кратна 8.
Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Стандартные лазейки запрещены.
пример
Допустим, ваш исходный код Aä$$€h
соответствует бинарному представлению UTF-8 010000011100001110100100001001000010010011100010100000101010110001101000
.
Если я бегу, Aä$$€h
то вывод должен быть 010000011100001110100100001001000010010011100010100000101010110001101000
.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000
01011110
и0010011100100010
в UTF-8 (они выглядят довольно похожи:^
против∧
)01111100
и0010001100100010
закодировать|
и∣
.Ответы:
V , 28 (или 16?) Латинских 1 байт (35 UTF-8 байт)
Попробуйте онлайн!
Hexdump (на латыни 1):
Вывод (двоичное представление одного и того же кода в UTF-8, а не в латинице 1):
Объяснение:
Или...
V , 16 байтов
Попробуйте онлайн!
Вывод:
ОП сказал:
Это приводит к гораздо более удобному формату для V: P (но я не уверен, что это нарушает правила)
источник
CJam , 20 байтов
Попробуйте онлайн!
Удивлен, увидев победу CJam! посмотрим как долго это длится ...
источник
05AB1E , 105 байт
05AB1E не имеет встроенных преобразований UTF-8, поэтому я должен делать все вручную ..
Попробуйте онлайн или убедитесь, что это Quine .
Объяснение:
quine -part:
Кратчайшее Куайн для 05AB1E это один:
0"D34çý"D34çý
( 14 байт ) обеспечивается @OliverNi . Мой ответ использует модифицированную версию этого Куайно, добавив на...
здесь:0"D34çý..."D34çý...
. Краткое объяснение этой сущности:Задача часть:
Теперь о сложной части кода. Как я упоминал выше, 05AB1E не имеет встроенных преобразований UTF-8, поэтому я должен делать это вручную. Я использовал этот источник в качестве справки о том, как это сделать: ручное преобразование кодов Unicode в UTF-8 и UTF-16 . Вот краткое изложение того, что касается преобразования символов Unicode в UTF-8:
"dЖ丽"
становится[100,1046,20029]
)[100,1046,20029]
становится["1100100","10000010110","100111000111101"]
)0x00000000 - 0x0000007F
(0-127):0xxxxxxx
0x00000080 - 0x000007FF
(128-2047):110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF
(2048-65535):1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF
(65536-2097151):11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Также есть диапазоны для 5 или 6 байтов, но давайте пока их не будем использовать.
Символ
d
будет в первом диапазоне, поэтому 1 байт в UTF-8; символЖ
находится во втором диапазоне, поэтому 2 байта в UTF-8; и символ丽
находится в третьем диапазоне, поэтому 3 байта в UTF-8.x
В образце за ней заполняются двоичным эти символы, справа налево. Таким образом,d
(1100100
) с шаблоном0xxxxxxx
становится01100100
;Ж
(10000010110
) с узором110xxxxx 10xxxxxx
становится11010000 10010110
; и丽
(100111000111101
) с рисунком1110xxxx 10xxxxxx 10xxxxxx
становится1110x100 10111000 10111101
, после чего остальныеx
заменяются0
:11100100 10111000 10111101
.Таким образом, этот подход я также использовал в своем коде. Вместо того, чтобы проверять фактические диапазоны, я просто смотрю на длину двоичного файла и сравниваю его с количеством
x
в шаблонах, поскольку это экономит несколько байтов.Смотрите этот 05AB1E ответ моих (разделы Как сжать большие целые числа? И Как сжать целые списки? ) , Чтобы понять , почему
•Xó•18в
это[1,8,12,17]
.источник
JavaScript (Node.js) , 60 байт
-15 байтов от @Neil и @Shaggy
Попробуйте онлайн!
источник
padStart(8,0)
экономит 2 байта.map
иjoin
исключить массив для вывода массива битовРжавчина , 187 байт
Попробуйте онлайн!
источник
Perl 6 , 46 байт
Попробуйте онлайн!
Стандартный quine
.fmt("%08b",'')
форматирует список порядковых значений в двоичный файл длиной 8 и объединяет его пустой строкой.источник
Perl 5, 42 байта
TIO
источник
Ява 10,
339308265227225186184 байта-8 байт благодаря @NahuelFouilleul, удаляющему ненужные
&255
(и еще -35, чтобы привлечь мое внимание к тому, что полные технические характеристики программы были отозваны, а функция теперь также разрешена).-41 байт благодаря @ OlivierGrégoire ,
Попробуйте онлайн.
Объяснение:
quine -part:
var s
содержит неформатированный исходный код String%s
используется, чтобы поместить эту строку в себя сs.format(...)
%c
,%1$c
И34
используются для форматирования двойных кавычек ("
)s.format(s,34,s)
складывает все вместеЗадача часть:
источник
c&255
не нужен&255
так как мы не используем символы не ASCII, спасибо!BigInteger
чтобы быть довольно коротким для преобразования в двоичные строки. И еще 2 байта путем измененияreturn'0'+
вreturn 0+
. Хм, почему это0
ведение необходимо между прочим? Меня смущает то, что все внутренние двоичные строки имеют это ведущее0
, но самое первое не при использованииBigInteger.toString(2)
..Python 2 ,
6867 байтПопробуйте онлайн!
Модификация этого ответа
-1 байт, удаляя пробел после 'in' (спасибо @mdahmoune)
источник
in
'%08b'%ord(i)
вместоbin(256|ord(i))[3:]
, но по некоторым причинам это не сработалоR ,
138114 байтПопробуйте онлайн!
Использует способность R разбирать функции до их символьного представления. С
rev
нужны потому чтоrawToBits
ставит наименее значимый бит первый.as.integer
необходимо, потому что в противном случае биты отображаются с начальным нулем.После редактирования я понял, что любой удобный вывод разрешен. Также был один на исходный счетчик байтов.
источник
C # (интерактивный компилятор Visual C #) , 221 байт
Попробуйте онлайн!
C # (интерактивный компилятор Visual C #) с флагом
/u:System.String
, 193 байтаПопробуйте онлайн!
источник
Инструменты Bash + GNU, 48 байт
TIO
источник