首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >噩梦普兹朗翻译器

噩梦普兹朗翻译器
EN

Code Golf用户
提问于 2018-09-21 01:33:17
回答 3查看 378关注 0票数 10

背景

普兹朗是Brainfuck的派生,其中符号X基于上面的三个字符执行BF命令,其他任何操作都不起作用。

下面是Puzzlang的翻译表,其中X是文字X,.代表其他任何东西:

代码语言:javascript
运行
复制
 >      <      +      -      .      ,      [      ]

..X    X..    XXX    ...    .X.    X.X    XX.    .XX
 X      X      X      X      X      X      X      X

另外,在翻译步骤中,整个源代码都是水平的和垂直的。例如,下面的代码是一个无限循环:

代码语言:javascript
运行
复制
XX X

因为您可以像这样查看代码(点就是包装X的地方)

代码语言:javascript
运行
复制
... ..
.XX X.

与翻译表的匹配给出了三个X的+[]顺序。

梦魇普兹朗是普通普兹郎的一对邪恶双胞胎。在梦魇Puzzlang中,每个X根据其八个邻居转换成一个字节。任何非X字符都是空的。包装规则是一样的。

由于没有“正式”规范,让我们假设下面的模式(其中X表示要翻译的模式)

代码语言:javascript
运行
复制
abc
dXe
fgh

翻译成二进制格式的abcdefgh (X是1,非X是零).然后是下面的代码

代码语言:javascript
运行
复制
XX...
X..X.
X..XX
X..XX
X.XX.

4a b4 66 03 56 4b bf d2 6e fd c3 2c 70转换为十六进制,或将J´fVK¿ÒnýÃ,p翻译为字符串。请注意,生成的字符串很可能具有ASCII不可打印。

任务

将给定的噩梦Puzzlang代码转换为字符串。

输入输出

对于输入,可以采用字符的2D数组、字符串列表或行由换行符分隔的单个字符串。您可以假设输入为矩形形状,即行长相等。

对于输出,可以给出一个字符串、一个字符列表或一个字符代码列表。

测试用例

请注意,当用除大写X以外的任何其他点替换时,结果必须保持不变。

代码语言:javascript
运行
复制
X (1 row, 1 column)
String: ÿ
Charcode: [255]

X. (1 row, 2 columns)
String: B
Charcode: [66]

X
. (2 rows, 1 column)
String: 
Charcode: [24]

X.
.X
String: ¥¥
Charcode: [165, 165]

X.X
.X.
String: 1δ
Charcode: [49, 140, 165]

X.X
XX.
X.X
String: Ómεv«
Charcode: [211, 109, 206, 181, 118, 171]

X.XX.XXX..XXXX.
String: BkÖkÿÖkÿÿÖ
Charcode: [66, 107, 214, 107, 255, 214, 107, 255, 255, 214]

X.XX.XXX.XXXXX.
XX.X..XX....X..
String: c­R){Ö9Z”JµÆïÖç
Charcode: [99, 173, 82, 41, 123, 214, 8, 24, 57, 90, 148, 74, 181, 198, 239, 214, 231]

X
X
X
.
.
X
.
X
X
.
X
String: ÿÿøø
Charcode: [255, 255, 248, 24, 31, 248, 31]

XX
X.
XX
.X
.X
XX
..
XX
XX
..
.X
String: º]ç]ºâG¸Xøø
Charcode: [186, 93, 231, 93, 186, 226, 71, 184, 88, 31, 31, 248, 248, 7]

XX XXX XX  XX
X  X X X X X 
X  X X X X XX
X  X X X X X 
XX XXX XX  XX
             
XXX XXX X  XX
X   X X X  X 
X X X X X  XX
X X X X X  X 
XXX XXX XX X 
(11 rows, 13 columns, no extra padding, result has two newlines)
zôª}òªuJ½æbÂb‚cRBBBBJ½ÇCFCDcXH¸PH°H¸

æbÂBcRBBBJ½ÃFCFCbO¾UO¾UN”C
Charcode: [122, 244, 170, 125, 242, 170, 117, 74, 189, 230, 98, 194, 98, 130, 99, 82, 66, 66, 66, 66, 74, 189, 199, 67, 70, 67, 68, 99, 88, 144, 72, 184, 80, 72, 176, 72, 184, 26, 28, 16, 10, 29, 18, 2, 10, 29, 230, 98, 194, 66, 99, 82, 2, 66, 66, 66, 74, 189, 195, 70, 67, 70, 67, 98, 79, 190, 85, 79, 190, 85, 78, 148, 67]

规则

适用标准的密码-高尔夫规则。最短的提交(以字节为单位)获胜。

EN

回答 3

Code Golf用户

发布于 2021-01-27 10:41:38

Dyalog Unicode,57字节

代码语言:javascript
运行
复制
¯1~⍨,1↓∘⍉∘⌽⍣4⊢{2 2⌷⍵:2⊥(~¯9↑5↑1)/,⍵⋄¯1}⌺3 3⊢⍉∘(¯1∘↑⍪⊢⍪1∘↑)⍣2⊢'X'=⎕

在网上试试!

一个完整的程序,通过STDIN接收一个二进制矩阵,返回一个编码点数组。

解释

x¯1~⍨,1↓∘⍉∘⌽⍣4⊢{2 2⌷⍵:2⊥(~¯9↑5↑1)/,⍵⋄¯1}⌺3 3⊢⍉∘(¯1∘↑⍪⊢⍪1∘↑)⍣2⊢'X'=⎕

接收输入

'X's为1s的'X'=布尔矩阵

⍉∘(...)⍣2⊢执行了两次以下操作:

¯1∘↑⍪⊢⍪1∘↑衬垫每一行都有其两侧的环绕

⍉∘和转座子

然后,{...}⌺3 3⊢对每个3x3窗口执行以下操作:

如果中间元素为1,则2 2⌷⍵:

2⊥(~¯9↑5↑1)/,⍵将窗口的其余部分解码为二进制

否则,返回⋄¯1 1。

⍣4⊢执行以下4次操作:

1↓∘⍉∘⌽旋转90°,删除第一行(移除边框单元格)

,平坦成一个简单的数组

¯1~⍨删除所有1s

票数 3
EN

Code Golf用户

发布于 2018-09-21 11:26:14

JavaScript (ES6),159个字节

将输入作为一个二维字符数组。返回字符代码数组。

代码语言:javascript
运行
复制
f=M=>M.map((r,y)=>r.map((v,x)=>v>f&&o.push([...'22211000'].map((k,j)=>s|=(M[(y+h+~-k)%h][(x+w+~-'21020'[j%5])%w]>f)<<j,h=M.length,w=M[s=0].length)|s)),o=[])&&o

在网上试试!

评论

代码语言:javascript
运行
复制
f = M =>                        // f = main function taking the input matrix
                                //     it is named because we are later using '>f'
  M.map((r, y) =>               // for each row r[] at position y in M[]:
    r.map((v, x) =>             //   for each value v at position x in r[]:
      v > f &&                  //     ignore this cell if v is not equal to 'X'
      o.push(                   //     otherwise, push a new value in o[]:
        [...'22211000']         //       iterate over dy values (+1)
        .map((k, j) =>          //       for each value k at position j in this array:
          s |= (                //         update s:
            M[(y + h +          //           compute the row
              ~-k)              //           by adding dy = k - 1
              % h]              //           and applying a modulo h
            [(x + w +           //           compute the column
              ~-'21020'[j % 5]) //           by adding dx = [2,1,0,2,0,2,1,0][j] - 1
              % w]              //           and applying a modulo w
            > f                 //           test whether this cell is a 'X'
          ) << j,               //         and set the corresponding bit in s if it is
          h = M.length,         //         initialize h = matrix height
          w = M[s = 0].length   //         initialize w = matrix width and s = bitmask
        ) | s                   //       end of map() over dy; yield s
      )                         //     end of push()
    ),                          //   end of map over r[]
    o = []                      //   initialize o = output array
  ) && o                        // end of map over M[]; return o
票数 2
EN

Code Golf用户

发布于 2021-05-29 22:13:19

果冻,19 字节数

代码语言:javascript
运行
复制
=”Xµ-r1p`ẸƇ+ⱮŒṪœịµḄ

一种一元链接,它接受一行列表并生成代码点列表。

在网上试试!

怎么做?

代码语言:javascript
运行
复制
=”Xµ-r1p`ẸƇ+ⱮŒṪœịµḄ - Link: lines
 ”X                 - character = 'X'
=                   - equals? -> binary matrix from lines with X:1 and .:0
   µ             µ  - monadic chain - f(v=that):
    -               -   -1
      1             -   1
     r              -   inclusive range = [-1, 0, 1]
        `           -   use as both arguments of:
       p            -     Cartesian product
                               = [[-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1]]
          Ƈ         -   keep those for which:
         Ẹ          -     any? = [[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]]
             ŒṪ     -   multidimensional truthy indices (v)
            Ɱ       -   map across these with:
           +        -     add
               œị   -   index into (v)
                  Ḅ - convert from binary
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/172586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档