Per un determinato periodo, ottenendo il più piccolo elenco di date, usando i jolly


13

Considera una data formattata in YYYY-MM-DD. Puoi usare il jolly *alla fine della stringa della data. Ad esempio, 2016-07-2*descrive tutte le date da 2016-07-20a 2016-07-29.

Ora, considera un periodo rappresentato da una data di inizio e una data di fine.

L'algoritmo deve trovare il più piccolo elenco possibile di date che rappresentano il periodo.

Facciamo un esempio. Per il seguente periodo:

  • data d'inizio: 2014-11-29
  • data di fine: 2016-10-13

L'algoritmo deve restituire un array contenente il seguente elenco di date:

  • 2014-11-29
  • 2014-11-30
  • 2014-12-*
  • 2015-*
  • 2016-0*
  • 2016-10-0*
  • 2016-10-10
  • 2016-10-11
  • 2016-10-12
  • 2016-10-13

1
Gli obiettivi vincenti sono ambigui. Suggerisco di cambiarlo in codegolf (ovvero risolvere l'attività nel minor numero di byte possibile) e richiedere sempre risposte per produrre il più piccolo elenco di date.
Billywob,

Forse non è semplicemente il miglior sito per questo, è più una domanda (cioè "non riesco a trovare questo algoritmo in Ruby on Rails") che una sfida "per divertimento". Sono piuttosto nuovo qui ...
Raphael

Ti suggerisco di provare StackOverflow e poi di porre una domanda piuttosto che una sfida. Se riformulato, la sfida è ancora interessante secondo me e merita una possibilità (come il golf del codice).
Billywob,

6
Sì, penso che trovare l'algoritmo sia ancora divertente e stimolante, ma non ero interessato al lato del code-golf ... Beh, l'ho riformulato, ho cambiato i tag e ora chiederò stackoverflow mentre continuo a seguire questo post. Grazie!
Raffaello

1
Follow-up: ieri ho pubblicato su Stackoverflow, ma oggi avevo un codice funzionante in Ruby (non "jokerize" mesi, ma quasi lì): stackoverflow.com/questions/40506639/…
Raphael

Risposte:


1

PHP, 541 343 byte

Volevo far funzionare l'algoritmo in primo luogo; ma giocare a golf è stato in realtà molto più divertente di quanto mi aspettassi (specialmente sfogliando i formati di data e ora supportati ).

Tre azioni principali hanno salvato circa 130 byte; ma i 70 byte di golf minori
(che rendevano obsoleto anche uno dei grandi passi) portavano molto divertimento.

for($a=($f=strtotime)($argv[1]);!$p=$a>$z=$f($argv[2]);$a+=86400){$x=$z<$e=$f(Dec31,$a);(101<$q=date(md,$a))?$q-1001|$x?:$a=$e+$p="1*":($x?($t=$f(IX30,$a))>$z?:$a=$t+$p="0*":$a=$e+$p="*");$p?:($q%100>1|$z<($t=$f(date(Ymt,$a)))?$q%10>0&$q%100>1|$z<($t=min($t,$a+777600))?:$a=$t+$p="m-$q[2]*":$a=$t+$p="m-*");echo date("Y-".($p?:"m-d"),$a),"
";}

accetta input dagli argomenti della riga di comando. Esegui -nro testalo online .

Appunti

  • stampe Y-m-3*per Y-m-30; aggiungere 7 byte da correggere: inserire |$a==$tdopo 777600)).
  • genera avvisi in PHP 7.1; aggiungi 5 byte da correggere: sostituisci +$pcon +!$p.
  • Una ripartizione e alcuni campi da golf spiegati sono pronti per essere pubblicati;
    ma aspetterò un po 'per vedere se qualcun altro invia prima di rovinare.
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.