Analizza i riordini manipolati


13

Rod sta moderando un gioco di carte tra due giocatori: George e Tim. Attualmente, Tim sta mescolando le carte. Rod sospetta che Tim stia cercando di imbrogliare, quindi ha bisogno del tuo aiuto per verificare che lo shuffle sia corretto.

Tim sta facendo il riordino esagerato: taglia una pila di carte dal fondo del mazzo, quindi taglia varie parti dalla cima del mazzo alla cima del mazzo e ripete il processo alcune volte.

Rod ha gli occhi di un'aquila e può vedere esattamente quante carte Tim sta tagliando ogni volta, tuttavia non può calcolare e tenere traccia delle carte con la stessa velocità di Tim che mescola. È qui che entri: Rod vorrebbe che tu scrivessi un programma o una funzione che ottenga le informazioni di mescolamento dettagliate e determini se lo shuffle è giusto, debole o un trucco.

  • Se dopo il mescolamento, meno di 25 coppie di carte adiacenti rimangono adiacenti (nello stesso ordine), allora la mescolanza è corretta e il gioco può continuare.
  • Se almeno 25 (ma non tutte) coppie di carte adiacenti rimangono adiacenti, la mescolanza è debole e Rod agiterà Tim sulla testa e gli chiederà di mescolare ancora.
  • Se alla fine tutte le carte rimangono nella stessa posizione, allora Tim sta ovviamente barando e Rod lo colpisce con una grande trota.

Questo è il codice golf, quindi vince il codice più corto.

Ingresso:

Otterrai una serie di numeri tra 0 e 52 (entrambi esclusivi) separati da spazio, su più righe, in cui ogni riga rappresenta un round di mescolanza che inizia e termina con tutte le carte ammassate insieme.

Su ogni riga, il primo numero è il numero di carte che Tim taglia dalla parte inferiore del mazzo, e ogni numero successivo è un numero di carte che cade dalla sua mano nella parte superiore del mazzo. Se rimangono delle carte dopo l'ultimo numero su una linea, dovresti supporre che Tim le metta in cima al mazzo.

L'input è garantito per essere valido. C'è almeno una riga di numeri e ogni riga contiene almeno 2 numeri. Il primo numero su ogni riga non è inferiore alla somma di tutti gli altri numeri sulla stessa riga. Una nuova riga finale è facoltativa, si può presumere che l'input ne abbia uno o che non ne abbia uno.

Produzione:

Il tuo programma dovrebbe stampare / restituire "equo" se lo shuffle è giusto, "debole" se lo shuffle è debole e "ingannare" se Tim sta mantenendo tutte le carte nello stesso ordine. Una nuova riga finale è facoltativa.

Esempio:

Si presume che il mazzo abbia 52 carte, ma a scopo dimostrativo userò un mazzo più piccolo di 10 carte.

Ingresso:

5 3 1
4 2 2

Mazzo iniziale, visto dall'alto: 0 1 2 3 4 5 6 7 8 9
50 1 2 3 4( 5 6 7 8 9in mano)
35 6 7 0 1 2 3 4( 8 9in mano)
18 5 6 7 0 1 2 3 4( 9in mano)
fine della linea ➜ 9 8 5 6 7 0 1 2 3 4
49 8 5 6 7 0( 1 2 3 4in mano)
21 2 9 8 5 6 7 0( 3 4in mano)
23 4 1 2 9 8 5 6 7 0
4 coppie rimangono adiacenti:(3 4) (1 2) (5 6) (6 7)

Casi test:

43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5

Produzione: fair


43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5

Produzione: weak


29 24
19 18
38 2 1 8 13 6 4
47 15 16 5 2 1 7
34 22 9 3
44 9 10 11 3 1 7
33 18 4 2 3 3

Produzione: fair


24 6 12 4
25 3 19
36 4 25 2
19 11 1 3
15 9 3
37 5 27

Produzione: weak


26 13
26 13
26 13
26 13

Produzione: trick


50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Produzione: weak


50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Produzione: trick


50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
49 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Produzione: fair

Requisiti:

  • Se si scrive una funzione, può leggere l'input standard o ricevere l'input come parametro a stringa singola. Inoltre, la funzione può stampare l'output o restituirlo.
  • Il programma deve essere eseguibile su Linux utilizzando software disponibile gratuitamente.
  • Il codice sorgente deve usare solo caratteri ASCII.
  • Nessuna scappatoia standard.

2
Perché la restrizione a ASCII? Molte lingue (APL, codice macchina, TI-BASIC) non usano affatto ASCII, quindi le stai impedendo implicitamente.
Lirtosiast,

@ThomasKwa Perché non mi piacciono i problemi associati alla visualizzazione e al conteggio di caratteri non ASCII. Alcune di queste lingue hanno rappresentazioni o alternative ASCII. Penso che non sia una restrizione molto dura e livella leggermente il campo di gioco.
aditsu smesso perché SE è MALE

Penso che un sistema di punteggio come "Le voci che usano solo caratteri ASCII stampabili avranno il loro conteggio dei byte moltiplicato per log (95) / log (256)" sarebbe un'opzione migliore se si desidera incentivare in modo equo gli invii ASCII stampabili. Il ragionamento è che il contenuto informativo delle voci con lo stesso punteggio sarebbe uguale. Personalmente, preferirei comunque un semplice punteggio per byte.
Lirtosiast

@ThomasKwa Ok, che ne dici di questo? Solo caratteri Unicode stampabili, contando i byte nella codifica UTF-8
aditsu ha chiuso perché SE è MALE

Risposte:




2

JavaScript, 292 289 byte

Probabilmente questo potrebbe far fuoriuscire altri byte, ma per ora è un primo passaggio rapido:

d=[];for(i=0;i<52;i+=1)d[i]=i
s=prompt().split('\n')
s.forEach(function(e,i){s[i]=e.split(' ')
h=d.splice(-s[i][0],99)
for(j=1;j<s[i].length;j+=1)d.unshift.apply(d,h.splice(0,s[i][j]))
d.unshift.apply(d,h)})
for(c=0;i>1;i-=1)if(d[i-2]==d[i-1]-1)c+=1
alert(c<25?"fair":c<51?"weak":"trick")

EDIT: salvato 3 byte riutilizzando il valore idal loop di costruzione del mazzo quando si conta il numero di carte adiacenti.

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.