左手与右手-打字员挑战


32

您的任务是使键盘的每一侧相互靠拢,并以相同的语言构建两个程序,一个程序仅使用输出的标准键盘左侧的键,另一个程序使用输出Pollinium milk; plump pumpkin; lollipop?的右侧键盘的键。Weatherheaded sweetheart haberdasheress!

规则

左侧程序所允许的确切键为:

123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB

对于右侧程序:

7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?

有四个可用的键Esc\x1b),Tab\x09),Space\x20)和Enter\x0a和/或\x0d),它们都不能用于两种解决方案,也可以两种都不能使用。

您的分数将是两个程序的总字节数。虽然我使用了术语program,但是您的提交可以是完整程序,也可以是正常功能,并且两者可以是不同的类型(例如,一个完整程序和一个功能)。

您的结果必须包含所需的文本,只要在其中包含确切的文本,任何大小的前导和尾随空格都是可以的。

禁止出现标准漏洞

每种语言中最短的解决方案将获胜。


6
为什么H是左手?
tsh

1
@tsh我想将键盘分割为6/6(或尽可能接近),以尝试为每个“手”保留更多偶数个符号。
Dom Hastings'3

8
//也许我应该学习空白,然后再回去...
tsh

@tsh,我想空格的答案是不可避免的!不确定会有多强!也许我应该已经解决了,现在为时已晚!
Dom Hastings'3

程序是否还包含其他(非空白)输出,只要它包含请求的文本,是否还可以?
Grzegorz Oledzki

Answers:


12

Perl 5,261 = 88 + 173字节

这是一个“语言选项不计算”问题的示例。固定端解决方案使用-p,左侧不使用。那么它是否算作相同的语言呢?并且选项应该来自左/右字符集吗?

左88

使用-M5.10.0(或-E从命令行)激活say如果此选项应算作代码且应来自左侧,还是属于“设置语言版本的选项不计算在内”,则可以再次争论

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

在线尝试!

对173

使用-p选项运行(也包含正确的字符)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

几乎可以肯定可以改进这一点,但是就目前而言,它很难使某些事情起作用。由于没有获得printsay$_并且sub{}使输出棘手

在线尝试!


完全不关心标志,我很高兴这是有效的。比我eval通过via 打电话修改过的解决方案短得多的解决方案&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
Dom Hastings,

12

空格1175 1143 655 645 638 632 639 578(293 + 285)字节

它必须完成
。.p可以肯定地打高尔夫球,方法是倒过来填充堆栈并以某种循环将其打印在末尾,但这只是我的第二个Whitespace程序,所以我还没有弄清楚..编辑:打高尔夫球。

+7个字节,因为我拼写pumpkinpumkin..(感谢您注意,@ fəˈnɛtɪk。)

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

左侧Pollinium milk; plump pumpkin; lollipop?

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

在线尝试(仅使用空格,制表符和换行符)。

右侧Weatherheaded sweetheart haberdasheress!

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

在线尝试(仅使用空格,制表符和换行符)。


说明:

它首先建立反向的堆栈。按下数字的操作如下:

  • S 开始时:启用堆栈操作
  • S:将后面的数字推送到堆栈
  • S/ TS正号和T负号的符号位
  • 一些TS然后跟一个N:将数字作为二进制数放入堆栈(T=1S=0)。

然后它将遍历反转的堆栈,并将所有内容打印为字符。这样做如下:

  1. 按0(SSSN
  2. 按下所有数字以指示字符反转,如上所述
  3. 创建一个Label_0NSSN
    1. 复制栈顶(SNS
    2. 如果该值为0:跳至Label_1NTSTN
    3. 否则:弹出并将堆栈顶部打印为字符(TNSS
    4. 跳至Label_0NSNN
  4. 建立Label_1NSSTN

上面是这两个程序的默认布局。这是此默认布局的更改日志,它进一步降低了字节数:

  1. 将所有数字降低相同的数量(在第一个程序中,在第二个程序中),以减少用于现在较低数字的二进制数字,并在步骤3.2和3.3之间添加以下两个子步骤:100 110102 101

    • SSSTTSTTTSN程序1中的110()或SSSTTSSTSTN程序2中的101()
    • 弹出并相互添加堆栈的顶部两个值,结果是堆栈的新顶部(TSSS
  2. 我也用SNS在某些情况下,复制的堆栈,它用于高尔夫球的顶部lllleess

  3. 此外,步骤4(创建Label_1)已完全删除。它将退出并显示错误,但仍将正确输出所有内容(根据meta允许)。

  4. 可以n从堆栈的顶部复制第一个值(带有STS+ 0-indexed n),该值比在某些情况下创建一个新的数字要短。
    在第一个节目我做这个了:第二个ppopSTSSTN(复印件1日)是比较短的SSSTTSSN(对于“P”创建数)),第二个llolSTSSTN(复印件1日)是比较短的SSSTSSSN(对于“L”创建数)),第二个pp pSTSSTN(复制第一)比短SSSTTSSN(对于“p”创建数)),第二个ppumlpSTSSTTN(复制第三)比短SSSTTSSN(对于“p”创建数)),第二个ppmupSTSSTSN(复制2nd)短于SSSTTSSN(为“P”创建数)),第二个mm mSTSSTN(复制第一)比短SSSTSSTN(创建的“m”数)),第二个iiniSTSSTN(复制第一)比短SSSTSTN(创建的“i”号码) )。
    在第二个程序中,这没有完成。两者之间的距离很短,例如ereded,但是为'e'(SSTTN)或'd'(SSTTSN)创建数字既短又等于复制1st(STSSTN)的长度,所以我无法在第二个程序保存字节。注意:在执行第7步之后,不再适用所有这些方法。

  5. 在这两个程序中,我都将循环的步骤1从SSSN(推送0)更改为SSN(推送error_value),并删除了步骤3.1(SNS复制)和3.2(NTSTN如果为0:退出)。现在,它会SSN在尝试访问它时立即退出,并返回一个未知值的错误。

  6. SSN完全删除了两个程序中的(error_value)。现在,当尝试执行添加功能而堆栈上没有任何内容时,它将停止并显示错误“ Ca n't do Infix Plus ”。

  7. 改变的恒定值100102110101分别。这里的Java程序用来生成110常量;和这里的Java程序用来产生101恒定的。请注意,现在使用的“ 复制”比上面第4点所述的少,因为新值在许多情况下比复制的短,因此重新按下它们的时间更短。


ST的东西只是将数字推送为二进制,空格为0,制表符为1。输出是TNSS,因此在每个程序的开头都有两个空格。它还可能保存字节以进行重复,然后为每个字符加/减,并在末尾循环遍历值。
Jo King

1
你错了南瓜。
fəˈnɛtɪk

@ fəˈnɛtɪk Whoops哈哈..现在应该修复,谢谢。
凯文·克鲁伊森

4

语言,这么多字节

左侧是6572187829612379635046263950044922819764616462217621821926216406401901905433086292113001723514028584745069780412316875875546367839061178918881335260237367542082469550550889348968548980767650903186019674674878837738236593962133180804489988249734744重复的a程式码代表了

-[--->+<]>-----.[--->+<]>-.---..---.+++++.-----.++++++++++++.--------.[->+++++<]>-.+[----->+<]>.----.+++.-.--[->+++<]>.+[-->+<]>++.[-->+++++++<]>.----.+++++++++.--------.+++.[------->++<]>.[-->+++++++<]>.+++++.--------.+++.-----.--.+++++.[-->+<]>++++.+[-->+<]>++.++[--->++<]>.+++.---..---.+++++++.-.+.[--->++++<]>-.

在线尝试!

右手侧是的636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140个重复p字符,它是等效于以下Brainfuck程序:

+[--->++<]>+.++[->++++<]>+.----.--[--->+<]>-.------------.---.+++++++++++++.----------.---.----.+++.+.-.-[--->+<]>-.---[->++++<]>-.++++.[->+++<]>..[--->+<]>---.------------.---.----.--[--->+<]>---.++.[---->+<]>+++.-[--->++<]>--.-------.+.+++.+++++++++++++.--------------.---.--[--->+<]>--.-----------.---.+++++++++++++.-------------.[--->+<]>----..+[-->+++++<]>-.

在线尝试!


3

CJam,128 + 192 = 320字节

64G^c111c111Z^cT$111c6^111X^c1$116X^c111Y^c32c1$6$Y3#$111c4^56Z^c32c112c13$A$A$3$5$1$4$4$4$12$22$22$14$32c13$111c1$T$7$A$4$1$63c

在线尝试!

'U))'i(((('_))'u('i('i(((('p))'i('i(((('_))'_)))))'i(((('_)))))'&(((((('u(('u))'i(((('i(((('u('i('i(((('_))'p))'u('&(((((('i('_))'_)))'i(((('p))'_)))))'_))'u(('i('i(((('p))'i(((('u(('u(('&(((((

在线尝试!


3

裂变 958 + 752 = 1710字节

._。

剩下

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

在线尝试!

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

在线尝试!

好吧,我们这里很幸运,实际上._。
Fission的第一个很酷的功能是它有4个命令来创建命令指针,又称为AKA原子:RLDU,所以我有两个左右组的命令。
第二个幸运符是2个用于输出!和的命令O,它们出现在不同的组中。
第三次魅力。两种输出命令都输出相当于原子质量的ASCII码。因此,我需要对其进行一些更改。幸运的我!两者+ (+1 mass)_ (-1 mass)为一组,所有需要三个$ (+1 energy)~ (-1 energy)@ (swap mass and energy)在另一组。

也有镜子控制两组原子!但是我没有在第一个程序中使用它们

因此,没有什么可以阻止我,但是它不能紧凑,一步一步地设置质量。

第一个程序

第一个程序仅包含 Dz^@$~!V

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

开始可能更简单(仅R),但是使用除法会为首字母节省一些字节。
离开的Atom环绕并相遇V,这使他跌倒并无限期地环绕,什么也没做。
第二个原子变得僵直,@...@!每个字母输出都会遇到一堆重复的图案。

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

最终它将遇到V并分享第一个原子的命运。没有办法销毁它们或使键盘的左部停顿。

第二程序

其次是跌宕起伏。我有命令可以直接改变质量,但是输出命令O会破坏原子,因此我需要以某种方式保留它们。
程序从右开始L,原子从左开始。

重复图案:

} \
/O\...X'

'将下一个经过加密的char的ASCII码放入原子的质量中,因此X首先存储一些代码,然后质量按_和更改+为精确值。如果使用just 和较短,
有时会X'被跳过。_+

原子来自左侧,镜像两次,并}从左侧命中。在这种情况下,}就像克隆器一样,上下发送两个相同的原子。下原子被镜子反射并向左走。原子包裹起来,从下面撞到同一面镜子,因此反映了正确的,相遇的O和印刷的。
最后,最后一个原子遇到最后O一个被破坏的原子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.