O kaşını al ve arkanı dön


21

APL'nin birçok yüzünün kutlanması

Aşağıdaki tablonun 1. veya 2. sütundakiler arasında bir dize verildiğinde, dize komşusunu sağına döndürün. Başka bir deyişle, sütun 1'de bir dize verildiyse, o satırdaki sütun 2'nin dizesini döndürün ve sütun 2'de bir dize verilirse, o satırdaki sütun 3'ün dizesini döndürün.

Kod noktaları ( :lar dışında) en sağda listelenmiştir.

 sütun 1 sütun 2 sütun 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

Fıkra: Bu sembollerin çoğu, bazı APL lehçelerinde geçerlidir veya önerilmektedir (tümü linklerdir).

İstek başına, sadece semboller:

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

Yanıtlar:


8

JavaScript (ES6), 108 107 bayt

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

gösteri



5

C # (.NET Core) , 148 134 bayt

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

Çevrimiçi deneyin!

  • Biraz golf oynadıktan sonra 14 bayt kurtardı.

Sormak istedik, sadece bayt sayısından ihtiyacınız olan bariz iskeleyi (sınıf Programı, statik boşluk Main) atlamak geçerli midir? Genelde JVM dillerini kullanırım ve tabii ki sınıf / ana işlev bildirgesini atlar ve kodumun etini sayarsam çok iyi olurdu, ama böyle olup olmadığından emin değilim.
Matej

1
@Matej Standart kod golf kuralları bir fonksiyon / lambda veya tam bir programın gönderilmesine izin verir.
Adam Martin,


3

Jöle , 56 bayt

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

Tam bir program.

Çevrimiçi deneyin!

Not: ( ɱaɲ!) :Sıra dışı olmayanlar için bazı şablonlar olsa da (hemen hemen ardışık orta sütun, birçok sol ve haklar aynıdır - sadece birer birer ikier birer birer birer on) sadece böyle bir durum için yeterli görünmüyor. Herhangi bir bayttan tasarruf sağlamak için küçük bir veri kümesi.

İlk on üç bayt da olabilir “¡ÐɼU¹’ṃ“"%#‘.

Nasıl?

“¤'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

İşte orada ciddi bir Jelly. Ugh.
Adám

sopayla sıralı basds "... oraya sığacaksın gülümse !"
Jonathan Allan,

2

PHP , 147 bayt

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

Çevrimiçi deneyin!


Sadece +1 array_flip!
Adám

@ Adám array_flip, alternatif olarak bir veya iki bayt daha kısadır array_searchve bu durumda çok bayt, çok fazla bayt tutar. C # kadar uzun olmak hoş değil
Jörg Hülsermann

1
tırnakların sembol dizisinden çıkarılması da aynı değere sahip tanımsız bir sabit olarak kabul edilir
Einacio

1

05AB1E , 58 56 54 bayt

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

Çevrimiçi deneyin!

açıklama

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

Yukarıdaki yöntem, aralıktaki herhangi bir sayı ile çalışmalıdır [8676 ... 8728], bu nedenle 3 baytta üretilebilecek bir sayı bulabilirsem mevcut çözümün üzerine bir bayt kaydedebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.