Vektor Sufiks Tua yang Baik

17

Terinspirasi oleh manual lama ...

Tantangan

Saya mendefinisikan sebuah th akhiran vektor b sebagai daftar boolean panjang a dengan b mengikuti nilai-nilai truthy.

Menulis sebuah program atau fungsi yang, diberikan sebuah dan b dengan cara apapun, mengembalikan sebuah th akhiran vektor b dengan cara apapun.

Sekarang ini mungkin tampak sepele, tetapi di sini adalah menangkap: Skor Anda adalah jumlah byte ditambah tahun paling awal solusi Anda akan berhasil.

Aturan

Semua aturan standar berlaku, kecuali bahwa bahasa dan versi bahasa yang dirilis setelah tantangan ini, juga dapat digunakan.

Keluaran dengan menggunakan representasi nilai boolean apa pun yang digunakan bahasa Anda, misalnya 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", dll.

Output menggunakan apapun representasi dari daftar yang Anda menggunakan bahasa, misalnya 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, dll

Anda mungkin menganggap bahwa sebuahb selalu benar dan bahwa mereka adalah dari jenis data yang sesuai.

Uji kasus

Diberikan a = 7 dan b = 3, kembali0 0 0 0 1 1 1

Diberikan a = 4 dan b = 4, kembali[True,True,True,True]

Diberikan a = 2 dan b = 0, kembali(FALSE;FALSE)

Diberikan a = 0 dan b = 0, kembali{}

Contoh solusi dan penilaian

Saya mungkin ingin mengirimkan solusi {⌽⍺↑⍵⍴1}menggunakan Dyalog APL. Itu akan menjadi bytecount dari 8. Ini adalah fungsi dinamis, yang bekerja dari versi 8.1 dari Dyalog APL, dirilis pada tahun 1998, jadi skor total saya adalah 2006. Jawaban yang saya kirimkan akan terlihat seperti:

# Dyalog APL 8.1, 1998 + 8 = 2006
    {⌽⍺↑⍵⍴1}

Optional explanation...
Recommended: Link to documentation showing when the features you used were released.

Menang skor terendah!

Adám
sumber
14
Saya sangat prihatin dengan kebenaran jawaban.
Dennis
1
@ Dennis Saya mengerti kekhawatiran Anda. Namun, 1) jawaban sebagian besar akan sangat sederhana, dan dengan demikian dapat diverifikasi dengan tangan - tidak memerlukan sistem yang sedang berjalan, dan 2) beberapa pengguna telah mengambil untuk menghubungkan ke dokumentasi klaim mereka.
Adám
8
Saya tidak begitu yakin "diverifikasi dengan tangan" perlu bekerja untuk beberapa jawaban - masa lalu adalah tempat yang asing, dan kadang-kadang versi awal dari hal-hal dapat kekurangan hal-hal yang terasa biasa hari ini ...
Sp3000
1
@ Sp3000 Mungkin, tapi ini semua hanya untuk bersenang-senang, dan dengan 8 jawaban dan 9 upvote dalam 1,5 jam, saya pikir tantangan ini cukup menyenangkan menerima bahwa seseorang mungkin menipu. Mungkin beberapa riset tambahan tentang pemenang akhirnya ...
Adám
1
@CatsAreFluffy Idenya adalah untuk menunjukkan bahwa salah satu format itu valid. Saya pikir case-nya sedikit dan cukup sederhana sehingga kemudahan copy-paste'ing tidak menjadi masalah.
Adám

Jawaban:

7

APL \ 360, 1968 + 3 byte = 1971

⎕⍵⎕

Dibangun dari tutorial @NBZ yang ditautkan. Saya tidak tahu mengapa @NBZ mengatakan akan mencetak skor 1970, karena APL \ 360 tidak diimplementasikan sampai tahun 1968, dan APL sebelumnya seperti APL \ 1130 tidak memiliki fungsi vektor akhiran (lihat halaman 208 di sini ).

lirtosiast
sumber
8

Keempat, 1970 + 38 = 2008

:s tuck +do 0 . loop 0 +do -1 . loop ;

penggunaan: 7 3 scetakan "0 0 0 0 -1 -1 -1"

ASHelly
sumber
Sekarang kita bicara!
Adám
Kenapa -1? filler +
CalculatorFeline
2
Itulah salah satu nilai 'kebenaran' yang lebih menarik yang saya lihat belakangan ini.
user3490
Apakah ada alasan bagus mengapa ini dinamai svdan bukan s, atau yang lainnya satu byte?
kucing
8

APL, 1968 + 5 = 1973

Ke 5 karakter:

⌽⎕≥⍳⎕

Versi yang lebih lama:

⌽⎕↑⎕⍴1

Yah, Anda sebenarnya sudah memberikan jawabannya, saya baru saja menghapus definisi fungsi dinamis dan memeriksa bahwa ini berfungsi pada tahun 1968. Untuk referensi di sini adalah manual:

http://www.softwarepreservation.org/projects/apl/Books/APL360ReferenceManual

Moris Zucca
sumber
Anak-anak, ini disebut pemenang . Harap tulis itu di catatan Anda.
CalculatorFeline
@CatsAreFluffy Belum. @ Moris Zucca: Akhirnya, tetapi Anda sebenarnya bisa bermain golf setengah dari byte itu. Bisakah Anda mencari tahu caranya? Juga, di sini adalah versi yang jauh lebih modern dan mudah dibaca dari manual.
Adám
7

SAS, 1966 + 45 = 2011

data;a=;b=;do i=1to a;c=a-i<b;put c@;end;run; 

Saatnya SAS bersinar!

SAS tidak pertama kali diterbitkan sampai tahun 1972, tetapi langkah data ini hanya menggunakan fitur yang sangat mendasar yang saya yakin akan tersedia bahkan dalam versi pra-rilis paling awal dari tahun 1966 dan seterusnya, jadi saya percaya itu akan berhasil saat itu. Input masuk setelah a=danb= , dan output dicetak ke log.

Saya akan kagum jika ada yang masih memiliki IBM System / 360 dengan versi SAS yang tepat untuk benar-benar memverifikasi ini!

pengguna3490
sumber
Mesin tersedia. ...
Adám
Sekarang, seandainya saya punya uang tunai untuk lisensi mainframe SAS ...
user3490
5

Mouse-1979 , 1979 + 19 = 1998

??&TUCK (0.a)0(1-.)

Terjemahan dari: Keempat .

Spek ini benar-benar samar bagi saya, tetapi saya pikir ini melakukan hal yang benar.

kucing
sumber
Tautan rusak ....
CalculatorFeline
@CatsAreFluffy Diperbaiki; Saya mengetiknya dari memori.
kucing
Menarik. Tetapi saya tidak berpikir &Tuckitu tersedia sampai versi 2002. Dan loop tampaknya tak terbatas.
AShelly
4

TI-Basic, 1990 + 21 = 2011

Kalkulator TI pertama yang digunakan program ini adalah TI-81, yang diperkenalkan pada tahun 1990.

Prompt A,B:"{}
seq(I>A-B,I,1,A

Edit: perhatikan bahwa saya harus mendukung daftar kosong ... peningkatan kode sebanyak 4 byte

Uji Kasus

A=?7
B=?3
{0 0 0 0 1 1 1}

A=?4
B=?4
{1 1 1 1}

A=?2
B=?0
{0 0}

A=?0
B=?0
{}   * throws an error but still returns successfully
Timtech
sumber
Bisakah Anda menambahkan komentar pada bagian mana dari sumber yang merupakan byte tunggal di TI-Basic? Saya pikir itu termasuk Prompt dan seq (tapi saya tidak yakin tentang yang lain
Sparr
Kami tidak mempertimbangkan untuk kembali melalui Ansmetode keluaran yang dapat diterima, kecuali jika itu dicetak.
lirtosiast
@Sparr Tentu, Promptdan seq(satu token byte dan karakter lainnya masing-masing satu byte.
Timtech
@ lirtosiast Ansadalah cara default untuk mengembalikan nilai dalam seri TI-83 Basic. Selain itu, ketika program dijalankan, baris terakhir dicetak secara otomatis. Jadi, Anda memiliki yang terbaik dari kedua dunia.
Timtech
2
Apakah itu Mesin Analitik? Seseorang harus melakukan itu ...
CalculatorFeline
4

Mathematica 1.0, 1988 + 22 bytes = 2010

Array[#>m&/.m->#-#2,#]&

Saya tidak yakin apakah ini berhasil, hanya membaca dokumentasi pada 10.3 dan mencari hal-hal yang mengatakan Diperkenalkan pada tahun 1988 (1.0)

CalculatorFeline
sumber
Hanya tentang pemenang saat ini. Kalau saja kode SMP bisa lebih pendek ...
CalculatorFeline
Pada catatan lain, beberapa dokumen: fungsi murni , /.dan-> ,Array
Sp3000
4

68k TI-Basic, 1995 + 25 = 2020

Kalkulator TI pertama yang digunakan program ini adalah TI-92, yang diperkenalkan pada 1995.

define f(a,b)=seq(x>a-b,x,1,a)

Berbeda dengan seri TI-83, 68k TI-Basic mendukung daftar kosong.

Timtech
sumber
Bagaimana ukurannya dihitung? Tokenisasi sangat berbeda pada seri 68k.
lirtosiast
Prompt dan seq keduanya dua byte plus bendera satu byte untuk beberapa argumen. (21 byte)
Timtech
Perhatikan bahwa ini bukan program atau fungsi dalam konteks kalkulator 68k: Prompttidak valid dalam fungsi, dan program tidak dapat mengembalikan nilai. Jadi ini harus dimasukkan di layar beranda. Di sisi lain, define f(a,b)=seq(x>a-b,x,1,a)tidak mendefinisikan fungsi yang valid yang dapat diberikan a dan b sebagai argumen. (Diverifikasi pada TI-92 saya dari 1995-09-13)
Fox
Saya memiliki beberapa kalkulator TI (satu-satunya versi z80 menjadi 81), tetapi biasanya menggunakan TI-92 Plus. Setelah menjalankan ini definedan memanggil f(2,1)atau mirip dengan tokenize, ukuran yang dilaporkan oleh OS adalah 25 byte.
Fox
3

Python 1.0, 1994 + 26 = 2020

Disimpan 2 byte berkat DSM.

Lambda diperkenalkan dengan rilis utama pertama, 1.0

lambda a,b:[0]*(a-b)+[1]*b
Morgan Thrapp
sumber
1
Lambda Dikonfirmasi diperkenalkan di 1.0, daftar (urutan) pengulangan di 0.9.2 . Versi tertua yang bisa saya uji pada (selain dari 0.9.1) adalah 1.5.2 , dan berfungsi dengan baik di sana.
Sp3000
@ Sp3000 Oh wow, itu luar biasa. Saya telah mencoba untuk menemukan beberapa log perubahan untuk mengonfirmasi bahwa pengulangan urutan dalam bahasa yang awal.
Morgan Thrapp
3

MATL , 2015 + 1 + 4 = 2020

:P<~

Ini berfungsi sejak rilis 6.0.0 bahasa (menggunakan input implisit, yang diperkenalkan dalam rilis itu), tanggal 31 Desember 2015.

Saya telah menambahkan 1skor sesuai dengan komentar @drolex di berbagai tempat yang mungkin berbeda.

Cobalah online!

Penjelasan

:    % take first input implicitly. Generate inclusive range from 1 to that
P    % flip that array
<~   % take second input implicitly. True for elements of flipped array that
     % exceed second number. Display implicitly
Luis Mendo
sumber
4
Satu hari kemudian, dan ...
Adám
2
Keberatan! Kita harus memiliki lokal untuk server github dan submitter rilis. Jika satu di Tonga dan yang lainnya di Hawaii, jumlah ini mungkin perlu ditambah.
drolex
@drolex OP harus mendefinisikan apa yang ia maksud dengan "tahun", tepatnya. Sementara itu, saya menambahkan 1 pada skor saya
Luis Mendo
@ DonMuesli Saya tidak bersungguh-sungguh, hanya menunjukkan batasan potensial dari jenis penilaian ini
drolex
@lexlex Oh, saya pikir Anda serius. Saya sudah bertanya pada OP. Tanggal Github mungkin harus dianggap sebagai resmi
Luis Mendo
3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Sedang meneliti jawaban ini dan seseorang pergi ke APL sebelum saya bisa berharap untuk memahami bahasa. Inilah solusi J saya sebagai gantinya.

Simon Major
sumber
2

Prolog, 1972 + 57 = 2029

a(0,_,[]).
a(A,B,[H|L]):-Z is A-1,a(Z,B,L),(Z<B,H=1;H=0).

Penggunaan: a(7,3,L). akan disatukan Ldengan [0,0,0,0,1,1,1].

Saya benar-benar tidak yakin kapan isditerapkan dalam bahasa tersebut, dan saya ragu Anda benar-benar dapat menemukan tanggal yang tepat. Ini adalah built-in yang cukup mendasar, jadi saya berasumsi itu sudah ada ketika bahasa pertama kali muncul pada tahun 1972 .

Tapi itu tidak terlalu penting, aku jauh dari menang dengan jawaban ini.

Fatalisasi
sumber
Ini mungkin bukan pemenang, tetapi jelas menggambarkan keuntungan menjelajahi - ehm - bahasa dewasa ...
Adám
2

SMP , 1983 + 28 byte = 2011

Map[S[$1>x,x->$1-$2],Ar[$1]]

Saya pikir saya sudah benar ... S: 2.10, halaman 48 Ar: 7.1, halaman 102 Map: 7.2, halaman 106 $1: 7.1, halaman 104

Dan jika Anda terbiasa dengan Mathematica, tidak, Artidak berfungsi seperti itu . Lebih mirip Range+ Select.

CalculatorFeline
sumber
(#>x&/.x->#)/@Range[#+#2]&dalam Mathematica
CalculatorFeline
Maksud saya(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline
2

Vim, 1991 + 21 = 2012

"adwj<c-x>"bdw@ai0<esc>v@bhr1

Input terlihat seperti ini:

7
3

Dan output terlihat seperti ini:

0000111

Penjelasan:

"adw                            'Delete a word into register a
    j<c-x>                      'Go down a line, and decrement the next number to occur
          "bdw                  'Delete a word into register b
              @ai0<esc>         'Insert a '0' "a" times
                       v        'Enter visual mode
                        @bh     'Move "b" characters left
                           r1   'Replace the whole selection with the character '1'
DJMcMayhem
sumber
Sayang sekali vi tidak mendukung register, karena dirilis pada tahun 1976!
DJMcMayhem
Penjelasannya tolong?
CalculatorFeline
2

B , 1971 + 54 = 2025

s(l,t){while(t<l--)printn(0,8);while(t--)printn(1,8);}

Lihat " Referensi Pengguna untuk B " untuk manual untuk prekursor C tanpa tipe ini.

ASHelly
sumber
2

Pyth, 2015 + 9 4 = 2024 2019

Terima kasih kepada @FryAmTheEggman atas bantuannya!

gRQE

Coba di sini!

Penjelasan

gRQE # Q = jumlah nilai kebenaran yang tertinggal
        # E = panjang vektor
 RE # map over range (E)
g Q # d> = Q
Denker
sumber
2

> <> , 2009 + 14 + 3 untuk -v = 2026

bdan aharus diberikan langsung pada tumpukan dengan -v, dalam urutan terbalik.

Outputnya tidak dipisahkan dengan ruang seperti pada contoh, tapi sepertinya tidak bertentangan dengan aturan yang dinyatakan. Ini menggunakan 0 dan 1 untuk mewakili false dan true, seperti yang digunakan oleh bahasa.

:?!;{:0(n1-}1-

Sejak itu tidak berfungsi dengan versi saat ini ? sekarang muncul nilai tesnya dari tumpukan.

Saya tidak yakin setiap fitur diimplementasikan mulai hari pertama, -vmisalnya bisa diberikan nanti sebagai komoditas. Saya akan mencoba memastikan jawaban saya benar akhir pekan ini.

Harun
sumber
1
? tidak muncul (lama sekali) seperti yang dinyatakan dalam tantangan quine
CalculatorFeline
Terima kasih, itu berita bagus, saya akan menghemat 1 byte :) Saya akan mengeditnya sekarang, tetapi saya harus memeriksa sumber daya yang tertaut di esolang.org, beberapa tanggal kembali ke setidaknya 2011.
Aaron
Quine challenge and esolang
CalculatorFeline
Terima kasih atas bantuan Anda, saya tidak akan berpikir untuk memeriksa revisi wiki! Saya saat ini sedang bekerja dan mungkin tidak akan dapat memeriksa semuanya, tetapi saya akan memastikan untuk melakukannya malam ini atau besok.
Aaron
Nilai = 2026 sekarang.
CalculatorFeline
1

PowerShell v1, 2006 + 28 = 2034

param($a,$b),0*($a-$b)+,1*$b

Menggunakan operator koma untuk membuat array, yang sudah ada di PowerShell sejak awal.

AdmBorkBork
sumber
1

Mathcad, 1998 + 42 = 2040

"byte" diartikan sebagai jumlah karakter keyboard yang berbeda (misalnya, operator 'untuk' (termasuk satu baris pemrograman) adalah karakter tunggal ctl-shft- #, atau klik pada bilah alat Pemrograman)).

Hitungan byte di atas mengasumsikan bahwa definisi a dan b tidak diperhitungkan terhadap total; tambahkan 4 byte untuk definisi jika asumsi ini tidak valid.

Versi fungsi yang ditunjukkan di bawah ini menambah 5 byte untuk definisi dan 3 byte lebih lanjut untuk setiap penggunaan (dengan asumsi nilai a dan b langsung diketikkan).

Karena solusi Mathcad saya jelas harus memainkan tee merah dan bukan yang kompetisi, saya telah menambahkan tabel solusi. Perhatikan bahwa karena Mathcad tidak memiliki larik kosong, saya menggunakan string kosong ("") sebagai gantinya; Saya telah menggunakan 0 untuk menunjukkan di mana saya belum menghitung b> a pair.

masukkan deskripsi gambar di sini

Stuart Bruff
sumber
Sangat menarik!
Timtech
1

PHP, 1995 + 56 byte = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Tampilan meledak
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}
ricdesi
sumber
Uh..ada penilaian khusus. Ini tahun pertama wajan bahasa dalam jumlah + byte .
CalculatorFeline
Aduh, benar kamu! Memperbaiki ...
ricdesi
Membuat asumsi yang mungkin-salah tentang hal ini berfungsi dalam PHP 1. Akan segera memverifikasi versi.
ricdesi
1

Javascript ES6, 2015 + 46 = 2061

Mengembalikan array 0 dan 1

(a,b)=>Array(a-b).fill(0).concat(Array(b).fill(1))

Javascript ES6, 2015 + 50 = 2065

Mengembalikan string 0dan 1karakter

(a,b)=>Array(a-b+1).join(0)+Array(b+1).join(1)

Javascript, 1995 + 61 = 2056

Mengembalikan string 0dan 1karakter

function(a,b){return Array(a-b+1).join(0)+Array(b+1).join(1)}
Qwertiy
sumber
1

k ( kona ), 1993 + 15 = 2008

((a-b)#0b),b#1b

Membuat daftar b Nilai benar, dan menggabungkannya ke daftar (ab) Nilai salah.

Simon Major
sumber
0

R , 20 byte + 1993 = 2013

function(a,b)1:a>a-b

Cobalah online!

Mungkin ini bekerja di S, yang akan menurunkan skor menjadi 2008, tapi saya belum bisa memverifikasinya.

Giuseppe
sumber
0

SmileBASIC 3, 2014 + 25 = 2039

Versi SmileBASIC 3 yang tersedia untuk umum diluncurkan di Jepang dengan aplikasi SmileBASIC untuk Nintendo 3DS pada November 2014.

Mencetak string yang 0 salah dan 1 benar (seperti dalam bahasa itu sendiri.)

INPUT A,B?"0"*(A-B)+"1"*B
siput_
sumber