Lancetta dell'orologio Syzygy


16

(Grazie mille a El'endia Starman e Sp3000 per avermi aiutato a progettare casi di test per questo!)

Dato un numero intero positivo ne un elenco di periodi di rotazione interi positivi per un numero di lancette dell'orologio (in secondi), emette il numero intero positivo più piccolo in xcui i xsecondi dopo l'avvio dell'orologio con tutte le lancette allineate, esattamente ndelle lancette sono allineate. Non devono essere allineati nella posizione iniziale: qualsiasi posizione va bene, purché xsia un numero intero ed è minimizzata. Inoltre, non tutte le mani devono essere allineate nella stessa posizione, poiché n=4è valida una soluzione in cui 2 gruppi di 2 mani sono allineati. I gruppi devono essere di dimensione 2 o superiore - due mani non allineate non costituiscono 2 gruppi di 1 mano allineata e quindi non è una soluzione valida.

Puoi presumere che nsaranno dati solo gli input in cui è possibile avere esattamente le lancette allineate dopo un numero intero di secondi - 2, [3,3,3]non è un input valido, perché dopo un numero qualsiasi di secondi, tutte e 3 le mani saranno allineate, quindi è impossibile per ottenere esattamente 2 allineati.

Esempi:

2, [3,4] -> 12
(the only option is a multiple of 12, so we pick 12 - 4 and 3 full rotations, respectively)

3, [3,5,6,9,29] -> 18
(picking 3, 6, and 9, the hands would align after 6, 3, and 2 rotations, respectively)

2, [1,1,4,5,10] -> 1
(picking 1 and 1 - note that 0 is not a valid answer because it is not a positive integer)

3, [2,2,6,7,11] -> 3
(picking 2, 2, and 6 - the 2s would be halfway through their second revolution, and the 6 would be halfway through its first revolution)

2, [2,7,5,3,3] -> 1
(picking 3 and 3, they are always aligned, so 1 is the minimum)

5, [4, 14, 36, 50, 63, 180, 210] -> 45
(after 45 seconds, the first, third, and sixth are aligned, as well as the second and seventh, for a total of 5)

Dati di test:

7, [10, 22, 7, 6, 12, 21, 19] -> 87780
6, [25, 6, 2, 19, 11, 12] -> 62700
6, [23, 1, 8, 10, 9, 25] -> 41400
7, [6, 4, 1, 8, 10, 24, 23] -> 920
3, [18, 5, 23, 20, 21] -> 180
5, [10, 8, 14, 17, 5, 9] -> 2520
6, [1, 18, 12, 9, 8, 10, 23] -> 360
6, [12, 11, 6, 23, 25, 18, 13] -> 118404
4, [18, 11, 2, 9, 12, 8, 3] -> 8
7, [18, 25, 9, 13, 3, 5, 20] -> 11700
2, [17, 20, 15, 8, 23, 3] -> 15
3, [16, 3, 24, 13, 15, 2] -> 24
5, [7, 23, 24, 8, 21] -> 1932
6, [16, 10, 12, 24, 18, 2, 21] -> 720
6, [1, 17, 16, 13, 19, 4, 15] -> 53040
2, [3, 4, 20] -> 5
3, [9, 4, 16, 14, 1, 21] -> 16
5, [5, 17, 10, 20, 12, 11] -> 330
2, [21, 5, 22, 18] -> 90
4, [7, 25, 2, 8, 13, 24] -> 84
4, [13, 19, 2, 20, 7, 3] -> 420
5, [4, 14, 36, 50, 63, 180, 210] -> 45
5, [43, 69, 16, 7, 13, 57, 21] -> 27664
3, [22, 46, 92, 43, 89, 12] -> 276
4, [42, 3, 49, 88, 63, 81] -> 882
6, [2, 4, 7, 10, 20, 21, 52, 260] -> 65
6, [2, 3, 4, 7, 10, 20, 21, 52, 260] -> 35
2, [3, 4] -> 12
3, [3, 5, 6, 9, 29] -> 18
2, [1, 1, 4, 5, 10] -> 1
3, [2, 2, 6, 7, 11] -> 3
3, [41, 13, 31, 35, 11] -> 4433
3, [27, 15, 37, 44, 20, 38] -> 540
5, [36, 11, 14, 32, 44] -> 22176
3, [171, 1615, 3420] -> 3060
3, [46, 36, 12, 42, 28, 3, 26, 40] -> 36
5, [36, 25, 20, 49, 10, 27, 38, 42] -> 1350
4, [40, 28, 34, 36, 42, 25] -> 2142
5, [24, 26, 47, 22, 6, 17, 39, 5, 37, 32] -> 1248
4, [9, 27, 12, 6, 44, 10] -> 108

Regole:

  • Sono vietate le scappatoie standard
  • Questo è , quindi vince il codice più corto!

Classifica

Lo snippet di stack nella parte inferiore di questo post genera la classifica dalle risposte a) come un elenco della soluzione più breve per lingua eb) come classifica generale.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

## Perl, 43 + 2 (-p flag) = 45 bytes

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


5
Wow, non sapevo nemmeno che questa fosse una parola . Che parola fantastica, vincitrice di boia e vincente a scrabble!
Trauma digitale,

@DigitalTrauma Buona fortuna a trovare 3 Ytessere.
SuperJedi224,

Risposte:


7

Pyth, 28 27 24 byte

fqs-hMrS.RR7%R1cLTQ8 1vz

Provalo online nel compilatore Pyth .

Come funziona

fqs-hMrS.RR7%R1cLTQ8 1vz

                          (implicit) Save the input number in z (as string).
                          (implicit) Save the input list in Q.

f                         Find the first positive integer T such that:
               cLTQ         Compute T/α for each α in Q.
            %R1             Get the fractional part of each result.
        .RR7                Round each fractional part to 7 decimal digits.
       S                    Sort the resulting numbers.
      r            8        Perform run-length encoding.
    hM                      Get the lengths of the runs.
   -                 1      Discard runs of length 1.
  s                         Add the remaining runs.
 q                    vz    Check is the sum matches the input number.
                          If it does, break and return T.

Casi test

$ cat input
7\n[10, 22, 7, 6, 12, 21, 19]\n87780
6\n[25, 6, 2, 19, 11, 12]\n62700
6\n[23, 1, 8, 10, 9, 25]\n41400
7\n[6, 4, 1, 8, 10, 24, 23]\n920
3\n[18, 5, 23, 20, 21]\n180
5\n[10, 8, 14, 17, 5, 9]\n2520
6\n[1, 18, 12, 9, 8, 10, 23]\n360
6\n[12, 11, 6, 23, 25, 18, 13]\n118404
4\n[18, 11, 2, 9, 12, 8, 3]\n8
7\n[18, 25, 9, 13, 3, 5, 20]\n11700
2\n[17, 20, 15, 8, 23, 3]\n15
3\n[16, 3, 24, 13, 15, 2]\n24
5\n[7, 23, 24, 8, 21]\n1932
6\n[16, 10, 12, 24, 18, 2, 21]\n720
6\n[1, 17, 16, 13, 19, 4, 15]\n53040
2\n[3, 4, 20]\n5
3\n[9, 4, 16, 14, 1, 21]\n16
5\n[5, 17, 10, 20, 12, 11]\n330
2\n[21, 5, 22, 18]\n90
4\n[7, 25, 2, 8, 13, 24]\n84
4\n[13, 19, 2, 20, 7, 3]\n420
5\n[4, 14, 36, 50, 63, 180, 210]\n45
5\n[43, 69, 16, 7, 13, 57, 21]\n27664
3\n[22, 46, 92, 43, 89, 12]\n276
4\n[42, 3, 49, 88, 63, 81]\n882
6\n[2, 4, 7, 10, 20, 21, 52, 260]\n65
6\n[2, 3, 4, 7, 10, 20, 21, 52, 260]\n35
2\n[3, 4]\n12
3\n[3, 5, 6, 9, 29]\n18
2\n[1, 1, 4, 5, 10]\n1
3\n[2, 2, 6, 7, 11]\n3
3\n[41, 13, 31, 35, 11]\n4433
3\n[27, 15, 37, 44, 20, 38]\n540
5\n[36, 11, 14, 32, 44]\n22176
3\n[171, 1615, 3420]\n3060
3\n[46, 36, 12, 42, 28, 3, 26, 40]\n36
5\n[36, 25, 20, 49, 10, 27, 38, 42]\n1350
4\n[40, 28, 34, 36, 42, 25]\n2142
5\n[24, 26, 47, 22, 6, 17, 39, 5, 37, 32]\n1248
4\n[9, 27, 12, 6, 44, 10]\n108
$ while read -r; do echo -e "$REPLY" | pyth -c 'qvwfqs-hMrS.RR7%R1cLTQ8 1vz'; done < input
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True

3

Gelatina , 19 16 byte

P:×ⱮP%PĠẈḟ1Sʋ€iƓ

Prende l'array come argomento, l'intero da STDIN.

Troppo lento e memoria affamata per la maggior parte dei casi di test.

Provalo online!

Versione alternativa, 14 byte

P÷€%1ĠẈḟ1Sʋ€iƓ

Funziona in teoria, ma potrebbe non funzionare a causa di imprecisioni in virgola mobile.

Provalo online!

Come funziona

P:×ⱮP%PĠẈḟ1Sʋ€iƓ  Main link. Argument: A (array)

P   P P           Yield the product of A.
 :                Divide the product by each n in A.
  ×Ɱ              Multiply the quotients by each k in [1, ..., prod(A)].
     %            Take the results modulo the product.
             €    Map the link to the left over the array of remainders.
            ʋ       Combine the links to the left into a dyadic chain.
       Ġ              Group indices of identical elements.
        Ẉ             Widths; yield the lengths of the groups.
         ḟ1           Filterfalse; remove all copies of 1.
           S          Take the sum.
               Ɠ  Read an integer j from STDIN.
              i   Find the first index of j in the array of sums.

2

CJam, 42 34 33 byte

0{)_eas~@d\f/1f%7fmO$e`0f=1m1b-}g

Prova questo violino o questa suite di test nell'interprete CJam.

Come funziona

0       e# Push 0 (accumulator).
{       e# Do:
  )_    e#   Increment the accumulator and push a copy.
  eas~  e#   Push the command-line args, flatten and evaluate.
        e#   This pushes a number and an array.
  @d    e#   Rotate the accumulator copy on top and cast to Double.
  \f/   e#   Divide it by each of the integers in the array.
  1f%   e#   Get the fractional part of each result.
  7fmO  e#   Round all fractional parts to seven decimal digits.
  $e`   e#   Sort and perform run-length encoding.
  0f=   e#   Select the lengths of the runs.
  X-    e#   Discard runs of length 1.
  Xb    e#   Compute the sum of the remaining runs.
  -     e#   Subtract the sum from the input number (target).
}g      e# If this pushes a non-zero value, we've missed the target;
        e# repeat the loop.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.