Berikut ini adalah font 5 oleh 7 piksel untuk digit 0 hingga 9:
.███.
█...█
█...█
█...█
█...█
█...█
.███.
..█..
███..
..█..
..█..
..█..
..█..
█████
.███.
█...█
....█
...█.
..█..
.█...
█████
.███.
█...█
....█
..██.
....█
█...█
.███.
█..█.
█..█.
█..█.
█████
...█.
...█.
...█.
█████
█....
█....
.███.
....█
█...█
.███.
.███.
█...█
█....
████.
█...█
█...█
.███.
█████
....█
....█
...█.
...█.
..█..
..█..
.███.
█...█
█...█
.███.
█...█
█...█
.███.
.███.
█...█
█...█
.████
....█
█...█
.███.
(Font ini dan halaman ini mungkin akan terlihat lebih baik jika Anda menjalankan kode JavaScipt ini di konsol browser Anda atau di bilah URL yang diawali oleh javascript:
:. $('#question pre,.answer pre').css('line-height',1)
)
Tulis dua blok persegi panjang teks berukuran sama, satu untuk merepresentasikan spasi kosong ( .
) pada font di atas, dan satu untuk merepresentasikan spasi yang diisi ( █
).
Ketika dua blok teks ini diatur dalam pola 5 × 7 yang sama dengan salah satu digit di atas, maka blok teks besar yang dihasilkan harus berupa program yang mencetak digit itu ke stdout. Ini harus bekerja untuk semua 10 digit.
Misalnya, jika .
blok teks Anda adalah
---
'''
dan █
blok teks Anda tadinya
ABC
123
lalu programnya
---ABCABCABC---
'''123123123'''
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
ABC---------ABC
123'''''''''123
---ABCABCABC---
'''123123123'''
harus keluar 0
. Begitu pula dengan programnya
------ABC------
''''''123''''''
ABCABCABC------
123123123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
------ABC------
''''''123''''''
ABCABCABCABCABC
123123123123123
harus menampilkan 1
, dan seterusnya hingga program untuk 9
.
Anda dapat menggunakan potongan stack ini untuk membuat program berbentuk digit:
<style>textarea{font-family:monospace;}</style><script>function go(){var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");for(var e=document.getElementById("empty").value.split("\n"),n=document.getElementById("filled").value.split("\n"),l=[],o=0;o<7*e.length;o++){l[o]="";for(var d=0;5>d;d++)l[o]+=font[t][Math.floor(o/e.length)][d]?n[o%n.length]:e[o%e.length]}document.getElementById("output").value=l.join("\n")}font=[[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,0,1,0,0],[1,1,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[0,1,0,0,0],[1,1,1,1,1]],[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,0,0,1,0],[1,0,0,1,0],[1,0,0,1,0],[1,1,1,1,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,0,1,0]],[[1,1,1,1,1],[1,0,0,0,0],[1,0,0,0,0],[0,1,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,0],[1,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[1,1,1,1,1],[0,0,0,0,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,0,1,0],[0,0,1,0,0],[0,0,1,0,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,1],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]]]</script><textarea id='empty' rows='8' cols='32' placeholder='empty space text block...'></textarea><textarea id='filled' rows='8' cols='32' placeholder='filled space text block...'></textarea><br>Digit <input id='digit' type='text' value='0'> <button type='button' onclick='go()'>Generate</button><br><br><textarea id='output' rows='16' cols='64' placeholder='output...' style='background-color: #eee;' readonly></textarea>
Detail
- Tak satu pun dari 10 program blok teks besar harus memerlukan input. Hanya menampilkan satu digit plus satu baris tambahan opsional. Output ke stdout atau alternatif serupa.
- Tidak ada program yang dapat membaca atau mengakses kode sumbernya sendiri. Perlakukan ini seperti tantangan quine yang ketat .
- Blok teks mungkin tidak identik dan harus memiliki dimensi bukan nol.
- Blok teks dapat berisi karakter apa pun kecuali terminator baris .
- 10 program harus merupakan program lengkap yang ditulis dalam bahasa yang sama, mereka bukan cuplikan REPL . Anda dapat secara opsional menambahkan trailing newline ke semuanya atau tidak sama sekali.
Mencetak gol
Skor Anda adalah area (tinggi kali tinggi) dari salah satu blok teks Anda. (Mereka memiliki ukuran yang sama sehingga tidak ada gunanya menghitung kedua blok.) Area contoh ini adalah 3 dengan 2, untuk skor 6.
Skor terendah menang. Dalam hal ikatan, jawaban yang terpilih tertinggi menang.
sumber
var t=parseInt(document.getElementById("digit").value[0]);if(isNaN(t))return void alert("Invalid digit.");
dapat ditulis sebagaivar t=document.getElementById("digit").value[0]/1;if(t!=t)return void alert("Invalid digit.");
, yang sama tetapi lebih pendek. Ada beberapa hal lagi yang dapat Anda tingkatkan di dalamnya, tetapi itu memang terlihat hebat!text blocks may not be identical
sangat? Saya ingin melihat seseorang melanggar aturan ini, dengan memberikan dua kode kunci yang identik, yang secara ajaib mengembalikan angka yang berbeda, ketika setiap angka persis kode yang sama ^^Jawaban:
CJam,
2018141312 * 1 = 12Cobalah online: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
Blok kosong
Blok padat
Penjelasan
Saya menggunakan strategi yang mirip dengan solusi Sp3000 , sehingga setiap blok melakukan perkalian, penambahan, dan (mungkin) operasi modulo pada variabel dan menyimpan nilai kembali. Untuk menemukan solusi optimal, saya menggunakan kekuatan kasar yang baik. Saya menulis sebuah program yang mencari ruang dari semua nilai awal yang mungkin (nilai awal variabel CJam) dan jutaan kemungkinan pasangan fungsi transformasi sehingga output untuk setiap bentuk digit unik. Kemudian, saya memfilter hasil untuk yang sedemikian rupa sehingga hasil akhir untuk bentuk digit yang berakhir dengan blok kosong, yang ada 8, dapat dipetakan kembali ke hasil yang benar melalui multiply, add, dan modulo formula lainnya.
Setelah beberapa hari mencari CPU, hasil terbaik sejauh ini adalah ke ukuran 12! Solusi ini dimulai dengan nilai
11
, fungsi transformasi blok kosong adalahx * 16 + 20
, fungsi hasil blok kosong adalahx % 13
, fungsi transformasi blok padat(x + 9) % 33
, dan fungsi hasil blok padat adalahx / 4
.sumber
> <> (Ikan) , 5 * 10 = 50
Blok kosong
Blok padat
Kode ini tidak mengandung logika atau aritmatika hanya menggunakan pengarahan ulang statis>>> pointer instruksi 2D (IP) dengan 'mirror' (
/
dan\
) dan dua 'panah' (<
danv
). Satu-satunya pengontrol aliran lainnya adalah 'trampolin' (!
) yang melompati karakter berikutnya.IP dimulai dari sudut kiri atas menuju Timur. Setelah beberapa pengalihan mencapai angka itu didorong ke tumpukan dan dicetak dengan
n
dan program berakhir;
.Alur program
Blok 'mengenali' keadaan saat ini dari program dari fakta bahwa titik mana IP masuk dan berdasarkan negara itu memutuskan ke arah mana harus mengeluarkan pointer (blok mana yang harus dieksekusi berikutnya) dan di mana posisi yang tepat pointer harus pergi (yang akan menjadi status baru). Tentu saja blok tidak melakukan logika apa pun semua perilaku ini berasal dari pengalihan.
sumber
CJam,
232219 * 1 = 19Blok kosong:
Blok padat:
Cobalah online .
Saya mencoba untuk beruntung dengan kebetulan matematika dan gagal, jadi inilah pendekatan yang sedikit berbeda untuk pemetaan keunikan dari solusi Martin.
Mulailah dengan 16. Blok kosong tambahkan 1 dan ambil modulo 11. Blok padat dikalikan dengan -1, tambahkan 11, kalikan dengan 3 lalu ambil modulo 13. Ini secara ajaib memetakan
03456789
(digit yang berakhir di blok kosong) ke41753026
, yang kami gunakan untuk mengindeks untuk mendapatkan yang benar.12
peta dengan rapi89
, yang bisa kita perbaiki dengan mengurangi 7.sumber
CJam,
2827 x 1 = 27Ini awal.
Blok kosong
Blok padat
Uji di sini. Saya tidak dapat memberi Anda tautan permanen dengan kode tersebut, karena kodenya terlalu panjang, jadi Anda harus menyalinnya secara manual dari cuplikan dalam tantangan.
Idenya adalah untuk hash bentuknya sebagai berikut:
U
.U
ke total berjalanW
(yang dimulai dari-1
). Pada akhirnya, kita ambil modulo ini15
, yang kebetulan memberikan hasil unik, yang digunakan untuk mengindeks ke dalam string pencarian.sumber