Gelée , 37 à 34 octets
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Essayez-le en ligne!
Prend en minuscule.
-2 grâce à Jonathan Allan .
-1 puisqu'il s'avère que cette fonction est valide :)
Grâce à Jonathan Allan (et Dennis), vous pouvez maintenant supprimer le fichier €
. Malheureusement, ce ne serait pas en concurrence ici.
Explication détaillée de l'algorithme :
Nous commençons habituellement à expliquer en partant du bas (lien principal) en descendant, mais j'estime qu'il est plus approprié d'expliquer en partant du haut.
Premièrement, nous chargeons simplement la liste [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Cela ressemble à des nombres aléatoires hein? Eh bien, il s’agit en fait d’une liste de nombres compressés en base 5; nous le décompressons donc en base 5. Maintenant ça ressemble [[1], [1, 1, 2], [1, 2], [2, 1, 2], [2], [2, 3, 2], [3, 2], [3, 3, 2], [3], [3, 3, 4], [3, 4], [4, 3, 4], [4], [4, 1, 4], [1, 4], [1, 1, 4]]
. Toujours des éléments aléatoires, mais il s'agit en fait d'une NESW
liste cartographiée des seize coordonnées, de sorte que nous ne sommes pas loin de la compléter (Jelly est indexée 1). Nous obtenons le mappage final [['N'], ['N', 'N', 'E'], ['N', 'E'], ['E', 'N', 'E'], ['E'], ['E', 'S', 'E'], ['S', 'E'], ['S', 'S', 'E'], ['S'], ['S', 'S', 'W'], ['S', 'W'], ['W', 'S', 'W'], ['W'], ['W', 'N', 'W'], ['N', 'W'], ['N', 'N', 'W']]
, qui correspond à la liste complète que nous souhaitons (les chaînes Jelly sont sous la forme [char1, char2, char3, ...]
.)
Depuis que nous avons construit la liste de coordonnées, nous travaillons avec elle. Le lien principal entre en jeu. Tout d'abord, nous chargeons la liste que nous avons construite, puis prenons l'index dans lequel se trouve la coordonnée d'entrée (en tant qu'argument de ligne de commande). Ensuite, nous lions son prédécesseur et son successeur dans une liste, et nous les utilisons en tant que modulaires. index dans la même liste de coordonnées pour prendre les coordonnées à gauche et à droite de l’entrée, respectivement. Vous penseriez maintenant que nous avons enfin terminé, mais il y a en fait une dernière chose, le séparateur. Ceci est valable en tant que fonction, puisque 1) vous pouvez l'appeler en utilisant <integer>Ŀ
2) Vous pouvez également définir d'autres fonctions (comme l'importation de modules). Maintenant, nous avons fini. En tant que programme complet, il n'y a pas de séparateur, mais ce n'est pas grave, car cela fonctionne comme une fonction.
Explication du code lien par lien :
¢iµ’,‘ị¢K Main link. Arguments: z = cmd0
¢ Run the helper link niladically (i.e. load the coordinate list).
i Find the index of z in the list.
µ Start a new monadic chain. Arguments: z = list_index.
’ Decrement z.
‘ Increment z.
, Pair x and y into [x, y].
¢ Run the helper link niladically.
ị Take the elements of y at the indices in x.
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦» Helper link. Arguments: [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
“¢ ¬9£Hæz¥{çb¤S®!‘ Generate the integer list (the argument).
“¡&¦» Literal "newsy".
ṃ€ Base-length(y)-decompress every integer in x, then index into y.
Mathematica,
118112 octetsMerci à Martin Ender d'avoir économisé 6 octets!
Fonction sans nom (une association, en réalité) qui prend une chaîne en tant qu'entrée et renvoie une paire ordonnée de chaînes. En gros, il suffit de coder en dur la réponse.
la source
Python 2,
116115103 bytes-12 bytes thanks to Neil
Try it Online!
la source
d[n-15]
to avoid the condition.JavaScript ES6,
106102 bytesTry it online!
la source
let
instead ofconst
.05AB1E,
4443 bytes (Thanks to Adnan)Try it online!
Exmaple output:
Version that pushes
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
instead:Is also 44-bytes, there was 0 reason for my refactor and there is 0 reason for splitting on the 4's.
la source
4
s?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
turns out that, no, there is no reason at all. Using 0 as the delimiter is the same compression ratio, as it doesn't drop the length of the number in the base-5 conversion to base-214. Coulda sworn doing it like that saved me a byte though.„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
to save 4 bytes.Javascript -
234154156152120106102 bytesOnly my second time doing code golf!!
Latest Revision:
Thank you to @fəˈnɛtɪk for this neat variable trick!
Before That: Okay so latest revision: Input is a string and output is a string which is in the rules, so I made it into a function, and with reductions I have gone even smaller (also function is anonymous, which now means mine has somehow meshed into the other js answer oops! He (powelles) had it first!!):
Can be used by:
Remade (not function) with Output - 120:
Note that I made an error originally, having it equal a.length instead of a.length-1 for the first index. Thanks @Neil for pointing out that it didn't work for NNW.
Note 2: Thank you to @Neil and @ETHProductions for helping me shorten the code!
Originial:
la source
NNW
.,
,i=a.indexOf(p),[a[i-1&15],a[i+1&15]])Batch, 196 bytes
Loops through each pair of compass points, printing one when the other matches. For example, for a parameter of
ENE
, when the loop reachesENE
, the variables
containsNE
which is printed, then when the loop advances toE
, the variables
containsENE
and soE
is printed. One pair then needs to be special-cased to avoid the compass points from being printed in the wrong order.la source
Jelly,
4038 bytesTry it online! (added the footer to show the output is a list of two items) ...or see all cases.
(I'm not quite sure why
1323DRẋ4
in place of“¢)`)’ḃ3R
doesn't work at the moment.)How?
la source
Haskell,
10099 bytesTry it online! Calling
(s#) "N"
returns("NNW","NNE")
.s
is an infinite repetition of the list of directions, thus we don't have to add an extraN
andNNE
like some of the other answers to correctly handle the edges of the list.Thanks to @nimi for saving one byte!
la source
(a:b:c:r)!x| ... =r!x;(s!)
.SOGL, 33 bytes
The first part
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
is a compressed string that iscompressed with a custom dictionary with
ENSW
The rest of the program:
la source
bytes
in the title has a link to the codepagePHP, 122 bytes
la source
$argv[1]
with$argn
and using the -R option. if you use deprecated functions if could be ending inereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Ruby - 94 Bytes
A riff on Blue Okiris's answer, just to take advantage of some nice Ruby shorthand (the
%w[]
syntax andp
specifically):la source
Japt,
6652 bytesSaved 14 bytes thanks to @ETHproductions
Try it online!
Explanation:
la source
'
inq'o
and it will work exactly the same :-)[J1]£VgX+VaU
to save a few bytesCJam, 41
Try it online
la source
PHP, 115 Bytes
-2 Bytes using the deprecated function
split
instead ofexplode
PHP, 128 Bytes
PHP, 134 Bytes
la source
PHP,
110109 bytesSaved 1 byte thanks to Jörg Hülsermann.
la source
preg_replace
withpreg_filter
to save 1 bytePython 3 -
112107 bytesI based this off of my Javascript answer:
Remade:
Use as say
Original:
la source
MATL, 43 bytes
Try it online!
Explanation
la source
c,
222216211 bytesTry it online
la source
Javascript (ES6), 189 bytes
Just takes the input, looks it up, and returns it.
la source
JavaScript (ES6), 94 bytes
Expects a string in uppercase such as
"ENE"
. Returns a comma separated string such as"NE,E"
.How it works
The expression
0+s+0
is coerced to a string whensplit()
is called. For instance, if the input is"ENE"
, the string will be split on"0ENE0"
:This leads to the following array:
Again, this array is coerced to a string when
exec()
is called. So, the regular expression is actually applied on:We look for consecutive non-numeric characters (
\D+
) followed by a comma, followed by consecutive non-numeric characters. This returns the array[ "NE,E" ]
. We could arguably stop there and return just that. But the challenge is asking for either a delimited string or a two-element array. So, we extract the string with[0]
.Demo
Show code snippet
la source
Pyth, 39 bytes:
where
❤
represents unprintable letters.Try it online!
Hexdump:
la source