Ambil kerutan itu dan balikkan

21

Perayaan banyak wajah APL

Diberikan string di antara mereka di kolom 1 atau kolom 2 dari tabel di bawah ini, kembalikan tetangga string ke kanan. Dengan kata lain, jika diberi string di kolom 1 maka kembalikan string kolom 2 di baris itu, dan jika diberi string di kolom 2 maka kembalikan string kolom 3 di baris itu.

Codepoints (selain dari :) tercantum di paling kanan.

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

Anekdot: Sebagian besar simbol ini valid atau diusulkan dalam beberapa dialek APL (semuanya adalah tautan).

Per permintaan, hanya simbol:

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

Jawaban:

8

JavaScript (ES6), 108 107 byte

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

Demo

Arnauld
sumber
8

Python 3 , 105 byte

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

Cobalah online!

Tidak
sumber
5

C # (.NET Core) , 148 134 byte

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

Cobalah online!

  • 14 byte disimpan setelah bermain golf sedikit.
Charlie
sumber
Ingin bertanya, apakah valid hanya menghilangkan perancah yang jelas (Program kelas, static void Main) yang Anda butuhkan dari jumlah byte? Saya biasanya menggunakan bahasa JVM dan tentu saja akan lebih keren jika saya bisa menghilangkan deklarasi fungsi kelas / utama dan hanya menghitung daging kode saya, tapi saya tidak yakin apakah ini masalahnya.
Matej
1
@Matej Aturan standar kode golf memungkinkan pengiriman fungsi / lambda atau program lengkap.
Adam Martin
3

Python 3 , 140 137 116 byte

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

Cobalah online!

tongkat
sumber
Gagal untuk input kolom 1
CalculatorFeline
Aneh. Itu tidak berhasil ketika saya mencobanya sebelumnya. Bagaimanapun, lanjutkan.
CalculatorFeline
Karakter terakhir Anda kehilangan :matanya.
xnor
3

Jelly , 56 byte

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

Program lengkap.

Cobalah online!

Catatan: (ɱaɲ !) Walaupun ada beberapa pola pada non- :ordinals (kolom tengah hampir berurutan, banyak yang kiri dan haknya sama - hanya dua dengan satu dan satu dari sepuluh), sepertinya tidak cukup untuk set data kecil untuk memungkinkan byte mana pun menyimpan lebih dari ini.

Tiga belas byte pertama juga bisa “¡ÐɼU¹’ṃ“"%#‘ .

Bagaimana?

“¤'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
sumber
Itu beberapa Jelly serius di sana. Ugh.
Adám
bashes ordinals dengan palu "... pas di sana kamu tersenyum!"
Jonathan Allan
2

PHP , 147 byte

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

Cobalah online!

Jörg Hülsermann
sumber
+1 hanya untuk array_flip!
Adám
@ Adam array_flipadalah satu atau dua byte lebih pendek sebagai alternatif array_searchdan multibyte dalam hal ini membutuhkan banyak byte. Tidak menyenangkan untuk menjadi lebih lama karena C #
Jörg Hülsermann
1
menghapus tanda kutip dari simbol string berjalan juga, itu dianggap sebagai konstanta tidak terdefinisi dengan nilai yang sama
Einacio
1

05AB1E , 58 56 54 byte

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

Cobalah online!

Penjelasan

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

Metode di atas harus bekerja dengan angka apa pun dalam jangkauan [8676 ... 8728], jadi jika saya dapat menemukan nomor di sana yang dapat dihasilkan dalam 3 byte saya bisa menyimpan byte di atas solusi saat ini.

Emigna
sumber