Cetak angka yang hilang

15

Sebagai penggemar berat serial TV Hilang , saya selalu tertarik dengan urutan angka yang berulang kali muncul di episode. Angka-angka ini adalah:

4,8,15,16,23,42 (A104101)

Menggunakan bahasa pemrograman apa pun, tulis kode yang menampilkan angka-angka ini.

Mencetak:

  • Jawaban terpendek menang

  • Output tidak boleh mengandung angka atau huruf lain. Anda dapat menggunakan karakter lain sebagai pemisah, atau bahkan tanpa pemisah sama sekali.

  • Anda tidak dapat memisahkan digit dari nomor yang sama. 48_15162342 adalah jawaban yang valid, tetapi 481_5162342 tidak.

  • Anda harus menghormati pesanan.

  • Jika kode Anda tidak mengandung angka apa pun dari urutan, kurangi skor Anda hingga 30%. Aturan ini memungkinkan Anda untuk memasukkan angka secara terpisah. Misalnya:

    abcde1fg5h
    

    Merupakan kandidat yang valid karena jawabannya tidak mengandung angka 15 , hanya digitnya. Namun, setiap 4 atau 8 akan membatalkan bonus.

  • Jika kode tidak mengandung angka sama sekali, kurangi skor Anda hingga 50%. Karakter lain seperti ¹ , ² atau ³ masih berlaku untuk bonus ini.

Eduardo Hoefel
sumber
2
Terkait, pertanyaan tertutup: codegolf.stackexchange.com/q/23808/67312
Giuseppe
2
Berkaitan samar-samar: Apakah Anda belum tersesat?
Dennis
1
Apakah kita harus mencetaknya dalam urutan itu?
Titus
6
Untuk referensi di masa mendatang, kami memiliki restricted-sourcetag yang dapat digunakan di sini: meskipun sebagian besar jawaban menghindari solusi yang jelas, saya pikir tantangannya akan sedikit lebih menarik jika menggunakan angka dilarang sama sekali.
Arnauld

Jawaban:

31

Hilang , 29 27/2 = 13,5 byte

%?\>>>>>>>>>>
>>\"*"@"

Cobalah online! atau memverifikasi bahwa itu deterministik

Sepertinya bahasa yang tepat untuk digunakan.

Penjelasan:

Lost adalah bahasa 2D di mana penunjuk dimulai di mana saja , menuju ke arah mana pun . Ini umumnya mengarah ke banyak pemeriksaan ganda bahwa pointer belum masuk ke bagian awal.

...>>>>>>>>>>  These arrows filter all pointers that appear on the top line
.............  Or going vertically


%............  This flips the flag so that the program can end
.............  This stops premature termination

.?\..........  Clear the stack by skipping if a value popped from the stack is positive
.............  When the stack is empty, the \ directs the pointer down

.............  The \ directs the pointer right
..\"*"..  The string literal pushes all the Lost values to the stack

..\..........  The @ terminates the program if the % flag is switched
>>\........@.  Otherwise it clears the stack and repeats

.............  The quote here is to prevent the pointer getting stuck
............"  This happens when the pointer starts between the other quotes
Jo King
sumber
11

Jelly , 7/2 = 3,5 byte

“ƲÞIȥ’Ḥ

Mencetak angka-angka tanpa pemisah, yaitu integer 4815162342 .

Cobalah online!

Bagaimana itu bekerja

“ƲÞIȥ’adalah bijective base-250 integer literal.
Ʋ, Þ, I, Dan ȥmemiliki (1-based) indeks 154 , 21 , 74 , dan 171 di halaman kode Jelly, sehingga mereka menyandikan integer 2503154+250221+25074+171=2407581171 .

Akhirnya, (unhalve) menggandakan integer, menghasilkan 22407581171=4815162342 .

Penggandaan diperlukan, karena pengodean output langsung mengarah ke “¡9)Ƙ[’, yang berisi angka.

Dennis
sumber
9

Neim , 6 5 byte, 3 2,5 poin

Jσς§A

Penjelasan:

J     Push 48
 σ    Push 15
  ς   Push 16
   §  Push 23
    A Push 42
      Implicitly join the contents 
      of the stack together and print

Cobalah online!

Okx
sumber
6

05AB1E , skor: 10 9 7 byte / 2 = 3,5

•‘o]Ê•·

Cobalah online.

Atau 7 byte alternatif :

•’µ[%•R

Cobalah online.

Keduanya menghasilkan bilangan bulat 4815162342 .

Penjelasan:

•‘o]Ê•     # Compressed integer 2407581171
      ·    # Doubled

•’µ[%•     # Compressed integer 2432615184
      R    # Reversed

Lihat tip tambang 05AB1E ini (bagian Bagaimana cara mengompres bilangan bulat besar? ) Untuk memahami mengapa •‘o]Ê•ini 2407581171dan •’µ[%•itu 2432615184.


Old 9 byte jawab yang keluaran daftar [4,8,15,16,23,42]:

•ΓƒÇ²•т;в

-1 byte (dan karenanya skor -0,5) berkat @Emigna .

Lebih panjang dari jawaban 05AB1E lainnya , tetapi ini menampilkan daftar [4,8,15,16,23,42]bukan bilangan bulat 4815162342.

Cobalah online.

Penjelasan:

•ΓƒÇ²•       # Compressed integer 1301916192
      т;     # Integer 50 (100 halved)
        в    # Convert the first integer to Base-50 (arbitrary): [4,8,15,16,23,42]

Lihat tip tambang 05AB1E ini (bagian Bagaimana cara mengompresi bilangan bulat besar? Dan Bagaimana mengompresi daftar bilangan bulat? ) Untuk memahami mengapa •ΓƒÇ²•ada 1301916192, dan •ΓƒÇ²•50вsekarang [4,8,15,16,23,42].

Kevin Cruijssen
sumber
1
Anda bisa memiliki •ΓƒÇ²•т;вuntuk 4,5 nomor pasca-script-baik saja untuk bonus.
Emigna
@Emigna Ah, bagus! Terima kasih.
Kevin Cruijssen
6

JavaScript (ES7), 34/2 = 17 byte

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

Cobalah online!

Ini menerjemahkan dan mengevaluasi ekspresi "65058101+41**6", yang tidak mengandung digit apa pun setelah dikodekan dalam basis-64.

65058101+416=65058101+4750104241=4815162342


JavaScript (ES6), 13 byte

Solusi jelas yang membosankan.

_=>4815162342

Cobalah online!

Arnauld
sumber
6

Python 3 , 25 byte, 12,5 poin

print(*map(ord,'ዏٗ*'))

Cobalah online!

𩦦 (髒, ⿰ 馬 葬), 𧨦 (謚, ⿰ 言 ⿱⿵ 八一 皿) harganya 4 byte, tetapi U + 0657 hanya berharga 2 byte ...


Python 3 , 29 byte, 14,5 poin

print(ord('𩦦')*ord('湡'))

Cobalah online!

𩦦 (⿰ 馬 葬) adalah karakter varian 髒 yang berarti "kotor". 湡 adalah nama sungai. Dan mereka tidak ada hubungannya dengan pertanyaan ini seperti yang saya tahu.

tsh
sumber
Saya bertanya tentang aturan pemisah dan kita bisa menggunakan pemisah mana saja yang membuatnya 4815 162342valid. Dengan demikian print(*map(ord,'ዏ𧨦'))menghemat 1,5 poin :) ( print(*map(ord,'밗'))akan menghemat 2 poin tetapi telah ditetapkan sebagai tidak valid).
Jonathan Allan
4

Java 8, skor: 12 11,9 (70% dari 17 byte)

v->767*6277917L+3

Skor -0.1 berkat @RickHitchcock .

Cobalah online.

Penjelasan:

v->               // Method with empty unused parameter and long return-type
  767             //  767
     *6277917L    //  multiplied by 6277917 (as long)
              +3  //  And then 3 is added

Jawaban lama dengan skor: 12 (50% dari 24 byte):

v->(long)''*'Ⓥ'*'䧶'

Berisi karakter yang tidak patut dicetak 0x1B.

Cobalah online.

Penjelasan:

v->                   // Method with empty unused parameter and long return-type
  (long)              //  Cast the character (and therefore the result) to a long
        ''            //  27
           *'Ⓥ'       //  Multiplied by 9419
                *'䧶'  //  Multiplied by 18934

Di Jawa, karakter dapat diautobox ke integer yang memegang nilai unicode mereka. Sayangnya, unicode maksimum yang didukung untuk karakter adalah 65,535, jadi saya tidak bisa menggunakan hanya dua karakter untuk mengalikan (karena dua angka terbesar yang membagi yang diharapkan 4,815,162,342adalah 56,802dan 84,771, di mana 84,771sayangnya melebihi maksimum 65,535.
Selain itu, karena ukuran maksimum suatu intadalah 32 2 -1 ( 2,147,483,647) dan hasilnya 4,815,162,342lebih besar dari itu, sebuah pemeran eksplisit untuk long, yang dapat menampung hingga 64 2 -1 ( 9,223,372,036,854,775,807), diperlukan.


Jawaban yang membosankan akan menjadi 14 byte tanpa bonus:

v->4815162341L

Cobalah online.

Kevin Cruijssen
sumber
1
Saya suka yang ini. Cukup singkat untuk menjadi Java :)
Emigna
@Emigna Terima kasih. Sayang sekali itu membutuhkan pemain untuk longdan tidak mendukung karakter unicode yang sangat besar. Jika bukan karena dua pembatasan yang disebutkan, hanya v->'𩦦'*'湡'(15 byte, skor 7,5) sudah cukup. Tapi itu masih sangat singkat. :) Meskipun sebagian besar Java memiliki banyak, banyak kelemahan dalam hal codegolfing (duhh ..), menghitung dengan karakter karena kita tidak diperbolehkan menggunakan digit adalah salah satu dari sedikit kelebihannya. Juga cukup berguna dalam jawaban saya yang agak mirip ini .
Kevin Cruijssen
1
11,9 byte: v->767*6277917L+3
Rick Hitchcock
3
@RickHitchcock Tidak setiap hari kita melihat penghematan 0,1 byte. ;)
Arnauld
@RickHitchcock Terima kasih! Dan saya setuju dengan komentar Arnauld di atas. : D
Kevin Cruijssen
4

R, 18x0,7 = 12,6 skor

cat(9*2*267509019)

Cukup jelas sendiri, hanya beberapa aritmatika menghindari angka yang dimaksud.

JDL
sumber
4

7 , 10 byte, 27 karakter

115160723426754314105574033

Cobalah online!

Representasi paket program ini pada disk adalah ( xxdformat):

00000000: 269c 3a71 6f63 308b 7c0d                 &.:qoc0.|.

Penjelasan

Kami telah melihat urutan angka-angka ini sebelumnya, di Automate Saving the World , yang tentang mencetak angka secara berkala, membuatnya menarik dengan mengharuskan penggunaan bahasa yang sangat lama. Banyak bahasa yang lebih baru dapat memiliki tikungannya sendiri yang membuat tantangan ini menarik.(Ya, paragraf ini, dan sebenarnya alasan saya mulai menulis jawaban ini, secara efektif hanyalah cara untuk mendapatkan semua tantangan terkait untuk muncul bersama di sidebar; biasanya orang melakukan itu menggunakan komentar tetapi saya tidak memiliki cukup perwakilan .)

Hal pertama yang perlu diperhatikan adalah bahwa 7 seluruhnya terbuat dari digit, jadi pergi untuk bonus di sini tidak akan berhasil (walaupun jika Anda melihat program sebagai urutan oktet, tidak ada yang sesuai dengan representasi ASCII dari salah satu angka asli , jadi Anda bisa mengklaim bonus dalam arti itu). Hal berikutnya yang perlu diperhatikan adalah bahwa 7 memiliki perintah untuk membuat ulang urutan perintah yang kemungkinan telah menghasilkan data tertentu; jadi mungkin kita bisa menafsirkan angka yang Hilang4815162342 sebagai bagian dari program 7 itu sendiri?

Jawabannya adalah "tidak cukup". Bagian yang paling bermasalah adalah nomor kedua itu,8 ,. 7 program ditulis dalam oktal; tidak ada angka 8. Jadi, awal string harus dicetak secara berbeda.

Dasar dari program ini berdasarkan pada program 7 "Hello world":

5431410557403
543141055          string literal
         7         separate data from code
          4        rearrange stack: {program's source}, empty element, {literal}
           0       escape {the literal}, appending it to {the empty element}
            3      output {the escaped literal}, pop {the program's source}

dengan literal yang lolos dalam bahasa khusus domain yang ditafsirkan sebagai berikut:

5                  output format: US-TTY using pairs of digits in the string
 43                select character set: digits and common symbols
   14              "4"
     10            "8"
       55          forget the set output format

Setelah ini muncul tambahan 3, yang menampilkan elemen tumpukan yang tersisa (dan keluar karena tumpukan yang tersisa tidak cukup). Elemen itu ditentukan pada awal program, dan untuk menghindari yang tak tertandingi 6(yang bekerja sedikit seperti braket penutup), kami membuatnya menggunakan kode, daripada menuliskannya langsung sebagai data. (Perhatikan bahwa ada dua 7karakter tersirat pada awal program, yang relevan di sini):

{77}115160723426
 7                 empty stack element
  7 11516          append "1151"
         0         append "6"
          723246   append "2324"

Itu menghasilkan literal berikut:

115162324
1                  set output format: literally as octal
 15162324          "15162324"

yang akan dicetak.

ais523
sumber
Rasanya aneh bahwa Anda tidak punya reputasi, meskipun memposting beberapa jawaban yang cukup bagus. Saya telah membaca alasan Anda di balik hanya memposting jawaban komunitas, dan saya sepenuhnya mendukung Anda dalam hal itu, tetapi kadang-kadang harus menjengkelkan karena tidak dapat berkomentar:(
Jo King
@ JoKing: Yah, itu mengilhami saya untuk benar-benar mengirim jawaban untuk pertanyaan ini, dan ternyata jauh lebih menarik daripada yang saya harapkan. Jadi saya kira ini adalah lebih banyak bukti untuk hipotesis saya bahwa jika Anda tidak mencari reputasi, kontribusi Anda pada akhirnya lebih bermanfaat bagi situs daripada sebaliknya. (Sebenarnya, frustrasi utama yang saya miliki dengan terjebak secara permanen pada 11 reputasi adalah bahwa saya tidak dapat menyarankan pengeditan pada Meta, yang berarti bahwa jika saya melihat informasi yang salah di sana, saya tidak punya cara untuk memperbaikinya.)
ais523
3

05AB1E , 6 * 0,7 = 4,2 byte

•1Z&ð“

Cobalah online!

Mencetak nomor yang tidak terkompresi dari base-255

Emigna
sumber
Anda mengalahkan saya untuk itu. ;)
Kevin Cruijssen
3

MASM 8088 Sumber perakitan, (93 byte - 50%) = 46,5 byte

Tidak menggunakan angka atau urutan dalam sumber:

MOV AH,'P'-'G'
LEA DX,L
INT '!'
RET
T EQU '-'-'+'
L DW 'ph'/T,'jb'/T,'lb'/T,'fd'/T,'dh'/T,'$'

Keluaran:

A>LOST.COM
4815162342
640KB
sumber
2

Arang , 13 byte / 2 = 6,5

IETPIHA.⁻⁸⁸℅ι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Bekerja dengan mengurangi kode ASCII dari string TPIHA.dari 88 dan casting ke string.

Neil
sumber
2

Aheui (esotope) , 45 byte (15 karakter) * 0,5 = 22,5 poin

반밤밪박밭빠따받발따밣뱣히망어

Cobalah online!


Penjelasan:

Lihat ini juga; Referensi Aheui ( Bahasa Inggris )

Aheui program starts with default stack '아'(or none)

반: push 2, move cursor right by 1(→).
밤: push 4, →
밪: push 3, →
박: push 2, →
밭: push 4, →
빠: dup, →
따: pop 2, push mul result(16).
받: push 3, →
발: push 5, →
따: pop 2, push mul result(15).
밣: push 8, →
뱣: push 4, move cursor right by 2(→→).
히: end.
망: pop 1, print, → (if stack is empty, move cursor left by 1.)
어: move cursor left by 1(←).

Perhatikan bahwa ㅁ (instruksi cetak) menggerakkan kursor dengan arah terbalik jika tumpukan (atau antrian) kosong.

cobaltp
sumber
1

JavaScript, 143 byte (tidak yakin bagaimana cara mencetak gol)

(g=`${2*2}`)=>g.repeat(6).replace(/(.)/g,(m,p,i,k='')=>
  (k=m*[g-3,g-2,g,g,+g+2,g*3-1][i]
  ,RegExp(`${g-2}|${g}`).test(i)?k-1:i==+g+1?k-(g/2):k))

Cobalah online!

Mulailah dengan enam 4, gandakan, tambah, kurangi dengan, ke, dari 4untuk mendapatkan output.

guest271314
sumber
2
Ok, Anda mencoba untuk mendapatkan bonus, tetapi dengan kode ukuran ini, itu tidak memberikan kompensasi. Mengapa tidak sekadar '4815162342'?
Eduardo Hoefel
@EduardoHoefel Jangan mengumpulkan sistem "skor" atau "bonus", tidak mencoba untuk mendapatkan bonus, hanya mencoba untuk tidak menggunakan angka yang diperlukan pada output. Kode ini menghasilkan angka-angka tanpa hardcoding salah satu angka. Angka 4, dengan penambahan, pengurangan, perkalian dan indeks angka 4dalam string (atau array) dapat digunakan untuk menurunkan angka yang diperlukan.
tamu271314
Skor Anda143*0.7=100.1
Jo King
1

PHP, 35/2 = 17.5

<?=zzzzzzzzzzzzzzz^NVBVKOVKLVHIVNH;

pendekatan digital: 40 * .7 = 28

<?=2+2,_,5+3,_,17-2,_,17-1,_,17+6,_,7*6;

tanpa digit, tanpa string: 68/2 = 34

<?=$p++,!$p++,$p+=$p,_,$p+=$p,_,~-$q=$p+$p,_,$q,_,--$p+$q,_,$p*~-$p;

Cobalah secara online .

Titus
sumber
1
Atau hanya 14 byte untuk<?=4815162342;
Jo King
1
OP belum menjawab apakah kita bisa menghilangkan pembatas atau tidak; tapi ya. Mengapa tidak hanya 10 bytes: 4815162342. Atau <?=~+ 10 unsintables -> 15/2 = 7,5
Titus
1

JavaScript (SpiderMonkey), 67 byte / 2 = 33,5 60 byte / 2 = 30 58 byte / 2 = 29 48 byte / 2 = 24

-7 byte / 3,5 , -2 byte / 1 milik @ JoKing, -10 byte / 5 milik @tsh

print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)

Cobalah online!

guest271314
sumber
1
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
tsh
2
Atau hanya print(4815162342)untuk 17 byte
Jo King
1

APL (Dyalog Unicode), 18/2 = 9 byte

×/⎕UCS'𩦦湡'

Penggandaan karakter lama yang membosankan.

Cobalah online!

Quintec
sumber
1

Spasi , skor: 49 41 byte / 2 = 20,5

[S S S T    S S S T T   T   T   T   S S S S S S S T T   S S S T S T T   T   T   T   S S T   T   S N
_Push_4815162342][T N
S T _Print_number]

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online (dengan spasi, tab, dan baris baru saja).

Kode semu:

Integer i = 4815162342
Print i as number to STDOUT

Penjelasan:

Di ruang putih, angka didorong sebagai berikut:

  • S: Aktifkan Manipulasi Stack
  • S: Nomor push
  • S/T : Positif / negatif masing-masing
  • Beberapa T/ Sdiikuti oleh satu N: Desimal sebagai biner, di mana T1 dan S0

Setelah itu dicetak dengan TNST:

  • TN: Aktifkan I / O
  • S: Keluarkan bagian atas tumpukan
  • T: Sebagai angka
Kevin Cruijssen
sumber
Apakah hanya mendorong nomor itu sendiri lebih lama daripada memiliki kelipatan ekstra dan mendorong instruksi integer?
Jo King
@ JoKing Saya biasanya menggunakan kompiler Whitespace online vii5ard , karena ia telah menyoroti dan menampilkan perintah di sebelah kiri. Tapi ternyata itu bekerja sama dengan Java integer di mana maksimumnya adalah 32-bit, dan itu membungkus ke negatif di atas itu .. Jadi jumlahnya terlalu besar untuk didorong dalam sekali jalan. Ketika saya menekan angka di TIO, itu berfungsi dengan baik, sekarang saya sadar.
Kevin Cruijssen
1

F #, 45 byte = 22,5 poin

Hanya forloop run-of-the-mill yang mencetak angka:

for c in"DHOPWj"do printf"%d"(int c-int '@')

Di atas adalah program lengkap yang dapat dikompilasi menjadi sebuah executable.

Dalam REPL (read-eval-print loop), misalnya FSI (F # Interactive), versi yang lebih pendek berikut ini akan berfungsi, karena REPL akan menampilkan representasi ekspresi yang dievaluasi; ini memiliki 35 byte = 17,5 poin:

[for c in"DHOPWj"->int c-int '@'];;
dumetrulo
sumber
1

Pyke , 3 poin

77 91 f8 86 98 06

Coba di sini!

Sinyal byte pertama untuk dibaca dalam basis 128 sampai satu byte tanpa bit tinggi diatur.

Akhirnya, 32 dikurangkan dari hasilnya (karena alasan historis).

Hal ini memungkinkan untuk menghasilkan jumlah besar dalam jumlah ruang yang sangat kecil

Biru
sumber
1

MathGolf , 7 byte * 0,5 = 3,5

ÿ≤┼ÇÅ$∞

Cobalah online!

Penjelasan

Perhatikan bahwa kode ini belum berfungsi di TIO. Saya telah membuat beberapa perubahan pada MathGolf baru-baru ini, termasuk menambahkan $operator. Setelah ditarik ke TIO, Anda dapat menjalankannya di sana, kemudian saya akan memperbarui jawaban ini. Ini berjalan dengan sempurna di terminal

ÿ≤┼ÇÅ     Push "≤┼ÇÅ"
     $    pop(a), push ord(a) (pushes 2407581171)
      ∞   pop a, push 2*a

Saya memanfaatkan fakta bahwa MathGolf memiliki liter 1-byte untuk membuat string hingga panjang 4. Jika saya ingin mengonversi seluruh angka dari string 256-base, saya perlu menggunakan dua ", dan string tersebut seharusnya 5 karakter. Dengan cara ini, saya menghemat 2 byte, tetapi saya kehilangan satu byte dengan memiliki operator pengganda pada akhirnya.

maks
sumber
1

Python 3 34 Poin

b=len("  ");c=b*b;d=c*b;e=d*b;g=e+d-b//b;print(c,d,e-b//b,e,g,g*b-c)
CodeGolfer
sumber
1

Python 3 , 44 38 19 18,5 byte

-6 byte terima kasih kepada @Jo King
-50% terima kasih kepada @ouflak karena menunjukkan bonus 50%
-1 byte terima kasih kepada @Dennis

for i in'밗ɯ*':print(ord(i),end='')

Cobalah online!

glietz
sumber
1

Befunge-98 (FBBI) , 15 byte / 2 = 7,5 poin

"*H/!k-"*.*+..@

Cobalah online!

Penjelasan:

Pertama-tama dorong nilai ASCII dari karakter '* + H /! K- (42, 72, 47, 33, 107, 45) dalam urutan ini ke tumpukan. Kemudian hitung4815=45107 dan 1623=3347+72, dan output.

Wisław
sumber
1

Pesona Rise, 15/2 = 7,5

\>`*`
Rn$!;

Cobalah online!

Cukup mengkodekan nilai dalam byte sesedikit mungkin. 42, 16, 15, 8, Dan 4, memaksa mereka untuk nilai-nilai numerik, dan cetakan mereka dalam urutan terbalik. 4 8 15 16 42tanpa spasi, seperti 48151642format output yang dapat diterima.

4dan 8tidak dapat digabungkan ( 48) karena merupakan angka 0dan tidak diizinkan untuk digunakan. Dimungkinkan untuk menggabungkan 15, 16, dan 42 menjadi 2 karakter (bukan 3) ʂdengan mengorbankan +1 byte, yang tidak sepadan.

Draco tidak lagi percaya pada SE
sumber