Quindi sto scrivendo un semplice gioco Rock, Paper, Scissors in C (è per un compito a proposito, anche se la cosa principale è imparare le prese. Sospetto che sarà dovuto prima che ottenga una buona risposta). Ho impostato come Rock = 0, Paper = 1 e Scissors = 2. C'è un one-liner facile per determinare chi vince? Ho provato a giocarci su carta, ma non riuscivo a capire nessun motivo.One-liner per determinare chi vince in Rock, Paper, Scissors
risposta
winner = (3 + player1 - player2) % 3;
Questo darà 1 se il giocatore 1 vince, 2 se il giocatore 2 vince, 0 per un pareggio.
Spiegazione: nella sequenza Rock=0, Paper=1, Scissors=2
, ogni articolo sconfigge il precedente. Questo è vero anche se consideriamo la sequenza come involucro (ovvero, l'ultimo elemento precede il primo).
Per mettere questo in termini più matematici, per qualsiasi elemento X:
- X viene sconfitto da
(X+1) % 3
. - X sconfitte
(X+2) % 3
.
Da questo, si può dimostrare che (3+X-Y) % 3
è 1 se X sconfigge Y o Y 2 se sconfigge X.
Aggiunta 3 è necessaria per forzare il risultato di essere non negativo: Il modulo di un numero negativo sarà negativo o pari a zero in C99 e dipendente dall'implementazione in C89.
Questo è brillante, ma un one-liner ha bisogno di almeno 3 linee di documentazione. –
+1 Mettimi in una stanza con due scimmie e tre scrittori di tipo per tutta l'eternità e non lo faremmo mai !!! –
Penso che c abbia questo tipo di costrutto: '(3 + player1 - player2)% 3 == 1? winner = "player1": (3 + player1 - player2)% 3 == 2? winner = "player2": winner = "everyone"; ' – sixtyfootersdude
- 1. Tenere traccia delle vittorie Forbici di carta rock
- 2. Provare a randomizzare un gioco di roccia, carta, forbici in R
- 3. Qual è il modo corretto per confrontare una stringa con un valore enum?
- 4. Oneliner per stampare una stringa in esadecimale?
- 5. Java oneliner per la lista di pulizia
- 6. python function random cycle if statements
- 7. Aprire i file in modalità "rock & roll"
- 8. Evento "modifica" slider jQuery: come determinare chi ha chiamato?
- 9. Polymer Get Paper Input Value
- 10. Come posso determinare chi ha bloccato un file usando SVN?
- 11. CA1500 vs. SA1309 - Quale si vince?
- 12. Come posso garantire che l'utente inserisca una scelta valida?
- 13. C# è disponibile un oneliner foreach?
- 14. SQL-injection: questo (oneliner) è sicuro?
- 15. White paper tecnico: Come scrivere uno
- 16. Chi è responsabile per l'implementazione?
- 17. di Polymer Paper Elements & Material angolare
- 18. paper-finestra in polimero non chiude in iPhone
- 19. come trovare chi blocca chi in SQL Server 2005
- 20. Chi copia app.config in app.exe.config?
- 21. Perché il Korn oneliner del 1987 stampa unix?
- 22. tomcat 7.0.42 pooling, hibernate 4.2, mysql rock soluto soluzione autoreconnect
- 23. Chi ha acquistato l'autocompletamento per linqpad?
- 24. chi ha scritto test 250k per webkit?
- 25. Processo DeadLock Chi si blocca per primo?
- 26. Java: in attesa sul blocco sincronizzato, chi va per primo?
- 27. Chi chiama la metaclasse
- 28. Binding Paper-Tabs a Core-Pages con Polymer
- 29. Chi possiede i controlli?
- 30. Chi utilizza Boost ASIO?
Se questa domanda non riguarda la parte socket dell'assegnazione, potrebbe facilmente essere convertita in un '[code-golf]'. – Pops
6 minuti per una buona risposta, quando è dovuto il tuo incarico? –
Come nota, in genere assegnerei quei valori (rock, carta, forbici, dinamite) a stringhe o caratteri. In generale è una cattiva pratica renderli un numero perché logicamente non vorrai mai aggiungerli. Questo non è importante per i problemi di assegnazione, ma è bene prendere l'abitudine, quindi quando hai problemi più grandi non ti prendono a calci in culo. – sixtyfootersdude