Les joueurs du jeu de société traditionnel Go mesurent leurs compétences dans un système de classement :
- Les nouveaux joueurs sont classés au 30e kyū (écrit
30k
) et les progrès décomptés au 1er kyū (écrit1k
). Ceux-ci sont considérés comme les rangs des étudiants . - Un joueur peut passer du 1er kyū au 1er rang dan (écrit
1d
), puis progresser jusqu'à compter le 7e rang dan (écrit7d
). Ce sont les rangs maîtres . - Les joueurs ayant des qualifications exceptionnelles
7d
peuvent se qualifier pour le 1er rang dan professionnel1p
et les progrès comptant jusqu’au 9e rang dan professionnel (écrit9p
). C'est le plus haut rang.
En bref: les rangs sont ordonnés 30k < 29k < ··· < 1k < 1d < 2d < ··· < 7d < 1p < 2p < ··· < 9p
.
Tâche
Compte tenu de deux cordes entre { 30k
..., 1k
, 1d
, ..., 7d
, 1p
, ..., 9p
} comme entrée, sortie le plus élevé le rang des deux. (S'ils sont égaux, indiquez simplement l'une des entrées.)
(Comme d'habitude, les E / S sont flexibles - votre réponse peut être une fonction ou un programme complet, en lisant l'entrée de n'importe quelle manière raisonnable et en produisant une sortie de n'importe quelle manière raisonnable.)
C'est du code-golf : l'objectif est de minimiser le nombre d'octets de votre code.
Cas de test
(Format:. input1 input2 output
)
29k 9k 9k
21k 27k 21k
6d 1p 1p
5d 17k 5d
1k 1d 1d
1d 1d 1d
1d 2d 2d
9p 1d 9p
2d 30k 2d
1p 1k 1p
1d 1p 1p
1p 2d 1p
7p 8p 8p
30k 30k 30k
4 k
ou environ4K
, soit.)30k
,29k
,1k
,1d
et ainsi de suite, donc je ne permettrai pas que toute variation là.Réponses:
JavaScript (ES7), 58 octets
Prend les deux chaînes dans la syntaxe de currying
(a)(b)
.Essayez-le en ligne!
Comment?
La fonction d'assistance g () traduit la chaîne d'entrée s en partition.
1) Nous cherchons s [1] dans la chaîne "_dp" . Cela donne:
2) Nous cubons ce résultat, ce qui laisse 1 et -1 inchangés mais donne 8 pour un rang de dan professionnel .
3) On multiplie par la partie décimale du rang.
la source
a=>b=>(g=s=>parseInt(s)*~{d:~1,p:~8}[s[1]])(a)>g(b)?a:b
Gelée , 14 octets
Un lien monadique acceptant une liste de chaînes * (telle que décrite) qui donne le rang le plus élevé trouvé.
* Fonctionne également avec des nombres autres que deux.
Essayez-le en ligne! Ou voir une suite de tests .
Comment?
Trie par une fonction clé et retourne le plus à droite (c'est-à-dire un maximum).
Les lettres , et ont les ordinaux , et respectivement. Dans le fichier binaire les huit bits sont définis alors que les autres ne le sont pas. Ainsi, nous obtenons respectivement 107, 108 et 120, nous obtenons respectivement 107, 108 et 120. Ils sont donc dans l’ordre requis pour trier les classes qu’ils identifient.d p 107 100 112 107k ré p 107 100 112 107
Les rangs amateurs sont dans un ordre décroissant. Ainsi, pour compléter notre fonction de clé, nous pourrions concaténer notre identificateur de classe avec le numéro indiqué dans la chaîne, en inversant le fait que la chaîne se termine par (par exemple -> while -> ). Dans le code, cela nécessite de stocker l'identifiant de classe et d'exponentiantes moins un pour la multiplication - - qui est de octets.16k 16
'7k'
[107,-7]
7p
[120,7]
OṪ|©8-*×ṖV$®,µÞṪ
Pour améliorer cela, nous pouvons utiliser moins deux et multiplier les éléments ensemble, ce qui peut être obtenu avec une seule multiplication.
Tableau des actions de la fonction-clé ...
la source
2^8=256
, qui est ASCII, autant que je sache. Vous n'avez pas besoin de plus d'un octet pour contenir des caractères Unicode, alors?Gelée ,
11 à10 octetsInspiré pour revenir à la planche à dessin par Arnauld!
Un lien monadique acceptant une liste de chaînes * (telle que décrite) qui donne le rang le plus élevé trouvé.
Essayez-le en ligne! Ou voir une suite de tests .
Comment?
Trie par une fonction clé et retourne le plus à droite (c'est-à-dire un maximum).
La fonction key modifie d'abord tout k pour qu'il devienne un N en utilisant l'atome dyadique
y
, le traduise avec la liste à deux caractères⁾kN
(code de gelée pour['k','N']
), puis évalue la chaîne en tant que monade avec un argument de neuf (en utilisant le codev9
).En gelée:
N
est un atome monadique qui annule son entrée9 30N
n'utilise pas réellement le neuf et donne le nombre entier-30
d
est un atome dyadique qui donne le résultat d'un divmod en Python de deux valeurs - la paire des résultats de la division entière et du modulo9 7d
résultats dans jumelé à7[0,7]
p
est un atome dyadique qui produit un produit cartésien, qui inclut la télémétrie implicite 1 de ses entrées9 p3
donne le produit cartésien de[1,2,3]
et[1,2,3,4,5,6,7,8,9]
qui est[[1,1],[1,2],...,[1,9],[2,1],[2,2],...,[2,9],[3,1],[3,2],...,[3,9]]
Une fois que de telles évaluations ont été effectuées à l'aide des chaînes à comparer, nous devons pouvoir comparer les résultats. comme ints ne sont pas comparables aux listes, nous devons envelopper les valeurs négatives dans une liste, mais puisque l'ordre continuera de fonctionner une fois les
p
listes aplanies (par exemple[[1,1],[1,2],...]
->[1,1,1,2]
), nous pouvons utiliser l'atome monadique à un octetF
appliqué à toutes les évaluations.Un tableau des entrées de leur valeur-clé est le suivant:
Commentaire du code:
la source
MATL ,
30282523 octetsEssayez-le en ligne!
(-2 octets grâce à Luis Mendo)
(encore 3 octets remplaçant
v&X>
par>
, cette fois sur la base de la réponse de Luis Mendo)(-2 octets en utilisant la
&)
syntaxe)Explication:
Soustrayez 'k' du dernier caractère (donne n = -7, 0, 5 pour 'd', 'k', 'p' respectivement).
Calculez v = n ^ 2 + 6n-1 (donne 7, -1, 54 respectivement).
Multipliez cette valeur v par le nombre de rang actuel (ainsi, k niveaux donnent des produits négatifs, d niveaux vont de 7 à 49, p niveaux de 54 et plus).
Faites-le pour les deux chaînes d'entrée, comparez les produits
Obtenir la chaîne d'entrée correspondant au produit le plus important
Méthode alternative, plus simple:
23 octets
Essayez-le en ligne!
la source
Haskell ,
7371 octetsEssayez-le en ligne!
Comme d'habitude pour moi, juste une implémentation directe plutôt que quelque chose de particulièrement golf-y. La fonction "(#)" prend deux rangs en tant que chaînes et renvoie le plus grand. Fonctionne uniquement avec le format spécifié dans la question.
(J'ai aussi essayé une version en utilisant
comparing
etmaximumBy
mais cela a fini par prendre 3 octets de plus - bon sangbase
et vos noms de fonctions parfois lisibles par des humains!)(Suggestions appliquées par Amphibological et Lynn)
la source
True
à1<2
.(-x)
peut être0-x
.r(x,_)=x+7
!0-x
peut également être `-x`)Python 2 , 54 octets
Essayez-le en ligne!
Utiliser la méthode d'Arnauld . Le mappage
int(x,27)%9-3
ne dépend que de la dernière lettre dex
, car tous les chiffres sauf le dernier contribuent à un multiple de9
. Ça prend:C'est à peine assez de marge pour que le multiplicateur
1p
à battre7d
, le plus haut rang dan, lorsqu'il est interprété en base 26.J'ai trouvé cela en forçant brutalement des expressions de cette forme et de quelques autres.
Python 2 , 64 octets
Essayez-le en ligne!
la source
R , 73 octets
Essayez-le en ligne!
as.double
au lieu de,strtoi
car ce dernier ne gère pas les espaces / points et je ne pouvais pas penser à un autre caractère valide pour remplacerd
rank
au lieu deorder
, car ils sont égaux quand il n'y a que deux élémentsla source
L
à la place de.
mais ça ne marche pas non plus ... je vous ferai savoir si je peux trouver autre chose.Gelée , 13 octets
Ceci est assez différent de mon autre réponse de Jelly , alors je poste ceci séparément.
Prend l'entrée sous la forme d'une liste de deux (ou plus) chaînes.
Essayez-le en ligne!
Commenté
la source
Julia 0.7
10093 octetsCe n’est pas le moyen le plus efficace (réponse Julia 0.6 de contrast @ sundar ), mais c’est bien parce que cela est purement numérique. Utilise aussi le dispatch (malheureusement, une seule fois)
Un code très similaire fonctionne dans 0.6 Essayez-le en ligne
Comment:
L'astuce est tout dans la
!(z)
fonction.Il mappe la valeur UTF-8:
k
en un nombre négatif, donc il trie à l'enversd
en un nombre positifp
dans un plus grand nombre positifComme montré:
Résultats de test
la source
.~[a,b]
c'était possible! Au fait, je pense que vous pouvez remplacer collect (r) par[r...]
et sauvegarder quelques octets.Int[r...]
plutôtInt([r...])
économiser que quelques économies supplémentaires. Merciargmax
parindmax
) sur Julia 0.6. Vous pouvez inclure un Essayez-le en ligne! lien si vous souhaitez.Haskell , 64 octets
Essayez-le en ligne!
L'expression
gcd(fromEnum c)28-3
mappe le personnage à un multiplicateurL'idée était de prendre leurs valeurs de caractère
[107,100,112]
et de choisir28
d'avoir de plus en plus de points communs avec eux, ce qui était facile, mais le premier était primordial. Cette méthode enregistre 2 octets sur l' écriture explicite d'un mappage .L'intégré
reads
est utilisé pour séparer le nombre et le rang.(En réalité, la division directe de Sara J est un octet plus court, ce qui donne 63 octets .)
Le pas en avant prend un nombre d'octets gênant dans ma solution. J'ai essayé d'autres approches, comme parcourir les rangs par ordre décroissant et prendre la première
[a,b]
, mais elles ont été plus longues.la source
MATL ,
2827 octetsEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Gelée , 16 octets
Prend la saisie sous forme de liste de deux chaînes.
Essayez-le en ligne! (tous les cas de test)
Comment?
Qui donne:
Commenté
Autre formule
Pour 16 octets également, nous pouvons utiliser:
Essayez-le en ligne!
la source
JavaScript (ES6),
5554 octets-1 octet grâce à @Shaggy
Essayez-le en ligne!
Explication
la source
f("2d")("1d")
, mais la remplaced:1
par lad:2
fixe.Ruby ,
5246 octetsPort direct de la réponse de xnor.
Essayez-le en ligne!
EDIT: -6 octets en réalisant que j'aurais pu utiliser un Proc
la source
C # (compilateur Visual C #) ,
136135 octetsEssayez-le en ligne!
-1 octet grâce à TheLethalCoder
Expanation:
la source
a=>b=>
.PadLeft
requiertchar
et utiliser107
au lieu de'k'
ne fait aucune différence.Perl,
4638 octetsCourir en tant que
perl -pae '...'
. Prend les entrées de stdin, séparées par des espaces sur une ligne.Effectue quelques substitutions pour rendre la comparaison "plus facile". Les substitutions d'expressions rationnelles consistent essentiellement à remplacer
p
par un zéro final etk
par un signe négatif. Ainsi10k
devient-10
(donc l'ordre est inversé) et3p
devient30
(c'est donc au-p
dessus de tout le reste). Ensuite, il ne s'agit que d'une simple comparaison numérique.Merci à DomHastings pour la
$`
/$'
suggestion qui a supprimé 8 octets.la source
/ /
et en utilisant `` $ `` `et$'
: Essayez-le en ligne!R ,
6562 octetsEssayez-le en ligne!
Ceci est un peu plus court que les réponses précédentes et fait bon usage des fonctionnalités de statistiques de R :-)
-3 octets grâce à la suggestion de Robin Ryder d’utiliser à la
ordered
place defactor
Prise en compte de stdin (bien que le lien TIO se restructure légèrement pour faciliter les tests). Transmet les rangs d'entrée dans un ordre
factor
de tous les rangs, puis prend le maximum.La sortie ressemble à:
la source
factor
et complètement ratéordered
.Java 8,
128122121 octets-6 octets grâce à @SaraJ .
Essayez-le en ligne. (Voir le bas de la sortie dans les liens TIO pour voir les valeurs mappées.)
Explication:
la source
Haskell ,
757068 octetsEssayez-le en ligne!
-5 bytes
grâce à @Laikoni-2 bytes
grâce à @ ASCII uniquementla source
(read$init k)
peut êtreread(init k)
. Une fonction auxiliaire est plus courte que l’utilisationcase of
: essayez-la en ligne!Python 2 , 61 octets
Utilise l'algorithme d'Arnauld.
Essayez-le en ligne!
Réponse précédente, 73 octets
Essayez-le en ligne!
la source
Julia 0.6 ,
757165 octetsEssayez-le en ligne!
(-4 octets, l'analyse en 0.6 détecte automatiquement comme Int)
(-6 octets, utiliser en
(search("_dp",s[2])-1)^3)
fonction de la réponse JS d'Arnauld au lieu de((c=cmp(s[end],'k'))^2*6+4c-1)
)la source
Retina 0.8.2 , 29 octets
Essayez-le en ligne! Accepte un nombre quelconque de rangs et génère le plus élevé. Explication:
Triez les lignes ...
... en utilisant la clé spécifiée ...
... dans le sens inverse.
La clé est créée à partir de la ligne de saisie de la manière suivante: a) la lettre (professionnel) dan rank b) le rang unaire c) la lettre kyū (le cas échéant). Comme il s’agit d’un tri inverse, le rang de dan professionnel est trié
p
avant le rang de dand
et le rang de kyū qui commence par1
parce que la lettre kyū est laissée à la fin. Au sein des rangs, les rangs dan (professionnels) sont classés par ordre décroissant en raison de la longueur de la chaîne unaire. Cependant, la traînéek
pour les rangs kyū les amène à être triés par ordre croissant.Sélectionnez la première ligne, qui est maintenant le plus grand rang.
la source
J, 39 octets
Essayez-le en ligne!
explication
la source
Python , 59 octets
Une fonction non nommée acceptant un itérable de chaînes qui retourne un maximum par Go. Fonctionne beaucoup comme ma réponse Jelly (utilise simplement la chaîne entière évaluée comme un entier en base 26 pour économiser des octets).
Essayez-le en ligne!
la source
C (gcc) , 95 octets
Essayez-le en ligne!
la source
Perl 6 , 35 octets
Essayez-le en ligne!
Une approche assez différente de tous ces éléments de recherche et de cube. Essentiellement remplacement de chaîne:
...k -> -...
,p -> 0
,d
supprimé. Ainsi, les débutants obtiennent un score négatif, dans obtiennent leur rang et les pros obtiennent le rang * 10. L'utilisation de WhateverStar nous procure une fermeture etmax
une fonction de comparaison.la source
05AB1E , 12 octets
.V
(évalué en tant que code 05AB1E) est inspiré par l' approche similaire de @Arnauld dans sa réponse sur Jelly .Entrez une liste de deux (ou plus) des chaînes valides.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
k
"30k"
"1k"
-1
d
>= 0
"1d"
"7d"
1
p
°
"2k"
"2d"
"2k"
"2d"
°
"2"
p
°
100
"1p"
"9p"
Voir toutes les valeurs mappées ici.
la source
Scala ,
3076154 octetsUn grand merci à Kevin Crujissen et à ASCII uniquement pour leur travail sur cette réponse, qui nous a permis de gagner environ 250 milliards de dollars.
Certaines optimisations d’algorithmes pour la fonction de commande de la réponse 61b.
Cas de test ici: Essayez-le en ligne!
Vieux 61 octets de réponse
L'astuce consiste à calculer la distance entre
rank letter
eti
(code de caractère105
). Ensuite, nous utilisons cette distance comme un score ( dan = 5, kyu = 2, pro = 7) que nous multiplions par le nombre de rang. Ensuite, nous prenons le maximum sur le tableau d’entrée en utilisant la fonction de scoring.Essayez-le aussi en ligne!
la source
var f: Function1[String, Function1[String, String]]=
. 247 octets .PHP ,
10098 octets(-2 octets en changeant la déclaration de fonction)
Pour l'exécuter:
Exemple:
Ou essayez-le en ligne!
PHP (7.4), 74 octets
Essayez-le en ligne!
Comment?
Similaire à l'approche d' Arnauld , mais en PHP. J'utilise une fonction pour convertir chaque rang en valeur numérique et comparer et afficher celui avec la valeur la plus élevée.
La valeur de rang provient de la position du deuxième caractère de la chaîne d'entrée dans
!!dp
, réduite de un, puis alimentée à 3 et multipliée par la partie entière de la chaîne d'entrée.Ainsi , par exemple, la position du second caractère de ce
1p
qui estp
en!!dp
vaut 3, et réduit par une tension de 3 , il sera 8. Donc , une partie de nombre entier de tous les*p
rangs sera multiplié par 8. Ce moyen1p = 8
,2p = 16
, ...,9p = 72
.Pour tous les
*d
rangs, la partie entière sera multipliée par 1 (ou simplement aucune multiplication). Ce moyen1d = 1
, ...,7d = 7
.Et pour tous
*k
et tous les**k
rangs, la position du deuxième caractère dans!!dp
sera égale àfalse
ce qui est égal à 0 (non explicite), réduite de un et alimentée par 3, signifie que la partie entière sera multipliée par -1. Ce moyen30k = -30
, ...,1k = -1
.C'est ma première tentative de golf, je ne sais pas à quel point c'est mauvais!
la source
Excel VBA, 129 octets
Une fonction de fenêtre VBE Immediate anonyme qui prend les entrées dans la plage
A1:A2
et les envoie à la console.Explication
la source