Zwiń kolejne liczby całkowite


22

Powiązane: Powiedz mi, ile problemów matematycznych muszę zrobić!

Wyzwanie

Biorąc pod uwagę ściśle dodatnią, ściśle rosnącą listę liczb całkowitych L i liczbę całkowitą 3 ≤ N ≤ długość L, zamień środkowe liczby całkowite kolejnych liczb całkowitych L o długości ≥ N pojedynczym myślnikiem -.

Zasady

  • Poziome białe znaki nie mają znaczenia.
  • Opcjonalnie możesz zachować znaki wprowadzające, separatory i terminatory w domyślnym formacie listy w swoim języku. Zobacz przykłady formatowania poniżej.

Przykłady danych

Wszystkie te przykłady wykorzystują L = 3 5 6 7 8 10 11 12 14 16 17 18 19 20 21 22 24.

N = 33 5 - 8 10 - 12 14 16 - 22 24

N = 43 5 - 8 10 11 12 14 16 - 22 24

N = 53 5 6 7 8 10 11 12 14 16 - 22 24

N = 83 5 6 7 8 10 11 12 14 16 17 18 19 20 21 22 24

Przykłady formatowania

Dla danych wejściowych
L = [3,5,6,7,8,10,11,12,14,16,17,18,19,20,21,22,24]i N = 3
wszystkich poniższych wierszy znajdują się przykłady prawidłowych odpowiedzi, zarówno jako rzeczywistych list, jak i ciągów:

[3,5,"-",8,10,"-",12,14,16,"-",22,24]
[3,5,-,8,10,-,12,14,16,-,22,24]
[3,5-8,10-12,14,16-22,24]
3,5-8,10-12,14,16-22,24

To samo odnosi się do innych formatów lista, jak {1 2 3}i (1; 2; 3)itd. W razie wątpliwości? Zapytać!


Czy konieczne jest użycie, -czy wolno nam użyć innego symbolu?
mile

@miles Czy inny symbol pozwoli Ci zaoszczędzić bajty?
Adám

Zastanawiam się nad użyciem nieskończoności, _aby móc nadal działać na tablicach numerycznych w J.
mile

@miles Ach, tak, czemu nie idź i nie rób tego, ale nie rób tego, a jeśli możesz się niepokoić, napisz (zakładam, że znacznie dłużej) rozwiązanie w pudełku '-'. Być może uda Ci się również wszystko sprecyzować przed wstawieniem myślników, prawda?
Adám

Czy poniższe informacje są prawidłowe? [3,5,-8,10,-12,14,16,-22,24](wydaje się, że jest to format, który ma największy sens pod względem typów)
Leaky Nun

Odpowiedzi:



6

Galaretka ,  26 25  23 bajtów

-2 bajty dzięki Erikowi Outgolferowi (wprowadzając instrukcję if do głównego linku)

Ḣ;Ṫj”-
IỊ¬1;œṗ⁸¹ÇL<¥?€F

Dyadyczny link zwracający listę w [3,5,"-",8,10,"-",12,14,16,"-",22,24]formacie.

Wypróbuj online! (stopka rozdziela się spacjami, aby wydrukować przykładowy format danych).

W jaki sposób?

Ḣ;Ṫj”- - Link 1, format a run: list R
Ḣ      -     head
  Ṫ    -     tail
 ;     -     concatenate
    ”- -     literal '-'
   j   -     join

IỊ¬1;œṗ⁸¹ÇL<¥?€F - Main link: list L, number N
I                - incremental differences
 Ị               - insignificant? (<=1)
  ¬              - not
   1;            - prepend a 1
       ⁸         - chain's left argument, L
     œṗ          - partition (L) at truthy indexes
              €  - for €ach row, R, in L:
             ?   -   if:
            ¥    -   condition: last two links as a dyad:
          L      -     length of R
           <     -     is less than N?
        ¹        -   then: identity - do nothing, yields R
         Ç       -   else: call the last link (1) as a monad with argument  R
               F - flatten into a single list

Link monadyczny?
Leaky Nun

heh, i „specjalny” w tym.
Jonathan Allan


Ładne rzeczy, dzięki @EriktheOutgolfer!
Jonathan Allan

4

Pyth, 23 bajty

sm?<ldvzd[hd\-ed).ga=hZ

Wypróbuj online

Jak to działa

sm?<ldvzd[hd\-ed).ga=hZkQ

                        Q    autoinitialized to eval(input())
                 .g          group by k ↦
                    =hZ          Z += 1, returning new value (Z is autoinitialized to 0)
                   a   k         absolute difference with k
 m                           map d ↦
  ?                              if
    ld                               length of d
   <  vz                             less than eval(z) (z is autoinitialized to input())
        d                        then d
         [hd\-ed)                else [d[0], '-', d[-1]]
s                            concatenate

3

Japt , 24 bajty

óÈÄ¥Yîl ¨V?Zv +'-+Zo :Z

Wypróbuj online!

Wyjaśnienie

óÈ   Ä ¥ YÃ ®   l ¨ V?Zv +'-+Zo :Z
óXY{X+1==Y} mZ{Zl >=V?Zv +'-+Zo :Z}   Ungolfed
                                      Implicit: U = input array, V = input integer
óXY{      }                           Group U into runs such that for each pair X, Y:
    X+1==Y                              Y is exactly 1 more than X.
            mZ{                   }   Map each run Z to:
               Zl >=V?                  If Z has at least V items:
                      Zv     Zo           Z.unshift() and Z.pop() (the first and last items)
                         +'-+             joined with a hyphen.
                                :       Otherwise:
                                 Z        just Z.
                                      Implicit: output result of last expression

2

Mathematica, 128 bajtów

(s=#2;t=r=1;While[t<Length@s,If[s[[t+1]]-s[[t]]==1,r++,r=1];If[r==#,s[[t-#+3;;t]]="-";r--];t++];s//.{b___,a_,a_,c___}:>{b,a,c})&


wkład

[3, {3,5,6,7,8,10,11,12,14,16,17,18,19,20,21,22,24}]

wydajność

{3, 5, „-”, 8, 10, „-”, 12, 14, 16, „-”, 22, 24}

Wypróbuj online!



2

APL, 38 bajtów

{∊⍺{⍺>≢⍵:⍵⋄2⌽'-',2↑¯1⌽⍵}¨⍵⊂⍨1,1≠2-⍨/⍵}

1

PHP 7, 137 136 134 117 110 108 bajtów

for($a=$argv,$i=2;$n=$a[$i++];$k<$a[1]||array_splice($a,$i,$k-2,"-"))for($k=print"$n ";$a[$i+$k]-++$k==$n;);

Bierze się Lz pierwszego argumentu, po czym wypisuje elementy. Uruchom -nrlub wypróbuj online .

Wymienić $L=($a=$argv)z $a=$argv,$L=(+ 1) bajtów do PHP <7.

awaria

for($a=$argv,$i=2;              # import input
    $n=$a[$i++];                # loop $n through list elements
    $k<$a[1]||                      # 3. if streak length ($k) is >=L ($a[1])
        array_splice($a,$i,$k-2,"-")    # then replace with "-"
)
for($k=print"$n ";                  # 1. print element and space
    $a[$i+$k]-++$k==$n;);           # 2. find consecutive numbers

1

Siatkówka , 101 bajtów

\d+
$*
\b(1+) (?=1\1\b)
$1X
T`X` `\b((X)|1)+\b(?=.*¶(?<-2>1)+(?(2)(?!))11)
T`X`-
-1+(?=-)|¶1+

1+
$.&

Wypróbuj online! Pobiera listę rozdzieloną spacjami Lw pierwszym wierszu i liczbę całkowitą Nw drugim wierszu. Objaśnienie: Pierwszy stopień przekształca dane wejściowe na jednoargumentowy. Drugi etap zmienia odstęp między kolejnymi liczbami całkowitymi na X. Trzeci etap szuka ciągów kolejnych liczb całkowitych, których długość jest mniejsza niż, Ni zmienia ich Xpowrót do spacji. Czwarty etap zmienia Xs na -(było to o 3 bajty krótsze niż użycie -s na pierwszym miejscu). Piąty etap usuwa wszystkie liczby całkowite pozostające w środku przebiegu, a także N, podczas gdy ostatni etap konwertuje z powrotem na dziesiętne.


1

Rubinowy, 68 bajtów

->n,l{l.slice_when{|x,y|x<y-1}.map{|x|x[n-1]?x.minmax.uniq*?-:x}*?,}

Zwraca ciąg znaków jak na przykład 3,5-8,10-12,14,16-22,24.

Wypróbuj online!


1

J , 40 bajtów

;@((](,_,{:)/)^:(<:#)&.>]<;.1~1,1<}.-}:)

Wypróbuj online!

Używa _zamiast -.

Wyjaśnienie

;@((](,_,{:)/)^:(<:#)&.>]<;.1~1,1<}.-}:)  Input: integer N (LHS), array L (RHS)
                                  }.      Behead L
                                     }:   Curtail L
                                    -     Subtract elementwise to get the increments
                                1<        Test if greater than 1
                              1,          Prepend a 1
                        ]                 Get L
                         <;.1~            Partition L into boxes using the previous array
                     & >                  Operate on each box (partition) with N
              ^:                            If
                   #                          The length of the partition
                 <:                           Is greater than or equal to N
   (](     )/)                                Reduce (right-to-left) it using
         {:                                     Tail
       _,                                       Prepend _
      ,                                         Append to LHS
                     &.>                    Box the result
;@                                        Raze - join the contents in each box

0

Galaretka, 39 37 36 bajtów

IỊṣ0;€1ṁ@
ÇL€<Ɠ¬TịÇḊ€Ṗ€F;€”-FyµŒgQ€F

Wypróbuj online

Bierze tablicę za pomocą argumentów, a liczbę całkowitą przez STDIN. Łącze TIO używa stopkiÇG więc dane wyjściowe są oddzielone spacją.

W jaki sposób? (Tablica: a, całkowita: n)

(`f`)
IỊṣ0;€1ṁ@
I          Deltas of `a`
 Ị         Insignificant (x -> abs(x)<=1) applied to each element
  ṣ0       Split at occurrences of `0`.
    ;€1    Append `1` to each element
       ṁ@  `a` shaped like that
ÇL€<Ɠ¬TịÇḊ€Ṗ€F;€”-FyµŒgQ€F
Ç                            `f`
 L€                          Length of each element
   <Ɠ                        x -> x < n applied to each element
     ¬                       Logical not of each element (because Jelly doesn't have <= nor >= atoms)
      T                      Nonzero indexes
       ịÇ                    Index `f` at those indexes
         Ḋ€Ṗ€                x -> x[1:-1] applied to each element
             F               Flatten
              ;€”-           Append a hyphen to each element
                  F          Flatten
                   y         Translate (replaces all elements to be deleted with a hyphen)
                    µ        Start a new monadic link
                     Œg      Group runs of equal elements
                       Q€    Uniquify each element (make runs of hyphens one hypen)
                         F   Flatten, yet again.

Zgaduję, upadłem ... mieszkanie na ten jeden.


0

JavaScript (ES6), 126 119 bajtów

(e,c)=>{for(i=0,R='';i<e.length;R+=(R&&',')+(u-m>=c?m+'-'+--u:e.slice(z,i))){m=u=e[i],z=i;while(e[++i]==++u);}return R}

Anonimowa funkcja. Pobiera dane wejściowe w kolejności Array L, Integer Ni zwraca wynik jako ciąg rozdzielany przecinkami.


Użyj curry, aby zapisać bajt e=>c=>.
TheLethalCoder

0

Dyalog APL v16.0, 82 80 78 76 75 65 62 bajtów

{S/⍨1,⍨2≠/S←'-'@(⍸⊃∨/(-0,⍳⍺-3)⌽¨⊂(⍴⍵)↑∧/¨(⍺-1),/¯1⌽1=-2-/⍵)⊢⍵}

Wow, to jest ... złe. Prawdopodobnie istnieje znacznie krótsze rozwiązanie z szablonem.

Wypróbuj online!

Zapraszamy do gry w golfa!


Tak, a co z tym?
Zacharý

Przepraszam, złe miejsce.
Adám

^ Co masz na myśli?
Zacharý

Mój komentarz opierał się na innym wyzwaniu.
Adám

Zakładam, że jeśli masz rozwiązanie, Adám, to wykorzystuje ono wbudowane v16?
Zacharý
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.