可靠的分选


23

给定一个包含至少3个不同条目的正整数列表,请输出该列表的排列,该排列未按升序或降序排序。

例子

1,2,3 -> 2,1,3 or 3,1,2 or 1,3,2 or 2,3,1
1,2,3,3 -> 2,1,3,3 or 3,1,2,3 or 1,3,2,3 etc..

感谢@Arnauld和@NoOneIsHere的标题!


输入将始终排序吗?
xnor

在给定一组给定条目的情况下,排序是否必须“可靠”,它总是产生与输出相同的排列?还是仅在输出未排序的情况下才“可靠”?
通配符

它必须满足规格。
瑕疵

嵌套数组是否可以作为输出?例如[2,[1,3]]
毛茸茸的

不,它应该是一个单一的阵列/列表。
瑕疵

Answers:


14

JavaScript(ES6),39 34字节

a=>[a.sort((x,y)=>x-y).pop(),...a]

以升序对数组进行排序,弹出最后一个元素,并将其用作新数组的第一个元素。然后解构原始阵列的其余元件到新的阵列(在JS,既sortpop修改原始数组)。


测试一下

o.innerText=(f=

a=>[a.sort((x,y)=>x-y).pop(),...a]

)(i.value=[1,2,3]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


你为什么不能做a.sort()
geokavel

1
@geokavel:因为JS的sort方法按字典顺序排序。
毛茸茸的

3
那是因为它已经不可靠地损坏了吗?= D
jpmc26


7

果冻,3个字节

Ṣṙ1

在线尝试!


Ṣṙ-也有效(只是想说那;您可能知道:P)
HyperNeutrino

@HyperNeutrino是的,它也起作用,相同的字节数:p
Erik the Outgolfer

在哪个编码中Ṣṙ1只有三个字节?在UTF-8中,它是7个字节。
heinrich5991

2
@ heinrich5991 Jelly使用自定义代码页
科尔于2008年

我觉得每个使用Jelly的人都必须具有浏览器扩展程序,该扩展程序必须添加一个按钮以自动发布“ Jelly使用自定义代码页”注释。
17Me21年





5

TI-Basic(TI-84 Plus CE),31个字节

Prompt A
SortA(LA
max(LA→B
dim(LA)-1→dim(LA
augment({B},LA

提示输入格式{1,2,3,4}

TI-Basic是一种令牌化语言,此处使用的所有令牌均为一字节。

说明:

Prompt A         # 3 bytes, store user input in LA
SortA(LA         # 4 bytes, sort LA ascending
max(LA→B         # 6 bytes, save the last value in the sorted list to B
dim(LA)-1→dim(LA # 11 bytes, remove the last value from LA
augment({B},LA   # 7 bytes, prepend B to LA and implicitly print the result





3

Java 8,68 37字节

l->{l.sort(null);l.add(l.remove(0));}

@Nevay -31字节(忘记了Java 8的List#sort(Comparator)方法..)

修改input- ArrayList,而不是返回一个新的。

说明:

在这里尝试。

l->{                   // Method with ArrayList parameter and no return-type
  l.sort(null);        //  Sort the input-list (no need for a Comparator, thus null)
  l.add(l.remove(0));  //  Remove the first element, and add it last
}                      // End of method

您可以l->{l.sort(null);java.util.Collections.rotate(l,1);}用来保存16个字节。
涅瓦

2
或者,您可以l->{l.sort(null);l.add(l.remove(0));}用来保存31个字节(要求使用大小不固定的列表)。
Nevay

@Nevay不错的一个,不过...括号是有点过的问候文件:现实是可选的操作addremove必须执行; 对于固定大小的列表,没有什么说的。。。凯文·克鲁伊森(Kevin Cruijssen),鉴于先前的评论中有更好的选择,我将在+1之前等待编辑。
奥利维尔·格雷戈尔

3

Haskell,36 37字节

import Data.List
f(a:b)=b++[a];f.sort

使用视图模式在输入列表的排序版本的开头匹配,然后将列表的第一项附加到其余列表的末尾。

视图模式不值得。对列表进行排序,取下头部,然后将其附加到末尾。在这种情况下,事实证明,紧凑键入的天真的解决方案是最好的。


1
欢迎来到PPCG!使用视图模式的好主意,我以前并不了解。不幸的是,它们在标准的Haskell中没有启用,因此对于每个站点规则,您都需要包括命令行标志的字节-XViewPatterns。计算这些标准方法f(a:b)=b++[a];f.sort更短。
Laikoni '17

我以某种方式没有考虑所需的标志。我猜我使用了它们太多了,以至于我忘记了在我的Cabal文件中将其打开,并且它不是该语言的一部分。
typedrat



2

Ly,7个字节

&nasprl

在线尝试!

gh,破坏排序是如此昂贵!

说明:

&nasprl

&n      # take input as a list of numbers
  a     # sort
   sp   # save top of stack and pop
     r  # reverse stack
      l # load saved item

2

R,33 32 29字节

接受来自stdin的输入。对列表进行排序,然后将第一个元素移到末尾,确保不再对其进行排序。由于朱塞佩而节省了三个字节。

c(sort(x<-scan())[-1],min(x))

另一个实现,相同的字节数:

c((x<-sort(scan()))[-1],x[1])

c(sort(x<-scan())[-1],min(x))使用基本与您相同的想法是29个字节。
朱塞佩




1

视网膜,10字节

O#`
O^#-2`

在线尝试!

O#`     Sort the list
O^#-2`  Reverse sort the list other than the last element

这样就使列表的第二个最高元素排在第一位,最后一个最高元素排在最后,而这些元素从未正确排序








1

PHP,44字节

对于短数组语法,需要PHP 5.4或更高版本。

sort($a=&$argv);print_r([array_pop($a)]+$a);

排序参数,将第0个参数替换为删除的最后一个参数,打印。
运行-nr在线尝试


"-"如果使用调用PHP ,则第0个参数是脚本文件名-r"-"作为字符串与其他参数进行比较,由于ord("-")==45,它小于任何数字。数字本身(尽管是字符串)将与数字进行比较:"12" > "2"

php -nr '<code>' 3 4 2 5 1sort($a=&$argv)导致$a=["-","1","2","3","4","5"]
[array_pop($a)]+$ais [0=>"5"]+[0=>"-",1=>"1",2=>"2",3=>"3",4=>"4"]
结果为[0=>"5",1=>"1",2=>"2",3=>"3",4=>"4"]


您能解释一下为什么[array_pop($ a)] + $ a不会覆盖$ a的第0个索引吗?例如:$ a = [1,2,3,4,5],array_pop($ a)= 5,$ a = [1,2,3,4]。如果您执行[5] + [1,2,3,4],它是否不应该以[5,2,3,4]结尾,因为两个数组的索引均为0?我很困惑,因为PHP手册说:“ +运算符返回附加在左侧数组上的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,并进行匹配右侧数组中的元素将被忽略。”
jstnthms

@jstnthms +运算符不追加,而是合并(无需重新排序索引;但这并不重要)。重要的一点是$a指向$argv$argv[0]包含脚本的文件名,参数从索引1开始。我扩展了描述。谢谢你的问题。
泰特斯

1

朱莉娅,23个字节

f(x)=sort(x)[[2:end;1]]

略短于,但等于f(x)=circshift(sort(x),1)。我希望我可以在此基础上做select一个更紧凑的方法,但是我不能

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.