ปกปิดเลขศูนย์ในรายการ


41

แรงบันดาลใจจากคำถาม SO นี้

ในฐานะที่เป็นอินพุทคุณจะได้รับรายการจำนวนเต็มที่ไม่ว่างเปล่าซึ่งค่าแรกจะรับประกันว่าไม่เป็นศูนย์ ในการสร้างผลลัพธ์ให้เดินจากจุดเริ่มต้นของรายการแล้วส่งออกแต่ละค่าที่ไม่เป็นศูนย์ไปพร้อมกัน เมื่อคุณพบค่าศูนย์ให้ทำซ้ำค่าที่คุณเพิ่งเพิ่มเข้าไปในเอาต์พุตแทน

คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นและให้อินพุต / เอาท์พุตมีรูปแบบที่สะดวกซึ่งไม่ได้เข้ารหัสข้อมูลเพิ่มเติมตราบใดที่ยังคงเป็นลำดับของจำนวนเต็ม หากการส่งออกจากโปรแกรมคุณอาจพิมพ์บรรทัดใหม่ต่อท้าย ยกเว้นบรรทัดใหม่ต่อท้ายนี้ผลลัพธ์ของคุณควรเป็นอินพุตที่ยอมรับได้สำหรับการส่งของคุณ

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบ

[1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9] -> [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9]
[1, 0, 0, 0, 0, 0] -> [1, 1, 1, 1, 1, 1]
[-1, 0, 5, 0, 0, -7] -> [-1, -1, 5, 5, 5, -7]
[23, 0, 0, -42, 0, 0, 0] -> [23, 23, 23, -42, -42, -42, -42]
[1, 2, 3, 4] -> [1, 2, 3, 4]
[-1234] -> [-1234]

21
เรื่องไม่สำคัญ: ชื่อสำหรับการดำเนินการนี้ในโลกแห่งสถิติคือการใส่ความ LOCF (การสังเกตครั้งสุดท้ายดำเนินการไปข้างหน้า)
Alex A.

จะเกิดอะไรขึ้นถ้าอินพุตเป็น[0,0]อย่างไร
Kritixi Lithos

4
@ KριτικσιΛίθος "... โดยที่รับประกันค่าแรกไม่เป็นศูนย์"
Sp3000

เกิดอะไรขึ้นถ้าการป้อนข้อมูลคือ[1,01]อะไร? ใช้ไอแซคของคำตอบ Pyth เปรียบเทียบนี้และนี้
Arcturus

@Eridan 01ไม่ใช่จำนวนเต็มที่ถูกต้องในการป้อนข้อมูลPyth ดังนั้น isaac ไม่จำเป็นต้องมีบัญชี คำตอบอื่น ๆ สามารถยอมรับอินพุตเช่นนั้นได้หากพวกเขาต้องการตราบใดที่พวกเขาสอดคล้องกัน (เช่นวิธีที่คำตอบของ isaac จะไม่สร้างรายการนั้นเป็นเอาท์พุท)
FryAmTheEggman

คำตอบ:


19

Pyth, 6 ไบต์

mJ|dJQ

สาธิต

m ... Qหมายความว่านี่แมปฟังก์ชั่นมากกว่าการป้อนข้อมูล J|dJฟังก์ชั่นเป็นแมปมี นั่นหมายถึงJ = d or Jใน Python เนื่องจากJมีความเกี่ยวข้องกับค่าต่อไปนี้ในการใช้ครั้งแรก ไม่เหมือนกับ Python นิพจน์การมอบหมายจะส่งคืนค่าที่กำหนดใน Pyth ดังนั้นแผนที่จะส่งคืนค่าที่ต่อเนื่องกันJตามต้องการ


23

เยลลี่ไม่ใช่การแข่งขัน

3 ไบต์ คำตอบนี้ไม่ใช่การแข่งขันเนื่องจากใช้คุณลักษณะที่โพสต์วันที่ท้าทาย

o@\

ลองออนไลน์!

มันทำงานอย่างไร

o      Take the logical OR of its arguments.
 @     Reverse the argument order of the link to the left.
  \    Do a cumulative reduce, using the link to the left.

6
สมองของฉันไม่สามารถเข้าใจได้ ... เดนนิสได้พบวิธีที่จะออกกอล์ฟให้กับเราอย่างถาวร เหมือนที่เขายังไม่ได้ ಠ_ಠ
Addison Crump

1
คำอธิบายไม่สอดคล้องกับโปรแกรมอีกต่อไป
quintopia

18

Ruby, 25 ไบต์

->a{a.map{|x|x==0?a:a=x}}

นี่มันชั่วร้ายจริงๆ

x==0 ? a : (a=x)โดยเฉพาะข้อมูลโค้ด

ถ้าฉันใช้ชื่อตัวแปรอื่น ๆ สำหรับa(ค่าที่ไม่ใช่ศูนย์ก่อนหน้านี้) y- บอกว่า- ฉันจะต้องประกาศนอกmap(เพราะy=xจะมีขอบเขตในmapการทำซ้ำครั้งเดียวเท่านั้น) ที่จะใช้สี่ตัวอักษรเพิ่มเติม ( y=0;)

แต่ถ้าฉันใช้ชื่อตัวแปรa... อ้าวคุณก็เดาได้ ฉันกำหนดใหม่ให้กับอาร์กิวเมนต์ที่เราได้รับในฐานะอินพุต (อาร์เรย์ดั้งเดิม)

mapไม่สนใจเพราะมันสนใจแค่คุณค่าดั้งเดิมของสิ่งที่มันถูกเรียกใช้เท่านั้นดังนั้นจึงใช้งานได้จริง


17

Haskell, 21 ไบต์

a%0=a
a%b=b
scanl1(%)

ฟังก์ชั่น (ไม่ระบุชื่อ) ที่เราทำอยู่ในบรรทัดสุดท้าย สองบรรทัดแรกกำหนดฟังก์ชันตัวช่วย

scanl1(%) [1,0,2,0,7,7,7,0,5,0,0,0,9]
[1,1,2,2,7,7,7,7,5,5,5,5,9]

ฟังก์ชั่นไบนารี%เอาท์พุทอาร์กิวเมนต์ที่สองเว้นแต่ว่ามัน0ในกรณีที่มันจะส่งออกอาร์กิวเมนต์แรกแทน scanl1วนซ้ำฟังก์ชั่นนี้เหนือรายการอินพุตเพื่อแสดงผลลัพธ์ในแต่ละขั้นตอน


13

J, 8 ไบต์

{:@-.&0\

นี่คือฟังก์ชั่น unary เรียกใช้ดังนี้

   f =: {:@-.&0\
   f 2 0 0 4 0 _1 0
2 2 2 4 4 _1 _1

คำอธิบาย

{:@-.&0\
       \  Map over non-empty prefixes:
   -.      remove all occurrences
     &0    of the number 0 and
{:@        take the last element.

คุณสามารถทำซ้ำโดยใช้ค่าสัมบูรณ์แทนที่จะลบ 0 ได้หรือไม่?
lirtosiast

@ThomasKwa นั่นเป็นความพยายามครั้งแรกของฉัน มัน{:@(#~|)\ยาวกว่าหนึ่งไบต์
Zgarb

13

เซด 8

/^0$/g
h
  • /^0$/ตรงกับศูนย์ในบรรทัด - ถ้าเป็นเช่นนั้นgคัดลอกพื้นที่ค้างไว้ไปยังพื้นที่รูปแบบ
  • h คัดลอกพื้นที่รูปแบบไปยังพื้นที่พัก

จำนวนเต็มถูกขึ้นบรรทัดใหม่ เช่น:

$ printf -- "-1\n0\n5\n0\n0\n7\n" | sed -f zerocover.sed
-1
-1
5
5
5
7
$ 

11

Javascript ES6, 19 ไบต์

s=>s.map(i=>p=i||p)

วิธีการแก้ปัญหาที่ตรงไปตรงมาวนผ่านอินพุตกำหนดให้pกับองค์ประกอบปัจจุบันiหรือpหากiเป็น0และส่งออก

ตัวอย่างการทำงาน (กำหนดฟังก์ชั่นที่ไม่ระบุชื่อf):

>> f([1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9])
<< Array [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9]

เมื่อใดก็ตามที่ฉันเรียกใช้สิ่งนี้ฉันได้รับข้อผิดพลาดว่า "ไม่สามารถหาตัวแปร p" ได้
Downgoat

@Downgoat นั่นเป็นเพราะล่ามเป็นโหมดเข้มงวดเท่านั้นล่าม หากคุณไม่เรียกใช้รหัสนั้นในโหมดเข้มงวดควรใช้งานได้
wizzwizz4

@ wizzwizz4 โอ๊ะโอเคโอเค
Downgoat

1
@ wizzwizz4 โหมดเข้มงวดเป็นเรื่องโง่
SuperJedi224

1
@ SuperJedi224 มันไม่ได้โง่ มันมีประโยชน์มาก ทำให้แน่ใจว่าโค้ดของคุณไม่ชัดเจนและจะทำงานได้แม้กับการอัปเดตที่สำคัญและไม่ได้ใช้การทำงานที่ไม่ได้กำหนด ฯลฯ แต่สิ่งที่โง่คือการเปิดใช้งานโดยค่าเริ่มต้นเนื่องจากโหมดเข้มงวดไม่ได้ระบุวิธีปิดตัวเอง และถ้าคุณไม่ใส่สตริงโหมดเข้มงวดที่จุดเริ่มต้นคุณไม่ต้องการมันและ / หรือเป็นรหัสการเล่นกอล์ฟ
wizzwizz4


7

Dyalog APL, 12 10 9 ไบต์

(⊃0~⍨,⍨)\

แรงบันดาลใจจากคำตอบ J ของ @ Zgarb

(⊃0~⍨,⍨)\      Monadic function:
        \      Cumulative reduce by
(⊃0~⍨,⍨)       the dyadic function:
     ,⍨           Arguments concatenated in reverse order
  0~⍨             With zeroes removed
 ⊃                Take the first element

ลองมันนี่


6

Pyth, 8 ไบต์

t.u|YNQ0

ใช้.u(ลดการสะสม) โดย|(Python or) พร้อมเคสฐาน 0


@isaacg ดูเหมือนว่า.uจะนานกว่าJและKผูกติดกันอยู่ มันเคยดีที่สุด?
lirtosiast

มันเป็น (อย่างน้อย AFAIK) ที่นี่ มันมักจะช่วยเมื่อคุณต้องการผลลัพธ์ทั้งหมดด้วยเหตุผลบางอย่าง
FryAmTheEggman

5

Python 2, 29 ไบต์

while 1:x=input()or x;print x

ใช้อินพุตเป็นตัวเลขที่กำหนดหนึ่งรายการต่อบรรทัดและเอาต์พุตในรูปแบบเดียวกัน สิ้นสุดด้วยข้อผิดพลาดหลังจากเสร็จสิ้น

การใช้ลักษณะการลัดวงจรของorตัวแปรxจะถูกอัพเดตเป็นอินพุตนอกจากอินพุตนั้นคือ 0 (ซึ่งคือ Falsey) ซึ่งในกรณีที่มันยังคงเป็นค่าปัจจุบัน จากนั้นxจะถูกพิมพ์ โปรดทราบว่าเนื่องจากค่ารายการแรกไม่ใช่ศูนย์xจะไม่ได้รับการประเมินทางด้านขวามือก่อนที่จะถูกกำหนด


นี่คือ 6 ไบต์ใน Pyth และหยุดข้อผิดพลาด:#\nJ|EJ
isaacg

5

Mathematica 38 ไบต์

การจับคู่รูปแบบซ้ำ ๆ มาแทนที่...a,0,...ด้วย...a,a...

#//.{b___,a_/;a!=0,0,e___}:>{b,a,a,e}&

5

Matlab, 41 46ไบต์

นี่คือแรงบันดาลใจในคำตอบดั้งเดิมของฉันมีความแตกต่างดังต่อไปนี้:

  1. nonzerosใช้การจัดทำดัชนีตรรกะแทน
  2. 0ปฏิเสธตรรกะดับเบิลแทนการเปรียบเทียบกับ
  3. ขนย้ายสามารถลบออกได้เนื่องจากรูปแบบเอาต์พุตมีความยืดหยุ่น
  4. การลบตัวแปรกลาง

ขอบคุณTom Carpenterสำหรับข้อ 4 และสำหรับคำแนะนำของเขาในการใช้โปรแกรมแทนฟังก์ชั่น ด้วยกันเหล่านี้อนุญาตให้ลดลง 5 ไบต์

x=input('');u=x(~~x);disp(u(cumsum(~~x)))

ตัวอย่าง:

>> x=input('');u=x(~~x);disp(u(cumsum(~~x)))
[4 0 3 2 0 5 6 0]
     4     4     3     2     2     5     6     6

คุณสามารถบันทึกหนึ่งไบต์โดยแปลงเป็นโปรแกรม - ใช้x=input('')แทนการประกาศฟังก์ชั่นและdisp(u(t)แทนy=บิต นอกจากนี้คุณสามารถประหยัดอีกสี่ไบต์โดยการกำจัดtตัวแปรยอมx=input('');u=x(~~x);disp(u(cumsum(~~x)))สำหรับ 41.
Tom Carpenter

@ TomCarpenter ขอบคุณมาก! แก้ไขแล้ว
Luis Mendo

ฉันไม่มี Matlab แต่@(x)x(~~x)(cumsum(~~x))ทำงานใน Octave
alephalpha

@alephalpha Matlab ไม่อนุญาตการทำดัชนีซ้ำ
AlexR


5

Japt, 8 7 ไบต์

N£U=XªU

ค่อนข้างง่าย ใช้อินพุตคั่นด้วยเครื่องหมายจุลภาค ลองออนไลน์!

Ungolfed และคำอธิบาย

N£    U=Xª U
NmXYZ{U=X||U

        // Implicit: N = input, U = first item
NmXYZ{  // Map each item X to:
U=Z||U  //  Set U to (X || U) and return.
        //  If X is non-zero, this sets U to X.
        //  Otherwise, this leaves U as the last non-zero we've encountered.
        // Implicit: output last expression

เวอร์ชัน4 ไบต์ที่ไม่ใช่การแข่งขัน: (เพิ่มåคำสั่งและ!-auto-function หลังจากความท้าทาย)

Nå!ª

คำอธิบาย:

Nå!ª
Nå!||
NåXY{Y||X}

        // Implicit: N = input, U = first item
NåXY{   // Cumulatively reduce N; take each item Y and prev value X,
Y||X}   //  and return Y if it is non-zero; return X otherwise.
        // Implicit: output last expression

ลองออนไลน์!


เดี๋ยวก่อนªคือหรือมากกว่าº? เป็นºและโดยโอกาสใด ๆ
caird coinheringaahing

@cairdcoinheringaahing Nope, คือº ((พวกเขาได้รับมอบหมายจากค่า Unicode เมื่อฉันพบว่าพวกเขาต้องการ: P ªnd และºr เป็นอัจฉริยะแม้ว่าฉันอาจใช้สำหรับ Japt 2.0 ...
ETHproductions

5

Java, 78

int[]f(int[]a){for(int i=-1,b=i;++i<a.length;a[i]=b=a[i]==0?b:a[i]);return a;}

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


5

Prolog (SWI) , 54 ไบต์

[X,0|T]+[X,X|Y]:-[X|T]+[X|Y].
[X|T]+[X|Y]:-T+Y.
[]+[].

ลองออนไลน์!

คำอธิบาย

ฉันมีความสุขมากกับคำตอบนี้

ก่อนอื่นเราพูดว่ารายการว่างเปล่าเป็นวิธีแก้ปัญหาของรายการว่างเปล่า:

[]+[].

ถ้าอย่างนั้นเราก็บอกว่านั่น[X,X|Y]เป็นคำตอบ[X,0|T]ถ้าหากลบรายการที่สองของแต่ละวิธีที่เหลือ

[X,0|T]+[X,X|Y]:-[X|T]+[X|Y].

สุดท้ายเราพูดได้ว่าสิ่งใดที่เหลืออยู่นั้นถูกต้องหากพวกเขาเริ่มต้นด้วยค่าเดียวกันและส่วนที่เหลือของทั้งสองรายการจับคู่กัน

หากคำอธิบายนั้นใช้ไม่ได้สำหรับคุณนี่คือรหัสที่แปลเป็น Haskell:

g(a:0:x)=a:g(a:x)
g(a:x)=a:g x
g x=x

ลองออนไลน์!


รัดกุมมาก! ฉันชอบที่ภาษาการทำงานและลอจิกบางภาษาอนุญาตให้คุณทำการแปลกฎอย่างแท้จริง มันเป็นวิธีที่เป็นธรรมชาติในการเขียนมัน!
ThePlasmaRailgun

4

GolfScript ขนาด 10 ไบต์

~{1$or}*]`

โปรแกรมนี้รับอินพุตจาก stdin ในรูปแบบของอาร์เรย์ตัวอักษร GolfScript (เช่น[1 0 2 0]) และเขียนเอาต์พุตไปยัง stdout ในรูปแบบเดียวกัน (เช่น[1 1 2 2])

ลองออนไลน์

ฟังก์ชั่น (การรับและส่งกลับอาร์เรย์ GolfScript) จะมีความยาวสามไบต์เนื่องจากจำเป็นต้องห่อในบล็อกและกำหนดให้กับสัญลักษณ์:

{[{1$or}*]}:f

แน่นอนถ้านับเฉพาะฟังก์ชั่นของร่างกาย (เช่น[{1$or}*]) ฉันสามารถบันทึกหนึ่งไบต์เปรียบเทียบกับโปรแกรมสแตนด์อะโลนได้


บางทีอาจจะไม่น่าแปลกใจ, ใหม่, รุ่นสั้นเปิดออกคล้ายกับเดนนิสรายการ CJam มันชนะทีละไบต์เพราะ GolfScript อ่านอินพุตโดยอัตโนมัติดังนั้นจึงไม่จำเป็นต้องมีคำสั่งพิเศษสำหรับสิ่งนั้น
Ilmari Karonen

4

Minkolang 0.14 , 12 10 ไบต์

$I?.nd?xdN

ลองที่นี่ การป้อนข้อมูลจะได้รับเช่นเดียวกับในคำถาม แต่โดยไม่ต้องวงเล็บ

คำอธิบาย

$I      Push the length of the input on the stack.
  ?.    If this is 0, stop. Otherwise, continue.

nd        Take number from input and duplicate it.
  ?x      If this number is 0, dump the top of stack.
    dN    Duplicate the top of stack and output as number

Minkolang นั้นเป็น toroidal ดังนั้นสิ่งนี้จึงวนรอบไปที่จุดเริ่มต้นและยังคงดำเนินต่อไปจนกว่ามันจะกระทบ.และหยุด


4

𝔼𝕊𝕄𝕚𝕟, 7 ตัวอักษร / 12 ไบต์

ïⓜa=$⋎a

Try it here (Firefox only).

คำอธิบาย

        // implicit: ï = input array
ïⓜ     // map over input
  a=    // set a to:
    $   // (if element is truthy (not 0)) element itself
     ⋎a // else whatever a was set to before
        // implicit output

4

O , 31 ไบต์

[[I',T%T/]{n#}d]{n.{:V}{;V}?}d]

นี้จะใช้เวลาการป้อนข้อมูลแยกจากกันโดยและผลรายการเดียวกันใน,[]

7,0,3,0,0,2,-50,0,0 => [7,7,3,3,3,2,-50,-50,-50]

คำอธิบาย:

[] ใส่ผลลัพธ์ลงในอาร์เรย์
 [I ', T% T /] {n #} d] จัดรูปแบบอินพุตเป็นอาร์เรย์ของตัวเลข
                {n. {: V} {; V}?} d เติมศูนย์ (ดูด้านล่างสำหรับวิธีการทำงาน)


17 ไบต์

I~]{n.{:V}{;V}?}d

รับอินพุตเป็นรายการของตัวเลขคั่นด้วยช่องว่างโดยใช้สัญลักษณ์ของ postfix และสามารถจัดการกับเลขฐานสิบหกหลักเดียว เชิงลบจะ postfixed _กับ

5 4 0 0 1 0 0 => 5 4 4 4 1 1 1
A 3 0 0 1 B 0 => 10 3 3 3 1 11 11
67* 0 0 78* 0 => 42 42 42 56 56
67*_ 4 3_ 0 0 => -42 4 -3 -3 -3

คำอธิบาย:

I ~] ใส่ข้อมูลลงในอาร์เรย์จำนวนเต็ม
   {} d สำหรับแต่ละหมายเลขในอินพุต
    n. {;} {V: V}? ถ้าตัวเลขเป็น 0 ให้กด V
                  หากไม่ตั้งค่า V เป็นหมายเลข

I~]{n.{:V}{;V}?}dคุณสามารถบันทึกไบต์ที่สองด้วย ฉันสงสัยว่าdควรใส่ค่าลงใน stack แทนที่จะเป็นn...
kirbyfan64sos

คุณแน่ใจหรือว่า O สามารถจัดการกับสิ่งนี้ได้? ฉันไม่สามารถหาวิธีส่งผ่านได้ -42 ซึ่งเป็นไปตามข้อกำหนด“ ผลลัพธ์ของคุณควรเป็นอินพุตที่ยอมรับได้สำหรับการส่งของคุณ”
จัดการ

@Manatwork ฉันมีรุ่นที่ดีกว่าตอนนี้ที่ใช้งานได้-42แต่มันเพิ่มวงเล็บรอบผลลัพธ์
เฟส

4

R, 39 37 33 ไบต์

function(x)zoo::na.locf(x*(x|NA))

นี่คือฟังก์ชันที่ไม่มีชื่อที่ยอมรับเวกเตอร์และส่งคืนเวกเตอร์ มันต้องมีzooแพคเกจที่จะติดตั้ง โปรดทราบว่าไม่จำเป็นต้องzooเชื่อมต่อกับเนมสเปซเนื่องจากเราอ้างอิงโดยตรง

ชื่อของการดำเนินการนี้ในโลกแห่งสถิติคือ LOCF Imputation โดย LOCF ย่อมาจาก Last Observation Carried Forward เพื่อให้บรรลุนี้ใน R เราสามารถใช้na.locfจากzooแพคเกจซึ่งแทนที่NAค่ากับที่ผ่านมาไม่เป็นที่รู้จักNAค่า เราต้องแทนที่ค่าศูนย์ในอินพุตด้วยNAs ก่อน

ในการทำเช่นนั้นเราใช้x|NAซึ่งจะเป็นTRUEเมื่อใดx != 0และNAอย่างอื่น ถ้าเราคูณด้วยนี้xที่TRUEองค์ประกอบที่จะถูกแทนที่ด้วยองค์ประกอบที่สอดคล้องกันของxและNAเข้าพัก s NAจึงเปลี่ยนศูนย์ทั้งหมด สิ่งนี้จะถูกส่งผ่านไปยังzoo::na.locfสิ่งที่เราต้องการ

บันทึกแล้ว 4 ไบต์ด้วย flodel!


4

สนิม 100 ไบต์

fn f(i:&[i64])->Vec<i64>{let(mut o,mut l)=(i.to_vec(),0);
for x in&mut o{if *x==0{*x=l}else{l=*x}};o}

เจอสิ่งที่ท้าทายนี้ฉันคิดว่าฉันลองในภาษาที่ฉันชอบ พยายามใช้[T]::windows_mut()ในตอนแรกก่อนที่จะพบว่ามันไม่ได้อยู่ และมันอาจจะนานกว่านี้อีก อย่างไรก็ตามปรากฎว่าสนิม golfed เป็นที่น่าเกลียดมากและไม่แข่งขัน (โดยเฉพาะอย่างยิ่งกับความลับ goshdarned เหล่านั้น!) 1

ขึ้นบรรทัดใหม่ไม่รวมอยู่ใน bytecount มันอยู่ที่นั่นเท่านั้นคุณจึงไม่ต้องเลื่อนไปด้านข้าง มันไม่เปลี่ยนความหมายของรหัส

Ungolfed:

fn cover_zeroes(input: &[i64]) -> Vec<i64> {
    let mut output = input.to_vec();
    let mut last_nonzero = 0;
    for item in &mut output {
        if *item == 0 {
            *item = last_nonzero;
        }
        else {
            last_nonzero = *item;
        }
    }
    output
}

[1] อย่างน้อยก็ไม่ได้แย่เหมือน Java


7
" อย่างน้อยก็ไม่เลวเท่า Java "?
Ahem

1
@Geobits โอ้ใช่ ฉันคาดหวังให้คุณต้องใช้public static void mainหม้อไอน้ำนั่น…
Blacklight Shining

3

ทางช้างเผือก 1.2.1 , 33 ไบต์

:y;=<:&{~<?{0b_^;:3≤_;}1-}^<Ω!

นี่ถือว่ารายชื่อจำนวนเต็มอยู่บนสแต็กเท่านั้น


คำอธิบาย

:    : :           :              # duplicate the TOS
 y                                # push the length of the TOS
  ;               ;    ;          # swap the TOS and STOS
   =                              # dump a list to the stack
    < <    <                 <    # rotate the stack leftward
        &{~                }      # while loop
            ?{  _     _ }         # if-else statements
              0     3    1        # push an integer
               b                  # == on the TOS and STOS
                 ^          ^     # pop the TOS without output
                     ≤            # rotate the top N stack elements leftward
                          -       # subtract the TOS from the STOS
                              Ω   # push a list made of the top N stack elements
                               !  # output the TOS

ฉันค่อนข้างแน่ใจว่า TOS และ STOS หมายถึง Top of Stack และ Second-to-Top of Stack ใช่ไหม
Addison Crump

Yep @FlagAsSpam
Zach Gates

3

Julia, 33 ไบต์

g(x,a=0)=[(i!=0&&(a=i);a)for i=x]

นี่คือฟังก์ชั่นgที่ยอมรับอาร์เรย์และส่งกลับอาร์เรย์ เราเริ่มต้นตัวแปรชั่วคราวaที่ 0 สำหรับแต่ละองค์ประกอบiของอินพุตถ้าiไม่ได้เป็น 0 แล้วเรากำหนดไปa iถ้าiเป็น 0 aจะไม่เปลี่ยนในการทำซ้ำนั้น เราใช้aเป็นค่าในตำแหน่งนั้นในอาร์เรย์ผลลัพธ์


3

Perl 6 , 21 ไบต์

*.map: {$_=($^a||$_)}

การใช้งาน:

# store the Whatever lambda as a subroutine
# just so that we don't have to repeat it
my &code = *.map: {$_=($^a||$_)}

say code [1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9];
# (1 1 2 2 7 7 7 7 5 5 5 5 9)

say [-1, 0, 5, 0, 0, -7].&code;
# (-1 -1 5 5 5 -7)

say ([1, 0, 0, 0, 0, 0],[-1, 0, 5, 0, 0, -7]).map: &code;
# ((1 1 1 1 1 1) (-1 -1 5 5 5 -7))

3

R, 36 ไบต์

function(x)x[cummax(seq(a=x)*(!!x))]

เรามาดูกันว่ามันใช้งานอย่างไร x=

c(1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9)

ตัวอย่างเช่น. ที่นี่!!xจะเป็นเวกเตอร์ตรรกะ (จริง / เท็จ):

c(T, F, T, F, T, T, T, F, T, F, F, F, T)

นอกจากนี้ยังseq(a=x)ให้เวกเตอร์ของดัชนีตราบใดที่x:

c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)

เราทวีคูณทั้งสองให้:

c(1, 0, 3, 0, 5, 6, 7, 0, 9, 0, 0, 0, 13)

เรารับค่าสะสมสูงสุด:

c(1, 1, 3, 3, 5, 6, 7, 7, 9, 9, 9, 9, 13)

สุดท้ายเราใช้เวกเตอร์สุดท้ายนั้นเป็นดัชนีเพื่อแยกจากx:

c(1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9)


3

Powershell ขนาด 32 ไบต์

param($x)$x|%{($t=($_,$t)[!$_])}

$x|%{...}สคริปต์จะบล็อกสำหรับแต่ละองค์ประกอบ$xหรือไม่ ($_,$t)เป็นอาร์เรย์ขององค์ประกอบปัจจุบันและ$tและ[!$_]หมายความว่าเราใช้!$_เพื่อจัดทำดัชนีลงในอาร์เรย์ ดัชนีจะ0(เท็จ) สำหรับผู้ที่ไม่ใช่ศูนย์องค์ประกอบและ1(จริง) เมื่อองค์ประกอบปัจจุบันเป็นศูนย์ดังนั้นจะเป็นได้ทั้งองค์ประกอบปัจจุบันหรือ$t $tวงเล็บล้อมรอบนิพจน์การกำหนดค่าเพื่อให้มีการปล่อยค่า โดยไม่ต้องวงเล็บว่ามันจะเป็นแค่ "เงียบ" $tมอบหมายให้


@ TimmyD คุณพูดถูก ฉันได้เพิ่มparam($x)ซึ่งเปลี่ยนสิ่งนี้เป็นโปรแกรม ผลลัพธ์คือชุดของจำนวนเต็มซึ่งคุณสามารถส่งเป็นพารามิเตอร์ไปยังโปรแกรมเช่น$a = .\program.ps1 1,2,3,4,0,0,5จากนั้น.\program.ps1 $aทำงานตามที่คาดไว้
Danko Durbić

$args|%{($p=($_,$p)[!$_])}- 26 ไบต์โดยใช้ $ args
TessellatingHeckler

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