Toma ese ceño y dale la vuelta


21

Una celebración de las muchas caras de APL

Dada una cadena entre las de la columna 1 o la columna 2 de la tabla siguiente, devuelva el vecino de la cadena a su derecha. En otras palabras, si se le da una cadena en la columna 1, devuelva la cadena de la columna 2 en esa fila, y si se le da una cadena en la columna 2, devuelva la cadena de la columna 3 en esa fila.

Los puntos de código (que no sean :'s) se enumeran en el extremo derecho.

 columna 1 columna 2 columna 3
:⊢  →   →  ⊣:   U + 22a2 U + 2361 U + 22a3
:▷ →   →  ◁:   U + 25b7 U + 2362 U + 25c1
:⋆ →   →  ⋆:   U + 22c6 U + 2363 U + 22c6
:∘ →   →  ∘:   U + 2218 U + 2364 U + 2218
:○ →   →  ○:   U + 25cb U + 2365 U + 25cb
:≀ →   →  ≀:   U + 2240 U + 2368 U + 2240
:∧ →   →  ∨:   U + 2227 U + 2369 U + 2228

Anécdota: la mayoría de estos símbolos son válidos o propuestos en algún dialecto APL (todos son enlaces).

Por solicitud, solo los símbolos:

:⊢ ⍡ ⊣:
:▷ ⍢ ◁:
:⋆ ⍣ ⋆:
:∘ ⍤ ∘:
:○ ⍥ ○:
:≀ ⍨ ≀:
:∧ ⍩ ∨:

Respuestas:


8

Javascript (ES6), 108 107 bytes

s=>(S="⊢▷⋆∘○≀∧⍡⍢⍣⍤⍥⍨⍩⊣◁⋆∘○≀∨")[S.search(s[1]||s)+7]+(s[1]?'':':')

Manifestación



5

C # (.NET Core) , 148134 bytes

s=>{var c="⊢⍡⊣▷⍢◁⋆⍣⋆∘⍤∘○⍥○≀⍨≀∧⍩∨";return c[c.IndexOf(s[s.Length-1])+1]+(s.Length<2?":":"");}

Pruébalo en línea!

  • 14 bytes guardados después de jugar un poco al golf.

Quería preguntar, ¿es válido omitir el andamiaje obvio (Programa de clase, Main estático vacío) que necesita del conteo de bytes? Normalmente uso lenguajes JVM y, por supuesto, sería genial si pudiera omitir la declaración de función principal / clase y solo contar la carne de mi código, pero no estoy seguro de si este es el caso.
Matej

1
@Matej Las reglas de golf de código estándar permiten la presentación de una función / lambda o un programa completo.
Adam Martin


3

Jalea , 56 bytes

“¤'aẎṚl’b4ạ37ż“ɱaɲṢbḊİcİðdðṖeṖ@h@'i(‘ḅ⁹Ọɓi@€Ṁ‘ị;⁸LḂx@”:¤

Un programa completo

Pruébalo en línea!

Nota: (ɱaɲ !) Si bien hay un patrón en los no :ordinales (columna central casi consecutiva, muchos izquierdos y derechos son los mismos, solo dos por uno y uno por diez), simplemente no parece suficiente para tal pequeño conjunto de datos para permitir cualquier byte guardado sobre esto.

Los primeros trece bytes también podrían ser “¡ÐɼU¹’ṃ“"%#‘ .

¿Cómo?

“¤'aẎṚl’b4ạ37ż“ ... ‘ḅ⁹Ọɓi@€Ṁ‘ị;⁸LḂx@”:¤ - Main link: list of characters, frown
“¤'aẎṚl’                                 - base 250 number = 4064044420859
        b4                               - to base 4 = [3, 2, 3, 0, 2, 0, 3, 2, 3, 3, 2, 3, 0, 2, 0, 3, 2, 3, 3, 2, 3]
          ạ37                            - absolute diffence with 37 = [34, 35, 34, 37, 35, 37, 34, 35, 34, 34, 35, 34, 37, 35, 37, 34, 35, 34, 34, 35, 34]
              “ ... ‘                    - code page indexes = [162, 97, 163, 183, 98, 193, 198, 99, 198, 24, 100, 24, 203, 101, 203, 64, 104, 64, 39, 105, 40]
             ż                           - zip together = [[34, 162], [35, 97], [34, 163], [37, 183], [35, 98], [37, 193], [34, 198], [35, 99], [34, 198], [34, 24], [35, 100], [34, 24], [37, 203], [35, 101], [37, 203], [34, 64], [35, 104], [34, 64], [34, 39], [35, 105], [34, 40]]
                      ⁹                  - literal 256
                     ḅ                   - convert from base = [8866, 9057, 8867, 9655, 9058, 9665, 8902, 9059, 8902, 8728, 9060, 8728, 9675, 9061, 9675, 8768, 9064, 8768, 8743, 9065, 8744]
                       Ọ                 - convert to characters = "⊢⍡⊣▷⍢◁⋆⍣⋆∘⍤∘○⍥○≀⍨≀∧⍩∨"
                        ɓ                - dyadic chain separation, call that smiles
                         i@€             - first index of €ach frown character in smiles
                            Ṁ            - maximum (any ':' was not found so yielded 0)
                             ‘           - increment
                              ị          - index into smiles
                                       ¤ - nilad followed by link(s) as a nilad
                                ⁸        -   chain's left argument, frown
                                 L       -   length
                                  Ḃ      -   mod 2
                                     ”:  -   literal ':'
                                   x@    -   repeat with swapped @rguments
                               ;         - concatenate
                                         - implicit print

Esa es una gelatina seria allí mismo. Ugh
Adám

golpea ordinales con mazo "... encaja ahí sonríe!"
Jonathan Allan

2

PHP , 147 bytes

<?=($f=array_flip($y=str_split(⍣⋆⍤∘⍥○⍨≀∧⍩∨⊢⍡⊣▷⍢◁,3))[trim($argn,":")])>7?$y[$f+1].":"[$f%3>1]:$y[$f^1].":"[$f&1];

Pruébalo en línea!


+1 solo por array_flip!
Adám

@ Adám array_flipes uno o dos bytes más cortos como alternativa array_searchy el multibyte en este caso cuesta mucho bytes. No es agradable estar más tiempo como C #
Jörg Hülsermann

1
eliminando las comillas de la cadena de símbolos también se ejecuta, se considera una constante indefinida con el mismo valor
Einacio

1

05AB1E , 58 56 54 bytes

• î]D£Èтн»“¿āp÷ŒRÃÙŽ^мηWX·ć•3ô8728+çJ3ô':ý':.øI¡`3Ig-£

Pruébalo en línea!

Explicación

• î]D£Èтн»“¿āp÷ŒRÃÙŽ^мηWX·ć•  # push a 63-digit base-255 compressed number
3ô                            # split in pieces of 3
  8728+                       # add 8728 to each
       çJ                     # convert to a string with the corresponding code points
         3ô                   # split in pieces of 3
           ':ý                # merge on ":"
              ':.ø            # surround with ":"
                  I¡          # split on input
                    `         # push as separate to stack, the tail on top
                     3Ig-£    # take the first 3-len(input) characters

El método anterior debería funcionar con cualquier número en el rango [8676 ... 8728], por lo que si puedo encontrar un número allí que se pueda generar en 3 bytes, podría guardar un byte sobre la solución actual.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.