Guter alter Suffix-Vektor

17

Inspiriert von einem alten Handbuch ...

Die Herausforderung

Ich definiere den a- ten Suffixvektor von b als die boolesche Liste der Länge a mit b nachgestellten Wahrheitswerten.

Schreiben Sie ein Programm oder eine Funktion, die bei gegebenem a und b auf irgendeine Weise den a- ten Suffixvektor von b zurückgibt .

Nun mag dies trivial erscheinen, aber hier ist der Haken: Ihre Punktzahl ist die Byteanzahl plus das früheste Jahr, in dem Ihre Lösung funktioniert hätte.

Regeln

Es gelten alle Standardregeln, mit Ausnahme der Sprachen und Sprachversionen, die nach dieser Herausforderung veröffentlicht wurden.

Ausgabe unter Verwendung der in Ihrer Sprache verwendeten Darstellung von Booleschen Werten, z. B. 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False"usw.

Ausgabe mit was auch immer Darstellung von Listen , dass Ihre Sprache Anwendungen, zum Beispiel 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}etc.

Sie können davon ausgehen, dass ab immer wahr ist und dass sie einen geeigneten Datentyp haben.

Testfälle

Bei a = 7 und b = 3 kehren Sie zurück0 0 0 0 1 1 1

Bei a = 4 und b = 4 kehren Sie zurück[True,True,True,True]

Geben Sie a = 2 und b = 0 zurück(FALSE;FALSE)

Geben Sie a = 0 und b = 0 zurück{}

Beispiellösung und Wertung

Ich möchte die Lösung möglicherweise {⌽⍺↑⍵⍴1}mit Dyalog APL einreichen. Das wäre eine Bytecount von 8. Dies ist eine dynamische Funktion, die ab der 1998 veröffentlichten Version 8.1 von Dyalog APL funktioniert. Meine Gesamtpunktzahl ist also 2006. Meine eingereichte Antwort sollte ungefähr so ​​aussehen:

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

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

Die niedrigste Punktzahl gewinnt!

Adam
quelle
14
Ich bin zutiefst besorgt über die Überprüfbarkeit der Antworten.
Dennis
1
@ Tennis Ich verstehe, dass Sie besorgt sind. 1) Die Antworten sind jedoch meist sehr einfach und können daher von Hand überprüft werden - ohne dass ein aktuelles Betriebssystem erforderlich ist.
Adám
8
Ich bin mir nicht so sicher, ob "von Hand verifiziert" für einige Antworten funktionieren wird - die Vergangenheit ist ein fremder Ort, und manchmal können anfängliche Versionen von Dingen Dinge fehlen, die sich heute alltäglich
anfühlen
1
@ Sp3000 Vielleicht, aber das ist sowieso alles nur zum Spaß, und mit 8 Antworten und 9 Upvotes in 1,5 Stunden denke ich, dass diese Herausforderung lustig genug ist, um zu akzeptieren, dass jemand schummeln könnte. Vielleicht zusätzliche Nachforschungen über den späteren Gewinner ...
Adám
1
@CatsAreFluffy Es sollte gezeigt werden, dass eines dieser Formate gültig ist. Ich denke, die Fälle sind wenige und so einfach, dass das einfache Kopieren und Einfügen kein Problem darstellt.
Adám

Antworten:

7

APL \ 360, 1968 + 3 Bytes = 1971

⎕⍵⎕

Ein aus dem Tutorial @NBZ eingebauter Link zu. Ich weiß nicht , warum @NBZ sagte , es 1970 punkten würde, weil APL \ 360 nicht bis 1968 durchgeführt wurde, und früher APLs wie APL \ 1130 hat noch keine Suffix Vektorfunktion hat (siehe Seite 208 von hier ).

Lirtosiast
quelle
8

Viertens 1970 + 38 = 2008

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

Verwendung: 7 3 sdruckt "0 0 0 0 -1 -1 -1"

Ahelly
quelle
Jetzt reden wir!
Adám
Warum -1? filler +
CalculatorFeline
2
Das ist einer der interessanteren 'wahrheitsgemäßen' Werte, die ich in letzter Zeit gesehen habe.
user3490
Gibt es einen guten Grund, warum dies genannt wird svund nicht s, oder etwas anderes, ein Byte?
Katze
8

APL, 1968 + 5 = 1973

Bis zu 5 Zeichen:

⌽⎕≥⍳⎕

Ältere Version:

⌽⎕↑⎕⍴1

Nun, Sie haben die Antwort tatsächlich bereits gegeben. Ich habe gerade die dynamische Funktionsdefinition entfernt und überprüft, ob diese im Jahr 1968 funktioniert. Als Referenz dient hier das Handbuch:

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

Moris Zucca
quelle
Kinder, das nennt man einen Gewinner . Bitte notieren Sie dies in Ihren Notizen.
CalculatorFeline
@CatsAreFluffy Noch nicht. @ Moris Zucca: Zum Schluss kann man aber tatsächlich die Hälfte dieser Bytes weggolfen. Können Sie herausfinden, wie? Außerdem ist hier eine viel modernere und lesbarere Version des Handbuchs.
Adám
7

SAS, 1966 + 45 = 2011

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

Zeit für SAS zu glänzen!

SAS wurde erst 1972 veröffentlicht, aber dieser Datenschritt verwendet nur sehr grundlegende Funktionen, von denen ich ziemlich sicher bin, dass sie auch in den frühesten Vorabversionen ab 1966 verfügbar waren. Ich glaube, dass sie dann funktioniert haben. Die Eingabe erfolgt nach a=und b=, und die Ausgabe wird in das Protokoll geschrieben.

Ich würde mich wundern, wenn noch jemand ein IBM System / 360 mit der richtigen SAS-Version hätte, um dies zu überprüfen!

user3490
quelle
Wenn ich nur das Geld für eine Mainframe-SAS-Lizenz hätte ...
user3490
5

Mouse-1979 , 1979 + 19 = 1998

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

Übersetzung von: Forth .

Die Spezifikation ist wirklich kryptisch für mich, aber ich denke, das macht das Richtige.

Katze
quelle
Defekter Link ....
CalculatorFeline
@CatsAreFluffy Behoben; Ich habe es aus dem Gedächtnis getippt.
Katze
Interessant. Ich glaube aber nicht, dass das &Tuckerst in der Version 2002 verfügbar war. Und die Schleifen scheinen unendlich zu sein.
AShelly
4

TI-Basic, 1990 + 21 = 2011

Der erste TI-Rechner, mit dem dieses Programm arbeitet, ist der TI-81, der 1990 eingeführt wurde.

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

Edit: habe festgestellt, dass ich eine leere Liste unterstützen muss ... Code um 4 Bytes erhöht

Testfälle

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
quelle
Könnten Sie einen Kommentar hinzufügen, welche Teile der Quelle in TI-Basic einzelne Bytes sind? Ich denke, das schließt Prompt und seq ein (aber ich bin nicht sicher, was den Rest
betrifft
Wir ziehen es nicht in Betracht, über Anseine akzeptable Ausgabemethode zurückzukehren, es sei denn, diese wird gedruckt.
Lirtosiast
@Sparr Sicher, Promptund seq(sind ein Byte Token und die anderen Zeichen sind jeweils ein Byte.
Timtech
@lirtosiast Ansist die Standardmethode, um einen Wert in der TI-83-Serie Basic zurückzugeben. Wenn ein Programm ausgeführt wird, wird die letzte Zeile außerdem automatisch gedruckt. Sie haben also das Beste aus beiden Welten.
Timtech
2
Ist es die Analytical Engine? Jemand sollte das tun ...
CalculatorFeline
4

Mathematica 1.0, 1988 + 22 Bytes = 2010

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

Ich bin mir nicht sicher, ob dies funktioniert. Ich habe gerade die Dokumentation zu 10.3 durchgesehen und nach Dingen gesucht, die besagten, dass sie 1988 eingeführt wurden (1.0).

CalculatorFeline
quelle
Nur um den aktuellen Gewinner. Wenn nur der SMP-Code kürzer werden könnte ...
CalculatorFeline
Auf einer anderen Anmerkung jedoch einige Dokumente: reine Funktionen , /.und-> ,Array
SP3000
4

68.000 TI-Basic, 1995 + 25 = 2020

Der erste TI-Rechner, mit dem dieses Programm arbeitet, ist der 1995 eingeführte TI-92.

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

Im Gegensatz zur TI-83-Serie unterstützt 68k TI-Basic die leere Liste.

Timtech
quelle
Wie wird die Größe gezählt? Bei der 68k-Serie ist die Tokenisierung sehr unterschiedlich.
Lirtosiast
Prompt und seq bestehen aus zwei Bytes plus einem Ein-Byte-Flag für mehrere Argumente. (21 bytes)
Timtech
Beachten Sie, dass dies im Kontext der 68k-Rechner weder ein Programm noch eine Funktion Promptist : Ist in einer Funktion ungültig und ein Programm kann keinen Wert zurückgeben. Dies muss also auf dem Startbildschirm eingegeben werden. define f(a,b)=seq(x>a-b,x,1,a)Definiert andererseits eine gültige Funktion, für die a und b als Argumente angegeben werden können. (Geprüft an meinem TI-92 vom 13.09.1995)
Fox
Ich besitze mehrere TI-Rechner (die einzige z80-Version ist die 81), benutze aber normalerweise einen TI-92 Plus. Nach dem Ausführen defineund Aufrufen von f(2,1)oder ähnlichem zum Tokenisieren beträgt die vom Betriebssystem gemeldete Größe 25 Byte.
Fox
3

Python 1.0, 1994 + 26 = 2020

2 Bytes dank DSM gespart.

Lambda wurde mit der ersten Hauptversion 1.0 eingeführt

lambda a,b:[0]*(a-b)+[1]*b
Morgan Thrapp
quelle
1
Bestätigtes Lambda eingeführt in 1.0, Listen- (Sequenz-) Wiederholung in 0.9.2 . Die älteste Version, auf der ich dies testen konnte (abgesehen von 0.9.1), war 1.5.2 und funktioniert dort einwandfrei .
Sp3000
@ Sp3000 Oh wow, das ist großartig. Ich habe versucht, einige Änderungsprotokolle zu finden, um zu bestätigen, dass die Sequenzwiederholung so früh in der Sprache war.
Morgan Thrapp
3

MATL , 2015 + 1 + 4 = 2020

:P<~

Dies funktioniert seit Version 6.0.0 der Sprache (sie verwendet implizite Eingaben, die in dieser Version eingeführt wurden) vom 31. Dezember 2015.

Ich habe hinzugefügt 1 die Punktzahl gemäß @drolex-Kommentar zu möglicherweise verschiedenen Gebietsschemas .

Probieren Sie es online!

Erläuterung

:    % 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
quelle
4
Einen Tag später und ...
Adám
2
Einwand! Wir benötigen die Ländereinstellungen für den Github-Server und den Versionsübermittler. Wenn sich einer in Tonga und der andere in Hawaii befindet, muss diese Anzahl möglicherweise erhöht werden.
Drolex
@drolex Das OP sollte genau definieren, was er unter "Jahr" versteht. In der Zwischenzeit füge ich 1 zu meiner Punktzahl hinzu
Luis Mendo
@DonMuesli Ich habe es nicht so gemeint, ich habe nur die möglichen Grenzen dieser Art von Wertung
aufgezeigt
@drolex Oh, ich dachte du meinst es ernst. Ich habe das OP trotzdem gefragt. Das Github-Datum sollte wahrscheinlich als offiziell gelten
Luis Mendo
3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Ich habe diese Antwort recherchiert und jemand ist zu APL gekommen, bevor ich hoffen konnte, die Sprache zu verstehen. Hier ist stattdessen meine J-Lösung.

Simon Major
quelle
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).

Verbrauch: a(7,3,L). vereinheitlichtL mit vereinigt [0,0,0,0,1,1,1].

Ich bin mir wirklich nicht ganz sicher, wann ises in der Sprache implementiert wurde, und ich bezweifle, dass Sie das genaue Datum tatsächlich finden können. Es ist ein ziemlich grundlegendes eingebautes Programm, daher nehme ich an, dass es bereits existierte, als die Sprache 1972 zum ersten Mal erschien .

Nicht dass es wirklich wichtig wäre, ich bin weit davon entfernt, mit dieser Antwort zu gewinnen.

Tödlich
quelle
Dies ist vielleicht nicht der Gewinner, aber es zeigt deutlich den Vorteil der Erforschung - ähm - ausgereifter Sprachen ...
Adám
2

SMP , 1983 + 28 Bytes = 2011

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

Ich glaube, ich habe das richtig verstanden ... S: 2.10, Seite 48 Ar: 7.1, Seite 102 Map: 7.2, Seite 106 $1: 7.1, Seite 104

Und wenn Sie mit Mathematica vertraut sind, nein, Arnicht funktioniert wie das . Eher wie Range+ Select.

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

Vim, 1991 + 21 = 2012

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

Die Eingabe sieht folgendermaßen aus:

7
3

Und die Ausgabe sieht so aus:

0000111

Erläuterung:

"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
quelle
Schade, dass vi keine Register unterstützt, da es 1976 veröffentlicht wurde!
DJMcMayhem
Erklärung bitte?
CalculatorFeline
2

Pyth, 2015 + 9 4 = 2024 2019

Vielen Dank an @FryAmTheEggman für seine Hilfe!

gRQE

Probieren Sie es hier aus!

Erläuterung

gRQE # Q = Anzahl der nachgestellten Wahrheitswerte
        # E = Länge des Vektors
 RE # Karte über Reichweite (E)
g Q # d> = Q
Denker
quelle
2

> <> , 2009 + 14 + 3 für -v = 2026

bund asollte direkt auf dem Stapel -vin umgekehrter Reihenfolge bereitgestellt werden.

Die Ausgabe ist nicht wie in den Beispielen durch Leerzeichen getrennt, aber dies scheint keiner festgelegten Regel zu widersprechen. Es verwendet 0 und 1, um falsch und wahr zu repräsentieren, wie es von der Sprache verwendet wird.

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

Es funktioniert nicht mit der aktuellen Version, da ?jetzt der Testwert vom Stack abgerufen wird.

Ich bin mir nicht sicher, ob jedes Feature von Tag 1 an implementiert wurde, -vzum Beispiel hätte es später als Ware bereitgestellt werden können. Ich werde versuchen, sicherzustellen, dass meine Antwort an diesem Wochenende richtig ist.

Aaron
quelle
1
? hat (vor langer Zeit) nicht geknallt, wie in der Quine-Herausforderung angegeben
CalculatorFeline
Danke, das sind großartige Neuigkeiten, ich spare 1 Byte :) Ich werde das jetzt bearbeiten, aber ich muss die Ressourcen überprüfen, die auf esolang.org verlinkt sind, einige stammen aus mindestens 2011.
Aaron
Quine Herausforderung und esolang
CalculatorFeline
Vielen Dank für Ihre Hilfe, ich hätte nicht gedacht, die Überarbeitungen des Wikis zu überprüfen! Ich bin gerade auf der Arbeit und werde wahrscheinlich noch nicht alles überprüfen können, aber ich werde es heute Abend oder morgen tun.
Aaron
Score = 2026 jetzt.
CalculatorFeline
1

PowerShell v1, 2006 + 28 = 2034

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

Verwendet den Komma-Operator , um die Arrays zu erstellen, die sich seit Beginn in PowerShell befinden.

AdmBorkBork
quelle
1

Mathcad, 1998 + 42 = 2040

"Bytes" werden als Anzahl unterschiedlicher Tastaturzeichen interpretiert (z. B. "for" -Operator (einschließlich einer Programmierzeile) ist ein einzelnes Zeichen ctl-shft- # oder ein Klick auf die Programmiersymbolleiste).

Bei der obigen Byteanzahl wird davon ausgegangen, dass die Definitionen a und b nicht zur Gesamtsumme zählen. Fügen Sie 4 Byte für Definitionen hinzu, wenn diese Annahme ungültig ist.

Die unten gezeigte Funktionsversion fügt 5 Bytes für die Definition und weitere 3 Bytes für jede Verwendung hinzu (vorausgesetzt, die a- und b-Werte werden direkt eingegeben).

Da meine Mathcad-Lösung eindeutig die roten Tees und nicht die der Konkurrenz ausspielen sollte, habe ich eine Tabelle mit Lösungen hinzugefügt. Da Mathcad kein leeres Array hat, habe ich stattdessen eine leere Zeichenfolge ("") verwendet. Ich habe 0 verwendet, um anzugeben, wo ich die b> a-Paare nicht berechnet habe.

Bildbeschreibung hier eingeben

Stuart Bruff
quelle
Sehr interessant!
Timtech
1

PHP, 1995 + 56 Bytes = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Explosionszeichnung
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}
Ricdesi
quelle
Äh ... es gibt eine benutzerdefinierte Wertung. Es ist das erste Jahr Sprach-Woks in + Byteanzahl .
CalculatorFeline
Whoops, richtig du bist! Fixing ...
Ricdesi
Die wahrscheinlich falsche Annahme treffen, dass dies in PHP 1 funktioniert. Die Version wird bald überprüft.
Ricdesi
1

Javascript ES6, 2015 + 46 = 2061

Gibt ein Array von 0 und 1 zurück

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

Javascript ES6, 2015 + 50 = 2065

Gibt eine Zeichenfolge aus 0und 1Zeichen zurück

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

Javascript, 1995 + 61 = 2056

Gibt eine Zeichenfolge aus 0und 1Zeichen zurück

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

k ( kona ), 1993 + 15 = 2008

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

Erstellt eine Liste von b True-Werten und verknüpft sie mit einer Liste von (ab) False-Werten.

Simon Major
quelle
0

R , 20 Bytes + 1993 = 2013

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

Probieren Sie es online!

Möglicherweise könnte dies in S funktionieren, was die Punktzahl auf 2008 senken würde, aber ich konnte es nicht verifizieren.

Giuseppe
quelle
0

SmileBASIC 3, 2014 + 25 = 2039

Die erste öffentlich verfügbare Version von SmileBASIC 3 wurde in Japan mit der SmileBASIC-App für Nintendo 3DS im November 2014 eingeführt.

Gibt eine Zeichenfolge aus, bei der 0 falsch und 1 wahr ist (wie in der Sprache selbst).

INPUT A,B?"0"*(A-B)+"1"*B
Schnecke_
quelle