Περάστε σαν κουνέλι!

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

Λαμβάνοντας μια λίστα με μη αρνητικούς ακέραιους αριθμούς σε οποιαδήποτε λογική μορφή, επαναλάβετε την παράκαμψη, παρακάμπτοντας όσα στοιχεία κάθε ένας ακέραιος λέει.


Ακολουθεί ένα παράδειγμα:

[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 

Ένα άλλο παράδειγμα, όχι τόσο εξίσου ισότιμο-δέλτα:

[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 

Ένα παράδειγμα εκτός των ορίων:

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

Κανόνες

  • Δεν μπορείτε να χρησιμοποιήσετε οποιαδήποτε βαρετή εξαπάτηση μεταξύ αυτών , κάνουν την πρόκληση βαρετή και αδιάφορη.
  • Θα πρέπει να επιστρέψετε / να εκτυπώσετε μόνο το τελικό αποτέλεσμα. Η έξοδος STDERR αγνοείται.
  • Δεν μπορείτε να πάρετε την είσοδο ως μια σειρά ψηφίων σε οποιαδήποτε βάση (π.χ. "0102513162" για την πρώτη περίπτωση).
  • Πρέπει να χρησιμοποιήσετε τη σειρά από αριστερά προς τα δεξιά για είσοδο.
  • Όπως και στα επεξεργασμένα παραδείγματα, αν βγείτε από τα όρια, η εκτέλεση τερματίζεται σαν να ήταν διαφορετική.
  • Θα πρέπει να χρησιμοποιήσετε 0 για να παρακάμψετε 0 στοιχεία.
  • Με δεδομένη την κενή λίστα ( [] ) ως είσοδο, θα πρέπει να επιστρέψετε [] .

Δοκιμαστικές περιπτώσεις

[]                                                     => []
[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] 

Αυτό είναι , έτσι η πιο σύντομη απάντηση κερδίζει!

5 Comments
Erik the Outgolfer 07/28/2017
Sandbox (μόνο χρήστες 2k +)
3 Shaggy 07/28/2017
Ναι, το έβλεπα. / τοποθετεί τα γυαλιά
2 Rod 07/28/2017
Πιθανώς ένα leprechaun ¯ \ _ (ツ) _ / ¯
1 Roman Gräf 07/28/2017
Είναι εντάξει να έχουμε τελικά μηδενικά στη σειρά μου; θα με σώσει ~ 18 byte
1 Erik the Outgolfer 07/28/2017
@ RomanGräf Δυστυχώς, όχι, αυτό θα ήταν υπερβολικά διφορούμενο, καθώς υπάρχουν περιπτώσεις που πρέπει να έχετε 0 δευτερόλεπτα στην έξοδο.

30 Answers


Rod 07/28/2017.

Python 2 , 36 bytes

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

Δοκιμάστε το online!

4 comments
Mr. Xcoder 07/28/2017
Περίμενα να ξεπεράσω, αλλά όχι τόσο άσχημα :)
Erik the Outgolfer 07/28/2017
Δεν μπορείτε να κάνετε x[0] αντί για x[:1] ;
Rod 07/28/2017
@EriktheOutgolfer ναι, αλλά πρέπει να είναι μια λίστα, έτσι θα ήταν [x[0]]
Erik the Outgolfer 07/28/2017
@Rod Δεν αποθηκεύετε κανένα bytes με x[:1] ούτως ή άλλως ... f=lambda x:x and[x[0]]+f(x[x[0]+1:])

Mr. Xcoder 08/19/2017.

Python 2 , 49 46 * 41 bytes

Η διασταύρωση 4 είναι ακόμα κανονική 4 :(

* -3 thanks to @ASCII-only .

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

Δοκιμάστε το online!

Εκτυπώνει τα αποτελέσματα χωρισμένα από μια νέα γραμμή, όπως επιτρέπεται το OP στη συνομιλία. Δεν νομίζω ότι μπορεί να γίνει μικρότερος ως non-recursive full program .


Πως λειτουργεί αυτό?

  • l=input() - Διαβάστε τη λίστα από την τυπική είσοδο.

  • while l: - Παραβιάζει το γεγονός ότι οι άδειες λίστες είναι λανθασμένες στην Python, βρόχοι μέχρι η λίστα να είναι κενή.

  • print l[0]; - Εκτυπώνει το πρώτο στοιχείο της λίστας.

  • l=l[l[0]+1:] - "Παραλείπει σαν κουνέλι" - Τρίβει το πρώτο l[0]+1 από τη λίστα.

Ας πάρουμε ένα παράδειγμα

Δεδομένου ότι ο κατάλογος [5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] εισάγεται, ο κώδικας εκτελεί τα εξής (σύμφωνα με την παραπάνω εξήγηση) array: 5 , περικοπή των πρώτων 6: [2, 1, 2, 1, 0, 0] . Στη συνέχεια εκτυπώνουμε 2 και [1,0,0] το πρώτο 3: [1,0,0] . Παρομοίως, εκτελούμε 1 , κόβουμε τα πρώτα 2 και παίρνουμε [0] . Φυσικά, το 0 εκτυπώνεται και το πρόγραμμα τερματίζεται.

1 comments

w0lf 07/28/2017.

Haskell, 29 27 26 bytes

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

Αποθηκεύτηκε 1 byte χάρη στο Zgarb.

Δοκιμάστε το online.

2 comments
Zgarb 07/28/2017
f x=x στη δεύτερη γραμμή αποθηκεύει ένα byte.
w0lf 07/28/2017
@ Ζgarb Cool, ευχαριστώ!

Adnan 07/28/2017.

05AB1E , 10 9 bytes

[¬Dg>#=ƒ¦ 

Χρησιμοποιεί την κωδικοποίηση 05AB1E . Δοκιμάστε το online!

1 comments
Magic Octopus Urn 07/28/2017
Ναι, αυτό είναι πολύ καλύτερο από αυτό που σκέφτηκα.

Martin Ender 07/28/2017.

Mathematica, 46 44 bytes

SequenceCases[#,NO 

Εναλλακτικές λύσεις:

SequenceCases[#,NO 
1 comments
Mr.Wizard 07/28/2017
Πω πω, είναι υπέροχο!

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] 

Παλιά λύση 39 byte

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 byte

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

Δοκιμάστε το online!

Πλήρης / μορφοποιημένη έκδοση:

 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();
        }
    }
} 

Η επιστροφή μιας λίστας γίνεται πλέον στα 107 byte.

 a=>{var l=new System.Collections.Generic.List();for(int i=0;i 
3 comments
2 TheLethalCoder 07/28/2017
Γιατί κάποιος έχει υποτιμηθεί αυτό;
Thomas Ayoub 07/31/2017
Για να ολοκληρώσετε το σκορ σας και να κάνετε ένα τέλειο 5k;
TheLethalCoder 07/31/2017
@ThomasAyoub Μπορούμε μόνο να υποθέσουμε ότι ήταν κάποιος με OCD ναι.

Zgarb 07/28/2017.

Χασκ , 8 6 byte

←TU¡Γ↓ 

Δοκιμάστε το online!

-2 bytes (και μια εντελώς νέα ιδέα λύση) χάρη στον Leo!

Εξήγηση

Χρησιμοποιώ τη λειτουργία αντιστοίχισης προτύπου λίστας Γ . Παίρνει μια συνάρτηση f και μια λίστα με την κεφαλή x και την ουρά xs και εφαρμόζει το f στο x και το xs . Αν η λίστα είναι κενή, Γ επιστρέφει μια προεπιλεγμένη τιμή σύμφωνη με τον τύπο της, στην περίπτωση αυτή μια κενή λίστα. Παίρνουμε το f να είναι , το οποίο ρίχνει x στοιχεία από το xs . Στη συνέχεια, αυτή η λειτουργία επαναλαμβάνεται και τα προκύπτοντα στοιχεία συλλέγονται σε μια λίστα.

←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
Μπορείτε να ρίξετε την προεπιλεγμένη τιμή του ø, και όλα θα λειτουργήσουν ακόμα μαγικά :)
Leo 07/28/2017
Ή, για ακόμη λιγότερα byte, tio.run/##yygtzv7//1HbhJDQQwvPTX7UNvn////RBjpGOiBsomOoYxQLAA
Zgarb 07/28/2017
@ Leo Oh wow, αυτό είναι έξυπνο!
Erik the Outgolfer 07/28/2017
Γιατί το CW αυτό;
Zgarb 07/28/2017
@ ErikTheOutgolfer Αυτό ήταν ένα λάθος (είμαι στο τηλέφωνό μου και προφανώς έσπρωξε κάτι τυχαία). Προσπαθώ να το ακυρώσω ...

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 

Δοκιμάστε το online!

2 comments
1 Rod 07/28/2017
Μπορείτε να χρησιμοποιήσετε το l[i:i+l[i-1]]=[] αντί για del l[i:i+l[i-1]]
1 ASCII-only 07/28/2017

Dave 07/28/2017.

Pyth, 22 Bytes

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

Αφαιρέθηκε ένα άχρηστο byte

4 comments
Erik the Outgolfer 07/28/2017
Βλέπω 23 bytes εκεί.
Dave 07/28/2017
Typo :) συγνώμη ...
3 Wheat Wizard 07/28/2017
Δεν είμαι σίγουρος γιατί έχετε ψηφοφορία κάτω. Υπάρχει μια πιθανότητα ότι όταν επεξεργαστήκατε την απάντησή σας αυτό ενεργοποίησε μια "αυτόματη ψηφοφορία". Οι λόγοι για αυτό το αυτόματο downvote είναι σύγχυση και τρομερό, αλλά συμβαίνει εάν το σύστημα θεωρεί την απάντησή σας "χαμηλής ποιότητας" με βάση την heuristics. Είναι επίσης πιθανό ότι κάποιος δεν μου άρεσε η απάντησή σας, αλλά δεν βλέπω τίποτα λάθος με αυτήν τη στιγμή, γι 'αυτό δεν είμαι σίγουρος γιατί θα συνέβαινε αυτό.
isaacg 07/31/2017
Χαίρομαι που χρησιμοποιείτε την Pyth!

Rod 07/28/2017.

Python 2 , 60 42 byte

-18 byte χάρη στον Luis Mendo

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

Δοκιμάστε το online!


Martin Ender 07/28/2017.

Retina , 36 bytes

Ο αριθμός χαρακτήρων υποθέτει την κωδικοποίηση ISO 8859-1.

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

Η είσοδος και η έξοδος είναι διαχωρισμένες με τη γραμμή τροφοδοσίας με διαχωριστική γραμμή.

Δοκιμάστε το online! (Χρησιμοποιεί κόμματα αντί γραμματοσειράς για να επιτρέψει την κατάλληλη δοκιμαστική σουίτα.)


Riley 07/28/2017.

Brain-Flak , 64 bytes

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

Δοκιμάστε το online!

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack 
2 comments
6 DJMcMayhem 07/28/2017
Τι λες τώρα! Έγραψα μια λύση, και στη συνέχεια κύλιση προς τα κάτω για να το post, αλλά αποδεικνύεται ότι γράψαμε exact ίδια λύση byte-by-byte! Ακόμη και μικρές λεπτομέρειες όπως ({}[()]<{}>) vs ({}<{}>[()]) ήταν οι ίδιες! Τι σύμπτωση!
2EZ 4RTZ 07/28/2017
@ DJMcMayhem κλέβοντας όλη τη φήμη XD

user202729 07/28/2017.

Mathematica, 64 50 bytes

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={} 
1 comments
Mr.Wizard 07/28/2017
Δεν θα μπορούσα να αντισταθώ σε περαιτέρω γκολφ αυτόν τον τακτοποιημένο κώδικα. η απάντησή μου είναι παρακάτω.

jkelm 07/28/2017.

C # (.NET Core) , 68 bytes

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

Δοκιμάστε το online!

Παίρνει είσοδο ως μια σειρά από ακέραιους αριθμούς, επιστρέφει μια συμβολοσειρά που περιέχει τις μη παραλειφθείσες τιμές.

3 comments
TheLethalCoder 07/28/2017
Ένας καλός τρόπος για να το κάνετε και έρχεται με τον ίδιο αριθμό με την εκτύπωση.
jkelm 07/28/2017
Λατρεύω τις απλές λύσεις. Ακόμα πρέπει να μάθουν LINQ όμως, όπως έχω δει να συντομεύουν τόσες πολλές c # lambdas ..
TheLethalCoder 07/28/2017
Το συντομεύει επειδή μπορείτε να κάνετε σιωπηρή επιστροφή τις περισσότερες φορές. Παρόλο που πρόκειται να πετάξετε ανάμεσα στην έμμεση επιστροφή με τη using System.Linq; και έναν κανονικό βρόχο.

Jarko Dubbeldam 07/28/2017.

R, 58 byte

f=function(x,p=1)NO 

Αναδρομική λειτουργία. Λαμβάνει ένα διάνυσμα x ως επιχείρημα και ξεκινά ένα δείκτη p . Αυτό εκτυπώνει την αντίστοιχη καταχώρηση του x , ελέγχει εάν το p+x[p] θα βγει από τα όρια και εάν όχι, θα καλέσει τη λειτουργία του νέου δείκτη.

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

Αυτή είναι μια συγκρίσιμη λύση που επιστρέφει ένα κατάλληλο διάνυσμα αντί για εκτύπωση των ψηφίων.

3 comments
Giuseppe 07/28/2017
τι γίνεται με μια είσοδο numeric(0) ; κάπως αδειασμένη συστοιχία.
Jarko Dubbeldam 07/28/2017
@Giuseppe Θα ρίξω μια ματιά σε αυτό όταν είμαι πίσω από τον υπολογιστή μου
Giuseppe 08/24/2017
57 bytes! και χειρίζεται και την κενή θήκη.

Roman Gräf 07/28/2017.

Java (OpenJDK 8) , 53 bytes

Χάρη στο @ PunPun1000 και @TheLethalCoder

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

Δοκιμάστε το online!

5 comments
TheLethalCoder 07/28/2017
Θα εκτυπώσετε τα αποτελέσματα, όπως στην απάντησή μου C #, θα σας εξοικονομήσει τίποτα;
Roman Gräf 07/28/2017
@TheLethalCoder Δοκιμάστε
TheLethalCoder 07/28/2017
Μπορείτε να αποθηκεύσετε ένα byte μετακινώντας n στον βρόχο;
TheLethalCoder 07/28/2017
Επιπλέον, αυτό δεν φαίνεται να λειτουργεί αυτή τη στιγμή.
PunPun1000 07/28/2017
Σας απουσιάζει ένα παρένθεμα μετά από το (a[n+=1+a[n]] . Η συνάρτηση σφάλει επίσης μετά την εξαγωγή της σωστής τιμής, δεν γνωρίζω τη συναίνεση για το αν αυτό επιτρέπεται ή όχι λέει οτιδήποτε στο τυπικό σφάλμα είναι αγνοείται) .Αν αυτή ήταν η πρόθεση, τότε μπορείτε να αφαιρέσετε το n στο for n συνέπεια ο κώδικας TIO δεν τρέχει όπως είναι, ακόμη και με το παρεντερικό. έναν Consumer και χρησιμοποιήστε το func.accept(test)

Martin Ender 07/28/2017.

Αλίκη , 15 bytes

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

Δοκιμάστε το online!

Εισάγετε και εξάγετε λίστες με διακεκομμένες διακεκομμένες γραμμές με δεκαδικούς ακέραιους αριθμούς.

Εξήγηση

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

Η αποθήκευση ενός ακέραιου n στην ουρά του iterator προκαλεί την εκτέλεση της επόμενης εντολής n φορές. Καθρέπτες όπως / δεν είναι εντολές, επομένως η επόμενη εντολή θα είναι I . Επομένως, αν μόλις διαβάσουμε και τυπώσουμε μια τιμή x , θα διαβάσουμε τις τιμές x+1 στην επόμενη επανάληψη, με το τελευταίο να καταλήγει στην κορυφή της στοίβας. Αυτό παραλείπει τα απαιτούμενα στοιχεία λίστας αριθμών.


Mr.Wizard 07/28/2017.

Mathematica , 37 (30β)

Περαιτέρω γκολφ της ωραίας μεθόδου του χρήστη202729.

±NO 

Οι κανόνες δεν φαίνεται να καθορίζουν ρητά τη μορφή εξόδου, οπότε ίσως:

±NO 

Η έξοδος για τη δεύτερη λειτουργία μοιάζει με: 0.2.4.{} - κυρίως {} εξακολουθεί να επιστρέφεται για ένα άδειο σετ, σύμφωνα με τον τελικό κανόνα.

2 comments
1 JungHwan Min 07/28/2017
±Drop[NO μπορεί να είναι ±NO επειδή έχει ± χαμηλότερη προτεραιότητα από την Infix .
Mr.Wizard 07/28/2017
@JungHwanMin μου λείπει αυτό? ευχαριστώ!

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

Δοκιμάστε το online!


w0lf 07/28/2017.

Ruby, 36 33 31

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

Δοκιμάστε το online.

4 comments
sethrin 07/30/2017
Έχετε τη δυνατότητα να αφαιρέσετε το f= ως στοιχείο κεφαλίδας.
w0lf 07/30/2017
@sethrin Ακόμα κι αν χρειάζεται να το ονομάσω αναδρομικά;
sethrin 07/30/2017
Χμμ, καλή ερώτηση. Υποθέτω όχι. Μου άρεσε πάρα πολύ για τη λύση σας, παρεμπιπτόντως.
w0lf 07/30/2017
@sethrin Ευχαριστώ! :)

AnonymousReality 07/28/2017.

Swift, 63 bytes

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

Αυτή είναι η πρώτη εγγραφή μου ποτέ, έτσι δεν είμαι 100% σίγουρος για τους κανόνες, αλλά ελπίζω ότι αυτή η απάντηση αρκεί. Είμαι λίγο σίγουρος για τους κανόνες σχετικά με τον τρόπο εισαγωγής των δεδομένων σε ένα σύστημα. Έχω μια πιο σύντομη απάντηση αν μου επιτρέπεται να αναλάβω κάποια λειτουργία που μπορεί να επιστρέψει την είσοδο.

2 comments
Stephen 07/28/2017
Καλώς ήρθατε στη ΔΕΗ! Οι προεπιλεγμένοι κανόνες είναι ότι μπορείτε είτε να έχετε κώδικα που λειτουργεί ως πλήρες πρόγραμμα, ώστε να εισάγετε (συνήθως) στο STDIN και να εξάγετε (συνήθως) στο STDOUT or μια συνάρτηση, ώστε να εισάγετε συνήθως από τις παραμέτρους λειτουργίας και την έξοδο (συνήθως) επιστροφή λειτουργίας.
AnonymousReality 07/28/2017
@ StepHen - ευχαριστώ! Υποθέτω ότι αυτό κάνει την άλλη έκδοση μου άκυρη στη συνέχεια. Προσβλέπουμε να συμβάλουμε περισσότερο!

Perl 6 , 31 bytes

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

Δοκιμασε το

Αναπτυγμένος:

 {  # 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
} 

Για να κατανοήσετε τον τρόπο με τον οποίο λειτουργεί ο κώδικας, χωρίς [*;0] αυτό θα δημιουργούσε μια ακολουθία όπως η ακόλουθη:

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

Κοινή Lisp, 51 bytes

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

Δοκιμάστε το 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< 

Δοκιμάστε το online

Το απαίσιο (c/91?"":" ") Είναι για τη σωστή απόσταση στην έξοδο. Χωρίς αυτήν (-15 bytes) η έξοδος είναι σε μορφή: [0,2,4] , όταν την αλλάζω σε απλή έξοδο " " (-9 bytes) είναι σαν [ 0, 2, 4] (πρόσθετος χώρος στην αρχή) .

<<(c/93?"":"]") στο τέλος είναι μόνο να χειριστεί [] κενή θήκη γωνίας εισόδου

Δεν εκτυπώνει καμία τελική γραμμή.

1 comments
Erik the Outgolfer 07/30/2017
Μπορείτε επίσης να εκτυπώσετε τους αριθμούς που χωρίζονται από διαχωριστή χωρίς ψηφία, δεν χρειάζεστε [] και μπορείτε να έχετε κενή έξοδο για αυτήν την ακμή, και δεν χρειάζεστε (c/91?"":" ") . Δεν χρειάζεται να ταιριάξετε τη μορφή των παραδειγμάτων στην πρόκληση.

Jonathan Allan 07/29/2017.

Ζελέ , 8 byte

ḢṄ‘ṫ@µL¿ 

Ένα πλήρες πρόγραμμα εκτύπωσης των αποτελεσμάτων που ακολουθεί κάθε μία από μια νέα γραμμή (η κενή λίστα δεν παράγει έξοδο).

Try it online!

Πως?

ḢṄ‘ṫ@µ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
Τελικά μια απάντηση Jelly! BTW Μπορώ να το κάνω σε 7 bytes.
Erik the Outgolfer 07/30/2017
Και έχω επίσης μια λειτουργία επιστροφής λίστας σε 18 byte.

Evpok 07/30/2017.

Python 3 , 35 bytes

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

Δοκιμάστε το online!

Εκτελέστε το με f(*l) όπου l είναι η είσοδός σας. Αμφισβητήσιμα τέντωμα των κανόνων για την είσοδο, αλλά μου αρέσει μόνο προχωρημένη αποσυσκευασία.


cliffroot 07/28/2017.

Clojure, 67 byte

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

Ξεκινά με τις αρχικές παραμέτρους [0 []] , όπου 0 είναι ο μετρητής και το [] είναι το αποτέλεσμα. Αν το πρώτο στοιχείο της λίστας είναι 0 στοιχείο n από το όρισμα στο αποτέλεσμα και περνάει περαιτέρω αυτή η λίστα [n [... n]] αλλιώς μειώνει το πρώτο στοιχείο. (αυτή η εξήγηση είναι φρικτή για μένα)

Δείτε το σε απευθείας σύνδεση


Dead Possum 07/28/2017.

Python 2,4, 85 bytes

Δεν υπάρχει καμία πιθανότητα να κερδίσω στο python με αυτό, αλλά μου αρέσουν oneliners και αυτό μπορεί να είναι ενδιαφέρον για τους άλλους.
Αποδεικνύεται ότι υπάρχει ένα φανταχτερό μαγικό τέχνασμα για να αποκτήσετε πρόσβαση στη λίστα των κτιρίων μέσα από κατανόηση, αλλά λειτουργεί μόνο σε 2,4 και με κάποιες τροποποιήσεις σε <= 2,3
locals()['_[1]'] είναι. Η Python δημιουργεί το μυστικό όνομα _[1] για τη λίστα, ενώ δημιουργείται και αποθηκεύεται στους locals . Επίσης, τα ονόματα _[2] , _[3] ... χρησιμοποιούνται για ένθετες λίστες.

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

Έτσι μετράει τον αριθμό των ήδη προστιθέμενων στοιχείων συν το ποσό τους. Αποτέλεσμα είναι ο δείκτης του επόμενου επιθυμητού στοιχείου.
Νομίζω ότι πρέπει να υπάρχει ένας τρόπος αποφυγής της απαρίθμησης. Όπως και η πρόσβαση στη συστοιχία εισόδου απευθείας από τον ευρετήριο: [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ] . Αλλά δεν μπορώ να υπολογίσω έναν συμπαγή τρόπο για να την προστατεύσω από το δείκτη-out-of-range (διατηρώντας το oneliner)

εισάγετε την περιγραφή εικόνας εδώ


Neil 07/28/2017.

Παρτίδα, 69 byte

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

(Χρειάζομαι το () s γύρω από το for διαφορετικά το goto συμβαίνει μέσα στο βρόχο.)

Related questions

Hot questions

Language

Popular Tags