String Kapsul Waktu 2016: Seberapa Serbaguna Bahasa Anda?


71

Sekitar setahun yang lalu pada tanggal 31 Desember 2015, saya memiliki ide bahwa:

Kita harus membuat string kapsul waktu. Semua orang dapat menambahkan satu karakter dan tahun-tahun baru berikutnya kita akan melihat siapa yang dapat membuat program terbaik dari semua karakter dengan esolang yang ada saat itu.

Doorknob dengan anggun mengumpulkan karakter dari komunitas PPCG dan menjaganya tetap aman selama setahun.

Sebanyak 74 orang berpartisipasi sehingga kami memiliki 74 karakter ASCII yang dapat dicetak untuk dimainkan!

Berikut adalah 74 karakter string kapsul waktu 2016 sesuai urutan pengirimannya:

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Berikut adalah 74 karakter string kapsul waktu 2016 dalam urutan ASCII (catatan ruang terdepan):

 !!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

Ini tidak banyak untuk dikerjakan, tetapi di sini kami menyukai tantangan.

Tantangan

Untuk menentukan bahasa apa yang "terbaik" dengan string kapsul waktu, kami akan memiliki 6 (untuk 201 6 ) tantangan yang meningkat dalam kesulitan di mana pada masing-masing Anda harus menggunakan subset dari 74 karakter kapsul waktu.

Memiliki 6 tantangan berbeda membantu memastikan lebih banyak bahasa dapat bersaing, tetapi hanya bahasa terbaik yang dapat menjawab semuanya dan mendapat skor tinggi.

Mencetak:

  • Setiap tantangan akan dinilai dari 0 hingga 74 tergantung pada berapa banyak karakter yang digunakan.
  • Skor yang lebih tinggi lebih baik.
  • Jika bahasa Anda tidak dapat menyelesaikan tantangan, skor Anda untuk tantangan itu adalah 0.
  • Setiap subset nonempty dari tantangan dapat diselesaikan.
  • Skor akhir Anda adalah jumlah skor dari semua 6 tantangan.
  • Skor akhir terbaik adalah 6 × 74 atau 444 .

Tantangan

1. Jalankan

Jika kode bahasa tidak dapat dijalankan, kode bahasa tidak akan bisa melakukan apa pun.

Tulis program penuh terpanjang yang mungkin (ingat, hanya 74 karakter kapsul waktu) yang berjalan / dijalankan tanpa kesalahan waktu kompilasi atau runtime.

Tidak masalah apa yang dilakukan oleh program, tidak masalah apakah ia memiliki input / output atau memasuki loop tak terbatas, itu hanya masalah bahwa ia berjalan tanpa kesalahan. (Peringatan ok, seperti juga kesalahan yang disebabkan oleh input pengguna yang buruk.)

Komentar diperbolehkan, jadi ini bisa sesederhana

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

dalam Python untuk skor 74.

(Jangan takut untuk menjawab jika ini adalah satu-satunya tantangan yang dapat diselesaikan oleh bahasa Anda, tetapi jangan berharap banyak suara juga.)

Nilai = panjang program (program lebih lama lebih baik)

2. I / O

Bahasa yang tidak memiliki bentuk input atau output hampir sama tidak bergunanya dengan yang tidak bisa dijalankan.

Diberikan karakter ASCII yang dapat dicetak dari !(0x33) hingga }(0x7D) inklusif, mengeluarkan karakter ASCII yang dapat dicetak sebelum dan sesudahnya.

Outputnya bisa panjang dua string atau daftar, atau karakter dipisahkan oleh spasi atau baris baru.

Misalnya jika inputnya adalah }output mungkin |~atau ["|", "~"]atau | ~atau |\n~.

Demikian juga, "adalah output untuk !dan ACoutput untuk B.

Nilai = 74 - panjang program (program pendek lebih baik)

3. Branchability

Persyaratan sering merupakan persyaratan untuk kelengkapan Turing , yang seringkali merupakan persyaratan agar suatu bahasa bermanfaat.

Diberikan bilangan bulat positif, jika berakhir dengan angka desimal 16maka ubah 6ke a 7dan hasilkan hasilnya; jika tidak, output input tidak berubah. Anda dapat menggunakan string untuk input / output jika diinginkan.

Contoh:

2016 -> 2017
16 -> 17
116 -> 117
1616 -> 1617
6 -> 6
15 -> 15
17 -> 17
106 -> 106
2106 -> 2106

Nilai = 74 - panjang program (program pendek lebih baik)

4. Loopability

Bahasa yang tidak dapat melakukan loop akan menelurkan kode yang berulang sehingga Anda perlu istirahat sejenak untuk pemrograman.

Dengan bilangan bulat positif, mengeluarkan persegi ASCII-art dengan panjang sisi yang diisi dengan pola kotak kecil yang konsentris yang bergantian antara dua karakter ASCII yang dapat dicetak yang berbeda . Mereka tidak harus dua karakter yang sama untuk input yang berbeda.

Sebagai contoh:

1    <- input
X    <- output

2
XX
XX

3
XXX
X-X
XXX

4
XXXX
X--X
X--X
XXXX

5
YYYYY
Y...Y
Y.Y.Y
Y...Y
YYYYY

6
XXXXXX
X----X
X-XX-X
X-XX-X
X----X
XXXXXX

7
ZZZZZZZ
Z-----Z
Z-ZZZ-Z
Z-Z-Z-Z
Z-ZZZ-Z
Z-----Z
ZZZZZZZ

Nilai = 74 - panjang program (program pendek lebih baik)

5. Matematika

Bahasa yang tidak bagus dengan angka dan matematika mungkin juga untuk jurusan humaniora.

Tidak mengambil input tetapi output 72 pembagi integer 2016 , positif dan negatif, dalam urutan apa pun. Output dapat diformat sebagai string atau daftar dengan cara yang masuk akal.

Contoh:

-1, -2, -3, -4, -6, -7, -8, -9, -12, -14, -16, -18, -21, -24, -28, -32, -36, -42, -48, -56, -63, -72, -84, -96, -112, -126, -144, -168, -224, -252, -288, -336, -504, -672, -1008, -2016, 1, 2, 3, 4, 6, 7, 8, 9, 12, 14, 16, 18, 21, 24, 28, 32, 36, 42, 48, 56, 63, 72, 84, 96, 112, 126, 144, 168, 224, 252, 288, 336, 504, 672, 1008, 2016

Nilai = 74 - panjang program (program pendek lebih baik)

6. Esoterisme

(Tidak, bukan itu .) Kami di PPCG menyukai barang-barang esoterik kami , dan quines adalah contoh yang bagus untuk itu.

Tuliskan quine terpanjang yang Anda bisa, sesuai aturan quine yang biasa . Quine adalah program yang tidak mengambil input dan output sendiri.

Nilai = panjang program (program lebih lama lebih baik)

Aturan khusus

  • Di masing-masing dari 6 tantangan program Anda harus menjadi bagian dari 74 karakter kapsul waktu yang disusun ulang sesuka Anda. Ini mungkin subset kosong atau subset yang tidak tepat , sehingga setiap program Anda dapat memiliki sedikitnya 0 dan sebanyak 74 karakter.
  • Satu baris baru di akhir input / output / kode tidak masalah di mana saja karena beberapa bahasa memerlukan ini atau tidak dapat dengan mudah dihindari.
  • Kecuali ditentukan lain, setiap tantangan dapat diselesaikan sebagai fungsi atau program lengkap sesuai dengan standar kami .
  • Semua tantangan harus diselesaikan dalam bahasa yang sama.
  • Anda harus menggunakan bahasa (atau versi bahasa) yang dibuat sebelum 2017 di mana pun di Bumi .
  • Siapa pun boleh menjawab, apakah Anda menambahkan karakter ke kapsul waktu atau tidak.

Jangan ragu untuk menggunakan karakter kapsul waktu 2016 dalam tantangan Anda sendiri.


4
Yay: D tantangan dimana JavaScript berpotensi unggul!
Downgoat

1
Ruang obrolan diskusi untuk berkolaborasi pada beberapa solusi.
user48538

6
cukup yakin itu 6×74 or 444tidak mungkin, karena itu berarti program kosong, yang entah bagaimana berperilaku berbeda. karenanya, 442 adalah minimum sebenarnya, karena itu berarti bahwa dua dari 3 program pengambilan input memiliki arang di dalamnya
Destructible Lemon

7
Bahasa saya adalah Jawa. Saya kalah secara default: P
Weckar E.

2
Ayo lakukan ini lagi!
ev3commander

Jawaban:


37

Glypho , 74 + (74 - 36) = 112

1. Jalankan (74 byte)

!!#%QTQT@=A@$!!$)()*!&))+...1449:@HILOQZ\\^`````````eefmpx|||{~~~~~~y~|~ ~

2. IO (36 byte)

!!!#!$!$4419TAHT\ee\OQQQ))*+)..)|~~~

Penjelasan

Glypho sepertinya pilihan yang cukup baik untuk tantangan ini, karena itu tidak peduli dengan karakter yang sebenarnya digunakan. Alih-alih, ia melihat kelompok empat karakter dan memilih perintah berdasarkan pola pengulangan dalam empat karakter tersebut. Karena ada banyak duplikat di antara string kapsul waktu, kami cukup fleksibel dalam program yang dapat kami tulis, kecuali bahwa kami terbatas pada program 18 perintah (yang tidak banyak di Glypho). Meskipun ini memungkinkan saya untuk menyelesaikan dua masalah pertama dengan cukup mudah, saya ragu bahwa Glypho dapat menjalankan yang lainnya dengan sedikit karakter.

Saya telah menguji ini menggunakan Java interpreter yang diambil dari 2006-06-23 pada mesin wayback , yang menggunakan pemetaan perintah yang sedikit berbeda:

0000 n
0001 i
0010 >
0011 \
0012 1
0100 <
0101 d
0102 [
0110 +
0111 o
0112 *
0120 -
0121 ]
0122 !
0123 e

Program Run diterjemahkan menjadi:

1d-+[...]

Di mana ...beberapa sampah yang saya tidak repot menerjemahkan.

1      Push 1.
d      Duplicate.
-      Turn into -1.
+      Add. Gives 0.
[...]  Skip the rest because the top of the stack is zero.

Program IO diterjemahkan menjadi:

id1-+o1+o

Inilah yang dilakukan:

i   Read a character.
d   Duplicate.
1   Push 1.
-   Turn into -1.
+   Add to character, i.e. decrement it.
o   Output it.
1   Push another 1.
+   Add to character, i.e. increment it.
o   Output it.

24

CJam, 74 + (74 - 14) + (74 - 26) = 182 skor

1. Jalankan (74 byte)

e# !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````efmpxy{||||~~~~~~~~~

Pindah e#ke komentar depan keluar seluruh baris.

2. I / O (14 byte)

9`)ZH*+~):Q(Q)

Dennis menyimpan 8 byte.

Penjelasan:

9`                   Push "9".
  )                  Extract character '9'.
   ZH*               Push 3 * 17 = 51.
      +              Add to get character 'l'.
       ~             Eval as CJam code. Command l reads a line.
        )            Extract the only character from the input line
         :Q(         Assign to Q and decrement
            Q)       Push Q and increment

3. Branchability (26 bytes)

4`)4Z|`I!`|~^~~T$AT$*%H(=+

Penjelasan:

4`)                            Push character '4'
   4Z|`                        Push 4 | 3 = 7, stringify
       I!`                     Push !18 = 0, stringify
          |~                   Setwise or and eval to get 70
            ^                  XOR to get 'r'
             ~                 Eval to read input
              ~                Eval the input as CJam code to turn
                               it into an integer
               T$              Duplicate it
                 A             Push 10
                  T$*          Duplicate that and multiply → 100
                     %         Mod the copy by 100
                      H(=      Compare to 17 - 1 = 16
                         +     Add the result (1 or 0) to the original

Saya akan melihat yang lain nanti. ( EDIT : Saya ragu itu mungkin, tanpa literal atau string ... mungkin matematika?)


Untuk # 2, Anda dapat menggunakan 9`)ZH*+~):Q(Q).
Dennis

11

J, skor 71 + (74 - 19) = 126

Tugas 1, panjang 71

AHILO=:( |T`T`Z`e`e`f`m`p`x`y|.~~%~@{|~^|Q@Q@Q+.*.449!~!~!~!!#$$&1\\~~)

Ini mendefinisikan kata kerja AHILOmenjadi bagian dalam. Tidak digunakan:

)))

Saya tidak berpikir ada cara untuk mendapatkan lebih lama dari ini.

Tugas 3, panjang 19

+($#~$~4)=1e4|&%:*~

Cara untuk melakukan tugas ini tanpa batasan adalah +16=100|], yang berbunyi sebagai berikut:

        ]  Input
    100|   mod 100
 16=       equals 16? (Evaluates to 1 or 0)
+          Add to input.

Kami memiliki +, =dan beberapa salinan atau |dalam pembuangan kami, dan mudah untuk berkeliling ], tetapi jumlahnya lebih bermasalah. Inilah bagian pertama yang menghitung input modulo 100:

1e4|&%:*~
       *~  Input squared (multiplied with itself).
1e4        The number 10000.
   |       Perform modulo
    &      on
     %:    their square roots.

Setelah kita selesai dengan itu, mari kita menghasilkan angka 16. Cara mudahnya adalah dengan *~4(4 dikalikan dengan dirinya sendiri), tetapi kita sudah menggunakannya *sehingga itu terlarang. Sebagai gantinya, kami akan melakukan beberapa manipulasi array.

($#~$~4)
    $~4   Reshape 4 to shape 4, resulting in the array 4 4 4 4.
  #~      Replicate wrt itself: replace each 4 by four 4s.
 $        Take length.

Kerja

2

Ini sangat mustahil. Satu-satunya cara untuk memanipulasi nilai karakter adalah a.dan u:, dan kami tidak memiliki akses ke keduanya.

Sekarang, jika kita bisa menggunakan aalih-alih, katakanlah A, maka ini akan menjadi solusi:

Q{~(*^.4%9 1)+I.~&Q=:a.

Bagian tersulit untuk membuatnya berfungsi adalah menghasilkan angka -1.

Q{~(*^.4%9 1)+I.~&Q=:a.
                     a.  The array of all bytes.
                  Q=:    Bind it to Q
              I.~&       and find the input's index in it.
   (        )+           Add the following array:
    *                    Signum of
     ^.                  logarithm of
       4%                4 divided by
         9 1             the array 9 1.
                         This evaluates to -1 1.
Q{~                      Index back into Q.

4

(*.1:"|~@+.)

Ini menghasilkan bentuk kulit, tetapi sepertinya saya tidak bisa menemukan cara untuk menghasilkan karakter. Sayang.

5

Harus diakui, ini sepertinya tugas yang paling mudah untuk dilakukan di J. Namun, tanpa i., ini akan sangat sulit.

6

Ini kemungkinan tidak mungkin tanpa quine palsu-out seperti 449atau sesuatu seperti itu, karena string kapsul tidak mengandung tanda kutip atau cara lain untuk menghasilkan string J.


Untuk tugas 2, Q{~1+I.~&Q=:a.beri karakter berikutnya: ikat alfabet a.ke Q, temukan indeks input di dalamnya I., tambahkan satu, dan indeks ke Q. Cobalah. Satu-satunya masalah yang tersisa adalah menghasilkan -1...
Zgarb

Juga, tugas 3 dapat dilakukan tanpa fungsi string: +16=100&|. Anda hanya perlu menghasilkan 16 dan 100 entah bagaimana.
Zgarb

@Zgarb (1) Ya ... (2) Oh! Itu keren! Hmmm seharusnya tidak terlalu sulit
Conor O'Brien

Ha, saya pikir saya mendapat 3: +($@#~@$~4)=1e4|&%:*~Itu sangat menjengkelkan karena kami hanya punya satu (&=:+*dan dua masing-masing 4.
Zgarb

Aaand di sini 2: Q{~(*^.4%9 1)+I.~&Q=:a.Saya menyadari bahwa logaritma ^.memberikan angka negatif untuk input secara ketat antara 0 dan 1, dan kami memiliki %untuk menghasilkan pecahan dan *untuk mengambil hasilnya menjadi -1 dan 1.
Zgarb

8

PowerShell - Total Skor: 74

1. Jalankan - Skor: 74

#~= `TeQ.)`~H|$QL4yA)\*`!^O$1)!Z`!`~|\`&T@!x+e(f|Q`.|!4%.{~`:~~)m@~`@p~I9~

Karena ini sangat sulit di PowerShell (setiap metode yang mungkin untuk mendapatkan input tidak mungkin dengan karakter yang diberikan, sejauh yang saya tahu), saya setidaknya memutuskan untuk mengacak tantangan pertama sehingga kita tidak semua menyalin contoh secara langsung dari pos.

Jadi, inilah generator jawaban tantangan 1 acak (untuk bahasa di mana #ada komentar):

'#'+$(-join([char[]]' !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~'|Get-Random -Count 73))

Cobalah online!


Saya pikir kamu benar. Yang paling dekat yang bisa kita dapatkan $^adalah "token pertama dari baris sebelumnya dalam sesi ini," yang akan sangat terbatas dan sangat mungkin pembengkokan parah aturan I / O standar.
AdmBorkBork

@TimmyD ya, $^kosong dalam sesi baru.
briantis

8

meme , skor ( 62 65 + 70) 135

1: Jalankan

Saya menghapus semua backticks ( `) dan operator matematika. Mereka berkonflik karena tidak ada angka yang cukup untuk memuaskan setiap operator unary dan binary. Saya meninggalkan beberapa, menghasilkan +3 byte . Program yang dihasilkan:

 !!!!!#$$%&())))...+1^4*49:=@@@AHILOQQQTTZ\\eefmpxy{||||~~~~~~~~~

Saya tidak tahu mengapa dan bagaimana ini bekerja. Atleast itu tidak membuang pengecualian runtime C #, dan karena itu tidak crash.

6: Quine

Anda tahu, jika ada -huruf kecil atau huruf kecil qdi suatu tempat di 74 karakter itu, ini akan terlalu mudah. Saya senang untuk Ioperator, minimal.

1/4I

Kode ini tidak terlalu jelas. Berikut penjelasannya:

1    Set object to 1 (1)
/4   Divide by 4     (0.25)
I    Set object to a fraction string. (1/4)

String pecahan (misalnya 1/4) ditampilkan dengan I di bagian akhir, untuk menunjukkan dengan tepat hal itu. The IOperator biasanya tidak berguna, saya menambahkan untuk cara lain, tapi hei, ia bekerja seperti ini!

Kode di atas tidak valid. Bodoh saya tidak melihat bahwa 74 karakter tidak mengandung operator divisi tunggal, forwardslash ( /). Saya datang dengan sesuatu yang lain:

True

Penjelasan:

T    Set object to "true" (bool value)
rue  None of these are valid tokens, so they don't get interpreted.

Output True(karena cara C # menangani Boolean.ToString()huruf besar dan bukan huruf kecil). Tidak yakin apakah ini quine yang tepat, sementara itu saya masih meremukkan kepalaku untuk yang valid, benar-benar tepat, dan intuitif.

Mungkin juga bisa memecahkan tantangan I / O dan Math, tapi saya kehilangan token spesifik (karakter) yang tidak termasuk dalam 74 karakter.


8

Brainfuck, 74 byte

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Aku harus melakukannya.

Penjelasan:

Setiap karakter yang bukan karakter Brainfuck yang valid diperlakukan sebagai komentar. Satu-satunya kode yang benar-benar dijalankan adalah ini:

.+..

Ini tidak menghasilkan output yang dapat dicetak, karena 0 maupun 1 tidak dapat dicetak dalam ASCII. Namun, itu tidak menyebabkan kesalahan, jadi kami berhasil menyelesaikan tantangan pertama.


3
Ini sebenarnya menghasilkan output. Ini menghasilkan karakter-karakter itu. Mereka mungkin tidak "dapat dicetak" (baca: terlihat), tetapi mereka tetap dikirim ke stdout.
mbomb007

7

Mathematica, skor 62

Saya akan terkejut jika ada yang bisa membuat tantangan 2-6 bekerja di Mathematica. Inilah yang terbaik yang saya lakukan dengan tantangan 1:

A:=1.`!#&@(4`+4.`*9.`^$$H~I~L~O~Q~Q~Q~T~T||Z||e@@efmpxy%)!!!!

Mendefinisikan fungsi yang sangat bodoh Adengan nilai konstan. 12 karakter yang tidak digunakan adalah:

)))\\`````{~

6

Oktaf, skor 74

1. Jalankan

x =@(AHILOQQQTTZeefmpy)+.1||!!!!!~~~~~~~~~4.^.4||9%#$$)))*@@\`````````{\&:

50 dari karakter ini adalah bagian dari fungsi, sedangkan 24 karakter lainnya tidak.

Apa fungsinya:

x =@(AHILOQQQTTZeefmpy)menciptakan fungsi xyang dapat mengambil variabel AHILOQQQTTZeefmpysebagai input.

Untuk memahami sisanya:

a||bmemanggil fungsi all()pada keduanya adan b. Jika salah satu atau keduanya mengembalikan true, ||operator akan mengembalikan true.

!adan memiliki ~aarti yang sama di sini, keduanya not(a).

a.^b adalah kekuatan elemen-bijaksana (a(1)^b(1), a(2)^b(2) ...)

Penjelasan lanjutan

Saya akan mempersingkat setiap langkah seiring berjalannya waktu:

4.^.4||9  % This is 4 raised to the power of .4||9
          % .4||9 is true, since both .4 and 9 are true
          % true is evaluated to 1 when used in an expression
...       % 4 raised to the power of 1 is simply 4.
4         % The above expression simplified

Dan:

!!!!!~~~~~~~~~4  % ! and ~ are the not() operator, so this is equivalent to:
not(not(not(not(not(not(not(not(not(not(not(not(not(not(4))))))))))))))

Ada bilangan genap not, jadi ini setara dengan not(not(4))yang trueatau 1.

+.1||1      % This is equivalent to all(+.1) | all(1), which returns true

Sisanya dikomentari.


6

*> <> , skor total = 74

1. Lari, skor 74

f:4%*e+e14=p!Q H@~^)$.`~A|Q)~`\ZI~O.~@``#|9@)T\T`(!``|`~!y!`)Q~$x.|m~~&!L{

Coba di sini!

Ini sangat sulit dilakukan tanpa ;karakter. Saya benar-benar berpikir itu tidak mungkin untuk beberapa saat, sampai saya melihat %, pada dasarnya saya menyerah.

Ini juga merupakan program yang valid> <>.

Dijelaskan (bagian yang tidak relevan dihilangkan)

f:4%*e+e14=p!Q 

f:               copy 15
  4%             pop 15, push 15%4 (3)
    *            pop 15 and 3, push 15*3 (45)
     e+          pop 45, push 45+14 (59, ascii ";")
       e         push 14
        14=      push 0
           p     replace coord (14, 0) with ";"
            !Q   skip Q (this is just filler)
              ;  end execution

Tantangan yang dihadapi

Saya mungkin mencoba tantangan lain ... mereka akan sangat sulit dan mungkin melibatkan membengkokkan aturan dengan cara yang aneh, tetapi penggunaan |cermin dan !trampolin secara liberal harus membuat setidaknya satu tantangan lagi menjadi mungkin.

Tantangan ini sangat sulit karena kami tidak diizinkan menghasilkan apa pun dengan *> <> ( odan n), atau bahkan pemanggilan fungsi ( C), pengembalian fungsi ( R), atau terminator program ( ;). Meskipun kami juga tidak memiliki iinput, kami masih dapat memasukkan input pada tumpukan yang merupakan nilai tambah. Kelebihan lainnya adalah kita mendapatkan satu pinstruksi, yang memungkinkan kita untuk mengganti instruksi dalam kotak kode. Ini mungkin dapat digunakan beberapa kali (belum menemukan cara praktis), yang akan mulai membuat program lain tampak lebih mungkin (karena kita dapat menghasilkan dua atau lebih instruksi).


5

Haskell, skor 63

1. Jalankan:

(!!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~)fmpxyAHILOQQQTTZ e=14`e`49

Tidak digunakan adalah )))```````{. Komentar di Haskell adalah --atau {- ... -}, jadi tidak ada versi all-comment yang mudah.

Kode ini mendefinisikan operator infiks !!!!!#$$%&*+...:@@@\^||||~~~~~~~~~yang mengambil dua argumen:

  1. fmpxyAHILOQQQTTZ yang diabaikan dan karenanya dapat dari jenis yang sewenang-wenang
  2. e, yang harus berfungsi mengambil dua angka

Dalam fungsi tubuh ekemudian diterapkan ke 14 dan 49, menggunakan `notasi -infix.

Contoh penggunaan:

Prelude> () !!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~ (*)
686

Operator diterapkan ke (), tuple kosong, dan (*), operator perkalian, jadi 14*49 = 686dihitung.

Cobalah online!

Tantangan lain

Saya ragu bahwa ada tantangan lain yang mungkin, terutama karena kurangnya kemungkinan nama variabel yang dapat muncul dua kali, yang hanya e(atau sesuatu seperti eQT), karena nama variabel tidak dapat dimulai dengan huruf besar. Tentu saja, hanya memiliki satu =juga tidak membantu.


5

Pyth, 131 untuk saat ini (2 tantangan selesai)

1. Jalankan, 74

# `````````!!!)!)!)*$AOeIefLmpxQ|Q|y|Q|~~~~~~~~~()${+%&\=@@@^\:.1.4.49TTZH

Program ini tidak mengambil input dan tidak membuat output.

Program ini menggunakan $$, yang memungkinkan eksekusi kode arbitrer, dan juga dilarang secara online, sehingga program ini online berjalan offline. Inilah output kompilasi-nya, sehingga Anda dapat melihat apa yang sebenarnya dijalankan:

while True:
 try:
  (repr(repr(repr(repr(repr(repr(repr(repr(repr(Pnot(Pnot(Pnot()))))))))))))
  imp_print(Pnot())
  imp_print(Pnot())
  imp_print(times(AOeIefLmpxQ|Q|y|Q|~~~~~~~~~(),uniquify(plus(mod(("=" and lookup(lookup(lookup(Ppow(":",.1),.4),.49),T)),T),Z))))
  imp_print(H)
 except Exception:
  break

Agak sulit untuk menulis program dengan karakter arbitrer yang tidak kesalahan dalam Pyth. Saya mengatur sendiri tantangan tambahan untuk mensyaratkan bahwa program berjalan tanpa memerlukan input pengguna juga.

Langkah pertama adalah menggunakan #untuk memakan semua kesalahan. Selanjutnya, kita perlu menghindari kesalahan yang disebabkan oleh ~, Idan L, yang masing-masing memiliki detailnya sendiri. Ini dicapai dengan menempatkan mereka di dalam $$, yang menanamkan mereka di dalam kompilasi output, dan dengan demikian menjadikan mereka aturan kompilasi Python, bukan Pyth's. Akhirnya, untuk menghindari pengambilan input pengguna, berbagai token 0 arity (Variabel dan yang serupa) ditempatkan di akhir, dan Qs dipindahkan di dalam $$blok.

2. IO

Ini akan sangat sulit, jika itu mungkin. Tidak ada fungsi Pyth yang menciptakan string atau karakter arbitrer yang hadir kecuali .f, dan yang melakukan pekerjaan yang sangat buruk untuk membuat karakter arbitrer.

3. Branchability: 74 - 17 = 57

|&x%Q*TTye|LZ9Q+1

Cobalah online

Program Pyth yang setara adalah:

?n%Q100 16Q+1

Kode ini mengambil input mod 100, membandingkannya dengan 16, dan kemudian menggunakan ternary untuk memilih antara input dan input plus satu. Karena batasan karakter, saya membuat beberapa pergantian:

  • Alih-alih ?, ternary, saya menggunakan |&, orkemudian and, yang memiliki fungsi yang sama, kecuali bahwa itu rusak jika inputnya nol, tetapi karena kami dijamin input integer positif, tidak apa-apa. (Ini bisa diperbaiki tanpa karakter tambahan, tetapi lebih sederhana dengan cara ini.)

  • Alih-alih langsung membandingkan dua angka, saya mengambil XOR mereka x, yang nol jika dan hanya jika mereka sama, seperti yang diinginkan.

  • Alih-alih menulis 100secara langsung, saya menghasilkan dengan *TT, karena Tdiinisialisasi ke 10.

  • Alih-alih menulis 16secara langsung, saya menghasilkan dengan ye|LZ9. |LZdasarnya berfungsi sebagai fungsi rentang, jadi |LZ9memberi [0, 1, 2, 3, 4, 5, 6, 7, 8]. emengambil elemen terakhir dari daftar, memberi 8. ymenggandakannya, memberi 16seperti yang diinginkan. Dengan tambahan +atau ekstra *saya dapat menyimpan karakter, tetapi keduanya lebih berguna di tempat lain.

Akan datang lebih banyak lagi!


3

Ruby - Skor: 74

1. Jalankan

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Diambil dari tantangan.


1
Sama untuk Python
Daniel

3

JavaScript (ES6), skor = 74

1. Jalankan, 74 byte

Z=` !!!!!#$$%())))...1449:@@@\AHILOQQQTT^\`eefmpxy{||||~~~~~~~~~`*``+``&``

6. Esoterisme (tidak valid)

Sebagai catatan, saran saya adalah:

1.4e+49

yang ternyata tidak valid, seperti yang dibahas dalam komentar di bawah ini.


Quine itu valid.
wizzwizz4

3
Quine tidak valid. Aturan yang relevan terkait dalam tantangan. Secara khusus, setiap quine yang didasarkan pada satu literal gagal mengkodekan bagian dari sumber di bagian yang berbeda dari sumber. cc @ wizzwizz4
Martin Ender

@ MartinEnder Di browser saya, program itu mengeluarkan kode sumbernya secara harfiah. Ini adalah pernyataan yang mengevaluasi dirinya sendiri. Saya tidak yakin apa yang Anda katakan; tidak ada yang berbeda bagian dari sumber.
wizzwizz4

1
@ wizzwizz4 komunitas ini memiliki lebih banyak persyaratan untuk quines daripada hanya "program mencetak sumbernya sendiri", karena itu memungkinkan berbagai macam solusi curang yang tidak sesuai semangat quines. Lihat tautannya.
Martin Ender

1
@ wizzwizz4 dari atas memilih jawaban "Harus mungkin untuk mengidentifikasi bagian dari program yang mengkodekan bagian yang berbeda dari program. (" Berbeda "yang berarti bahwa dua bagian muncul di posisi yang berbeda.)" Sedangkan untuk Golf Anda quine Demi kebaikan besar, tantangannya (dan jawaban yang ditautkan) beberapa tahun lebih tua daripada meta post yang ditautkan.
Martin Ender

3

Retina, skor 74

1. Lari, skor 74

)))` !!!!!#$$%&()*.+..1449:=@@@AHILOQQQTTZ\\^````````eefmpxy{||||~~~~~~~~~

Saya memindahkan orangtua tambahan ke konfigurasi agar mereka bisa menyeimbangkan dalam regex. Saya juga pindah `setelah itu, dan berubah +.menjadi .+.

Cobalah online

Yang lain kemungkinan tidak mungkin, karena tidak ada baris baru. Juga tidak ada -untuk Transliterasi atau dkelas karakter digit.


3

Pip, skor 74 + (74 - 19) = 129

Begitu banyak backticks dengan kutipan untuk dilihat, tunggal atau ganda!

Tugas 1, skor 74

`` `\``!!!!!`#$$%&())))*+...1449:=@@@ILOQQQTTZ\^efmpx{|||~~~~~~~~~`|`yeAH`

Pada dasarnya hanya serangkaian pola (regex) literal dalam backticks, yang terakhir dicetak. Karena ada jumlah backticks ganjil, kita harus melakukan backslash-escape salah satunya ( `\``) Cobalah online , dengan -wbendera yang ditambahkan untuk membuktikan bahwa tidak ada peringatan yang dihasilkan.

Tugas 3, skor 55 (panjang 19)

e+!!e%(1.#x.!9)=4*4

Menggunakan metode input yang agak aneh - argumen baris perintah kelima - ini dimungkinkan. Cobalah online!

                     e is 5th cmdline arg; x is empty string
       1.#x.!9       Concatenate 1, 0 (length of x), and 0 (not 9)
    e%(       )      e mod 100...
               =4*4  ... equals 16?
  !!                 Logically negate twice
e+                   Add to e (+1 if number mod 100 is 16, +0 otherwise)
                     Expression is autoprinted

Tugas lainnya

Dimungkinkan untuk mendapatkan input untuk tugas 2 , dengan metode yang sama seperti tugas 3 di atas. Masalahnya adalah mengubah kode ASCII dan kembali ke karakter. Yang pertama dapat dilakukan dengan A, tetapi yang terakhir membutuhkan C, atau mungkin pengindeksan ke dalam PAvariabel. Membangun dan mengevaluasi kode tidak dapat dilakukan tanpa V. Saya pikir tugas itu tidak mungkin.

Tugas 4 menantang bahkan tanpa rangkaian karakter terbatas. Pada tebakan, itu akan memerlukan daftar (tanpa menggunakan []pembatas atau RL(daftar ulang) dan hanya memiliki satu kesempatan untuk menggunakan AL(menambahkan daftar) - tidak mungkin) atau mungkin sesuatu dengan CG(kotak koordinat) atau MC(peta peta), keduanya tidak diizinkan .

Tugas 5 berada di ambang kemungkinan. Loop akan sulit, karena Fatau dan Map tidak mungkin, dan rentang tidak dapat dibangun dengan ,. Mungkin ada sesuatu yang harus dilakukan dengan Tsakit. Peningkatan bisa dari x:x+1variasi (jelas dengan variabel selain x, meskipun). Pemeriksaan keterbagian dapat digunakan %. Namun, saya tidak berpikir ada cukup karakter - terutama huruf yang diulang - untuk melakukan semua yang perlu terjadi.

Tugas 6 terlihat sangat mustahil. Semua quines Pip yang dikenal ada "di dalamnya. Mereka juga menggunakan R(mengganti), RP(repr), atau V(eval), tidak ada yang tersedia.


2

Sebenarnya, skor (74 + 0 + 0 + 0 + 0 + 0 ) = 74

Ya, string kapsul akan berfungsi dengan Actually seperti halnya untuk Run, karena Actually menolak setiap kesalahan dan setiap kesalahan menjadi NOP.

H@~*^)$.~+1A|Q)p~\Z!IQ~e:O.~@#|9@)Tf\eT`=(!|~!y!) Q~$x.4|m4~~&!L{%( Coba online! )

Ini akan menghasilkan kekacauan, (tetapi juga sumbernya sekali: 3).

Saya akan bekerja pada tantangan lain.


1
Program quine akan (mudah-mudahan) cukup sederhana, jika Anda dapat membuat beberapa ops menjadi noops.
wizzwizz4

1
Program quine tidak sederhana. Anda tidak dapat menggunakan Qsama sekali (karena itu quining builtin), dan tidak ada tanda kutip ganda, jadi Anda tidak dapat melakukan pemformatan string apa pun. Saya bekerja sebentar di kemarin, dan saya cukup yakin program lain tidak mungkin hanya dengan 74 karakter.
Mego

Dan ada tampaknya tidak menjadi miring f ... :(
user48538

2

05AB1E - Total skor: 74

1. Jalankan, 74 byte

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Segala sesuatu yang menyebabkan kesalahan dilewati oleh 05AB1E. Seluruh baris kode ini adalah NOP.

Cobalah online!


2

(disalahgunakan) PHP, 74 + 74 = 148

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Penerjemah PHP hanya membuang kode sumber sampai menemukan <?karena kita tidak memiliki <setiap permutasi dari karakter tersebut adalah quine yang berjalan. Saya kira ini tidak lebih buruk daripada menggunakan perintah quine builtin: P


9
Ini tidak memenuhi spesifikasi kami untuk quines, lihat di sini . Itu tidak mengkodekan dirinya sendiri (yaitu tidak benar-benar mencetak sendiri, itu hanya terjadi karena kompiler.
R

@Eastly, penerjemah memperlakukan setiap char output this charsampai memenuhi <. Saya tidak mengatakan itu mampu payload atau sth saya hanya mengatakan itu tidak ada bedanya dengan bahasa yang mengatakan char output the source. Jika ini bukan jawaban yang valid untuk bagian 1 dari bahasa apa pun yang menerima input tanpa kesalahan juga bukan jawaban yang valid. Saya tidak berpikir ini lebih kasar daripada kebanyakan jawaban di sini.
Christoph

4
@Christoph itu valid untuk bagian satu, tapi itu bukan quine yang valid oleh aturan yang terkait dalam tantangan. Komunitas ini menganggap quine valid jika Anda dapat mengidentifikasi bagian dari sumber yang menyandikan bagian berbeda dari kode. Dalam program Anda, setiap karakter hanya mengkodekan dirinya sendiri.
Martin Ender

@MartinEnder: #! / Bin / cat dianggap quine sebelumnya.
Joshua

@ Yosua memang, tapi hari ini tidak dan tidak kucing dianggap sebagai bahasa pemrograman.
Martin Ender

2

Mathematica, skor 68

`A: = .1% *. 44y # +. 9 ^` H @ `$ I @` L @ (`$ O ~` Q ~ `Q ~` Q ~ `T ~ T ~ Z ~ e ~ e | f | m | p | x) !!!!! & \

Perhatikan baris baru yang tertinggal. Saya tidak percaya bahwa salah satu tantangan lain dapat dicapai dengan Mathematica.


2

Labirin, skor 74

AH)
IL)
OQ:
`=!)~`{+4.@ !!!$$%&(*..149@@TTZ\\^```eefmpxy||||~~~~~~~~
`Q#
`Q)
``!

Saya cukup yakin bermacam-macam karakter ini menghasilkan program Labirin yang valid, tetapi untuk membuatnya setidaknya sedikit lebih menarik, ini mencetak 2016digit demi digit. (Singkatnya: tekan 2 2pada stack, pop / print satu, pindahkan yang lain ke aux stack, cetak 0, tekan 2 1pada stack, pop / print 1, increment, bitwise not, negate (yang terakhir 1adalah 3pada titik ini), jumlah dengan 2dari stack stack, 5 * 10 + 4 = 54, cetak sebagai nilai ascii, terminasi)

Sebagian besar dari garis panjang diabaikan, karena @mengakhiri program.

Tantangan 2, 3, dan 4 tidak mungkin karena tidak ada perintah input Labyrinth yang tersedia ( ,atau ?), dan saya tidak menemukan apa pun selama 5 atau 6.


2

SmileBASIC, 48 poin

tantangan 1:

@LOQQQTTZ A$=H$+@efmy+@9414*!exp(!!.||!!.#||I%):

penjelasan:

@LOQQTTZ 'label
A$= 'set value of A$ (string)
H$ 'string
+@efmy 'adds label, interpreted as string literal
+@9414 'adds label, interpreted as string literal
*!exp( 'multiplies by logical not e^x (= 0)
!!. 'not not 0.0 (= 0)
||!!.# 'or not not 0.0 converted to a float (= 0)
||I% 'or I% (integer variable)
: 'equivalent to a line break, does nothing here

lainnya:

Tidak ada perintah input / output yang tersedia, jadi sisanya tidak mungkin.

Meski begitu, tidak buruk untuk bahasa nyata tanpa menggunakan komentar.


+1 benar-benar cantik. Saya bertanya-tanya bagaimana saya akan melakukan semua ini dan tidak pernah bisa mendapatkannya. Apa yang bahkan ini lakukan?
snail_

1

MATL , skor total 74

1. Lari, skor 74

`4.e4 1.$!!!!!T+Zyf9.)AH^ILx@Q@Q@Qm||||~~~~~~~~~:=Tp*O%#$&()))\\````````e{

Semuanya %adalah kode aktual. %adalah simbol komentar, sehingga karakter di sebelah kanannya diabaikan.

Output program 1tanpa kesalahan.

Cobalah online!


1

bash, skor 74

1: Jalankan. Kita bisa menjalankan semua 74

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

6: Esoterisme:

Program kosong adalah quine di bash.

Tanpa karakter spasi putih, tidak ada hal lain dalam daftar yang dapat diselesaikan. Ergo, saya punya entri bash yang menang.


Catatan aturan: Jika seseorang menantang yang kosong itu bukan quine dan menang yang valid, saya masih memiliki entri yang menang (tanpa quine). Jika di sisi lain saya tidak menempatkannya dan orang lain melakukannya dan mereka memenangkan tantangan mereka mengalahkan saya. Jadi begitulah.
Joshua

1

Perl 6 , skor total 74

1. Lari, skor 74

my @TOTAL=$!||(e*4...9^e)Z+1~4||!!Q`{fp)))\#\&`~Q!```HI````!~Q:x~~~$~@~@~%

Tidak ada komentar.
(Hanya menempatkan #di depan untuk membuat semua komentar juga berfungsi, tapi ini lebih menyenangkan.)

Kerja

Ini adalah bagian dari bahasa Perl 6 yang hanya menggunakan karakter yang diizinkan:

Konstanta: e

Ketikkan nama: IO

Fungsi: exp

Metode:
    pada tipe IO: .e .f .x
    (... mungkin lebih.)

Operator: | infix: | awalan:
    ----------- + ----------------------- + ---------
    numerik: | + * + ^ + | + &% | + + ^
    string: | ~ x ~ ^ ~ | ~ & | ~
    boolean: | || ~~ | !
    persimpangan: | | & ^ |  
    misc: | =: = Z .. ... |  

sintaksis:
    literal jumlah: 1 4 9
    string literal: Q` `Q! ! dll.
    perintah shell: Q: x` `Q: x! ! dll.
    Bintang apa pun: *
    variabel: my \ $ @ &
    pengelompokan: ()
    komentar: # # `()
    batalkan ruang: \

Rintangan langsung yang mencegah tantangan 2-6, adalah sepertinya tidak ada cara untuk melakukan I / O:

  • Jika kita menganggap ada file yang dipanggil f, kita dapat menggunakannya Q`f`.IO.euntuk memeriksa apakah file itu ada atau Q`f`.IO.xuntuk memeriksa apakah file tersebut dapat dieksekusi. Tetapi kita tidak bisa membacanya atau menulis darinya.

  • Kita dapat menggunakan Q:x` `untuk menjalankan perintah shell (dengan asumsi kita menemukan karakter untuk satu). Tapi kita tidak bisa memasukkan apa pun ke dalam, jadi itu hanya baik untuk membaca, tidak menulis.

  • Karena tidak ada tanda kurung penutup, kami tidak dapat membuat blok lambda (mis. {1 + $_}) Yang secara otomatis mengembalikan nilai pernyataan terakhirnya.

  • Kita dapat menggunakan tanda bintang untuk membuat ekspresi lambda (mis. 1+*), Tetapi kemudian kita hanya dapat mengambil satu argumen, merujuk argumen ini hanya sekali, dan bahkan lebih terbatas dalam sintaks / operator yang dapat kita gunakan.


Bagus sekali, sungguh! :)
Dada

0

Lua, skor 31

1. Run (31 dari 74 poin)

AHILOQQQTTZeefmpxy=1.%4+(4.*9.)

3
Anda melewatkan ruang. variable =stufflebih panjang 1 byte.
devRicher

0

Jelly , skor 74

1. Jalankan , 74

 ||||!!!!!$$~~~~~~~~^@=@~%449:`e@`e`QAHILOQQTTZ{\\f`m`p`x`y`&`*.#1+.()))).

Tidak yakin bagaimana melakukan yang lain.


0

/// , Nilai: 146

1. Jalankan, Skor: 74

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

6. Quine, Nilai: 72

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ^`````````eefmpxy{||||~~~~~~~~~

Yay, ketika tidak ada garis miring ke depan atau belakang dalam kode, itu hanya mencetak sendiri.

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.