Mencetak string tanpa berbagi karakter


15

Sunting: Diizinkan untuk menggunakan kembali ruang putih.

Tugas Anda adalah menulis n program (atau fungsi, atau badan fungsi tanpa menggunakan parameter atau nama fungsi) dalam bahasa yang sama. Program k harus menghasilkan angka (kardinal) k dalam bahasa Inggris standar dalam huruf kecil (dengan baris tambahan opsional). Jadi program pertama harus menampilkan one, yang kedua harus mengeluarkan two, dll. Untuk angka yang memiliki dua bagian, mereka harus dipisahkan oleh tanda hubung seperti twenty-one.

Tetapi tidak ada dua program dalam kiriman Anda yang dapat membagikan karakter non-spasi atau karakter spasi yang melakukan pekerjaan yang bermanfaat. Misalnya, jika program pertama Anda adil "one", maka tidak ada " o ndan edapat digunakan lagi di program Anda yang lain.

Anda dapat menggunakan karakter spasi putih (spasi, baris baru dan tab) dalam dua atau lebih program, jika mereka hanya berfungsi sebagai pemisah atau lekukan dan tidak melakukan apa pun sendiri. Jadi Anda tidak dapat menggunakannya kembali dalam bahasa Whitespace , dan Anda tidak dapat menggunakannya dalam string di lebih dari satu program.

Anda hanya dapat menggunakan karakter ASCII yang dapat dicetak, tab, dan baris baru (termasuk CR dan LF). Setiap program harus mengandung setidaknya 1 karakter.

Skor Anda adalah jumlah dari 1 / ukuran program ^ 1,5. Kemenangan skor tertinggi. Anda dapat menggunakan Stack Snippet ini ( atau kode CJam ini ) untuk menghitung skor Anda:

function updatescore(a){var l=a.value.split("\n"),s=0;for(var i=0;i<l.length;i++){var t=l[i].length;t-=t&&l[i][t-1]=="\r";if(t)s+=Math.pow(t,-1.5);}document.getElementById('result').textContent=s;}
<textarea id="input" placeholder="Put your code here, one per line." style="width:100%;height:150px;box-sizing:border-box" oninput="updatescore(this)" onpropertychange="updatescore(this)"></textarea><div>Your score: <span id="result">0</span></div>


Satu aturan penilaian yang lebih baik mungkin jumlah 1 / (ukuran program + c) ^ 1,5, di mana c adalah konstanta. Tapi saya pikir mungkin sudah terlambat untuk mengubahnya.
jimmy23013

Bisakah kita menambahkan pengganda untuk mendapatkan nomor kardinal yang lebih tinggi, karena tampaknya itulah tujuannya? Saya mencapai dua belas, lebih tinggi dari yang lain, tetapi masih kalah.
mbomb007

@ mbomb007 Maaf karena sengaja membuat nilai Headecks lebih rendah. Tetapi jika Headsecks memiliki skor yang hampir sama dengan orang lain, saya kira Glypho akan menang terlalu banyak (belum lagi Lenguage).
jimmy23013

Saya ingin melakukan ini di whitespace :(
YoYoYonnY

1
@ mbomb007 Jika saya mengajukan pertanyaan serupa lagi saya mungkin akan menambahkan konstanta kecil ke ukuran program dalam skor. Tetapi terlalu sewenang-wenang untuk mengubah pertanyaan ini.
jimmy23013

Jawaban:


6

gs2 , 0.38669200758867045

Hapus spasi putih dari semua program ini tetapi tiga , itu hanya untuk keterbacaan (batuk) . satu dan enam adalah program gs2 yang macet (dengan underflow dari stack), yang dengan mudah membuatnya menjadi quines .

satu (3 byte)

one

dua (1384 byte)

A?"A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0000000000000
000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000A?"A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"00000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000A?"A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000

tiga (92 byte)

0a 21 2c 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 2f 20 0a 21 28 3c 0a 21 2c 21 20 21 20
21 20 21 20 2f 20 0a 21 28 3c 45 21 20 21 20 21
2f 20 0a 21 28 3c 0a 21 2c 21 20 2f 20 0a 21 28
3c 0a 21 2c 21 20 2f 20 0a 21 28 3c

Banyak spasi yang signifikan jadi inilah dump hex. Ini memiliki karakter umpan baris tunggal di awal:


!,! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / 
!(<
!,! ! ! ! / 
!(<E! ! !/ 
!(<
!,! / 
!(<
!,! / 
!(<

empat (276 byte)

f$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f
$f$31f$f$31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31Mf$f$f$31f$f$31f
$f$31f$f$31f$f$31f$f$31f$f$31f$f$31M

lima (178 byte)

hd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&
&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&K

enam (3 byte)

six

Saya tidak melihat persyaratan itu - saya akan melalui dan memperbaiki solusi perantara.
Lynn

Saya bisa menggunakan 20through 7E, 09(tab), 0A(LF), dan 0D(CR), kan?
Lynn

Iya. Diedit untuk memungkinkan CR secara eksplisit.
jimmy23013

The 1dalam lima salah cetak; Saya sudah pergi dan menghapusnya. Saya akan memperbaiki tiga sekarang.
Lynn

2
Program satu dan enam pada dasarnya adalah kesalahan sintaksis yang membuang kode sumber ke STDOUT dan menunjukkan kesalahan pada STDERR. Tampaknya konsensus bahwa ini OK (jadi pujian) tetapi Anda harus menyebutkannya dalam jawaban Anda.
Dennis

13

CJam, 0,24075

Program

BA1]100cf|
"two"
{hree}`W<7a.-
N)92+_9+_6+_2~+
S(84^I^U$F^X$G^Y$(
's'i'x

Terima kasih kepada @ user23013 untuk sarannya untuk menggunakan 'untuk enam .

Keluaran, panjang, skor, karakter yang digunakan

one    10  0.03162          01       AB         ]    c f         |  
two     5  0.08944  "                                     o  tw     
three  13  0.02133        -.     7  <        W     `a e h  r    { } 
four   15  0.01721      )+    2 6  9      N       _                ~
five   18  0.01309   $ (       4  8    FGI SU XY ^                  
six     6  0.06804    '                                  i  s  x

Verifikasi sendiri hasilnya dalam juru bahasa CJam .


6

Insomnia , 0.100688383057110116

Hanya untuk memulai sesuatu. Sangat tidak mungkin ini akan menang. Di bawah skema penilaian saat ini, bahasa apa pun yang dapat dicetak onedalam 5 karakter atau kurang memiliki keuntungan luar biasa.

satu (8 byte, 0,04419417382415922)

uuyp>~p~

dua (9 byte, 0,037037037037037035)

oeoojdoLj

tiga (21 byte, 0,010391328106475828)

*FFFFF
=
=z"
n=nnFzzB

empat (23 byte, 0,009065844089438033)

)HGGGkGGGtGkGk<GGh$HGGt

4

Headsecks , 0,044623631135793776

Dihasilkan di sini

Bahasa ini adalah substitusi BF sederhana di mana satu-satunya hal yang penting adalah nilai karakter modulo 8.

Sayangnya, program yang lebih lama memberikan skor yang lebih buruk, meskipun bisa mencapai dua belas ! (Saya bisa menjadi lebih tinggi jika saya bisa menggunakan ASCII yang tidak dapat dicetak, dan Unicode.)

satu

##%%%%%%%&##$%&#&%&%%%%%%%%%&

dua

--------+--.+++,-..+++.--------.

tiga

5555555535563334566555555555555633333333336555555555555566

empat

==;=====>;<=>>;;;;;;;;;>;;;;;;>===>

lima

EECEEEEEFCDEFFCCCFCEFCCCCCCDEFFCCEFCCCDEFF

enam

KKMMMMMMMMMNKKLMNKNMMMMMMMMMMNMKMMMNKLMNN

tujuh

SSUUUUUUUUUVSSTUVSVSSSSSUVSSSTUVVSUUUVSTUVUVSSUVSSSTUVVSSSSSSSSSV

delapan

]][]]]]]^[\]^]^[[[[^]]^[^[[[[[[[[[[[[^

sembilan

cceeeeeeefccdeffeeeeefcccccfeeeeeeeeef

sepuluh

mmmmmmmmkmmnkkklmnnkkkkmnkkklmnnkkkkkkkkkn

sebelas

uusuuuuuvstuvuvsssssssvuuuuuuuvsuuuvstuvuvssuvssstuvvsssssssssv

duabelas

}}}}}}}}{}}~{{{|}~~{{{~{}~{{{|}~~{{{{{{{~{{{{{{{{{{~{{}~{{{|}~~

Anda hanya dapat menggunakan karakter, tab, dan baris ASCII yang dapat dicetak.
jimmy23013

@ user23013 saya melakukan sebanyak yang saya bisa, dan saya sampai 12.
mbomb007

2

/// , 0.19245008972987526

one

Jawaban ini terinspirasi oleh jawaban @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, di mana ia berkata

Di bawah skema penilaian saat ini, bahasa apa pun yang dapat dicetak onedalam 5 karakter atau kurang memiliki keuntungan luar biasa.


OK, algoritma skoring tampaknya memiliki celah. Permainan yang bagus.
Dennis

Nah, pertanyaan ini lama sekali hanya untuk mendapatkan metode penilaian yang lebih baik. Dan itu masih tidak berfungsi dengan baik ... Ini juga berfungsi di PHP, ASP, dll.
jimmy23013

0

SmileBASIC, .10062

"satu"

?"one

"dua"

PRINT MID$(@two,1,3)

Jawaban saya yang lain lebih menarik, tetapi yang ini mendapat skor lebih tinggi.

Strategi penting untuk mendapatkan rantai terpanjang adalah menggunakan lebih banyak karakter untuk menghemat karakter UNIK (misalnya, menggunakan x - -xdalam program 2 untuk menyimpan y + yuntuk program 3)

Masalah dengan sistem penilaian adalah skornya 2 program pendek lebih baik dari 3 program panjang, jadi tidak ada alasan untuk menyimpan karakter untuk program selanjutnya jika itu membuat program saat ini lebih lama.

Selain itu, nilai program individu pendek lebih tinggi dari ukuran TOTAL yang lebih kecil. Jika saya bertukar ?danPRINT dalam jawaban saya, saya dapat menyimpan 1 karakter, tetapi skor saya SETENGAH.

Saya pikir akan lebih baik untuk mendasarkannya hanya pada sejumlah program, dengan ukuran total sebagai tiebreak.


3
Saya pikir kedua program berbagi o...
JayCe
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.