İyi eski sonek vektör


17

Eski bir el kitabından esinlenerek ...

Meydan okuma

Tanımlamam bir inci sonek vektör b uzunluğu boole listesi olarak a ile b arka truthy değerleri.

Verilen bir program ya da işlev Yazın bir ve b herhangi bir yöntemle, döner bir inci eki vektörü b herhangi bir yöntemle.

Şimdi bu önemsiz görünebilir, ama işte yakalama: Puanınız bayt sayısı artı çözümünüzün çalışacağı en erken yıl.

kurallar

Bu meydan okumadan sonra yayınlanan diller ve dil sürümleri de hariç, tüm standart kurallar geçerlidir.

Dilinizin kullandığı boole değerlerinin herhangi bir gösterimini kullanarak çıktı alın, örneğin 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", vb.

Listelerde ki onun sorumlusu da dil kullanımları örneğin ne olursa olsun temsilini kullanarak Çıktı 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, vb

Ab'nin her zaman doğru olduğunu ve uygun bir veri türünde olduğunu varsayabilirsiniz .

Test senaryoları

A = 7 ve b = 3 verildiğinde , geri dönüş0 0 0 0 1 1 1

A = 4 ve b = 4 verildiğinde , geri dönüş[True,True,True,True]

A = 2 ve b = 0 verildiğinde , geri dönüş(FALSE;FALSE)

A = 0 ve b = 0 verildiğinde , geri dön{}

Örnek çözüm ve puanlama

Çözümü {⌽⍺↑⍵⍴1}Dyalog APL kullanarak göndermek isteyebilirim . Bu, 8'lik bir bayt olacaktır. Bu, 1998'de yayınlanan Dyalog APL'nin 8.1 sürümünden çalışan dinamik bir işlevdir, bu yüzden toplam puanım 2006'dır. Gönderilen cevabım şöyle görünmelidir:

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

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

En düşük puan kazanır!


14
Cevapların doğruluğundan çok endişeliyim.
Dennis

1
@Dennis endişelerinizi anlıyorum. Bununla birlikte, 1) cevaplar çoğunlukla çok basit olacaktır ve bu nedenle gerçek bir koşu sistemi gerektirmeyen elle doğrulanabilir ve 2) bazı kullanıcılar iddialarının belgelerine bağlantı kurmuşlardır.
Adám

8
"El ile doğrulandı" nın bazı cevaplar için işe yarayacağından emin değilim - geçmiş yabancı bir yer ve bazen şeylerin ilk sürümleri bugün sıradan hissettiren şeylerden yoksun olabilir ...
Sp3000

1
@ Sp3000 Belki, ama bu yine de eğlence için ve 1.5h içinde 8 cevap ve 9 upvotes ile, bu meydan okuma birisi hile kabul yeterince eğlenceli olduğunu düşünüyorum. Belki de kazananı kazanan hakkında biraz araştırma ...
Adám

1
@CatsAreFluffy Fikir, bu formatlardan herhangi birinin geçerli olduğunu göstermekti. Bence vakalar çok az ve basit bir şekilde kopyalayıp yapıştırma kolaylığı sorun değil.
Adám

Yanıtlar:


7

APL \ 360, 1968 + 3 bayt = 1971

⎕⍵⎕

A yerleşik öğretici bağlantılı @NBZ. @NBZ APL \ 360 1968 yılına kadar uygulanan değildi, çünkü 1970 puanı söyledi neden bilmiyorum ve APL \ 1130 gibi erken APL eki vektör fonksiyonunu (sayfasını 208 bakın yoktu burada ).



8

APL, 1968 + 5 = 1973

5 karaktere kadar:

⌽⎕≥⍳⎕

Eski versiyon:

⌽⎕↑⎕⍴1

Aslında, cevabı zaten verdiniz, ben sadece dinamik fonksiyon tanımını kaldırdım ve bunun 1968'de çalıştığını kontrol ettim. Referans için kılavuz:

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


Çocuklar, buna kazanan denir . Lütfen bunu notlarınıza yazın.
CalculatorFeline

@CatsAreFluffy Henüz değil. @ Moris Zucca: Sonunda, ancak bu baytların yarısını golf oynayabilirsiniz. Nasıl olduğunu anlayabilir misin? Ayrıca, burada kılavuzun çok daha modern ve okunabilir bir versiyonudur.
Mart'ta Adám

7

SAS, 1966 + 45 = 2011

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

SAS'ın parlama zamanı!

SAS ilk olarak 1972'ye kadar yayınlanmadı, ancak bu veri adımı yalnızca 1966'dan sonraki en eski ön sürümlerde bile mevcut olacağından oldukça emin olduğum çok temel özellikleri kullanıyor, bu yüzden o zaman işe yarayacağına inanıyorum. Girdi peşinden gider a=ve b=ve çıktı günlüğüne yazdırılır.

Bunu doğrulamak için hala SAS'ın doğru sürümüne sahip bir IBM System / 360'a sahip olsaydım şaşıracaktım !



Şimdi, sadece bir anabilgisayar SAS lisansı için nakit olsaydı ...
user3490 11:16

5

Fare-1979 , 1979 + 19 = 1998

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

Tercüme: İleri .

Spesifikasyon benim için gerçekten şifreli ama bence bu doğru olanı yapıyor.


Kırık bağlantı ....
CalculatorFeline

@CatsAreFluffy Sabit; Hafızadan yazdım.
kedi

İlginç. Ama &Tuck2002 versiyonuna kadar mevcut olduğunu sanmıyorum . Ve döngüler sonsuz gibi görünüyor.
AShelly

4

TI-Basic, 1990 + 21 = 2011

Bu programın üzerinde çalıştığı ilk TI hesaplayıcı, 1990'da tanıtılan TI-81'dir.

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

Düzenleme: boş bir listeyi desteklemem gerektiğini fark ettim ... kodu 4 bayt arttırdı

Test Durumları

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

TI-Basic'te kaynağın hangi bölümlerinin tek bayt olduğu hakkında yorum ekleyebilir misiniz? Istemi ve seq içerir sanırım (ama geri kalanı hakkında emin değilim
Sparr

AnsYazdırılmadığı sürece kabul edilebilir bir çıktı yöntemiyle iade etmeyi düşünmüyoruz .
lirtosiast

@Sparr Tabii Promptve seq(bir bayt belirteci ve diğer karakterlerin her biri bir bayt.
Timtech

@lirtosiast Ans, TI-83 serisi Basic'te bir değer döndürmenin varsayılan yoludur. Ayrıca, bir program çalıştırıldığında, son satır otomatik olarak yazdırılır. Yani her iki dünyanın da en iyisine sahipsiniz.
Timtech

2
Analitik Motor mu? Birisi bunu yapmalı ...
CalculatorFeline


4

68k TI-Basic, 1995 + 25 = 2020

Bu programın üzerinde çalıştığı ilk TI hesap makinesi, 1995 yılında tanıtılan TI-92'dir.

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

TI-83 serisinin aksine, 68k TI-Basic boş listeyi destekler.


Boyut nasıl sayılır? Tokenizasyon 68k serisinde çok farklı.
lirtosiast

Bilgi istemi ve sıra, hem iki bayt hem de birden çok bağımsız değişken için bir bayt bayrağıdır. (21 bayt)
Timtech

Bunun 68k hesaplayıcıların bağlamında ne bir program ne de bir işlev olduğunu unutmayın: Promptbir işlevde geçersizdir ve bir program bir değer döndüremez. Bu yüzden bu giriş ekranına girilmelidir. Öte yandan, define f(a,b)=seq(x>a-b,x,1,a)a ve b değişkenleri olarak verilebilen geçerli bir fonksiyon tanımlar. (1995-09-13 arası TI-92'imde doğrulandı)
Fox

Birkaç TI hesap makinem var (tek z80 sürümü 81'dir), ancak genellikle bir TI-92 Plus kullanır. Bunu çalıştırdıktan defineve f(2,1)tokenize etmek için arama veya benzeri bir şey yaptıktan sonra , OS tarafından bildirilen boyut 25 bayttır.
Fox

3

Python 1.0, 1994 + 26 = 2020

DSM sayesinde 2 bayt tasarruf etti.

Lambda ilk büyük sürüm olan 1.0 ile tanıtıldı

lambda a,b:[0]*(a-b)+[1]*b

1
Onaylanmış lambda 1.0, tanıtıldı (sıra) 0.9.2 . Bunu (0.9.1 dışında) test edebileceğim en eski sürüm 1.5.2 idi ve orada iyi çalışıyor.
Sp3000

@ Sp3000 Oh vay, bu harika. Sıra tekrarının o dilde olduğunu doğrulamak için bazı değişiklik günlükleri bulmaya çalışıyorum.
Morgan Thrapp

3

MATL , 2015 + 1 + 4 = 2020

:P<~

Bu , 31 Aralık 2015 tarihli dilin 6.0.0 sürümünden (bu sürümde tanıtılan örtük girdiyi kullanır) beri çalışır .

Ben 1muhtemelen farklı yerel ayarlar @drolex yorumuna göre puan ekledim.

Çevrimiçi deneyin!

açıklama

:    % 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

4
Bir gün sonra ve ...
Adám

2
İtiraz! Github sunucusu ve sürüm göndericisi için yerel ayarlara ihtiyacımız olacak. Biri Tonga'da ve diğeri Hawaii'de ise, bu sayının artırılması gerekebilir.
drolex

@drolex OP tam olarak “yıl” ile ne demek istediğini tanımlamalıdır. Bu arada skoruma 1 ekliyorum
Luis Mendo

@DonMuesli Bunu demek istemedim, sadece bu tür puanlamanın potansiyel sınırlamalarını gösterdim
drolex

@drolex Oh, ciddi olduğunu düşündüm. Yine de OP'ye sordum. Github tarihi muhtemelen resmi olarak
sayılmalıdır

3

J, 1990 + 8 = 1998

|.a{.b#1

Ahh. Bu yanıtı araştırıyordum ve dili anlayabilmemden önce birisi APL'ye gitti. Onun yerine J çözümüm.


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).

Kullanımı: ile a(7,3,L).birleşecek .L[0,0,0,0,1,1,1]

isDilde ne zaman uygulandığından gerçekten emin değilim ve kesin tarihi tam olarak bulabileceğinizden şüpheliyim. Oldukça basit bir yerleşik olsa da, dilin ilk ortaya çıktığı zaman var olduğunu varsayıyorum. 1972'de .

Gerçi bu gerçekten önemli değil, bu cevabı kazanmaktan çok uzaktayım.


Bu kazanan olmayabilir, ancak araştırmanın avantajını açıkça göstermektedir - ehm - olgun diller ...
Adám

2

SMP , 1983 + 28 bayt = 2011

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

Sanırım bunu doğru anladım ... S: 2.10, sayfa 48 Ar: 7.1, sayfa 102 Map : 7.2, sayfa 106 $1: 7.1, sayfa 104

Eğer Mathematica aşina iseniz, hayır, Arböyle iş yapmaz o . Daha çok Range+ gibi Select.


(#>x&/.x->#)/@Range[#+#2]&in Mathematica
CalculatorFeline

Demek istediğim(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim, 1991 + 21 = 2012

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

Girdi şöyle görünür:

7
3

Ve çıktı şöyle görünür:

0000111

Açıklama:

"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'

Çok kötü vi kayıtları desteklemiyor, çünkü 1976'da piyasaya sürüldü!
DJMcMayhem

Açıklama lütfen?
CalculatorFeline


2

Pyth, 2015 + 9 4 = 2024 2019

@FryAmTheEggman'a yardımları için teşekkürler!

gRQE

Burada deneyin!

açıklama

gRQE # Q = sondaki doğruluk değerlerinin miktarı
        # E = vektörün uzunluğu
 RE # aralığı üzerindeki harita (E)
g Q # d> = Q

2

> <> , -V = 2026 için 2009 + 14 + 3

bve ters sırada, adoğrudan istif üzerinde sağlanmalıdır -v.

Çıktı, örneklerde olduğu gibi boşlukla ayrılmış değildir, ancak belirtilen herhangi bir kurala aykırı görünmemektedir. Dil tarafından kullanılan şekliyle yanlış ve doğru ifadeleri için 0 ve 1 kullanır.

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

Şu anki sürümle çalışmaz, çünkü ?test değerini yığından çıkarır.

Her özelliğin 1. günden itibaren uygulandığından emin değilim, -vörneğin daha sonra bir emtia olarak sağlanmış olabilir. Bu hafta sonu cevabımın doğru olduğundan emin olmaya çalışacağım.


1
? quine meydan okumasında belirtildiği gibi patlamamış (uzun zaman önce)
CalculatorFeline

Teşekkürler, bu harika bir haber, 1 bayt tasarruf edeceğim :) Bunu şimdi düzenleyeceğim, ancak esolang.org'da bulunan kaynakları kontrol etmeliyim, bazı tarihler en az 2011 yılına kadar.
Aaron


Yardımın için teşekkürler, wiki'nin revizyonlarını kontrol etmeyi düşünmezdim! Şu anda işteyim ve muhtemelen her şeyi kontrol edemeyeceğim, ancak bu akşam ya da yarın bunu yapacağım.
Aaron

Puan = 2026 şimdi.
CalculatorFeline



1

Mathcad, 1998 + 42 = 2040

"bayt", farklı klavye karakterlerinin sayısı olarak yorumlanır (örn., 'için' operatörü (bir programlama satırı dahil) tek bir karakterdir ctl-shft- # veya Programlama araç çubuğundaki bir tıklamadır).

Yukarıdaki bayt sayımı a ve b tanımlarının toplamı saymadığını varsayar; bu varsayım geçersizse tanımlamalar için 4 bayt ekleyin.

Aşağıda gösterilen işlev sürümü, tanım için 5 bayt ve her kullanım için 3 bayt daha ekler (a ve b değerlerinin doğrudan girildiği varsayılarak).

Mathcad çözümümün rakipleri değil, kırmızı tişörtleri açıkça oynaması gerektiği için, bir çözüm tablosu ekledim. Mathcad'ın boş bir dizisi olmadığından, bunun yerine boş bir dize ("") kullandığımı unutmayın; B> a çiftlerini nerede hesaplamadığımı belirtmek için 0 kullandım.

enter image description here


Çok ilginç!
Timtech

1

PHP, 1995 + 56 bayt = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Parçalarına ayrıştırılmış görünüm
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}

Özel puanlama var. Bu var + bayt sayısında ilk yıl dil woks .
CalculatorFeline

Hata! Sabitleme ...
Ricdesi

PHP bu çalışma muhtemelen yanlış varsayım yapma 1. Yakında sürümü doğrular.
ricdesi

1

Javascript ES6, 2015 + 46 = 2061

0 ve 1 dizisini döndürür

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

Javascript ES6, 2015 + 50 = 2065

0Ve 1karakterlerinden oluşan bir dize döndürür

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

Javascript, 1995 + 61 = 2056

0Ve 1karakterlerinden oluşan bir dize döndürür

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

1

k ( kona ), 1993 + 15 = 2008

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

B True değerleri listesi oluşturur ve bunu (ab) False değerleri listesine birleştirir.


0

R , 20 bayt + 1993 = 2013

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

Çevrimiçi deneyin!

Muhtemelen bu, 2008'de skoru düşürecek olan S'de işe yarayabilir, ancak bunu doğrulayamadım.


0

SmileBASIC 3, 2014 + 25 = 2039

SmileBASIC 3'ün halka açık ilk sürümü, Kasım 2014'te Nintendo 3DS için SmileBASIC uygulamasıyla Japonya'da piyasaya sürüldü.

0'ın yanlış ve 1'in doğru olduğu bir dize yazdırır (dilin kendisinde olduğu gibi).

INPUT A,B?"0"*(A-B)+"1"*B
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.