Установка сцены:
Это средний день, так как вы расслабляетесь после долгого дня, занимаясь своим любимым времяпрепровождением: отвечая на множество увлекательных вопросов о PPCG. Это был не хороший день для тебя; эти проклятые программисты Pyth продолжают получать лучший ответ, и это убивает ваше настроение. Неожиданно вы замечаете, что новый вопрос был опубликован! Вы решаете; не в этот раз CJammers. Яростно, вы начинаете печатать, рождая поток символов; плод славной петли BrainFuck, которым станет ваш конечный продукт. Вы печатаете и печатаете. Быстрее! Еще быстрее! Вы настолько сосредоточены, что даже не замечаете, что огни на вашем экране начинают мигать и выключаться. Внезапно монитор светится зеленым, на рабочем столе изображен символ, похожий на пришельца. Используя свои безупречные навыки, выcat ~/Desktop/aliensymbol
и получить с кучей чисел, сообщение! Будучи проницательным программистом PPCG, вы заметили, что это похоже на ASCII. Неважно для тебя, ты print(chr(i) for i in file)
и расшифруй сообщение. Ваша первая мысль: «Мне нужно поделиться этим с сообществом!».
...
Кто бы мог подумать? Что первыми, кто вступит в контакт с инопланетянами, будут скромные программисты PPCG. Почему нас? Может быть, это потому, что мы являемся воплощением человеческого интеллекта. Или, может быть, потому что BrainFuck примерно так же близок, как мы, к иностранному языку. Тем не менее, инопланетяне - будучи сверхинтеллектуальными формами жизни, которыми они являются - хотят проверить, должны ли они классифицировать человеческую расу как разумную или нет. В качестве проверки нашего умственного мастерства инопланетяне попросили нас отправить им несколько компьютерных программ, чтобы продемонстрировать, что мы технологически развиты. Вопрос в том, что единственный человеческий язык, который они понимают, это числовой ASCII!
Помогите человечеству показать тем существам, которые являются настоящей интеллектуальной альфой. Нам нужно отправить им скрипт, который преобразует наши текстовые исходные коды в их числовые версии ASCII. К сожалению, из-за нашей неразвитой технологии (спасибо Обаме), мы должны отправить как можно меньшую программу перевода. Хорошо, что они решили связаться с PPCG!
Соревнование:
Суть этой задачи проста: вы должны написать программу, которая будет брать исходный код любой программы (или любой общий текстовый файл в этом отношении) и выводить его разделенную пробелами версию с переводом ASCII ниже каждой строки. То есть, учитывая ввод текстового файла, вам необходимо вывести каждую строку этого файла, за которой следует строка, содержащая представление ASCII каждого символа в строке над ним (с каждым числом, совпадающим с символом, который он представляет).
Пример очень прояснит это. Принимая исходный код печально известного hello world
в качестве ввода:
#include <stdio.h>
int main() {
printf("hello, world\n");
return 0;
}
ваша программа должна вывести:
# i n c l u d e < s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62 10
10
i n t m a i n ( ) {
105 110 116 32 109 97 105 110 40 41 32 123 10
p r i n t f ( " h e l l o , w o r l d \ n " ) ;
32 32 32 32 112 114 105 110 116 102 40 34 104 101 108 108 111 44 32 119 111 114 108 100 92 110 34 41 59 10
r e t u r n 0 ;
32 32 32 32 114 101 116 117 114 110 32 48 59 10
}
125 10
Детали реализации:
Вы можете выбрать ввод данных в любой форме, которую пожелаете (открытие файла, конвейер командной строки, параметр функции и т. Д.), И вам следует вывести на стандартный вывод или вернуть вывод из функции.
Что нужно отметить
- Каждый символ в выходных данных разделен символом '\ t', чтобы обеспечить возможность размещения строки из 3 цифр в строке ниже (мы будем предполагать, что для вашей вкладки установлено значение 4 или более пробелов).
- Новые строки отображаются в строке, в которой была нажата клавиша возврата (обратите внимание на 10 в примере)
- Требования к печати '\ t' и '\ n' невелики. Ваш вывод должен, в общем смысле, выглядеть приятным для глаз (нужно показать, что у этих инопланетян есть и эстетический смысл), и если вы сможете согнуть два предыдущих пункта, сохраняя визуальную целостность, вы будете прощены.
- Вы можете предположить, есть ли новая строка в конце последней строки.
счет
Это код-гольф, поэтому выигрывает самая короткая программа. Обратите внимание, что даже если ваша программа не самая короткая, но использует действительно изящные приемы относительно языка, который вы используете, многие +1 вам!
Удачи. Межгалактический рейтинг человечества лежит на ваших плечах.
Примечание: пожалуйста, прости сюжетные дыры. Я не писатель : D
Ответы:
Dyalog APL , 14 байтов
Принимает список строк, которые включают последовательности новой строки (10 или 13 10 и т. Д.)
↑
Матрифицировать список списков, состоящий из(
...)¨
для каждой строки возврата ...⊢
сам текст,[.5]
затем в новом измерении перед первым измерением⎕UCS
U nicode С haracter S ET кодовые точкиПопробуй APL онлайн!
источник
f
вызывается непосредственно на входе. Чтобы вызвать функцию один раз в строке, если бы сказалf¨
.Пиф,
1713 байтЕще один из тех программистов Pyth. Сожалею.
Новый код требует, чтобы каждая строка была заключена в кавычки и экранирована (включая новые строки, если вы хотите, чтобы они были напечатаны), но добавляет дополнительную новую строку между строкой и ASCII.
Попробуйте онлайн!
Объяснение:
Я держу старый код и его объяснение ниже.
Попробуйте онлайн! или используйте более легкий для чтения контрольный пример .
Объяснение:
источник
Python 2, 105 байт
Это использует немного другой подход, чем ответ ОП. Обратите внимание, что ТАК портит мои буквенные вкладки с пробелами.
Попробуйте онлайн
источник
x+=ord(c)+" "
будет короче чем"%s "%ord(c)
?x+=`ord(c)`+" "
такой же длины.Vim,
86,77 нажатий клавишЭто слишком долго, но это то, что вы получаете, когда используете
eval
функцию vim (\=
).источник
\=
, объясняет ли ваша функция eval, или грустное лицо, потому что вы используете функцию eval ...D;
Perl,
> 3331 байтВключает в себя +3 for
-F
(нельзя комбинировать с-e
кодом'
, поэтому есть пробел и-
тоже учитываются).Запустить с вводом по STDIN или дать одно или несколько имен файлов в качестве аргумента
asciidump.pl
Вывод неэстетичен, если текст содержит вкладку или нет заключительного перевода строки
источник
Pyth, 21 байт
Вот запись от одного из "этих проклятых программистов Pyth" ;)
Программа, которая принимает ввод многострочной строки без кавычек в STDIN и печатает результат. Это предполагает, что весь ввод имеет завершающий символ новой строки. Если вы хотите, чтобы он
<
работал без завершающего символа новой строки, добавьте его в начале программы и)_3
в конце.Попробуйте онлайн
Вывод для тестового примера трудно увидеть в онлайн-интерпретаторе, поэтому я включил его здесь:
Как это работает
источник
.z
и приняв ввод как список строкC
136117114 байтchar l[99];i;f(f){while(fgets(l,256,f)){i=0;while(l[i])printf("%c\t",l[i++]);i=0;puts("");while(l[i])printf("%d\t",l[i++]);puts("");}}
Можно проверить как это
источник
char**v
внутриmain()
спасло бы вас там 2 персонажа ..PowerShell v2 +, 85 байт
Ввод осуществляется через путь к файлу. Затем мы
Get-Content
(псевдонимgc
) на этот файл, который автоматически разделяется на новые строки. Мы зациклились на каждом из них|%{...}
. Начните с настройки$a
и$b
на пустую строку - это наши символы ASCII и кодовые точки соответственно. Затем мы-split
вводим строку для каждого символа, сохраняя его(.)
и удаляя пустые значения-ne''
(это происходит из-за того, как .NET выполняет синтаксический анализ), а затем отправляем их в другой цикл.В каждом внутреннем цикле мы соединяем строку текущего символа с вкладкой
`t
и добавляем его на$a
. Точно так же, за$b
исключением того, что мы явно приводим как a,char
а затем как int+
.Вне внутреннего цикла мы помещаем полученный результат
$a
и$b
(с указателем перевода строки, так как это никогда не будет появляться в нашем цикле) в конвейер. Те собираются с неявнымWrite-Output
при завершении программы.пример
(с пониманием, что у меня завершающий перевод строки и Markdown меняет символ табуляции)
источник
> <> (Рыба), 48 байт
Задача, на которой сияет язык! Я уверен, что мог бы сыграть в гольф немного больше, но это была длинная неделя. Могу взглянуть на это позже, хотя.
Попробуйте онлайн!
Альтернативно, попробуйте онлайн, что, на мой взгляд, выглядит лучше, но перенос текста немного запутан для ввода с длинными строками, как в тестовом примере.
источник
PHP,
131115 байтПросто FGITW, может быть, я могу улучшить это больше. Оказывается, я могу!
Первая версия в 131 байт:
Имя файла указывается в качестве первого аргумента после имени скрипта:
php aliens.php helloworld.c
Вторая версия на 115 байтов:
Первая версия учитывает пропущенные символы новой строки в конце строки, но после дополнительного разъяснения мы можем оставить этот код и поместить все в функцию, чтобы сэкономить 16 байт.
Пробельные символы
join(' ',$a)
как и внутриecho$c.' '
являются символами табуляции =\t
. Новые строки в коде специально.источник
Python 3,
8977 байтболее гольф версия, основанная на той же идее:
Если есть «\ т это на входе, а затем изменить
4
к9
.Предыдущая версия:
Принимает список строк, каждая из которых заканчивается на \ n.
источник
for l in s
iefor l in s:print(*l,sep='\t',end='');print(*l.encode(),sep='\t',end='\n\n')
lambda s:'\n\n'.join(*map('{:>4}'.format,[*a,*a.encode()])for a in s)
Powershell, 56 байт
Скрипт принимает путь к файлу в качестве ввода. Get-Content автоматически разбивает входные данные на массив строк, разделенных на новые строки в источнике.
Оттуда я ввожу foreach, приводим к массиву символов и устанавливаю его в $ a, соединяю его с вкладками и печатаю его. Далее, но все еще в пределах foreach, я преобразую массив символов в массив целых чисел, добавляю перевод строки и снова соединяюсь с вкладкой.
Звонок выглядит так:
и вот выходной образец
источник
JavaScript (ES6), 94 байта
Где ␉ обозначает буквальный символ табуляции. Работает до тех пор, пока ввод не содержит символов табуляции. 81-байтовая версия, которая также требует, чтобы ввод имел завершающий перевод строки:
источник
.split().map()
может победить.replace()
. После того, как экранированные символы были оптимизированы с помощью обратных кавычек, это должно быть 85 байт:s=>s.split('\n').map(c=>(s=[...c]).join('\t')+'\n'+s.map(c=>c.charCodeAt()).join('\t')).join('\n')
(Извините, я не знаю, можно ли / как добавить обратные кавычки в комментарии.)C #,
6463 байта-1 байт с использованием фактического символа табуляции вместо
\t
. Примечание: визуализируется как 4 пробела сверху и 2 пробела в негольфированной версии ниже.Ungolfed:
Полученные результаты:
(Примечание: Visual Studio использовал
\r\n
для новых строк, когда я вставлял ввод, отсюда и13 10
окончания строк в выводе)источник
CJam, 27 байт
Попробуйте онлайн!
объяснение
источник
1/
Иs
не нужно.PowerShell,
6159 байтЧто следует отметить:
m
в текущем каталоге.$_
), являются только буквальными переводами строки (0xA), поэтому по одному байту каждый.-join
операторов представляет собой символ табуляции (независимо от того, как он отображается здесь).Ungolfed
источник
Java, 202 байта
Я даже не могу быть обеспокоен тем, чтобы сделать это короче ..
источник
Haskell - 71 байт
источник
Python 3,
92 97107 байтдля i в списке (open (input ()). read (). split ("\ n")): для j в i: печать (i + "\ n" + ord (j))Это не проверено, но должно работать.
Спасибо @gowrath за указание на то, что код не работает так, как указано в вопросе.
источник
input()
делает команда - получает имя файла, который нужно открыть.