เวกเตอร์คำต่อท้ายดีดี


17

แรงบันดาลใจจากคู่มือเก่า ...

ความท้าทาย

ฉันกำหนดTHต่อท้ายเวกเตอร์ของเป็นรายการบูลของความยาวกับท้ายค่า truthy

เขียนโปรแกรมหรือฟังก์ชั่นที่ได้รับและโดยวิธีใด ๆ กลับTHต่อท้ายเวกเตอร์ของโดยวิธีใด ๆ

ตอนนี้อาจดูเหมือนเล็กน้อย แต่นี่คือการจับ: คะแนนของคุณคือการนับไบต์บวกปีแรกของการแก้ปัญหาของคุณจะได้ทำงาน

กฎระเบียบ

อาจใช้กฎมาตรฐานทั้งหมดยกเว้นภาษาและเวอร์ชันภาษาที่เผยแพร่หลังจากการท้าทายนี้

เอาต์พุตโดยใช้การแทนค่าบูลีนที่ภาษาของคุณใช้เช่น1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", ฯลฯ

การส่งออกโดยใช้สิ่งที่เป็นตัวแทนของรายการที่คุณใช้ภาษาเช่น0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}ฯลฯ

คุณอาจจะคิดว่า≥ เป็นจริงเสมอและที่พวกเขามีชนิดข้อมูลที่เหมาะสม

กรณีทดสอบ

ได้รับ= 7 และ = 3 ผลตอบแทน0 0 0 0 1 1 1

ได้รับ= 4 และ = 4 ผลตอบแทน[True,True,True,True]

ได้รับ= 2 และ = 0 ผลตอบแทน(FALSE;FALSE)

ได้รับ= 0 และB = 0 ผลตอบแทน{}

ตัวอย่างการแก้ปัญหาและการให้คะแนน

ฉันอาจต้องการส่งโซลูชัน{⌽⍺↑⍵⍴1}โดยใช้ Dyalog APL นั่นคือผลคูณของ 8 นี่คือฟังก์ชั่นแบบไดนามิกซึ่งทำงานได้จากเวอร์ชัน 8.1 ของ Dyalog APL ซึ่งเปิดตัวในปี 2541 ดังนั้นคะแนนรวมของฉันคือ 2549 คำตอบที่ส่งมาของฉันควรมีลักษณะดังนี้:

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

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

คะแนนต่ำสุดชนะ!


14
ฉันกังวลอย่างมากเกี่ยวกับความสามารถตรวจสอบได้ของคำตอบ
Dennis

1
@Dennis ฉันเข้าใจคุณกังวล อย่างไรก็ตาม 1) คำตอบส่วนใหญ่จะง่ายมากและสามารถตรวจสอบได้ด้วยมือโดยไม่ต้องใช้ระบบจริงและ 2) ผู้ใช้บางคนนำไปเชื่อมโยงกับเอกสารการอ้างสิทธิ์
2559

8
ฉันไม่แน่ใจว่า "การยืนยันด้วยมือ" จะต้องทำงานเพื่อหาคำตอบบางอย่าง - อดีตคือต่างประเทศและบางครั้งรุ่นเริ่มต้นของสิ่งต่าง ๆ อาจขาดสิ่งที่รู้สึกว่าเป็นเรื่องธรรมดาในวันนี้ ...
Sp3000

1
@ Sp3000 บางที แต่ทั้งหมดนี้เพื่อความสนุกอยู่ดีและด้วย 8 คำตอบและ 9 upvotes ใน 1.5 ชั่วโมงฉันคิดว่าความท้าทายนี้สนุกพอที่จะยอมรับว่ามีคนโกง อาจจะมีการวิจัยเพิ่มเติมเกี่ยวกับผู้ชนะในที่สุด ...
อดัม

1
@CatsAreFluffy แนวคิดก็เพื่อแสดงว่ารูปแบบใด ๆ เหล่านั้นใช้ได้ ฉันคิดว่ากรณีมีน้อยและง่ายพอที่ความสะดวกในการคัดลอกวางไม่ได้เป็นปัญหา
2559

คำตอบ:


7

APL \ 360, 1968 + 3 ไบต์ = 1971

⎕⍵⎕

builtin จากtutorial @NBZ เชื่อมโยงกับ ฉันไม่รู้ว่าทำไม @NBZ บอกว่าจะให้คะแนน 1970 เพราะ APL \ 360 ไม่ได้ใช้จนถึงปี 1968 และ APL ก่อนหน้าเช่น APL \ 1130 ไม่มีฟังก์ชันเวกเตอร์ต่อท้าย (ดูหน้า 208 จากที่นี่ )


8

Forth, 1970 + 38 = 2008

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

การใช้งาน: 7 3 sพิมพ์ "0 0 0 0 -1 -1 -1"


ตอนนี้เรากำลังพูดถึง!
2559

ทำไม -1 filler +
CalculatorFeline

2
นั่นเป็นหนึ่งในค่า 'ความจริง' ที่น่าสนใจมากขึ้นที่ฉันได้เห็นเมื่อเร็ว ๆ นี้
user3490


มีเหตุผลที่ดีที่ชื่อนี้หรือsvไม่sหรืออย่างอื่นไบต์เดียว?
แมว

8

APL, 1968 + 5 = 1973

ลงไปที่ 5 ตัวอักษร:

⌽⎕≥⍳⎕

รุ่นเก่ากว่า:

⌽⎕↑⎕⍴1

ที่จริงคุณตอบแล้วฉันเพิ่งลบนิยามฟังก์ชั่นแบบไดนามิกและตรวจสอบว่าอันนี้ทำงานในปี 1968 สำหรับการอ้างอิงที่นี่เป็นคู่มือ:

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


เด็กนี้จะเรียกว่าเป็นผู้ชนะ กรุณาเขียนลงในบันทึกย่อของคุณ
CalculatorFeline

@CatsAreFluffy ยังไม่ได้ @ Moris Zucca: สุดท้าย แต่จริงๆแล้วคุณสามารถเล่นกอล์ฟครึ่งหนึ่งของจำนวนไบต์เหล่านั้นได้ คุณสามารถคิดออกได้อย่างไร นอกจากนี้ที่นี่เป็นรุ่นที่ทันสมัยมากขึ้นและสามารถอ่านได้จากคู่มือการใช้งาน
อดัม

7

SAS, 1966 + 45 = 2011

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

ถึงเวลาที่ SAS จะเปล่งประกาย!

SAS ไม่ได้เผยแพร่ครั้งแรกจนถึงปี 1972 แต่ขั้นตอนข้อมูลนี้ใช้เพียงคุณสมบัติขั้นพื้นฐานที่ฉันมั่นใจค่อนข้างมากว่าจะสามารถใช้งานได้แม้กระทั่งในเวอร์ชันพรีรีลีสที่เก่าที่สุดตั้งแต่ปีพ. ศ. 2509 เป็นต้นไปดังนั้นฉันเชื่อว่า อินพุตไปหลังจากa=และb=และเอาต์พุตถูกพิมพ์ไปที่บันทึก

ฉันจะประหลาดใจถ้าใครยังมีIBM System / 360กับรุ่นที่เหมาะสมของ SAS เพื่อตรวจสอบสิ่งนี้จริง ๆ !



ตอนนี้ถ้าเพียง แต่ฉันมีเงินสดสำหรับใบอนุญาตเมนเฟรม SAS ...
user3490

5

Mouse-1979 , 1979 + 19 = 1998

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

แปลของ: Forth

สเป็คนั้นเป็นความลับจริงๆสำหรับฉัน แต่ฉันคิดว่ามันทำในสิ่งที่ถูกต้อง


ลิงก์เสีย ....
CalculatorFeline

@CatsAreFluffy แก้ไขแล้ว; ฉันพิมพ์จากหน่วยความจำ
แมว

น่าสนใจ แต่ฉันไม่คิด&Tuckจะใช้งานได้จนกว่าจะถึงปี 2002 และลูปดูเหมือนจะไม่มีที่สิ้นสุด
AShelly

4

TI-Basic, 1990 + 21 = 2011

เครื่องคิดเลข TI ตัวแรกที่โปรแกรมนี้ใช้งานคือ TI-81 ซึ่งเปิดตัวในปี 1990

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

แก้ไข:สังเกตเห็นว่าฉันต้องสนับสนุนรายการว่างเปล่า ... เพิ่มรหัส 4 ไบต์

กรณีทดสอบ

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 ฉันคิดว่ารวมถึง Prompt และ seq (แต่ฉันไม่แน่ใจเกี่ยวกับส่วนที่เหลือ
Sparr

เราจะไม่พิจารณาการส่งคืนด้วยAnsวิธีการแสดงผลที่ยอมรับได้เว้นแต่จะพิมพ์ออกมา
lirtosiast

@ Sparr Sure Promptและseq(เป็นหนึ่งในโทเค็นไบต์และอักขระอื่น ๆ คือหนึ่งไบต์ต่อหนึ่งตัว
Timtech

@lirtosiast Ansเป็นวิธีเริ่มต้นในการส่งคืนค่าในชุด TI-83 พื้นฐาน นอกจากนี้เมื่อเรียกใช้โปรแกรมบรรทัดสุดท้ายจะถูกพิมพ์โดยอัตโนมัติ ดังนั้นคุณมีสิ่งที่ดีที่สุดของทั้งสองโลก
Timtech

2
มันเป็นเครื่องมือวิเคราะห์หรือไม่ ใครบางคนควรทำเช่นนั้น ...
CalculatorFeline

4

Mathematica 1.0, 1988 +22 bytes = 2010

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

ฉันไม่แน่ใจว่ามันใช้งานได้หรือไม่เพียงแค่อ่านเอกสารในวันที่ 10.3 และมองหาสิ่งต่าง ๆ ที่กล่าวถึงแนะนำในปี 1988 (1.0)


เพียงเกี่ยวกับผู้ชนะในปัจจุบัน หากรหัส SMP สั้นลงเท่านั้น ...
CalculatorFeline

ในบันทึกอื่นแม้ว่าบางเอกสาร: ฟังก์ชั่นบริสุทธิ์ , /.และ-> ,Array
SP3000

4

68k TI-Basic, 1995 + 25 = 2020

เครื่องคิดเลข TI ตัวแรกที่โปรแกรมนี้ใช้งานคือ TI-92 ซึ่งเปิดตัวในปี 1995

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

ซึ่งแตกต่างจากชุด TI-83, 68k TI-Basic รองรับรายการที่ว่างเปล่า


มีการนับขนาดอย่างไร โทเค็นไลเซชันแตกต่างกันมากในซีรี่ส์ 68k
lirtosiast

พรอมต์และ seq มีทั้งสองไบต์บวกหนึ่งแฟล็กไบต์สำหรับอาร์กิวเมนต์หลายตัว (21 ไบต์)
Timtech

โปรดทราบว่านี่ไม่ใช่โปรแกรมหรือฟังก์ชั่นในบริบทของเครื่องคิดเลข 68k: Promptไม่ถูกต้องในฟังก์ชั่นและโปรแกรมไม่สามารถคืนค่าได้ ดังนั้นสิ่งนี้จะต้องมีการเข้าสู่หน้าจอหลัก ในทางกลับกันdefine f(a,b)=seq(x>a-b,x,1,a)นิยามฟังก์ชั่นที่ถูกต้องที่สามารถกำหนด a และ b เป็นอาร์กิวเมนต์ได้ (ตรวจสอบใน TI-92 ของฉันตั้งแต่ 1995-09-13)
Fox

ฉันเป็นเจ้าของเครื่องคิดเลข TI หลายตัว (รุ่น z80 เท่านั้นที่เป็น 81) แต่มักจะใช้ TI-92 Plus หลังจากเรียกใช้งานdefineและเรียกใช้f(2,1)หรือคล้ายกับโทเค็นขนาดที่รายงานโดยระบบปฏิบัติการคือ 25 ไบต์
Fox

3

Python 1.0, 1994 + 26 = 2020

บันทึก 2 ไบต์ด้วย DSM

แลมบ์ดาได้รับการแนะนำให้รู้จักกับรุ่นใหญ่ครั้งแรก 1.0

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

1
ได้รับการยืนยันแลมบ์ดาแนะนำใน 1.0 รายการ (ตามลำดับ) การทำซ้ำใน 0.9.2 รุ่นเก่าที่สุดที่ฉันสามารถทดสอบได้ (นอกเหนือจาก 0.9.1) คือ1.5.2และใช้งานได้ดี
Sp3000

@ Sp3000 โอ้ว้าวมันเยี่ยมมาก ฉันพยายามค้นหาบันทึกการเปลี่ยนแปลงเพื่อยืนยันว่าการทำซ้ำตามลำดับเป็นภาษาที่มีมาก่อน
Morgan Thrapp

3

MATL , 2015 + 1 + 4 = 2020

:P<~

ใช้งานได้ตั้งแต่รีลีส 6.0.0ของภาษา (ใช้การป้อนข้อมูลโดยนัยซึ่งถูกนำมาใช้ในรีลีสนั้น) ลงวันที่ 31 ธันวาคม 2015

ฉันได้เพิ่ม 1คะแนนตามความคิดเห็น @drolex ในสถานที่ที่อาจแตกต่างกัน

ลองออนไลน์!

คำอธิบาย

:    % 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
หนึ่งวันต่อมาและ ...
2559

2
คัดค้าน! เราจะต้องมีที่ตั้งสำหรับเซิร์ฟเวอร์ github และผู้ส่งออก หากหนึ่งในตองกาและอื่น ๆ ในฮาวายจำนวนนี้อาจต้องเพิ่มขึ้น
drolex

@drolex OP ควรกำหนดสิ่งที่เขาหมายถึง "ปี" อย่างแน่นอน ในขณะเดียวกันฉันกำลังเพิ่ม 1 คะแนนของฉัน
Luis Mendo

@ DonMuesli ฉันไม่ได้หมายถึงเพียงแสดงข้อ จำกัด ที่เป็นไปได้ของการให้คะแนนประเภทนี้
drolex

@drolex โอ้ฉันคิดว่าคุณจริงจัง ฉันถาม OP แล้ว วัน Github น่าจะนับเป็นทางการ
Luis Mendo

3

J, 1990 + 8 = 1998

|.a{.b#1

โอ๊ะ กำลังค้นคว้าคำตอบนี้และมีคนมาที่ APL ก่อนที่ฉันจะสามารถเข้าใจภาษาได้ นี่คือโซลูชัน J ของฉันแทน


2

อารัมภบท, 1972 + 57 = 2029

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

การใช้งาน: a(7,3,L).จะรวมเข้าLกับ[0,0,0,0,1,1,1]กับ

ฉันไม่ค่อยแน่ใจว่าเมื่อใดที่isมีการใช้งานภาษาและฉันสงสัยว่าคุณสามารถหาวันที่แน่นอนได้จริง มันเป็นพื้นฐานในตัว แต่ฉันคิดว่ามันมีอยู่แล้วเมื่อภาษาปรากฏตัวครั้งแรกในปี 1972 1972

ไม่ใช่ว่ามันจะสำคัญ แต่ฉันก็ยังห่างไกลจากการชนะด้วยคำตอบนี้


นี้อาจไม่เป็นผู้ชนะ แต่มันชัดเจนแสดงให้เห็นถึงประโยชน์จากการสำรวจ - ehm - ผู้ใหญ่ภาษา ...
อดัม

2

SMP , 1983 + 28 bytes = 2011

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

ฉันคิดว่าฉันมีสิทธิ์ ... S: 2.10, หน้า 48 Ar: 7.1, หน้า 102 Map: 7.2, หน้า 106 $1 : 7.1, หน้า 104

และถ้าคุณคุ้นเคยกับ Mathematica ไม่มีArไม่ทำงานเช่นว่า มากขึ้นเช่น+RangeSelect


(#>x&/.x->#)/@Range[#+#2]&ใน Mathematica
เครื่องคิดเลข

ฉันหมายถึง(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim, 1991 +21 = 2012

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

ข้อมูลที่ป้อนมีลักษณะดังนี้:

7
3

และผลลัพธ์จะเป็นดังนี้:

0000111

คำอธิบาย:

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

น่าเสียดายที่ vi ไม่รองรับการลงทะเบียนเพราะมันเปิดตัวในปี 1976!
DJMcMayhem

กรุณาอธิบาย
CalculatorFeline


2

Pyth 2015 + 9 4 = 2024 2019

ขอบคุณ @FryAmTheEggman สำหรับความช่วยเหลือของเขา!

gRQE

ลองที่นี่!

คำอธิบาย

gRQE # Q = จำนวนของค่าความจริงต่อท้าย
        # E = ความยาวของเวกเตอร์
 RE # แผนที่ในช่วง (E)
g Q # d> = Q

2

> <> , 2009 +14 + 3 สำหรับ -v = 2026

b and a should be provided directly on the stack with -v, in reverse order.

The output isn't space separated as in the examples, but that does not seem to go against any stated rule. It uses 0 and 1 to represent false and true, as used by the language.

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

It doesn't work with the current version since ? now pops its test value from the stack.

I'm not confident every feature was implemented from day 1, -v for example could have been provided later as a commodity. I'll try to make sure my answer is correct this weekend.


1
? didn't pop (a long time ago) as stated in the quine challenge
CalculatorFeline

Thanks, that's great news, I'll save 1 byte :) I'll edit that now, but I'll have to check the resources linked on esolang.org, some date back to at least 2011.
Aaron


Thanks for your help, I wouldn't have thought to check the wiki's revisions ! I'm currently at work and won't probably be able to check everything yet, but I'll make sure to do it this evening or tomorrow.
Aaron

Score=2026 now.
CalculatorFeline



1

Mathcad, 1998 + 42 = 2040

"bytes" are interpreted as number of distinct keyboard characters (eg, 'for' operator (including one programming line) is a single character ctl-shft-#, or a click on the Programming toolbar)).

The above byte count assumes that the a and b definitions don't count towards the total; add 4 bytes for definitions if this assumption is invalid.

The function version shown below adds 5 bytes for the definition and a further 3 bytes for each use (assuming the a and b values are directly typed in).

As my Mathcad solution should clearly be playing off the red tees and not the competition ones, I've added a table of solutions. Note that as Mathcad has no empty array, I've used an empty string ("") instead; I've used 0 to indicate where I haven't calculated the b>a pairs.

enter image description here


Very interesting!
Timtech

1

PHP, 1995 + 56 bytes = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Exploded view
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}

Uh..there's custom scoring. It's first year language woks in+byte count.
CalculatorFeline

Whoops, right you are! Fixing...
ricdesi

Making the probably-incorrect assumption of this working in PHP 1. Will verify version soon.
ricdesi

1

Javascript ES6, 2015 + 46 = 2061

Returns array of 0 and 1

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

Javascript ES6, 2015 + 50 = 2065

Returns a string of 0 and 1 chars

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

Javascript, 1995 + 61 = 2056

Returns a string of 0 and 1 chars

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



0

SmileBASIC 3, 2014 + 25 = 2039

The first publicly available version of SmileBASIC 3 launched in Japan with the SmileBASIC app for Nintendo 3DS in November 2014.

Prints a string where 0 is false and 1 is true (as they are in the language itself.)

INPUT A,B?"0"*(A-B)+"1"*B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.