单数:字母


11

目的

编写一个程序或函数(或等效函数),以进行排序并返回随机大小矩阵中的奇数字母。

细节

您将通过矩阵(作为字符串)作为诸如此类的随机尺寸的输入。

bbbbbbbbbb
bbbbbdbbbb
bbbbbbbbbb
bbbbbbbbbb
bbbbbbbbbb

您的工作是找到与其余字母不匹配的字母(在本例中为d,在第2行第6行找到),并返回该字母作为输出。矩阵将由字母A-Za-z换行符(\n,仅在行的末尾)组成,尺寸范围为5x5至10x10(25-100个字母)。

有标准漏洞。这是一场代码挑战赛。最小字节码的条目获胜。

输入值

如果是程序,则输入将通过标准输入作为字符串传递;如果是函数(或类似功能),则作为参数传递。

输出量

甲单个字符是“奇数”在基质中 NonenilNUL,或该字符串"None"如果没有“奇数”字。

更多例子

AAAAAAA
AAAAAAA
AAAAAAA
AAAIAAA
AAAAAAA

回答: I

vvqvvvvvvv
vvvvvvvvvv
vvvvvvvvvv
vvvvvvvvvv
vvvvvvvvvv

回答: q

puuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu
uuuuuuuuu

回答: p

发电机

这是用Python编写的随机矩阵生成器,可用于测试程序。注意:极有可能会出错,并且不要用奇数字母表示。


1
是您的Python代码到JS的字面翻译。
Arnauld

1
@juniorRubyist“删除奖金”与“强制奖金”不同。通过将到目前为止是可选的部分移到挑战的要求中,您已使大部分现有答案无效。
Martin Ender's

Answers:



6

J12 10 7字节

-.}./.~

在线尝试!

    /.~        Group identical items together
  }.           Remove one item from each group
-.             Remove the rest from the input

10字节版本

-._1 1{\:~

嘶嘶声...

       \:~        Sort down
  _1 1{           Take the last character (which is a newline) and the second one.
-.                Remove those from the input

2
@ FrownyFrog这是找到奇怪角色的聪明方法
Galen Ivanov

无法决定我更喜欢什么:这个可爱的钩子或你的恶作剧...
乔纳

4

Brachylog8个 4字节

oḅ∋≠

在线尝试!

说明

我以前没有使用Brachylog,所以这可能不是最佳选择。

oḅ∋≠  Input is a string.
o     Sort the input.
 ḅ    Split it into blocks of equal elements.
  ∋   There is a block
   ≠  whose elements are all different.
      That block is the output.

使用∋≠after 获得长度1的结果非常聪明。您绝对应该将其发布在Brachylog提示问题中
致命

@Fatalize谢谢,我添加了小费。
Zgarb

3

K(oK)7 6字节

*<#:'=

在线尝试!

例:

*<#:'="vvqvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv"
"q"

说明:

发现了一个略短的方法:从右到左评估:

*<#:'= / the solution
     = / group matching items together
  #:'  / count (#:) each (')
 <     / sort ascending
*      / take the first one

笔记:

虽然我期望此挑战的奖金方面会有所下降,但\n如果没有奇数字符,此解决方案将返回换行符:

*<#:'="vvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv"
"\n"

3

Prolog(SWI),46字节

p(L):-select(X,L,Y),\+member(X,Y),writef([X]).

在线尝试!

或者,如果序言查询的标准真实输出不正确,则:

Prolog(SWI),48字节

Z*L:-select(X,L,Y),\+member(X,Y),char_code(Z,X).

在线尝试!

说明

Find the first element X in the input  
that when removed, results in output  
that does not contain X

then depending on the version above either:  
print X as a character  
or  
return X as an atom

3

C(gcc)93 92 90 66 62字节

功能短得多

t;f(char*p){for(t=*p;*p;)t^*p++?putchar(*p^*--p?*p:t),*p=0:0;}

在线尝试!

测试代码

main()
{
    char s[99];
    for(;gets(s);)f(s);
}

旧版本是一个程序

C 86字节

char*p;s[9];main(t){for(;p=gets(s);)for(t=*p;*p;)t^*p++?putchar(*p^*--p?*p:t),*p=0:0;}

输出奇数字符,或不输出任何字符。这样跑

C:\eng\golf>python matrix_gen.py | a.exe
X
C:\eng\golf>python matrix_gen.py | a.exe
G
C:\eng\golf>python matrix_gen.py | a.exe
x
C:\eng\golf>python matrix_gen.py | a.exe

C:\eng\golf>python matrix_gen.py | a.exe
J

我不知道将它放入gets()测试驱动程序是很公平的,因为它通过为您删除\ n字符来清理输入。这样做是为了使您的功能无法在原始输入上使用。
Michael Dorgan's

@MichaelDorgan它可以处理来自python脚本的管道输入以及TIO上的输入。其他人只是简单地对输入进行了硬编码,这似乎不符合挑战精神。
cleblanc '17

3

05AB1E 4  2字节

感谢Adnan,节省了2个字节

.m

在线尝试!

说明

.m   # push a list of the least frequent character(s) in input

您是否需要删除换行符,以确保我们保证输入的长度至少为5行?
毛茸茸的

@Shaggy:不,我不知道。那是处理2x2矩阵。我错过了有关的部分5x5。谢谢!
Emigna '17

nil如果没有“奇数”,它必须返回,不是吗?
魔术章鱼缸

@MagicOctopusUrn发布此答案时,该部分是可选的。我猜这种变化现在使大多数答案无效...
Martin Ender


2

外壳,2个字节

◄=

在线尝试!

这是一个将字符串作为输入并返回字符的函数。在比较字符是否相等时,它使用输入字符串中的最小值(即,它返回的字符数最少等于其他字符)。


2

C,94个字节

通过指针返回。如果不存在,请返回\0

这将导致内存泄漏。假设int是4个字节。

*t;f(c,p,i)char*c,*p;{t=calloc(64,8);for(*p=-1;*c;c++)t[*c]--;for(i=0;++i<128;)!~t[i]?*p=i:0;}

在线尝试!



@Shaggy实际上,我不知道如何解释该规则,因为我看到一些(其他)用户明确了解该规则,但仍然发布了这样的答案。
user202729

2
@ user202729,仅因为其他人这样做并不代表它是正确的;)如果您发现了此类解决方案,则最好向他们指出。
毛茸茸的

@Shaggy好吧,我明确指出了该规则,但该用户说“该规则明确指出该规则有效”。我不知道该说些什么。| 在这种情况下,该函数要求在t每次而不是第一次调用之前将数组清零。
user202729

@粗野的谢谢,固定。
Colera Su


2

Bash15 20字节

fold -1|sort|uniq -u

在线尝试!

说明: fold将输入的1字符输入每行,将其输入sort匹配字母的组,然后仅打印unique的行。

感谢@Nahuel Fouilleul抓住并帮助解决了这种方法的问题。


如果奇数字符是第二个字符或半数字符,则不起作用
Nahuel Fouilleul

@NahuelFouilleul很好...目前不确定如何解决此问题,但是除非您有建议的修复方法,否则我稍后将修复或删除。
贾斯汀·马里纳

它可以简单地解决,|sort|但可能会有更好的解决方案
Nahuel Fouilleul

也找到了grep的解决方案,但解决方案的时间更长grep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
Nahuel Fouilleul

@NahuelFouilleul我要sort解决了,谢谢。不过,如果愿意,您可以始终将grep答案作为自己的答案发布。
贾斯汀·马里纳



1

Matlab,25字节

a=input('');a(a~=mode(a))

输入“ a”,其中“ a”不是“ a”的模式。输出空数组,没有奇数球。


1

Haskell,33 * 0.75 = 24.75字节

f s=[c|[c]<-(`filter`s).(==)<$>s]

如果没有奇数字符,则返回一个空列表。

在线尝试!

对于c矩阵中的每个字符(以string形式给出s),使所有s等于的字符组成一个字符串,c并保持其长度为1。


1

JavaScript(ES6),37个字节

null如果没有奇数字母,则返回。

s=>s.match(`[^
${s.match(/(.)\1/)}]`)

测试用例


1

Japt,6个字节

将输入作为多行字符串并输出一个字符串,如果没有解决方案,则输出一个空字符串。

k@èX É

尝试一下


说明

删除k通过函数(@)返回真值()的字符,该函数对输入中è当前元素(X)的出现进行计数()并减去1(É)。


1

Common Lisp,47个字节

(lambda(s)(find-if(lambda(x)(=(count x s)1))s))

在线尝试!

返回奇数字母或NIL(如果不存在)。


1

果冻,4字节

ċ@ÐṂ

在线尝试!

\n如果没有奇数字符,请返回(单个换行符)。显然\n不是可打印字符。

巧合的是,这与Mr.Xcoder Python答案完全相同。(我独立提出)

说明:

  ÐṂ    Ṃinimum value by...
ċ@      ċount. (the `@` switch the left and right arguments of `ċ`)

这行得通,因为在m×n矩阵中:

  • 如果存在奇数字符:有m-1换行符,1个奇数字符和m×n-1普通字符,并且1 < m-1 < m×n-1因为5 ≤ m, n ≤ 10
  • 如果不存在奇数字符:有m-1换行符和m×n普通字符,和m-1 < m×n


1

C(gcc)91 86 82 79 71字节

f(char*s){for(;*++s==10?s+=2:0,*s;)if(*s^s[-1])return*s^s[1]?*s:s[-1];}

在线尝试!

  • 感谢Gastropner的xor和?技巧(-3个字节)
  • 重做比较版本以修复错误,并在注释中使用了Gastropner魔术。

说明:

跳过换行符时比较当前字符和上一个字符。如果不同,则与下一个字符进行比较。这告诉我们是否返回当前或先前的字符。该函数返回“奇数”字符值(如果存在)或0(如果数组不为奇数)。我们摆脱了“下一个”字符检查,因为字符前面总是有换行符\0。如果没有奇数字符,我们从for循环本质上返回\ 0。


较旧的xor代码说明:

为接下来的3个字符串值制作一个连续的xor掩码。如果它们都相同,则该值将等于三个值中的任何一个。如果它们不同,则两个相同的对象将互相抵消,从而留下唯一的对象。

必须在异或之前将/ n分解,否则它会变得混乱。如果s [0]是奇数值,还必须检查2个字符是否不相等。这会产生额外的|| 校验。

v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^‌​*s++||v^*s)break;}}

有一些调整的79。失败率回报与我的编译器不一致,因此仅在TIO上进行了测试:v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^*s++||v^*s)break;}}
gastropner

对于我正在写的废话,TIO是我坚持的。谢谢!
Michael Dorgan's

重新排列一些表达式可使77 v;f(char*s){while(s[2]==10?s+=3:0,v=*s^s[1]^s[2],s[3])if(v^*s++||v^*s)break;} 变成另外一个-2:但是,如果您v;f(char*s){for(v=-1;*++s==10?s+=2,v--:0,*s;v=0)if(*s^s[-1])return s[v];}
稍加

是的,但是xor似乎很性感。:)
Michael Dorgan's

建议s+=*++s-10?0:2而不是*++s==10?s+=2:0
ceilingcat


0

爱丽丝,16 * 75%= 12字节

/-.nDo&
\i..*N@/

在线尝试!

Jabberwocky如果没有重复的字符,则输出。

说明

/...@
\.../

这是一个线性程序的框架,该程序完全在Ordinal(字符串处理模式)下运行。实际代码以之字形方式执行,并展开为:

i..DN&-o

i   Read all input.
..  Make two copies.
D   Deduplicate one copy, giving only the two letters and a linefeed.
N   Multiset difference. Removes one copy of each letter and one linefeed.
    Therefore it drops the unique letter.
&-  Fold substring removal over this new string. This essentially removes
    all copies of the repeated letter and all linefeeds from the input,
    leaving only the unique letter.
.   Duplicate.
n   Logical NOT. Turns empty strings into "Jabberwocky" and everything else
    into an empty string.
*   Concatenate to the previous result.
o   Print the unique letter or "Jabberwocky".

除了&-,我们还可以使用ey(音译为空字符串)。另外,通过在堆栈操作上花费更多的字符,我们还可以对输入进行重复数据删除,从而使我们可以使用来删除不需要的字符N,但其字节数仍然相同:

i.D.QXN.n*o@

爱丽丝,13字节

/N.-D@
\i&.o/

在线尝试!

这是没有奖金的解决方案,只是缺少了.n*



0

APL + WIN,16个字节

(1=+/a∘.=a)/a←,⎕

提示输入屏幕,并输出奇数字母,如果没有奇数字母则不输出


a/⍨1=+/a∘.=a←,⎕一个字节
Uriel

@Uriel谢谢,但我的旧APL + WIN版本5中没有运算符::(
Graham

0

PowerShell,39个字节

([char[]]"$args"|group|sort c*)[0].Name

在线尝试!

将输入作为带有换行符的字符串(如质询中指定),将其转换为char-array。然后,我们Group-Object的人物,让人物通过他们的名字组合在一起,然后sort根据该c'mount。这确保了孤独字符是第一个,因此我们获取[0]索引并输出它.Name

如果换行符是“无”,那么这有资格获得奖金。


我希望sort c*)[0]可以缩短,但是我想出的是相同数量的字节? c* -eq 1)

可以通过删除周围的双引号来缩短$args。另外,这样做的准确性更高,([char[]]$args|group|? c* -eq 1).Name因为null当没有奇数字符(而不是换行符)时它将准确返回。但是,就字节数而言,这仍然不会使您低于
37。– cogumel0

@ cogumel0不能在没有双引号的情况下运行。

@root你是正确的。然而传递的要求之一(A单个字符是“奇数”在基质或NonenilNUL,或该字符串"None"如果没有“奇数”字。)应该仍然被改变。换行符不是可接受答案的一部分。
cogumel0

@ cogumel0啊,自从我发布答案以来,挑战就改变了。“无/无/任何”过去只是一种奖励,而不是强制性的。我将保持原样。
AdmBorkBork

0

Perl 6的 27  24 -25%= 18个字节

*.comb.Bag.min(*.value).key

测试一下

{%(.comb.Bag.invert){1}}

测试一下

给定没有奇数字符的输入时,这将返回一个未定义的值

展开:

{  # bare block lambda with implicit parameter 「$_」

  %(        # coerce into a Hash

    .comb   # split the input into graphemes (implicit method call on 「$_」)
    .Bag    # turn into a weighted Set
    .invert # invert that (swap keys for values) returns a sequence

  ){ 1 }    # get the character that only occurs once
}

0

Brainfuck,125个字节

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

在线试用

如果没有奇数,则打印矩阵的字母


0

Java 8,85字节

这是从String到的lambda String(例如Function<String, String>)。它本质上是Luca解决方案的副本,但是我已经对字符串进行了一些排序。

s->new String(s.chars().sorted().toArray(),0,s.length()).replaceAll("(.)\\1+|\\n","")

在线试用

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.