Mengatur Pemandangan:
Ini adalah sore yang biasa-biasa saja, ketika Anda bersantai setelah hari yang panjang dengan terlibat dalam hiburan favorit Anda: menjawab sejumlah besar pertanyaan menawan di PPCG. Ini bukan hari yang baik untuk Anda; programmer Pyth sialan itu terus mendapatkan jawaban terbaik dan itu membunuh getaran Anda. Tiba-tiba, Anda melihat pertanyaan baru telah diposting! Anda mengambil keputusan; bukan kali ini CJammers. Dengan marah, Anda mulai mengetik, melahirkan aliran karakter; janin dari loop BrainFuck yang agung seperti produk akhir Anda nantinya. Anda mengetik dan mengetik. Lebih cepat! Lebih cepat lagi! Anda sangat fokus, Anda bahkan tidak melihat lampu di layar Anda mulai berkedip-kedip. Tiba-tiba, monitor menyala hijau, simbol seperti alien yang menempel pada desktop. Menggunakan keterampilan sempurna Anda, Andacat ~/Desktop/aliensymbol
dan disajikan dengan banyak angka, pesan! Menjadi programmer PPCG yang cerdik seperti Anda, Anda perhatikan bahwa itu terlihat seperti ASCII. Tidak masalah bagi Anda, Anda print(chr(i) for i in file)
dan menguraikan pesan. Pikiran pertama Anda: "Saya perlu membagikan ini dengan komunitas!".
...
Siapa yang akan memikirkannya? Bahwa orang pertama yang melakukan kontak dengan alien akan menjadi programmer PPCG yang rendah hati. Mengapa kita Mungkin itu karena kita adalah lambang kecerdasan manusia. Atau mungkin karena BrainFuck hampir sedekat yang kita miliki dengan bahasa asing. Namun demikian, alien - menjadi bentuk kehidupan yang sangat cerdas - ingin menguji apakah mereka harus mengklasifikasikan ras manusia sebagai cerdas atau tidak. Sebagai ujian kecakapan mental kami, para alien telah meminta kami untuk mengirimi mereka beberapa program komputer untuk menunjukkan bahwa kami berbudaya secara teknologi. Masalahnya adalah, satu-satunya bahasa manusia yang mereka pahami adalah angka ASCII!
Bantu manusia menunjukkan kepada makhluk-makhluk itu siapa alfa intelektual sesungguhnya. Kami perlu mengirimi mereka skrip yang akan mengubah kode sumber berbasis teks kami menjadi versi ASCII numerik mereka. Sayangnya, karena teknologi kami yang terbelakang (terima kasih Obama), kami harus mengirimkan program penerjemahan sekecil mungkin. Untung mereka memilih untuk menghubungi PPCG!
Tantangan:
Premis dari tantangan ini sederhana: Anda harus menulis sebuah program yang akan mengambil kode sumber program apa pun (atau file teks umum apa pun dalam hal ini), dan mengeluarkan versi yang dipisahkan dengan spasi dengan terjemahan ASCII di bawah setiap baris. Yaitu, diberi input file teks, Anda perlu menampilkan setiap baris file tersebut diikuti oleh baris yang berisi representasi ASCII dari setiap karakter di baris di atasnya (dengan setiap angka yang sesuai dengan karakter yang diwakilinya).
Contoh akan sangat memperjelas hal ini. Mengambil kode sumber yang terkenal hello world
sebagai input:
#include <stdio.h>
int main() {
printf("hello, world\n");
return 0;
}
program Anda harus menampilkan:
# 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
Detail Implementasi:
Anda dapat memilih untuk mengambil input dalam bentuk apa pun yang Anda inginkan (membuka file, pipa baris perintah, parameter fungsi dll.) Dan Anda harus output ke stdout atau mengembalikan output dari suatu fungsi.
Hal-hal yang perlu diperhatikan
- Setiap karakter dalam output dipisahkan oleh '\ t' untuk memungkinkan spasi 3 digit pada baris di bawah ini untuk berbaris (kami akan menganggap tab Anda disetel ke 4 spasi atau lebih).
- Baris baru ditampilkan pada baris yang ditekan kembali (perhatikan 10 di contoh)
- Persyaratan pencetakan '\ t' dan '\ n' lemah. Keluaran Anda harus, dalam pengertian umum, terlihat menyenangkan bagi mata (perlu menunjukkan kepada orang-orang asing itu kami memiliki rasa estetika juga), dan jika Anda dapat menekuk dua poin sebelumnya sambil mempertahankan integritas visual, Anda akan dimaafkan.
- Anda dapat memilih untuk berasumsi apakah ada baris baru di akhir baris terakhir.
Mencetak gol
Ini adalah kode-golf sehingga program terpendek menang. Catatan, meskipun program Anda bukan yang terpendek, tetapi menggunakan trik yang benar-benar rapi relatif terhadap bahasa yang Anda gunakan, banyak +1 untuk Anda!
Semoga berhasil. Peringkat kecerdasan intergalaksi umat manusia berada di pundak Anda.
Catatan: Maafkan lubang plot. Saya bukan penulis : D
Jawaban:
Dyalog APL , 14 byte
Mengambil daftar string yang mencakup urutan baris baru (10 atau 13 10 dll.)
↑
matrif daftar daftar yang terdiri dari(
...)¨
untuk setiap baris kembali ...⊢
teks itu sendiri,[.5]
diikuti dalam dimensi baru sebelum dimensi pertama oleh⎕UCS
yang U nicode C haracter S et poin kodeTryAPL online!
sumber
f
dipanggil langsung pada input. Untuk memanggil fungsi satu kali per baris, jika mau dikatakanf¨
.Pyth,
1713 byteSatu lagi programmer Pyth itu. Maaf.
Kode baru mengharuskan setiap baris untuk dibungkus dengan tanda kutip dan melarikan diri (termasuk baris baru jika Anda ingin mereka dicetak), tetapi menempatkan baris baru tambahan antara baris dan ASCII.
Cobalah online!
Penjelasan:
Saya menyimpan kode lama dan penjelasannya di bawah.
Cobalah online! atau gunakan test case yang lebih mudah dibaca .
Penjelasan:
sumber
Python 2, 105 byte
Ini menggunakan pendekatan yang sedikit berbeda dari jawaban OP. Perhatikan bahwa SO mengacaukan tab literal saya dengan spasi.
Cobalah online
sumber
x+=ord(c)+" "
lebih pendek dari itu"%s "%ord(c)
?x+=`ord(c)`+" "
memiliki panjang yang sama.Vim,
86,77 penekanan tombolIni terlalu lama, tapi itulah yang Anda dapatkan ketika Anda menggunakan
eval
fitur vim (\=
).sumber
\=
menjelaskan fitur eval, atau wajah sedih karena Anda menggunakan fitur eval ...D;
Perl,
> 3331 byteTermasuk +3 untuk
-F
(tidak dapat digabungkan dengan-e
dan kode'
juga, jadi ruang dan-
dihitung juga).Jalankan dengan input pada STDIN atau berikan satu atau lebih nama file sebagai argumen
asciidump.pl
Output tidak estetika jika teks mengandung tab atau tidak ada baris akhir
sumber
Pyth, 21 byte
Berikut ini entri dari salah satu "programmer Pyth sialan itu" ;)
Sebuah program yang mengambil input dari string multiline yang tidak dikutip pada STDIN dan mencetak hasilnya. Ini mengasumsikan bahwa semua input memiliki baris baru. Jika Anda ingin berurusan dengan tanpa baris baru, tambahkan
<
di awal program dan)_3
di akhir.Cobalah online
Output untuk test case sulit dilihat di penerjemah online, jadi saya sudah memasukkannya di sini:
Bagaimana itu bekerja
sumber
.z
dan mengambil input sebagai daftar barisC,
136117114 Byteschar 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("");}}
Dapat diuji seperti ini
sumber
char**v
di dalammain()
akan menyelamatkan Anda 2 karakter di sana ..PowerShell v2 +, 85 byte
Input melalui jalur ke file. Kami kemudian
Get-Content
(aliasgc
) pada file itu, yang secara otomatis terbagi pada baris baru. Kami mengulangi masing-masing|%{...}
. Mulai dengan mengatur$a
dan$b
ke string kosong - ini adalah karakter ASCII dan poin kode kami masing-masing. Kami kemudian-split
memasukkan baris input pada setiap karakter, menjaganya(.)
, dan menghapus nilai-nilai kosong-ne''
(itu karena bagaimana .NET regex mem-parsing), kemudian mengirimkannya ke loop lain.Setiap loop dalam, kami merangkai karakter saat ini dengan tab
`t
dan menambahkannya ke$a
. Demikian pula untuk$b
, kecuali kita secara eksplisit menggunakan sebagaichar
dan kemudian sebagai int+
.Di luar loop dalam, kami menempatkan hasilnya
$a
dan$b
(dengan penanda linefeed, karena itu tidak akan pernah muncul dalam looping kami) di pipa. Mereka dikumpulkan dengan implisitWrite-Output
pada penyelesaian program.Contoh
(dengan pemahaman bahwa saya mendapat linefeed dan Markdown merusak karakter tab)
sumber
> <> (Ikan), 48 Bytes
Tugas yang disorot oleh bahasa! Saya yakin saya mungkin bisa bermain golf sedikit lebih lama, tapi ini sudah seminggu yang panjang. Mungkin melihatnya nanti.
Cobalah online!
Alternatif, coba online yang terlihat lebih bagus menurut saya, tetapi pembungkus teks agak kacau untuk input dengan garis panjang seperti test case.
sumber
PHP,
131115 byteHanya FGITW, mungkin saya bisa memperbaikinya lebih lanjut. Ternyata saya bisa!
Versi pertama pada 131 byte:
Nama file diberikan sebagai argumen pertama setelah nama skrip:
php aliens.php helloworld.c
Versi kedua pada 115 byte:
Versi pertama menyumbang baris baru yang hilang di akhir baris, tetapi setelah klarifikasi tambahan, kita dapat meninggalkan kode itu dan meletakkan semuanya dalam fungsi untuk menghemat 16 byte.
Karakter spasi putih di
join(' ',$a)
dan jugaecho$c.' '
adalah karakter tab =\t
. Baris baru dalam kode sengaja.sumber
Python 3,
8977 bytelebih banyak versi golf berdasarkan ide yang sama:
Jika ada 'di input, maka ubah
4
ke a9
.Versi sebelumnya:
Mengambil daftar string, masing-masing berakhir dengan '\ n'.
sumber
for l in s
misfor 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 Bytes
Script menerima filepath sebagai masukan. Get-Content secara otomatis membagi input menjadi array string yang dibagi pada baris baru di sumber.
Dari sana saya memasukkan foreach, melemparkan ke array karakter dan mengaturnya menjadi $ a, bergabung dengan tab dan cetak. Selanjutnya tetapi masih dalam foreach saya melemparkan array karakter ke array integer, menambahkan linefeed dan bergabung lagi dengan tab.
Panggilannya terlihat seperti ini:
dan di sini adalah sampel keluaran
sumber
JavaScript (ES6), 94 byte
Di mana ␉ mewakili karakter tab literal. Berfungsi selama input tidak mengandung karakter tab. Versi 81-byte yang juga membutuhkan input untuk memiliki baris tambahan:
sumber
.split().map()
mungkin menang.replace()
. Setelah karakter yang lolos dioptimalkan dengan backticks, ini seharusnya 85 byte:s=>s.split('\n').map(c=>(s=[...c]).join('\t')+'\n'+s.map(c=>c.charCodeAt()).join('\t')).join('\n')
(Maaf, saya tidak tahu apakah / bagaimana backticks dapat dimasukkan dalam komentar.)C #,
6463 byte-1 byte dengan menggunakan karakter tab aktual alih-alih
\t
. Catatan: diterjemahkan sebagai 4 spasi di atas dan 2 spasi dalam versi tanpa tanda di bawah ini.Tidak Disatukan:
Hasil:
(Catatan: Visual Studio telah digunakan
\r\n
untuk baris baru ketika saya menempelkan input, karenanya13 10
baris berakhir pada output)sumber
CJam, 27 byte
Cobalah online!
Penjelasan
sumber
1/
dans
tidak diperlukan.PowerShell,
6159 byteHal yang perlu diperhatikan:
m
dalam direktori saat ini.$_
) adalah hanya baris baris yang dibutuhkan (0xA), jadi masing-masing satu byte.-join
operator masing-masing karakter tab tunggal (terlepas dari bagaimana itu diberikan di sini).Tidak disatukan
sumber
Java, 202 byte
Aku bahkan tidak bisa repot membuat ini lebih pendek ..
sumber
Haskell - 71 byte
sumber
Python 3,
92 97107 byteuntuk i dalam daftar (terbuka (input ()) .baca (). split ("\ n")): untuk j di i: print (i + "\ n" + ord (j))Ini belum diuji, tetapi harus berhasil.
Terima kasih @gowrath karena telah menunjukkan bahwa kode tidak berfungsi sebagaimana ditentukan oleh pertanyaan.
sumber
input()
perintah yang dilakukan di sana adalah mendapatkan nama file untuk dibuka.