首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >想看魔术卡魔术吗?

想看魔术卡魔术吗?
EN

Code Golf用户
提问于 2018-02-20 21:22:05
回答 6查看 2.1K关注 0票数 17

我小时候学到的第一个魔术牌魔术是:

  • 有一副牌,其背面的图案不是垂直对称的。
  • 组织所有的卡片面对一个方向。
  • 问一个人,“选一张卡片,任何一张卡片,记住它并还给你”。
  • 继续把它放进甲板(方向不对)。
  • 使劲地洗牌,给人一种错觉,以为你不知道他们的牌在哪里。
  • 出其不意地出示他们的名片。

这个技巧显然是有点缺乏光泽的性质,现在-天,但它是一个很好的挑战。编写一个程序,在没有输入的情况下,用随机选择的一张卡片输出一副随机的牌牌。然而,当输入是一副牌,其中一张卡反转,你必须输出倒置卡(以正确的顺序)。

纸牌甲板

一副牌被定义为:

代码语言:javascript
复制
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
 2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]

卡片的定义是它的号码,然后是它的套装的第一个字母。卡的反面正好相反,它的第一个字母后面跟着一个数字。

支取卡

例如,如果我们随机选择的倒置卡是4 of Clubs (4C),那么我们最终会得到(很明显,没有洗牌):

代码语言:javascript
复制
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
 2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]

洗牌

然后,在洗牌之后:

代码语言:javascript
复制
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]

这是一个给定空输入的有效输出。

甲板输入

但是,相反,当我们的程序接收到上面的输出作为输入时,它应该输出4C。也就是说,对于以下方面的投入:

代码语言:javascript
复制
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]

你反复遍历,直到你找到倒转的卡片,并将它返回,倒转回到正常状态。在这里我们可以找到C4,知道C不是一个数字,并将它返回为4C,这是正确的。

规则

  • 不得从任何外部来源装载甲板。
  • 一个空的输入应该导致一个随机洗牌与一个随机卡倒置。
  • 一副以1张卡倒置为输入的扑克牌将产生倒置卡。
  • 任何其他的输入都可能导致爆炸性的羊驼通过未来派的管道骑马分段。
    • 或者其他的任何事情。

  • 所选的卡片和洗牌顺序都必须是一致随机的。
    • 也就是说,所有扑克牌都有同样的机会被选中以被逆转。
    • 也就是说,所有的卡片组合都有一个平等的机会出现。

  • 您可以使用SHCDshcd作为套装,但要保持一致:
    • 如果您选择大写套装(SHCD),则还必须使用TJQKA
    • 如果您选择小写套装(shcd),则还必须使用tjqka

  • 这是密码-高尔夫,胜利者是最低字节。
EN

回答 6

Code Golf用户

发布于 2018-02-21 09:18:41

05AB1E,29字节

代码语言:javascript
复制
Y9ŸJ.•§®т•«.•öB•âsKDgiëDΩÂ:.r

在网上试试!

票数 4
EN

Code Golf用户

发布于 2018-02-20 22:18:24

Python 2,175个字节

代码语言:javascript
复制
from random import*
s='SHCD';c='23456789TJQKA'
d=input()
if d:print[b+a for a,b in d if a in s];q
k=sample
r=k(c,1)+k(s,1)
print k([(a+b,b+a)[r==a+b]for a in c for b in s],52)

在网上试试!空输入表示为[]

票数 2
EN

Code Golf用户

发布于 2018-02-21 00:10:36

果冻,26 字节数

代码语言:javascript
复制
9ḊṾ€;“AJKQT”p“CDHS”ḟ⁸ẊU-¦Ẋ

一种接受字符列表的一元链接(0张卡片的存根或一张倒转的52张卡片的整张表),并返回字符列表列表(1张倒转卡的存根,或者一张随机卡倒转的整张牌)。

在网上试试! (使输入和输出表示匹配的页脚--作为一个完整的程序Jelly为输出将参数和字符组合在一起)

怎么做?

代码语言:javascript
复制
9ḊṾ€;“AJKQT”p“CDHS”ḟ⁸ẊU-¦Ẋ - Link: list of lists of characters, Z
9Ḋ                         - nine dequeued = [2,3,4,5,6,7,8,9]
  Ṿ€                       - unevaluate €ach = ['2','3','4','5','6','7','8','9']
     “AJKQT”               - literal list of characters = ['A','J','K','Q','T']
    ;                      - concatenate = ['2','3','4','5','6','7','8','9','A','J','K','Q','T']
             “CDHS”        - literal list of characters = ['C','D','H','S']
            p              - Cartesian product = [['2','C'],['2','D'],...,['T','S']]
                           -   a full deck of forward cards
                    ⁸      - chain's left argument, Z
                   ḟ       - filter discard
                           -   leaving either that deck or the 1 reversed card in the input
                     Ẋ     - shuffle
                        ¦  - sparse application...
                       -   - ...to index: -1 (which doesn't exist when the length is only 1)
                      U    - ...do: upend (reverses the penultimate card of the deck)
                         Ẋ - shuffle
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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