Laktawan tulad ng isang kuneho!

Erik the Outgolfer 08/26/2017. 30 answers, 2.887 views
code-golf array-manipulation

Dahil sa isang listahan ng mga di-negatibong integers sa anumang makatwirang format, iterate ito, laktawan ang maraming elemento ng bawat integer na iyong sasabihin.


Narito ang isang nagtrabaho halimbawa:

[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
 ^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
    ^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
          ^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
                   ^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done 

Isa pang nagtrabaho halimbawa, hindi kaya lahat-pantay-delta:

[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
 ^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
                ^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
                            ^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
                                        ^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done 

Ang isang halimbawa ng out-of-bounds:

[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
    ^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
             ^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds) 

Panuntunan

  • Hindi mo maaaring gamitin ang anumang pagbubutas cheat kasama ng mga ito , gumawa sila ng hamon boring at hindi kawili-wili.
  • Dapat ka lamang bumalik / i-print ang huling resulta. Ang STDERR output ay hindi pinansin.
  • Maaaring hindi mo makuha ang input bilang isang string ng mga digit sa anumang base (eg "0102513162" para sa unang kaso).
  • Dapat mong gamitin ang kaliwa-sa-kanan na pagkakasunud-sunod para sa input.
  • Tulad ng sa mga nagtrabaho halimbawa, kung lumabas ka ng mga hangganan, ang pagpapatupad ay nagwawakas na kung hindi man.
  • Dapat mong gamitin ang 0 para sa paglaktaw ng 0 elemento.
  • Dahil sa walang laman na listahan ( [] ) bilang input, dapat kang bumalik [] .

Mga kaso ng pagsusulit

[]                                                     => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]                     => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]                   => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2]                         => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2]                                  => [0, 2, 4] 

Ito ay , kaya pinakasimpleng sagot ang nanalo!

5 Comments
Erik the Outgolfer 07/28/2017
Sandbox (mga gumagamit ng 2k + lamang)
3 Shaggy 07/28/2017
Yeah, nakita lang ito. / naglalagay ng baso
2 Rod 07/28/2017
Marahil ay isang leprechaun ¯ \ _ (ツ) _ / ¯
1 Roman Gräf 07/28/2017
Ayos lang na magkaroon ng trailing zero sa aking array? i-save ako ~ 18 bytes
1 Erik the Outgolfer 07/28/2017
@ RomanGräf Paumanhin ngunit hindi, na magiging masyadong hindi maliwanag dahil may mga kaso na dapat mong trailing 0 s sa output.

30 Answers


Rod 07/28/2017.

Python 2 , 36 bytes

 f=lambda x:x and x[:1]+f(x[x[0]+1:]) 

Subukan ito online!

4 comments
Mr. Xcoder 07/28/2017
Inaasahan kong makakuha ng outgolfed, ngunit hindi na masama :)
Erik the Outgolfer 07/28/2017
Hindi ka ba x[0] halip ng x[:1] ?
Rod 07/28/2017
@EriktheOutgolfer oo, ngunit kailangan itong maging isang listahan, kaya magiging [x[0]]
Erik the Outgolfer 07/28/2017
@Rod Hindi ka nagse-save ng anumang bytes sa x[:1] anyways ... f=lambda x:x and[x[0]]+f(x[x[0]+1:])

Mr. Xcoder 08/19/2017.

Python 2 , 49 46 * 41 bytes

Tumawid 4 ay regular pa rin 4: (

* -3 thanks to @ASCII-only .

 l=input()
while l:print l[0];l=l[l[0]+1:] 

Subukan ito online!

Ini-print ang mga resulta na pinaghihiwalay ng isang bagong linya, tulad ng pinahihintulutang OP sa chat. Sa palagay ko ay hindi ito makakakuha ng mas maikli bilang isang non-recursive full program .


Paano ito gumagana?

  • l=input() - Binabasa ang listahan mula sa karaniwang input.

  • while l: - Nag-aabuso ang katunayan na ang mga walang laman na listahan ay mali sa Python, mga loop hanggang sa walang laman ang listahan.

  • print l[0]; - I-print ang unang elemento ng listahan.

  • l=l[l[0]+1:] - "Mga skip tulad ng kuneho" - Nagtatampok ang unang l[0]+1 mula sa listahan.

Kumuha tayo ng isang halimbawa

Dahil sa listahan [5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] bilang input, ginagawa ng code ang mga sumusunod (ayon sa paliwanag sa itaas) - Naka-print ang unang item ng array: 5 , putulin ang unang 6: [2, 1, 2, 1, 0, 0] . Pagkatapos ay i-print namin ang 2 at i-trim ang unang 3: [1,0,0] . Gayundin, nag-output kami ng 1 , i-crop ang unang 2, at makuha namin [0] . Siyempre, 0 ay naka-print at natatapos ang programa.

1 comments

w0lf 07/28/2017.

Haskell, 29 27 26 bytes

 j(x:y)=x:j(drop x y)
j x=x 

Nai-save na 1 byte salamat sa Zgarb.

Subukan ito online.

2 comments
Zgarb 07/28/2017
f x=x sa ikalawang linya ay nagse-save ng isang byte.
w0lf 07/28/2017
@ Zgarb Cool, thanks!

Adnan 07/28/2017.

05AB1E , 10 9 bytes

[¬Dg>#=ƒ¦ 

Gumagamit ng 05AB1E encoding. Subukan ito online!

1 comments
Magic Octopus Urn 07/28/2017
Oo, iyon ay mas mahusay kaysa sa kung ano ang iniisip ko.

Martin Ender 07/28/2017.

Mathematica, 46 44 bytes

SequenceCases[#,NO 

Mga alternatibo:

SequenceCases[#,NO 
1 comments
Mr.Wizard 07/28/2017
Wow, maganda iyan!

Johan Karlsson 07/28/2017.

JavaScript (ES6), 42 39 35 bytes

a=>a.map((n,i)=>a.splice(i+1,n))&&a 

 let f = 
a=>a.map((n,i)=>a.splice(i+1,n))&&a

console.log(f([]))                                                     // => []
console.log(f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))                     // => [0, 1, 3, 7]
console.log(f([5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]))                   // => [5, 2, 1, 0]
console.log(f([0, 1, 0, 2, 5, 1, 3, 1, 6, 2]))                         // => [0, 1, 2, 3]
console.log(f([4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2])) // => [4, 3, 3, 4]
console.log(f([0, 2, 0, 2, 4, 1, 2]))                                  // => [0, 2, 4] 

Lumang Solusyon 39 Bytes

a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r 

-3 bytes thanks to @ThePirateBay

1 comments
ThePirateBay 07/28/2017
39 bytes a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r

TheLethalCoder 07/28/2017.

C #, 68 bytes

 a=>{for(int i=0;i 

Subukan ito online!

Buong / Form na bersyon:

 namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} 

Ang pagbalik ng isang listahan ay mas mahaba sa 107 bytes.

 a=>{var l=new System.Collections.Generic.List();for(int i=0;i 
3 comments
2 TheLethalCoder 07/28/2017
Bakit may bumaba sa isang ito?
Thomas Ayoub 07/31/2017
Upang i-round ang iyong iskor at gumawa ng isang perpektong 5k?
TheLethalCoder 07/31/2017
@ ThomasAyoub Maaari lamang nating isipin na may isang taong may OCD oo.

Zgarb 07/28/2017.

Husk , 8 6 bytes

←TU¡Γ↓ 

Subukan ito online!

-2 bytes (at isang ganap na bagong ideya ng solusyon) salamat kay Leo!

Paliwanag

Ginagamit ko ang listahan ng pag-andar ng tugma ng pattern Γ . Ito ay tumatagal ng isang function f at isang listahan na may head x at tail xs , at sumasaklaw sa f sa x at xs . Kung ang listahan ay walang laman, Γ nagbabalik ng default na halaga na kasang-ayon sa uri nito, sa kasong ito isang walang laman na listahan. Kinukuha namin ang f , na bumaba x elemento mula sa xs . Ang function na ito ay pagkatapos ay iterated at ang mga nagresultang elemento ay nakolekta sa isang listahan.

←TU¡Γ↓  Implicit input, e.g. [0,2,0,2,4,1,2]
    Γ↓  Pattern match using drop
   ¡    iterated infinitely: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[],[],[],...
  U     Cut at first repeated value: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[]]
 T      Transpose: [[0,2,4],[2,0,1],[0,2,2],[2,4],[4,1],[1,2],[2]]
←       First element: [0,2,4] 
5 comments
Leo 07/28/2017
Maaari mong i-drop ang default na halaga ng ø, at lahat ng bagay ay magically magtrabaho pa :)
Zgarb 07/28/2017
@ Lao Oh wow, iyon ang matalino!
Erik the Outgolfer 07/28/2017
Bakit mo CW ito?
Zgarb 07/28/2017
@ErikTheOutgolfer Iyon ay isang pagkakamali (ako sa aking telepono at tila hunhon isang bagay nang hindi sinasadya). Sinusubukan ko na i-undo ito ...

Ruud 07/28/2017.

Python 2 , 59 55 bytes

 l=input()
i=0
while l[i:]:i+=1;l[i:i+l[i-1]]=[]
print l 

Subukan ito online!

2 comments
1 Rod 07/28/2017
Maaari mong gamitin ang l[i:i+l[i-1]]=[] halip del l[i:i+l[i-1]] upang i-save ang isang byte
1 ASCII-only 07/28/2017

Dave 07/28/2017.

Pyth, 22 Bytes

VQ aY.(Q0VeY .x.(Q0 ;Y 

Inalis ang walang silbi na byte

4 comments
Erik the Outgolfer 07/28/2017
Nakikita ko ang 23 bytes doon.
Dave 07/28/2017
Typo :) sorry ...
3 Wheat Wizard 07/28/2017
Hindi ako sigurado kung bakit ka bumoto. May posibilidad na kapag na-edit mo ang pag-aayos ng iyong sagot na ito ay nag-trigger ng isang "awtomatikong pagboto ng boto". Ang mga dahilan para sa awtomatikong downvote na ito ay nakalilito at kakila-kilabot ngunit nangyayari ito kung isinasaalang-alang ng system ang iyong sagot na "mababang kalidad" batay sa heuristics na ito. Posible rin na ang isang tao ay hindi nagkagusto sa iyong sagot, ngunit wala akong nakitang mali sa sandaling ito kaya hindi ako sigurado kung bakit iyon ang mangyayari.
isaacg 07/31/2017
Natutuwa akong gumagamit ka ng Pyth!

Rod 07/28/2017.

Python 2 , 60 42 bytes

-18 bytes salamat kay Luis Mendo

 x=input()
i=0
while 1:print x[i];i+=1+x[i] 

Subukan ito online!


Martin Ender 07/28/2017.

Retina , 36 bytes

Ang bilang ng Byte ay ipinapalagay ang pag-encode ng ISO 8859-1.

.+
$*
((1)*¶)(?<-2>1*¶)*
$1
%M`.
0$ 

Ang input at output ay pinaghihiwalay ng linefeed na may isang trailing linefeed.

Subukan ito online! (Gumagamit ng mga kuwit sa halip ng mga linefeed upang pahintulutan para sa maginhawang test suite.)


Riley 07/28/2017.

Brain-Flak , 64 bytes

([]){{}(({})<>)<>{({}[()]<{}>)}{}([])}{}<>([]){{}({}<>)<>([])}<> 

Subukan ito online!

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack 
2 comments
6 DJMcMayhem 07/28/2017
Banal na tae! Sumulat ako ng isang solusyon, at pagkatapos ay i-scroll pababa upang i-post ito, ngunit lumiliko out namin wrote ang exact parehong solusyon byte-for-byte! Kahit na ang mga menor de edad na detalye tulad ng ({}[()]<{}>) vs ({}<{}>[()]) ay pareho! Anong pagkakataon!
2EZ 4RTZ 07/28/2017
@DJMcMayhem pagnanakaw ang lahat ng katanyagan XD

user202729 07/28/2017.

Mathematica, 64 50 bytes

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={} 
1 comments
Mr.Wizard 07/28/2017
Hindi ko labanan ang karagdagang golfing na ito kapong baka code; ang sagot ko ay nasa ibaba.

jkelm 07/28/2017.

C # (.NET Core) , 68 bytes

 n=>{var t="";for(int i=0;i 

Subukan ito online!

Dadalhin ang pag-input bilang isang hanay ng mga integer, nagbabalik ng isang string na naglalaman ng mga di-nilaktawan na mga halaga.

3 comments
TheLethalCoder 07/28/2017
Nice paraan upang gawin ito at dumating sa sa parehong bilang ng pag-print.
jkelm 07/28/2017
Gustung-gusto ko ang mga simpleng solusyon. Kailangan pa rin matuto LINQ bagaman, bilang ko nakita na paikliin kaya maraming c # lambdas ..
TheLethalCoder 07/28/2017
Paikliin ito dahil maaari mong pahiwatig ang halos lahat ng oras. Kahit na ito ay isang siklutin sa pagitan ng pahiwatig na bumalik sa using System.Linq; at isang normal na loop.

Jarko Dubbeldam 07/28/2017.

R, 58 bytes

f=function(x,p=1)NO 

Recursive function. Dadalhin ang isang vector x bilang argument at gising ang pointer p . Ini-print nito ang nararapat na pagpasok ng x , nagsusuri kung ang p+x[p] mawawalan ng mga hangganan, at kung hindi, tinatawag ang function para sa bagong pointer.

f=function(x,p=1,s=x[1])`if`((z<-x[p]+p+1)>sum(x|1),s,f(x,z,c(s,x[z]))) 

Ito ay isang maihahambing na solusyon na nagbabalik ng wastong vector sa halip na i-print ang mga digit.

3 comments
Giuseppe 07/28/2017
ano ang tungkol sa isang input ng numeric(0) ? aka walang laman na array.
Jarko Dubbeldam 07/28/2017
@Gususeppe kukunin ko na tingnan ito kapag ako sa likod ng aking pc
Giuseppe 08/24/2017
57 bytes! at pinangangasiwaan din nito ang walang laman na kaso.

Roman Gräf 07/28/2017.

Java (OpenJDK 8) , 53 bytes

Salamat sa @ PunPun1000 at @TheLethalCoder

 a->{for(int n=0;;n+=1+a[n])System.out.println(a[n]);} 

Subukan ito online!

5 comments
TheLethalCoder 07/28/2017
Gusto i-print ang mga resulta, tulad ng sa aking C # sagot, i-save mo ang anumang bagay?
Roman Gräf 07/28/2017
@TheLethalCoder Ill try
TheLethalCoder 07/28/2017
Maaari kang mag-save ng isang byte sa pamamagitan ng paglipat n sa loop?
TheLethalCoder 07/28/2017
Plus ito ay hindi tila sa trabaho sa sandaling ito.
PunPun1000 07/28/2017
Nawawalan ka ng isang paren pagkatapos ng (a[n+=1+a[n]] . Ang function din throws isang error pagkatapos outputting ang tamang halaga, hindi ko alam ang concensus kung ito ay pinahihintulutan o hindi (ang tanong ay sabihin ang anumang bagay sa standard na error ay hindi pansinin). Kung iyon ang intensyon, maaari mong alisin ang n sa para sa loop. Sa wakas ang TIO code ay hindi tumatakbo bilang ay, kahit na ang paren. isang Consumer at gamitin ang func.accept(test)

Martin Ender 07/28/2017.

Alice , 15 bytes

/$.. \h&
\I@nO/ 

Subukan ito online!

Magpasok at mag-output ng mga listahan na pinaghihiwalay ng linefeed ng mga integer sa decimal.

Paliwanag

/   Switch to Ordinal mode.
I   Read a line.
.   Duplicate it.
n   Logical NOT (gives truthy if we're at EOF).
/   Switch to Cardinal.
    The IP wraps around to the left.
\   Switch to Ordinal.
$@  Terminate the program if we're at EOF.
.   Duplicate the input line again.
O   Print it.
\   Switch to Cardinal.
h   Increment the value.
&   Store the result in the iterator queue.
    The program wraps around to the beginning. 

Ang pag-iimbak ng isang integer n sa iterator queue ay nagiging sanhi ng susunod na command na maisagawa n beses. Ang mga salamin tulad ng / ay hindi mga utos, kaya ang susunod na utos ay I . Samakatuwid kung nabasa lamang namin at naka-print ang isang halaga x , babasahin namin ang x+1 halaga sa susunod na pag-ulit, na ang huling ng mga ito ay nagtatapos sa tuktok ng stack. Nilaktawan nito ang kinakailangang mga elemento ng listahan ng numero.


Mr.Wizard 07/28/2017.

Mathematica , 37 (30?)

Ang karagdagang golfing ng mahusay na paraan ng user202729.

±NO 

Ang mga patakaran ay hindi mukhang malinaw na tinukoy ang format ng output, kaya siguro:

±NO 

Ang output para sa ikalawang function ay nagmumukhang: 0.2.4.{} - kapansin-pansin {} ay ibinalik pa rin para sa isang walang laman na hanay, na sumusunod sa huling panuntunan.

2 comments
1 JungHwan Min 07/28/2017
±Drop[NO maaaring maging ±NO dahil ± ay may mas mababang presensya kaysa sa Infix .
Mr.Wizard 07/28/2017
@JungHwanMin Naiwan ako na; salamat!

Jenny_mathy 07/28/2017.

Mathematica, 65 bytes

(s=#;t=1;w={};While[t<=Length@s,AppendTo[w,k=s[[t]]];t=t+k+1];w)& 

Subukan ito online!


w0lf 07/28/2017.

Ruby, 36 33 31

f=->l{a,*l=l;a&&f[l.drop(p a)]} 

Subukan ito online.

4 comments
sethrin 07/30/2017
Pinapayagan kang ibawas ang f= bilang isang elemento ng header.
w0lf 07/30/2017
@sethrin Kahit na kung kailangan ko na tawag ito recursively?
sethrin 07/30/2017
Hmm, magandang katanungan. Ipagpalagay ko hindi. Ginusto ko talaga ang tungkol sa iyong solusyon, sa pamamagitan ng paraan.
w0lf 07/30/2017
@sethrin Salamat! :)

AnonymousReality 07/28/2017.

Swift, 63 bytes

func a(d:[Int]){var i=0;while i 

Ito ang aking unang entry, kailanman, kaya hindi ako 100% sigurado sa mga panuntunan, ngunit sana sumagot ang sagot na ito. Ako ay isang maliit na hindi sigurado sa mga tuntunin sa kung paano makakuha ng input sa isang sistema. Mayroon akong isang mas maikling sagot kung ako ay pinahihintulutang isipin ang isang function sa isang lugar na maaaring ibalik ang input.

2 comments
Stephen 07/28/2017
Maligayang Pagdating sa PPCG! Ang mga panuntunan sa default ay maaari kang magkaroon ng code na gumagana bilang isang buong programa, kaya input (kadalasan) sa STDIN at output (kadalasan) sa STDOUT, or isang function, kaya input (kadalasan) mula sa mga parameter ng function at output (kadalasan) mula sa function return.
AnonymousReality 07/28/2017
@StepHen - salamat! Hulaan ko na ginagawang hindi wasto ang aking ibang bersyon. Inaasahan na mag-ambag nang higit pa!

Perl 6 , 31 bytes

 {(@_,{.[1+.[0]..*]}...^0)[*;0]} 

Subukan ito

Pinalawak:

 {  # bare block lambda with implicit parameter 「@_」
  (
    # generate a sequence

    @_,

    {
      .[ # index into previous value in the sequence
        1 + .[0]  # start by skipping one plus the first element
                  # of the previous value in the sequence
        ..  *     # use that to create a Range with no end
      ]
    }

    ...^  # keep doing that until: (and throw away last value)
    0     # it generates an empty list

  )[ *; 0 ]  # from every value in the sequence, get the first element
} 

Upang makatulong na maunawaan kung paano gumagana ang code, nang walang [*;0] ito ay bubuo ng pagkakasunod-sunod tulad ng sumusunod:

 [0, 1, 0, 2, 5, 1, 3, 1, 6, 2],
   (1, 0, 2, 5, 1, 3, 1, 6, 2),
         (2, 5, 1, 3, 1, 6, 2),
                  (3, 1, 6, 2) 

Renzo 07/29/2017.

Karaniwang Lisp, 51 bytes

(do((x(read)(nthcdr(1+(print(car x)))x)))((not x))) 

Subukan ito online!


C ++ (gcc), 172 bytes

#includeint main(){std::istream& i=std::cin;char c;int a,b;while(i>>c&&i>>a){std::cout<>c&&i>>b);}std::cout< 

Subukan ito online

Ang kakila-kilabot (c/91?"":" ") ay para sa tamang spacing sa output. Kung wala ito (-15 bytes) ang output ay nasa anyo: [0,2,4] , kapag binago ko ito sa simpleng output ng " " (-9 bytes) ay tulad ng [ 0, 2, 4] (karagdagang espasyo sa simula) .

<<(c/93?"":"]") sa dulo ay lamang upang mahawakan ang [] walang laman na sulok ng sulok ng input

Walang naka-print na endline ang mga kopya.

1 comments
Erik the Outgolfer 07/30/2017
Maaari mo ring i-print ang mga numero na pinaghihiwalay ng isang walang-digit na separator, hindi na kailangan para sa [] at maaari kang magkaroon ng walang laman na output para sa na-edge na kaso, at hindi na kailangan para sa (c/91?"":" ") . Hindi mo kailangang tumugma sa format ng mga halimbawa sa hamon.

Jonathan Allan 07/29/2017.

Halaya , 8 bytes

ḢṄ‘ṫ@µL¿ 

Ang isang buong programa sa pagpi-print ng mga resulta na sinusundan ng isang newline (walang laman na listahan ay walang output).

Try it online!

Paano?

ḢṄ‘ṫ@µL¿ - Main link: list of non-negative integers  e.g. [2,5,4,0,1,2,0]
       ¿ - while:           Iteration:  1                  2             3          4        5
      L  -   length (0 is falsey)       7                  4             3          1        0
     µ   - ...do:                                                                            stop
Ḣ        -   head (pop & modify)        2 ([5,4,0,1,2,0])  0 ([1,2,0])   1 ([2,0])  0 ([0])
 Ṅ       -   print it (and yield it)   "2\n"              "0\n"         "1\n"      "0\n"
  ‘      -   increment                  3                  1             2          1
   ṫ@    -   tail from index            [0,1,2,0]          [1,2,0]      [0]         []
         -
         -                       i.e. a resulting in the printing of: '''2
                                                                         0
                                                                         1
                                                                         0
                                                                         ''' 
2 comments
Erik the Outgolfer 07/30/2017
Sa wakas isang sagot ng Jelly! BTW Maaari ko itong gawin sa 7 bytes.
Erik the Outgolfer 07/30/2017
At mayroon din akong listahan ng bumabalik na function sa 18 bytes.

Evpok 07/30/2017.

Python 3 , 35 bytes

 f=lambda h=0,*t:t and[h,*f(*t[h:])] 

Subukan ito online!

Patakbuhin ito sa f(*l) kung saan l ang iyong input. Arguably lumalawak ang mga panuntunan para sa input, ngunit gusto ko lang advanced unpacking.


cliffroot 07/28/2017.

Clojure, 67 bytes

#(nth(reduce(fn[[z k]b](if(= z 0)[b(conj k b)][(- z 1)k]))[0[]]%)1) 

Magsisimula sa unang mga parameter [0 []] , kung saan 0 ay ang counter at [] ang resulta. Kung ang unang elemento sa listahang ito ay 0 nagdagdag ng item n mula sa argumento sa resulta at nagpapasa pa ng listahang ito [n [... n]] kung hindi nito binabawasan ang unang elemento. (ang paliwanag na ito ay nakakaramdam ng kakila-kilabot sa akin)

Tingnan ito online


Dead Possum 07/28/2017.

Python 2.4, 85 bytes

Walang pagkakataong manalo sa python dito, ngunit mahal ko ang mga oneliner at ang isang ito ay maaaring maging kawili-wili sa iba.
Lumalabas, may isang magarbong magic trick upang ma-access ang listahan ng gusali sa loob ng pag-unawa, ngunit ito ay gumagana lamang sa 2.4 at may ilang mga pag-edit sa <= 2.3
locals()['_[1]'] ito ay. Lumilikha ang Python ng lihim na pangalan _[1] para sa listahan, habang ito ay nilikha at iniimbak sa mga locals . Gayundin ang mga pangalan _[2] , _[3] ... ay ginagamit para sa nested na mga listahan.

lambda n:[j for i,j in enumerate(n)if i==len(locals()['_[1]'])+sum(locals()['_[1]'])] 

Kaya binibilang nito ang bilang ng mga idinagdag na elemento kasama ang kanilang kabuuan. Ang resulta ay ang index ng susunod na nais na elemento.
Sa palagay ko, dapat magkaroon ng isang paraan upang maiwasan ang pagbilang. Tulad ng pag-access sa input array nang direkta sa pamamagitan ng index: [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ] . Ngunit hindi ko malaman ang isang compact na paraan upang maprotektahan ito mula sa index-out-of-range (habang pinapanatili ito oneliner)

ipasok ang paglalarawan ng imahe dito


Neil 07/28/2017.

Batch, 69 bytes

:l
@if not "%1"=="" echo %1&(for /l %%i in (0,1,%1)do @shift)&goto l 

(Kailangan ko ang () s sa paligid ng for kung hindi man ang goto mangyayari sa loob ng loop.)

Related questions

Hot questions

Language

Popular Tags