Prenez ce froncement de sourcils et retournez-le

21

Une célébration des multiples visages de l'APL

Étant donné une chaîne parmi celles de la colonne 1 ou de la colonne 2 du tableau ci-dessous, renvoyez le voisin de la chaîne à sa droite. En d'autres termes, si une chaîne est donnée dans la colonne 1, retournez la chaîne de la colonne 2 sur cette ligne, et si une chaîne est donnée dans la colonne 2, retournez la chaîne de la colonne 3 sur cette ligne.

Les points de code (autres que ceux :) sont répertoriés à l'extrême droite.

 colonne 1 colonne 2 colonne 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

Anecdote: La plupart de ces symboles sont valides ou proposés dans certains dialectes APL (ce sont tous des liens).

Par demande, juste les symboles:

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

Réponses:

8

JavaScript (ES6), 108 107 octets

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

Démo

Arnauld
la source
8

Python 3 , 105 octets

lambda s:":⊢⍡⊣:▷⍢◁:⋆⍣⋆:∘⍤∘:○⍥○:≀⍨≀:∧⍩∨:".split(s)[1][:3-len(s)]

Essayez-le en ligne!

xnor
la source
5

C # (.NET Core) , 148 134 octets

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

Essayez-le en ligne!

  • 14 octets économisés après avoir joué un peu au golf.
Charlie
la source
Je voulais demander, est-il valable d'omettre l'échafaudage évident (programme de classe, vide principal principal) dont vous avez besoin du nombre d'octets? J'utilise généralement des langages JVM et bien sûr, ce serait cool si je pouvais simplement omettre la déclaration de classe / fonction principale et juste compter la viande de mon code, mais je ne suis pas sûr si c'est le cas.
Matej
1
Les règles de golf @Matej Standard Code permettent la soumission d'une fonction / lambda ou d'un programme complet.
Adam Martin
3

Python 3 , 140 137 116 octets

lambda n,x=":⊢⍡⊣:▷⍢◁:⋆⍣⋆:∘⍤∘:○⍥○:≀⍨≀:∧⍩∨:":x[x.find(n)+len(n):x.find(n)+3]

Essayez-le en ligne!

Barre
la source
Échec des entrées de la colonne 1
CalculatorFeline
Étrange. Cela n'a pas fonctionné quand je l'ai essayé plus tôt. Quoi qu'il en soit, continuez.
CalculatorFeline
Votre dernier personnage a perdu ses :yeux.
xnor
3

Gelée , 56 octets

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

Un programme complet.

Essayez-le en ligne!

Remarque: ( ɱaɲ!) Bien qu'il existe un modèle de non: ordinaux (colonne du milieu presque consécutive, beaucoup de gauche et de droits étant les mêmes - seulement deux hors d'un et un hors de dix), cela ne semble tout simplement pas assez pour un tel petit ensemble de données pour permettre à tout octet d'enregistrer.

Les treize premiers octets pourraient également l'être “¡ÐɼU¹’ṃ“"%#‘.

Comment?

“¤'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
Jonathan Allan
la source
C'est une gelée sérieuse juste là. Pouah.
Adám
frappe les ordinaux avec un maillet "... rentrez là vous sourit!"
Jonathan Allan
2

PHP , 147 octets

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

Essayez-le en ligne!

Jörg Hülsermann
la source
+1 juste pour array_flip!
Adám
@ Adám array_flipest un ou deux octets plus court comme alternative array_searchet le multi-octet dans ce cas coûte beaucoup d'octets. Ce n'est pas agréable d'être plus longtemps en C #
Jörg Hülsermann
1
la suppression des guillemets de la chaîne de symboles s'exécute également, elle est considérée comme une constante indéfinie avec la même valeur
Einacio
1

05AB1E , 58 56 54 octets

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

Essayez-le en ligne!

Explication

• î]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

La méthode ci-dessus devrait fonctionner avec n'importe quel nombre dans la plage [8676 ... 8728], donc si je peux trouver un nombre qui peut être généré en 3 octets, je pourrais enregistrer un octet sur la solution actuelle.

Emigna
la source