一quin


30

给定一个string xx根据源代码中出现的顺序输出字符。

例子

Source: ThisIs A Test
 Input: Is it a Test?
Output: TissI   etta?

Source: Harry - yer a wizard.
 Input: I'm a what?
Output: aa  wh'?Imt

Source: Mr. H. Potter, The Floor, Hut-on-the-Rock, The Sea
 Input: 
Output:

规则

  • 适用标准漏洞和I / O规则
  • 输入和输出可以是字符串,字符列表或字节列表。
  • 如果在源中多次使用字符,请使用第一个字符。
  • 如果源中未出现一个或多个字符,则应将其结尾。它们的顺序无关紧要,也不必保持一致。
  • 来源必须为非空
  • 换行符与其他字符一样。
  • 代码执行的顺序无关紧要;只是原始字符串。
  • 输入采用与代码相同的编码。
  • 输入按字符而不是字节排序。
  • 排序区分大小写
  • 这是,因此每种语言的最短答案以字节为单位!


2
@negativeseven需要考虑源代码中的任何字符,包括空格。
tjjfvi


3
您可能应该在规范中明确提及匹配是区分大小写的。
毛茸茸的

1
x如果我们的解决方案根本不使用Unicode编码,并且x解决方案的代码页中的Unicode字符表示字符,那么我们可以使用UTF-8或UTF-16进行编码吗?例如,某些高尔夫语言使用自定义代码页来减少其字节数,但仍可以用肉眼读取。
暴民埃里克

1
@tjjfvi我不是在这里谈论无操作(那肯定是无效的);至少使用以下几个答案,而不是使用纯字节(0x00-0xFF)来输入,而应将输入作为字节序列将代表的UTF-8字符串(例如,当我们发布答案时,我们通常会发布UTF -8版本,而不是hexdump),然后使用源代码的UTF-8表示对输入进行排序。可以吗?我觉得它也应该是一个选项(与普通字节流一起),因为否则将极大地限制具有自定义代码页的高尔夫语言解决方案。
的Outgolfer Erik

Answers:


13

蟒3.8(预发布)102 100 96 85 79个 76 68 61 59 60字节

c="print(sorted(x:=input(),key=('c=%r;'%c+x).find))";exec(c)

在线尝试!

-2通过使用字节

通过实现<0== ==-1并删除不必要的-4字节+1

尼尔感谢-11个字节

-6个字节,感谢dzaima

-3字节归功于rod

-8个字节,这要归功于负数7指出程序可以输出一个字符列表

由于无知的实施例切换回Python 3.8并使用了-7个字节 :=

-2个字节,这是由于Jo King将c的变量名s换掉了,所以我们可以省略 ;c

+1个字节,因为负数7表示该字节未;正确过滤


('s=%r;exec(s)'%s+x).find(x)
尼尔·

@Neil当前解决方案是否无效,('s=%r;exec(s)'%s).find(x)用您的代码替换将使其有效?
MilkyWay90

@Neil哦,等等,我看到你的高尔夫
MilkyWay90

您可以切换到input()和保存4个字节
罗德

4
;在当前版本中未正确排序
负数7

7

APL(Dyalog Unicode),14 字节SBCS

匿名默认前缀功能。

'''∘⍋⊃¨⊂'∘⍋⊃¨⊂

 附上论点(作为一个整体来执行)

⊃¨ 从中为以下每个索引选择一个字符:

∘⍋ 将按照以下字符串给定的顺序对参数进行排序的索引(所有非成员按出现的顺序排在最后):

'''∘⍋⊃¨⊂' 那些角色 '∘⍋⊃¨⊂

在线尝试!





3

红宝石,57个字节

->s{s.sort_by{|o|%{->s{.ort_by|%}index()9}.index(o)||99}}

在线尝试!

假设我没有错过任何高尔夫技巧,这很简单。接受一个字符列表,并按它们的索引对字符串进行排序,该字符串由代码中所有uniq字符组成,并按其出现顺序排列。通常他们的第一次出现是在那串字符串中,但这并不会改变顺序。


3

05AB1E24 22 21字节

Σ"Σ"'"«"'«Rrk}"«Rrk}R

在线尝试!

说明:

Σ                    }               # Sort
 "Σ"                                 # Σ string literal
    '"                               # " string literal
       «                             # Concatenate last two literals
        "'«Rrk}"                     # '«Rrk} another literal
                «                    # Concat again
                 R                   # Reverse literal (so: }krR'«'"Σ)
                  r                  # reverse stack 
                   k                 # find the current sorting index in our code string 
                     R               # reverse our sorted string

第一次尝试05AB1E中的内容,因此可能会节省很多


您确定这是正确的吗?现在排序的字符串是}krR«'«。注意:'是单个字符,因此就'"足够了(与C#不同,在C#中它需要附加的尾随')。当前,您的代码首先推送string Σ,然后是string ",然后是string «,然后是string '«Rrk},然后进行追加,反向,反向堆栈,索引。巧妙地使用字符串的反面和结尾!我将查看是否可以找到您的答案的解决方法,然后将其删除。
凯文·克鲁伊森

@kevincruijssen因此,我不能摆脱第二个问题吗?
过期数据

1
是的,您确实可以。:)然后正确排序}krR«'"Σ。PS:=有时我倾向于将(打印时不弹出)用于调试目的。您也可以添加--debug-stack作为参数,但是在新的05AB1E版本的imho中有点奇怪。
凯文·克鲁伊森

3

Jelly16个 14字节(Jelly Code页面),25个字节(UTF8)

“Ṿv`Ṿ;³³i@Þ”v`

在线尝试!

带有单个参数(要排序的字符串)的完整程序。

感谢@JonathanAllan指出错误!

根据@EriktheOutgolfer,尽管可以使用Jelly代码页输入代码,但是排序的字符是等效的UTF-8字符,而不是源字节。因此,我也将分数包含在UTF-8字节中。请注意,这可能适用于所有具有自定义代码页的语言。

说明

“Ṿv`Ṿ;³³i@Þ”   | The string "Ṿv`Ṿ;³³i@Þ", referred to below as S
            v` | Evaluate this string as Jelly code using the string itself as the argument

上面的字符串计算为:

Ṿ          | Uneval the string S (effectively wraps it in “”)
 v`        | Eval it (effectively removes the “”)
   Ṿ       | Uneval it again, adding back in the “”
    ;³     | Concatenate the input to this
      ³i@Þ | Sort the input with respect to the first occurence of each character in the “”-wrapped string S concatenated to the input

Ṿv` 在这里有效地禁止操作,但是可以确保所有字符都被表示出来。


所以...我发布了Jelly答案,然后单击了我:解释器在执行字节码之前将字节码转换为UTF-8,因此应增加字节数或更改代码以适合代码页。
暴民埃里克

@EriktheOutgolfer我不明白你在这里得到了什么。在这方面,这与任何其他代码高尔夫挑战有何不同?
尼克·肯尼迪

自引用方面是不同的,因此,实际上,代码对UTF-8字符进行排序,而不是对字节的排序。
暴民埃里克

3

果冻,14 字节

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ

接受(Python格式的)(Jelly 代码页字符)字符串的完整程序,该字符串将打印输出。
(作为单声道链接,它会产生一个字符列表列表)

在线尝试!

怎么样?

“;fɓḟṾⱮ”ṾɓfⱮ;ḟ - Main Link: list of characters, S
“;fɓḟṾⱮ”       - list of characters = [';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ']
        Ṿ      - un-evaluate = ['“', ';', 'f', 'ɓ', 'ḟ', 'Ṿ', 'Ɱ', '”']
         ɓ     - start a new dyadic chain, F(S, T=that):
           Ɱ   - for each character, t, in T:
          f    -   (S) filter keep any of (the single character, t)
             ḟ - (S) filter discard any of (the characters in T)
            ;  - concatenate

所以...我发布了Jelly答案,然后单击了我:解释器在执行字节码之前将字节码转换为UTF-8,因此应增加字节数或更改代码以适合代码页。
的Outgolfer Erik

@EriktheOutgolfer我认为这是安全的,因为此方法不进行任何排序,并且满足相同编码(Jelly代码页)标准的I / O。
乔纳森·艾伦

嗯......我觉得f工作的Unicode字符,因为那是什么样的一串字符实际上有内部。例如,如果”ĿO返回的结果319是经过测试的本地编码为JELLY,则返回,Ŀ而不是C7。
暴民埃里克

我也认为f致力于Unicode,但这是一个问题吗?我传入了出现在Jelly代码页上的受限Unicode字符集(即,使用该编码编码的字节,实现了“输入与代码使用相同的编码”);正确过滤它们(因为这些输入的字节被编码为Unicode),然后正确输出。然后,我计算的是代码的字节数(填写“输入是按字符而不是字节排序”和“每种语言的最短答案以字节为单位”)。
乔纳森·艾伦

1
@JonathanAllan我觉得“已经使用Jelly的代码页将其编码为某些字符”是我在上一条评论中所指的内容。由于代码的编码由0x00到0xFF的单个字节组成,因此参数的编码也应由该字节组成。相反,参数是从JELLY映射到UTF-8后传递的,因此其每个字符不一定是单个字符字节了。基本上,即使参数已从JELLY映射为参数,代码也位于JELLY而参数为UTF-8。返回正确的UTF-8输出后,它始终应该是JELLY。
暴民埃里克

2

木炭,37字节

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№ηFηΦθ⁼ικΦθ¬№ηι

在线尝试!说明:

≔´≔´´´η´F´Φ´θ´⁼´ι´κ´¬´№η

木炭中有两种引用字符的方式:´引用任何单个字符,而”y... 引用除以外的任何字符,也算作一个单独的字符串。事实证明,必须应付的开销意味着它不会使任何高尔夫球手失望。

FηΦθ⁼ικ

依次循环显示字符,从输入中输出任何匹配的字符。这对输入进行排序。

Φθ¬№ηι

在输入中输出所有不匹配的字符。


2

J,14个字节

匿名默认前缀功能。

]/:']/:''i'i:]

在线尝试!

] 论点

…中i: 的每个字符的最后一次出现(非成员获得索引超出查找字符串的末尾):

']/:''i' 那些角色 ]/:'i

/: 用它来排序:

] 论点


四个前导空格是回声还是代码的结果?
tjjfvi

1
@tjjfvi这是配置TIO的方式。立即修复。
亚当

2

Java 10,129100字节

s->{s.sort(java.util.Comparator.comparing(c->("s->{.ort(javuilCmpcng\"\\+)dexOf;}"+c).indexOf(c)));}

通过+c@EmbodimentOfIgnorance的C#答案移植来-29字节。

在线尝试。

说明:

s->{                 // Method with char-List parameter and no return-type
  s.sort(java.util.Comparator.comparing(c->
    ("s->{.ort(javuilCmpcng\"\\+)dexOf;}"
                     //  Push a String containing the characters in the code
     +c)             //  Append the current character
        .indexOf(c)  //  And get the first index of the current character in the String

注意:通常,使用s.sort((a,b)->Long.compare(a,b))代替会便宜一些s.sort(java.util.Comparator.comparing(c->c),但是在这种情况下,它会长11个字节:

s->{var v="s->{var =\"\\;.ot(,)Lngcmpe+idxOf}";s.sort((a,r)->Long.compare((v+a).indexOf(a),(v+r).indexOf(r)));}

在线尝试。


2

05AB1E31 26 19 字节

Σ'"'ÿs"Σ'ÿÿsìyk"ìyk

通过在@EmbodimentOfIgnorance的C#答案中(在索引之前附加当前字符)的灵感得到-7个字节。

在线尝试使用它,或者尝试使用添加的调试行来查看被索引到的字符串

说明:

Σ                 # Sort the (implicit) input-string by:
 '"              '#  Push string '"'
   'ÿ            '#  Push string "ÿ"
     s            #  Swap the order of these two strings on the stack
      "Σ'ÿÿsìyk"  #  Push string "Σ'ÿÿsìyk", where the `ÿ` are automatically filled with
                  #  the previous strings we created: `Σ'"ÿsìyk`
                  #  (top to bottom from stack; left to right in string)
       ì          #  Prepend this string in front of the character we're sorting
        yk        #  And then get the index of the character we're sorting in this string
                  # (after the sorting the resulting string is output implicitly)

解释中似乎有错字(“ y”而不是“ s”)
ArBo

@ArBo固定,谢谢
Kevin Cruijssen

1
严格来说,我在12个小时前就得到了灵感,当时我打了11个字节的@ MilkyWay90的答案……
尼尔·

很好!我看到了,但看不到在保存字节的同时将我的东西变成这种方法
过期的数据

2

PowerShell,68个字节

$p=$args
&($t={$p|sort-object{"`$p=`$args
&(`$t={$t})$_"|% i*f $_}})

在线尝试!


2
1)sort相反sort-object也可以。2)$b定义超出代码范围的变量。这Standard loopholes需要一个完整的答案。对于Powershell而言,这意味着:任何人都可以将代码作为Powershell脚本写入文件,然后在终端中运行它。您的代码不适用于脚本文件。抱歉。
mazzy

1
@mazzy,非常感谢。1)sort别名在Ubuntu 18.04上的pwsh中不起作用2)是的,这是我的错,但是我纠正了自己,因此,代码当然变得更长了:)
Andrei Odegov

(oO)!我为Powershell创建了排序别名code became longer-这是挑战:)
疯狂

1
是的,你是对的。$p源代码的每个单独字符都附加到字符串的末尾,并获得等于的索引$src.Length,但是由于“它们的顺序无关紧要,而且不应保持一致”,因此无关紧要。在此答案中,整个输入字符串将与源代码一起附加到字符串的末尾。
Andrei Odegov

1
@dfeuer,我不明白您的问题。抱歉。
疯狂


2

Japt,18个字节

ñÈi"ñÈi\"\\ bX" bX

试试吧

ñÈi"ñÈi\"\\ bX" bX     :Implicit input of string or character array
ñ                      :Sort by
 È                     :Passing each X through the following function
  i                    :  Prepend X with
   "ñÈi\"\\ bX"        :    Literal string (The \s are annoying me!)
                bX     :  First index of X

1

果冻,26个字节(UTF-8 *)

“®³nÞṾ©V”Ṿ©VV

在线尝试!

在第一个命令行参数中将输入作为Python格式的字符串。

独特字符

“®³nÞṾ©V”

*注意:我发现用JELLY编码时此方法不起作用,因为它对UTF-8字符而不是其自己的字节进行排序。

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.