Trợ giúp: Lập trình viên người ngoài hành tinh chỉ nói ASCII


22

Đặt cảnh:

Đó là một buổi chiều trung bình, khi bạn thư giãn sau một ngày dài bằng cách tham gia vào trò tiêu khiển yêu thích của bạn: trả lời rất nhiều câu hỏi hấp dẫn trên PPCG. Đó không phải là một ngày tốt cho bạn; những lập trình viên Pyth chết tiệt đó tiếp tục nhận được câu trả lời tốt nhất và nó giết chết sự rung cảm của bạn. Đột nhiên, bạn nhận thấy một câu hỏi mới đã được đăng! Bạn làm cho tâm trí của bạn; không phải lần này là CJammers. Tức giận, bạn bắt đầu gõ, sinh ra một luồng các nhân vật; một bào thai của vòng lặp BrainFuck vinh quang mà sản phẩm cuối cùng của bạn sẽ có. Bạn gõ và gõ. Nhanh hơn! Vẫn còn nhanh hơn! Bạn quá tập trung, bạn thậm chí không nhận thấy đèn trên màn hình của bạn bắt đầu nhấp nháy và tắt. Đột nhiên, màn hình phát sáng màu xanh lá cây, một biểu tượng giống như người ngoài hành tinh được gắn trên máy tính để bàn. Sử dụng các kỹ năng hoàn hảo của bạn, bạncat ~/Desktop/aliensymbolvà được trình bày với một loạt các số, một tin nhắn! Là lập trình viên PPCG sắc sảo mà bạn đang có, bạn nhận thấy rằng nó trông giống như ASCII. Không có vấn đề cho bạn, bạn print(chr(i) for i in file)và giải mã tin nhắn. Suy nghĩ đầu tiên của bạn: "Tôi cần chia sẻ điều này với cộng đồng!".

...

Ai sẽ nghĩ nó? Rằng những người đầu tiên liên lạc với người ngoài hành tinh sẽ là những lập trình viên khiêm tốn của PPCG. Tại sao là chúng tôi? Có lẽ đó là vì chúng ta là mẫu mực của trí thông minh của con người. Hoặc có thể vì BrainFuck gần với ngôn ngữ của người ngoài hành tinh. Tuy nhiên, người ngoài hành tinh - là dạng sống cực kỳ thông minh mà họ đang có - muốn kiểm tra xem họ có nên phân loại loài người là thông minh hay không. Để kiểm tra năng lực tinh thần của chúng tôi, người ngoài hành tinh đã yêu cầu chúng tôi gửi cho họ một vài chương trình máy tính để chứng minh rằng chúng tôi có văn hóa công nghệ. Vấn đề là, ngôn ngữ con người duy nhất họ hiểu là ASCII số!

Giúp loài người cho thấy những sinh vật alpha thực sự là trí tuệ. Chúng tôi cần gửi cho họ một tập lệnh sẽ chuyển đổi mã nguồn dựa trên văn bản của chúng tôi thành các phiên bản ASCII số của họ. Thật không may, do công nghệ kém phát triển của chúng tôi (cảm ơn Obama), chúng tôi phải gửi một chương trình dịch càng nhỏ càng tốt. Thật tốt khi họ chọn liên hệ với PPCG!

Các thách thức:

Tiền đề của thử thách này rất đơn giản: bạn phải viết một chương trình sẽ lấy bất kỳ mã nguồn nào của chương trình (hoặc bất kỳ tệp văn bản chung nào cho vấn đề đó) và xuất ra một phiên bản phân tách không gian của nó với bản dịch ASCII bên dưới mỗi dòng. Nghĩa là, với một đầu vào của một tệp văn bản, bạn cần xuất từng dòng của tệp đó theo sau là một dòng chứa biểu diễn ASCII của mỗi ký tự trong dòng phía trên nó (với mỗi số xếp hàng với ký tự mà nó đại diện).

Một ví dụ sẽ làm rõ điều này. Lấy mã nguồn của kẻ khét tiếng hello worldlàm đầu vào:

#include <stdio.h>

int main() {
    printf("hello, world\n");
    return 0;
}

chương trình của bạn sẽ xuất ra:

#   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

Chi tiết thực hiện:

Bạn có thể chọn nhận đầu vào dưới bất kỳ hình thức nào bạn muốn (mở tệp, ống dòng lệnh, tham số chức năng, v.v.) và bạn nên xuất ra thiết bị xuất chuẩn hoặc trả lại đầu ra từ một chức năng.

Những điều cần lưu ý

  • Mỗi ký tự trong đầu ra được phân tách bằng '\ t' để cho phép khoảng trống 3 chữ số trong dòng bên dưới xếp thành hàng (chúng tôi sẽ giả sử tab của bạn được đặt thành 4 khoảng trắng trở lên).
  • Các dòng mới được hiển thị trên dòng mà phím quay lại được nhấn (chú ý 10 trong ví dụ)
  • Các yêu cầu in '\ t' và '\ n' là lỏng lẻo. Nói chung, đầu ra của bạn phải trông vừa mắt (cần phải cho những người ngoài hành tinh chúng ta biết về mặt thẩm mỹ), và nếu bạn có thể uốn cong hai điểm trước đó trong khi duy trì tính toàn vẹn thị giác, bạn sẽ được tha thứ.
  • Bạn có thể chọn giả định xem có dòng mới ở cuối dòng cuối cùng hay không.

Chấm điểm

Đây là môn đánh gôn nên chương trình ngắn nhất sẽ thắng. Lưu ý, ngay cả khi chương trình của bạn không phải là ngắn nhất, nhưng sử dụng các thủ thuật thực sự gọn gàng liên quan đến ngôn ngữ bạn đang sử dụng, nhiều +1 cho bạn!

Chúc may mắn. Bảng xếp hạng trí tuệ liên thiên hà của nhân loại nằm trên vai bạn.

Lưu ý: Xin vui lòng tha thứ cho các lỗ cốt truyện. Tôi không phải là nhà văn : D


8
Có thể bỏ hoặc đơn giản hóa rất nhiều "cốt truyện" và chỉ để lại thử thách. Tôi thực sự sẽ không đọc 3 đoạn của nền tảng. Tôi sẽ đọc thử thách, vì đó là những gì tôi ở đây.
mbomb007

1
@YetiCGN Dấu ngắt dòng đóng vai trò ngắt dòng (bạn không thể thấy ký tự đại diện cho nó nhưng bạn có thể thấy dấu ngắt) và bạn vẫn cần viết rõ ràng trong phiên bản ascii. Hãy nghĩ về nó như thể bạn regex đã tìm kiếm mã nguồn cho '\ n'. Ở mọi nơi, tìm kiếm của bạn sẽ nổi bật là nơi bạn nên viết 10. Dưới đây là một ví dụ từ vim (bỏ qua cái cuối cùng).
gowrath

26
@ mbomb007 tbh, đó là một cốt truyện khá hoành tráng. Tôi rất thích nó
Maltysen

7
@ mbomb007 Những người muốn đọc có thể, những người không thể đi thẳng đến phần thử thách; đó là vẻ đẹp của phụ đề.
gowrath

1
Tôi đọc nó là "những người đầu tiên tiếp xúc với con người sẽ là những lập trình viên khiêm tốn của PPCG."
marczellm

Câu trả lời:


5

APL Dyalog , 14 byte

Đưa ra danh sách các chuỗi bao gồm các chuỗi dòng mới (10 hoặc 13 10, v.v.)

↑(⊢,[.5]⎕UCS

danh sách các danh sách bao gồm

(... cho mỗi dòng trở lại ...

chính văn bản

,[.5] theo một chiều mới trước chiều thứ nhất

⎕UCScác U nicode C haracter S et điểm mã

Dùng thử trực tuyến!


Bạn không gọi cái này một lần cho mỗi dòng chứ không phải nhận tất cả đầu vào cùng một lúc?
Steven H.

1
@StevenH. Không, hàm (phần lớn bên phải của hàm) chứa một vòng lặp, nhưng nói chung, nó được gọi chỉ một lần. Xem ví dụ về TryAPL fđược gọi trực tiếp trên đầu vào. Để gọi một chức năng một lần trên mỗi dòng, nếu có thể nói .
Adám

9

Bình thường, 17 13 byte

Một trong những lập trình viên Pyth. Lấy làm tiếc.

Mã mới yêu cầu mỗi dòng được bọc trong dấu ngoặc kép và thoát (bao gồm cả dòng mới nếu bạn muốn chúng được in), nhưng đặt thêm một dòng mới giữa dòng và ASCII.

jjLC9smCMBd.Q

Hãy thử trực tuyến!

Giải trình:

           .Q  Evaluate all input lines
      m        For each of those lines:
         Bd     Return the line and
       CM       the line mapped to ASCII characters
     s         Sum all these together to begin alternating between line and mapped line
 jLC9          Join all the characters and numbers in the lines and mapped lines on tabs
j              And join all of those on newlines

Tôi đang giữ mã cũ và giải thích của nó bên dưới.

#Jw
jKC9J
jK+CMJT

Hãy thử trực tuyến! hoặc sử dụng một trường hợp kiểm tra dễ đọc hơn .

Giải trình:

#                  Until we run into an error:
 Jw                 Read in the next line of input and call it J.
                     (When there is no line of input, error is thrown that ends program.) 

j                  Join: 
    J               all characters in input line
 KC9                and insert tab characters (C9), which we can refer to later as K.
                        (Setting it to a variable doesn't save or lose bytes.)

                   Implicit print that join with trailing newline.

j                  Join:
   CMJ              the mapping of ASCII numbers to characters in the input,
 K                  inserting tab characters in between every number
  +   T             And with a trailing 10 for the newline at the end.

1
Tôi nghĩ rằng liên kết đầu tiên của bạn không hoạt động tốt như liên kết thứ hai (tôi không in các dòng mới tôi nghĩ). Bạn có thể muốn cập nhật mã trong đó.
gowrath

8

Python 2, 105 byte

Điều này sử dụng một cách tiếp cận hơi khác so với câu trả lời của OP. Lưu ý rằng SO làm rối các tab theo nghĩa đen của tôi với khoảng trắng.

def f(s):
 o=x=''
 for c in s:
    o+=c+"  ";x+="%s    "%ord(c)
    if"\n"==c:print o[:-1],x;o=x=''
 print o+"\n"+x

Dùng thử trực tuyến


Sẽ không x+=ord(c)+" "ngắn hơn "%s "%ord(c)?
DJMcMayhem

@DJMcMayhem Bạn không thể nối một số nguyên vào một chuỗi. x+=`ord(c)`+" "là cùng chiều dài.
mbomb007

8

Tổ hợp phím Vim, 86, 77

:g/^/norm A<C-v><C-v>10<C-v><esc>Yp:s/./\=char2nr(submatch(0))."\t"/g<C-v><cr>k:s/./&\t/g<C-v><cr>
:%s/<C-v><cr>0<cr>

Đây là cách quá dài, nhưng đó là những gì bạn nhận được khi sử dụng evaltính năng của vim ( \=).


6
Không thể biết bạn \=đang giải thích tính năng eval hay khuôn mặt buồn bã vì bạn đang sử dụng tính năng eval ...
admBorkBork

2
@timmyD Đầu tiên. Đây là khuôn mặt buồn của tôi. D;
DJMcMayhem


6

Perl, > 33 31 byte

Bao gồm +3 cho -F(không thể kết hợp với -evà mã cũng 'vậy, nên không gian và -cũng được tính).

Chạy với đầu vào trên STDIN hoặc cung cấp một hoặc nhiều tên tệp làm đối số

perl -M5.010 asciidump.pl <<< "Hoi"

asciidump.pl

#!/usr/bin/perl -F
$"=v9;say"@F@{[unpack'W*']}"

Đầu ra không thẩm mỹ nếu văn bản chứa một tab hoặc không có dòng mới cuối cùng


5

Bình thường, 21 byte

j.imjC9d.zmjC9+CMdT.z

Đây là một mục từ một trong những "lập trình viên Pyth chết tiệt" ;)

Một chương trình lấy đầu vào của chuỗi đa dòng không trích dẫn trên STDIN và in kết quả. Điều này giả định rằng tất cả các đầu vào có một dòng mới. Nếu bạn muốn nó xử lý không có dòng mới, hãy thêm <vào đầu chương trình và )_3ở cuối.

Dùng thử trực tuyến

Đầu ra cho trường hợp thử nghiệm rất khó nhìn thấy trong trình thông dịch trực tuyến, vì vậy tôi đã đưa nó vào đây:

#   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   t   (   )       {
105 110 116 32  109 97  105 110 116 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

Làm thế nào nó hoạt động

j.imjC9d.zmjC9+CMdT.z  Program. Input: .z (All of STDIN split on newlines)
     C9                 Yield tab character by taking chr(9)
    j                   Join on tab
   m   d.z             Map that over .z
               CM       Map ord()
              +   T     Append 10
           jC9          Join on tab
          m      d .z  Map that over .z
 .i                    Interleave the results of the two mappings
j                      Join on newlines
                       Implicitly print

bạn có thể lưu 2 byte bằng cách loại bỏ .zvà lấy đầu vào làm danh sách các dòng
Maltysen

1
@Maltysen Đánh giá bằng câu hỏi và các câu trả lời khác, tôi nghĩ rằng việc chia nhỏ dòng mới là một phần của thử thách.
TheBikingViking

5

C, 136 117 114 byte

#define p(s)while(l[i])printf(s,l[i++]);i=0;puts("")
char l[99];i;f(f){while(fgets(l,99,f)){p("%c\t");p("%d\t");}}

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("");}}

Có thể được kiểm tra như thế này

infile;
main(c,v)char**v;
{
    infile=fopen(v[1],"r");
    f(infile);    
}

char**vbên trong main()sẽ giúp bạn tiết kiệm được 2 nhân vật ở đó ..
Alexis Wilke

Uh, tôi chỉ đếm 114 byte trong mã đó. Tôi nghĩ rằng bạn đang sử dụng CRLF thay vì LF (117-> 115), cộng với bạn có một dòng mới (115-> 114).
Tim as

4

PowerShell v2 +, 85 byte

gc $args|%{$a=$b='';$_-split'(.)'-ne''|%{$a+="$_`t";$b+="$(+[char]$_)`t"};$a;$b+"10"}

Đầu vào là thông qua một đường dẫn đến một tập tin. Chúng tôi sau đó Get-Content(bí danh gc) trên tệp đó, tự động phân tách trên dòng mới. Chúng tôi lặp lại từng cái một |%{...}. Bắt đầu bằng cách thiết lập $a$bđến một chuỗi trống - đây là các ký tự ASCII và các điểm mã tương ứng. Sau đó, chúng tôi sẽ -splitnhập dòng trên mỗi ký tự, giữ nó (.)và xóa các giá trị trống -ne''(đó là do cách phân tích regex .NET), sau đó gửi chúng vào một vòng lặp khác.

Mỗi vòng lặp bên trong, chúng ta nối chuỗi ký tự hiện tại với một tab `tvà thêm nó vào $a. Tương tự như vậy $b, ngoại trừ chúng ta rõ ràng đang chọn một charvà sau đó là một int +.

Bên ngoài vòng lặp bên trong, chúng tôi đặt kết quả $a$b(với một người chỉ định nguồn cấp dữ liệu, vì điều đó sẽ không bao giờ xuất hiện trong vòng lặp của chúng tôi) trên đường ống dẫn. Những người được tập hợp với một ẩn Write-Outputkhi hoàn thành chương trình.

Thí dụ

(với sự hiểu biết rằng tôi đã có một nguồn cấp dữ liệu kéo dài và Markdown xử lý ký tự tab)

PS C:\Tools\Scripts\golfing> .\aliens-only-understand-ascii.ps1 '.\aliens-only-understand-ascii.txt'
#   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   t   (   )       {   
105 110 116 32  109 97  105 110 116 40  41  32  123 10
                p   r   i   n   t   f   (   "   h   e   l   l   o   w   ,       w   o   r   l   d   \   n   "   )   ;   
32  32  32  32  112 114 105 110 116 102 40  34  104 101 108 108 111 119 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

Chết tiệt, tôi vừa viết một câu trả lời PowerShell trong khi bằng cách nào đó quản lý để hoàn toàn bỏ lỡ câu trả lời này! Luôn luôn vui mừng khi thấy posh đại diện mặc dù! :)
nghĩa tự do

4

> <> (Cá), 48 byte

>i:0(?v::oa=?v9o
2';'oa<.20r  <~p3
o9nv?=0l
voa<

Một nhiệm vụ ngôn ngữ tỏa sáng tại! Tôi chắc rằng tôi có thể đã chơi gôn thêm một chút nữa, nhưng đó là một tuần dài. Có thể hãy xem nó sau mặc dù.

Hãy thử trực tuyến!

Thay thế, hãy thử trực tuyến, nó trông đẹp hơn theo ý kiến ​​của tôi, nhưng gói văn bản gây rối một chút cho đầu vào với các dòng dài như trường hợp thử nghiệm.


4

PHP, 131 115 byte

Chỉ cần một FGITW, có lẽ tôi có thể cải thiện nó nhiều hơn. Hóa ra, tôi có thể!

Phiên bản đầu tiên ở mức 131 byte:

<?$s=file($argv[1]);foreach($s as$l){$a=str_split(trim($l));echo join(' ',$a).'
';$i=0;while($c=ord($l{$i++}))echo$c.'  ';echo'
';};

Tên tệp được cung cấp làm đối số đầu tiên sau tên tập lệnh: php aliens.php helloworld.c

Phiên bản thứ hai ở mức 115 byte:

function($s){foreach($s as$l){$a=str_split($l);echo join('  ',$a);$i=0;while($c=ord($a[$i++]))echo$c.'  ';echo'
';}};

Phiên bản đầu tiên chiếm thiếu các dòng mới ở cuối dòng, nhưng sau khi làm rõ thêm, chúng ta có thể bỏ mã đó ra và đặt mọi thứ vào một hàm để lưu 16 byte.

Các ký tự khoảng trắng join(' ',$a)cũng như trong echo$c.' 'là các ký tự tab = \t. Các dòng mới trong mã là về mục đích.


3

Python 3, 89 77 byte

phiên bản golf nhiều hơn dựa trên cùng một ý tưởng:

def f(s):
 for a in s:print(*map('{:>4}'.format,[*a,*a.encode()]),end='\n\n')

Nếu có '\ t' trong đầu vào, sau đó thay đổi 4thành a 9.

Phiên bản trước:

def f(s):
 for l in s:
  print(*l,sep='\t',end='');print(*l.encode(),sep='\t',end='\n\n')

Đưa ra một danh sách các chuỗi, mỗi chuỗi kết thúc bằng một '\ n'.


protip: bạn có thể để lại các báo cáo in vào cuối for l in snghĩa làfor l in s:print(*l,sep='\t',end='');print(*l.encode(),sep='\t',end='\n\n')
Lemon

Tôi chưa thử nó, nhưng tôi nghĩ có thể nghỉ 8 phút vớilambda s:'\n\n'.join(*map('{:>4}'.format,[*a,*a.encode()])for a in s)
DJMcMayhem

3

Powershell, 56 byte

gc $args|%{($a=[char[]]$_)-join"    ";[int[]]$a+10-join"    "}

Script chấp nhận một filepath làm đầu vào. Get-Content tự động phân chia đầu vào thành một chuỗi các chuỗi được phân chia trên các dòng mới trong nguồn.

Từ đó tôi nhập một foreach, chuyển thành một mảng các ký tự và đặt nó thành $ a, nối nó với các tab và in nó. Tiếp theo nhưng vẫn trong foreach, tôi chuyển mảng ký tự thành một mảng số nguyên, nối thêm một nguồn cấp dữ liệu và nối lại với một tab.

Cuộc gọi trông như thế này:

PS C:\PretendFolder> .\aoua.ps1 ".\aoua.txt"

và đây là một mẫu đầu ra

#   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

2

JavaScript (ES6), 94 byte

s=>s.replace(/(.*)\n?/g,(s,n)=>n&&[...s].join`␉`+`
${[...n].map(c=>c.charCodeAt()).join`␉`}
`)

Trong đó ␉ đại diện cho ký tự tab theo nghĩa đen. Hoạt động miễn là đầu vào không chứa ký tự tab. Phiên bản 81 byte cũng yêu cầu đầu vào phải có dòng mới:

s=>s.replace(/.*\n/g,s=>[...s].join`␉`+[...s].map(c=>c.charCodeAt()).join`␉`+`
`)

Tôi nghĩ .split().map()có thể thắng .replace(). Khi đã thoát các ký tự được tối ưu hóa bằng backticks, giá trị này phải là 85 byte: s=>s.split('\n').map(c=>(s=[...c]).join('\t')+'\n'+s.map(c=>c.charCodeAt()).join('\t')).join('\n')(Xin lỗi, tôi không biết liệu có thể đưa vào backticks trong một bình luận hay không.)
Arnauld

@Arnauld Không hoạt động cho (ví dụ) một ký tự dòng mới. Ngoài ra, để bao gồm các backticks trong một bình luận, trước chúng có dấu gạch chéo ngược.
Neil

2

C #, 64 63 byte

s=>{foreach(int c in s+(s=""))s+=c+(10==c?"\n":"    ");return s;};

-1 byte bằng cách sử dụng ký tự tab thực tế thay vì \t. Lưu ý: hiển thị dưới dạng 4 khoảng trắng ở trên và 2 khoảng trắng trong phiên bản không được chỉnh sửa bên dưới.

Ung dung:

/*Func<string, string> Lambda =*/ s =>
{
    // Enumerate the ascii (int) values of the chars in s, 
    // but at the same time set input s to "" to use at the output var.
    // +(s="")   is 2 bytes less than   var o="";
    foreach (int c in s + (s=""))
        // Append the string representation of the ascii value,
        // Append new line if c was new line, otherwise append tab. 
        s += c + (10==c ? "\n" : "  ");
    return s;
};

Các kết quả:

(Lưu ý: Visual Studio đã sử dụng \r\ncho các dòng mới khi tôi dán đầu vào, do đó 13 10kết thúc dòng trong đầu ra)

Input:

#include <stdio.h>

int maint() {
    printf("hello, world\n");
    return 0;
}

Output:

35  105 110 99  108 117 100 101 32  60  115 116 100 105 111 46  104 62  13  10
13  10
105 110 116 32  109 97  105 110 116 40  41  32  123 13  10
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  13  10
32  32  32  32  114 101 116 117 114 110 32  48  59  13  10
125 

2

CJam, 27 byte

qN/{_1/9c*N+\{is9c}%+}%AN+*

Hãy thử trực tuyến!

Giải trình

q       e# Take the whole input
N/      e# Split on newlines
{       e# Map this block to every line:
_        e# Duplicate
1/       e# Split into characters
9c*      e# Join with tabs (ASCII code 9)
N+       e# Append a newline
\        e# Swap top elements
{is9c}%  e# Map each character to its ASCII code plus a tab character
+        e# Concatenate the two lines
}%      e# (end of block)
AN+*    e# Join with "10" plus a newline

Các 1/slà không cần thiết.
Martin Ender

2

PowerShell, 61 59 byte

gc m|%{$b="$_
"[0..$_.Length]
$b-join'    '
[int[]]$b-join' '}

Những điều cần lưu ý:

  • Đọc đầu vào từ một tệp có tên mtrong thư mục hiện tại.
  • Tất cả các ngắt dòng, (bao gồm cả một chuỗi được nhúng trong chuỗi sau đầu tiên $_) chỉ là các nguồn cấp dữ liệu bằng chữ (0xA), do đó, mỗi byte một byte.
  • Nội dung của các chuỗi trực tiếp sau các -jointoán tử là mỗi ký tự một tab (bất kể nó được hiển thị ở đây như thế nào).

Bị đánh cắp

Get-Content m | ForEach-Object -Process { # Read the file line by line
    $b = "$_`n"[0..$_.Length]   # Line by line processing strips line endings, so add a newline
                                # Index operator on a [string] returns a [char], or given a [range], a [char[]]
                                # Using $_.Length automatically accounts for the extra linebreak (0 based index)
    $b -join "`t"               # PowerShell displays [char] as the printable character by default, so join the array with a tab
    [int[]]$b -join "`t"        # We need to convert the [char]s to an [int]s so we can display it as a number
                                # So cast the [char[]] as [int[]], then join with tab again

}

Mã của bạn đang in ascii 13, dòng mới thay vì 10, trả lại vận chuyển như trong ví dụ đầu ra của thử thách
Chirishman

@Chirishman PowerShell chỉ hỗ trợ sử dụng ASCII 10 cho các ngắt dòng trong các tệp .ps1, nhưng có thể rất khó để làm như vậy trong Windows với hầu hết các trình soạn thảo văn bản. Sử dụng SCiTE hoặc Notepad ++ hoặc các trình soạn thảo nhận biết kết thúc dòng khác, bạn có thể đảm bảo nó sử dụng các kết thúc unix. Khi bạn chắc chắn rằng tệp không chứa bất kỳ số 13 nào, nó sẽ in số 10.
nghĩa tự do

0

Java, 202 byte

s->{for(String g : s.split("\n")){g.chars().forEach(c->System.out.print((char)c+"   "));System.out.println();g.chars().forEach(c->System.out.print(c+(c<10?"  ":c<100?"  ":" ")));System.out.println();}};

Tôi thậm chí không thể bận tâm làm cho nó ngắn hơn ..


0

Haskell - 71 byte

f q=unlines[(x>>=(++"\t").show.ord)++'\n':intersperse '\t'x|x<-lines q]

-1

Python 3, 92 97 107 byte

for i trong danh sách (open (input ()). read (). split ("\ n")): cho j trong i: print (i + "\ n" + ord (j))

p=print
for i in list(open(input()).read().split("\n"))
    s=t=''
    for j in i:
        r=str(ord(j))
        s+=j+' '*len(r)
        t+=r+' '
    p(s)
    p(t)

Điều này là chưa được kiểm tra, nhưng nên làm việc.

Cảm ơn @gowrath đã chỉ ra rằng mã không hoạt động như câu hỏi chỉ định.


Tại sao không? Tất cả các input()lệnh đang làm ở đó là lấy tên của tệp để mở.
sonrad10

@ellorath oh, ok.
sonrad10

Điều này không che lấp các đầu ra văn bản và ascii như trong đặc tả câu hỏi; chỉ in số.
gowrath

@ellorath cảm ơn, tôi sẽ sửa cái asap đó.
sonrad10

@ sonrad10 Xóa cho đến khi cố định.
mbomb007
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.