Nimm das Stirnrunzeln und drehe es um

21

Eine Feier der vielen Gesichter von APL

Geben Sie bei einer Zeichenfolge in Spalte 1 oder Spalte 2 der folgenden Tabelle den Nachbarn der Zeichenfolge nach rechts zurück. Mit anderen Worten, wenn eine Zeichenfolge in Spalte 1 angegeben wird, wird die Zeichenfolge in Spalte 2 in dieser Zeile zurückgegeben, und wenn eine Zeichenfolge in Spalte 2 angegeben wird, wird die Zeichenfolge in Spalte 3 in dieser Zeile zurückgegeben.

Die Codepunkte (mit Ausnahme der :) sind ganz rechts aufgeführt.

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

Anekdote: Die meisten dieser Symbole sind in einigen APL-Dialekten gültig oder vorgeschlagen (sie sind alle Links).

Auf Wunsch nur die Symbole:

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

Antworten:

8

JavaScript (ES6), 108 107 Bytes

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

Demo

Arnauld
quelle
8

Python 3 , 105 Bytes

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

Probieren Sie es online!

xnor
quelle
5

C # (.NET Core) , 148 134 Bytes

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

Probieren Sie es online!

  • 14 Bytes nach ein wenig Golfspielen gespart.
Charlie
quelle
Wollten Sie fragen, ist es gültig, nur das offensichtliche Gerüst (Klasse Program, Static Void Main), das Sie benötigen, aus der Byteanzahl wegzulassen? Normalerweise verwende ich JVM-Sprachen und es wäre natürlich cool, wenn ich die Deklaration der Klasse / Hauptfunktion weglassen und nur das Fleisch meines Codes zählen könnte, aber ich bin mir nicht sicher, ob dies der Fall ist.
Matej
1
@Matej Standard Code Golf Regeln erlauben die Einreichung einer Funktion / Lambda oder eines vollständigen Programms.
Adam Martin
3

Python 3 , 140 137 116 Bytes

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

Probieren Sie es online!

Stange
quelle
Fehler bei Eingaben in Spalte 1
CalculatorFeline
Seltsam. Es hat nicht funktioniert, als ich es früher ausprobiert habe. Sowieso weitermachen.
CalculatorFeline
Dein letzter Charakter hat die :Augen verloren.
21.
3

Jelly , 56 Bytes

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

Ein volles Programm.

Probieren Sie es online!

Hinweis: ( ɱaɲ!) Während es ein Muster für die nicht: Ordinalzahlen weisen (mittlere Spalte fast fortlaufend, viele Links und Rechte sind gleich - nur zwei mal eins und eins mal zehn), doch scheint dies für eine solche nicht ausreichend zu sein kleine Datenmenge, damit jedes Byte darüber gespeichert werden kann.

Die ersten dreizehn Bytes könnten auch sein “¡ÐɼU¹’ṃ“"%#‘.

Wie?

“¤'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
quelle
Das ist etwas ernstes Gelee, genau dort. Pfui.
Adám
Schläge ordinals mit Holzhammer "... passen dort Sie lächelt!"
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];

Probieren Sie es online!

Jörg Hülsermann
quelle
+1 nur für array_flip!
Adám
@Adam array_flipist ein oder zwei Bytes kürzer als die Alternative array_searchund das Multibyte kostet in diesem Fall viel Bytes. Es ist nicht schön, länger zu sein als C #
Jörg Hülsermann
1
Das Entfernen der Anführungszeichen aus der Zeichenfolge wird ebenfalls als undefinierte Konstante mit demselben Wert betrachtet
Einacio
1

05AB1E , 58 56 54 Bytes

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

Probieren Sie es online!

Erläuterung

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

Die obige Methode sollte mit jeder Zahl im Bereich funktionieren. [8676 ... 8728]Wenn ich dort eine Zahl finde, die in 3 Bytes generiert werden kann, kann ich ein Byte über der aktuellen Lösung speichern.

Emigna
quelle