Find the missing permutation: Difference between revisions

m
syntax highlighting fixup automation
(→‎{{header|Picat}}: Moved into subsections.)
m (syntax highlighting fixup automation)
Line 57:
{{trans|C}}
 
<langsyntaxhighlight lang="11l">V perms = [‘ABCD’, ‘CABD’, ‘ACDB’, ‘DACB’, ‘BCDA’, ‘ACBD’, ‘ADCB’, ‘CDAB’,
‘DABC’, ‘BCAD’, ‘CADB’, ‘CDBA’, ‘CBAD’, ‘ABDC’, ‘ADBC’, ‘BDCA’,
‘DCBA’, ‘BACD’, ‘BADC’, ‘BDAC’, ‘CBDA’, ‘DBCA’, ‘DCAB’]
Line 71:
L.break
 
print(missing)</langsyntaxhighlight>
 
{{out}}
Line 81:
{{trans|BBC BASIC}}
Very compact version, thanks to the clever [[#Raku|Raku]] "xor" algorithm.
<langsyntaxhighlight lang="360asm">* Find the missing permutation - 19/10/2015
PERMMISX CSECT
USING PERMMISX,R15 set base register
Line 109:
MISS DC 4XL1'00',C' is missing' buffer
YREGS
END PERMMISX</langsyntaxhighlight>
{{out}}
<pre>DBAC is missing</pre>
 
=={{header|8080 Assembly}}==
<langsyntaxhighlight lang="asm">PRMLEN: equ 4 ; length of permutation string
puts: equ 9 ; CP/M print string
org 100h
Line 138:
db 'DABC','BCAD','CADB','CDBA','CBAD','ABDC','ADBC','BDCA'
db 'DCBA','BACD','BADC','BDAC','CBDA','DBCA','DCAB'
db 0 ; end marker </langsyntaxhighlight>
{{out}}
<pre>Missing permutation: DBAC</pre>
 
=={{header|8086 Assembly}}==
<langsyntaxhighlight lang="asm"> cpu 8086
org 100h
mov si,perms ; Start of permutations
Line 164:
perms: db 'ABCD','CABD','ACDB','DACB','BCDA','ACBD','ADCB','CDAB'
db 'DABC','BCAD','CADB','CDBA','CBAD','ABDC','ADBC','BDCA'
db 'DCBA','BACD','BADC','BDAC','CBDA','DBCA','DCAB'</langsyntaxhighlight>
{{out}}
<pre>Missing permutation: DBAC</pre>
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">PROC Main()
DEFINE PTR="CARD"
DEFINE COUNT="23"
Line 199:
 
Print(missing)
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Find_the_missing_permutation.png Screenshot from Atari 8-bit computer]
Line 208:
=={{header|Ada}}==
 
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO;
procedure Missing_Permutations is
subtype Permutation_Character is Character range 'A' .. 'D';
Line 258:
Ada.Text_IO.Put_Line ("Missing Permutation:");
Put (Missing_Permutation);
end Missing_Permutations;</langsyntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">void
paste(record r, index x, text p, integer a)
{
Line 294:
 
return 0;
}</langsyntaxhighlight>
{{Out}}
<pre>DBAC</pre>
Line 300:
=={{header|ALGOL 68}}==
Uses the XOR algorithm of the Raku sample.
<langsyntaxhighlight lang="algol68">BEGIN # find the missing permutation in a list using the XOR method of the Raku sample #
# the list to find the missing permutation of #
[]STRING list = ( "ABCD", "CABD", "ACDB", "DACB", "BCDA"
Line 321:
print( ( REPR ABS m ) )
OD
END</langsyntaxhighlight>
{{out}}
<pre>
Line 333:
the letter that occurs least.
 
<langsyntaxhighlight APLlang="apl">missing ← ((⊂↓⍳¨⌊/) +⌿∘(⊢∘.=∪∘∊)) ⌷ ∪∘∊</langsyntaxhighlight>
 
{{out}}
 
<langsyntaxhighlight APLlang="apl"> perms←↑'ABCD' 'CABD' 'ACDB' 'DACB' 'BCDA' 'ACBD' 'ADCB' 'CDAB'
perms⍪←↑'DABC' 'BCAD' 'CADB' 'CDBA' 'CBAD' 'ABDC' 'ADBC' 'BDCA'
perms⍪←↑'DCBA' 'BACD' 'BADC' 'BDAC' 'CBDA' 'DBCA' 'DCAB'
missing perms
DBAC</langsyntaxhighlight>
 
=={{header|AppleScript}}==
Line 349:
 
Yosemite OS X onwards (uses NSString for sorting):
<langsyntaxhighlight AppleScriptlang="applescript">use framework "Foundation" -- ( sort )
 
--------------- RAREST LETTER IN EACH COLUMN -------------
Line 607:
on |words|(s)
words of s
end |words|</langsyntaxhighlight>
{{Out}}
<pre>"DBAC"</pre>
Line 613:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">perms: [
"ABCD" "CABD" "ACDB" "DACB" "BCDA" "ACBD" "ADCB" "CDAB" "DABC"
"BCAD" "CADB" "CDBA" "CBAD" "ABDC" "ADBC" "BDCA" "DCBA" "BACD"
Line 621:
allPerms: map permutate split "ABCD" => join
 
print first difference allPerms perms</langsyntaxhighlight>
 
{{out}}
Line 628:
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">IncompleteList := "ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB"
 
CompleteList := Perm( "ABCD" )
Line 657:
}
return substr(L, 1, -1)
}</langsyntaxhighlight>
 
=={{header|AWK}}==
Line 663:
This reads the list of permutations as standard input and outputs the missing one.
 
<langsyntaxhighlight lang="awk">{
split($1,a,"");
for (i=1;i<=4;++i) {
Line 681:
}
print s[1]s[2]s[3]s[4]
}</langsyntaxhighlight>
 
{{Out}}
Line 688:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> DIM perms$(22), miss&(4)
perms$() = "ABCD", "CABD", "ACDB", "DACB", "BCDA", "ACBD", "ADCB", \
\ "CDAB", "DABC", "BCAD", "CADB", "CDBA", "CBAD", "ABDC", "ADBC", \
Line 699:
NEXT
PRINT $$^miss&(0) " is missing"
END</langsyntaxhighlight>
{{out}}
<pre>
Line 707:
=={{header|Burlesque}}==
 
<langsyntaxhighlight lang="burlesque">
ln"ABCD"r@\/\\
</syntaxhighlight>
</lang>
 
(Feed permutations via STDIN. Uses the naive method).
Line 716:
the letters with the lowest frequency:
 
<langsyntaxhighlight lang="burlesque">
ln)XXtp)><)F:)<]u[/v\[
</syntaxhighlight>
</lang>
 
=={{header|C}}==
<langsyntaxhighlight Clang="c">#include <stdio.h>
 
#define N 4
Line 753:
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>Missing: DBAC</pre>
Line 760:
===By permutating===
{{works with|C sharp|C#|2+}}
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
 
Line 800:
}
}
}</langsyntaxhighlight>
===By xor-ing the values===
{{works with|C sharp|C#|3+}}
<langsyntaxhighlight lang="csharp">using System;
using System.Linq;
 
Line 821:
Console.WriteLine(string.Join("", values.Select(i => (char)i)));
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight Cpplang="cpp">#include <algorithm>
#include <vector>
#include <set>
Line 862:
std::copy(missing.begin(), missing.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}</langsyntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">
(use 'clojure.math.combinatorics)
(use 'clojure.set)
Line 872:
(def s1 (apply hash-set (permutations "ABCD")))
(def missing (difference s1 given))
</syntaxhighlight>
</lang>
Here's a version based on the hint in the description. ''freqs'' is a sequence of letter frequency maps, one for each column. There should be 6 of each letter in each column, so we look for the one with 5.
<langsyntaxhighlight lang="clojure">(def abcds ["ABCD" "CABD" "ACDB" "DACB" "BCDA" "ACBD" "ADCB" "CDAB"
"DABC" "BCAD" "CADB" "CDBA" "CBAD" "ABDC" "ADBC" "BDCA"
"DCBA" "BACD" "BADC" "BDAC" "CBDA" "DBCA" "DCAB"])
Line 882:
(defn v->k [fqmap v] (->> fqmap (filter #(-> % second (= v))) ffirst))
 
(->> freqs (map #(v->k % 5)) (apply str) println)</langsyntaxhighlight>
 
=={{header|CoffeeScript}}==
 
<langsyntaxhighlight lang="coffeescript">
missing_permutation = (arr) ->
# Find the missing permutation in an array of N! - 1 permutations.
Line 922:
console.log missing_permutation(arr)
</syntaxhighlight>
</lang>
 
{{out}}
Line 931:
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(defparameter *permutations*
'("ABCD" "CABD" "ACDB" "DACB" "BCDA" "ACBD" "ADCB" "CDAB" "DABC" "BCAD" "CADB" "CDBA"
"CBAD" "ABDC" "ADBC" "BDCA" "DCBA" "BACD" "BADC" "BDAC" "CBDA" "DBCA" "DCAB"))
Line 944:
(cons (count letter occurs) letter))
letters))))))
(concatenate 'string (mapcar #'least-occurs (enum (length letters)))))))</langsyntaxhighlight>
{{out}}
<pre>ROSETTA> (missing-perm *permutations*)
Line 950:
 
=={{header|D}}==
<langsyntaxhighlight lang="d">void main() {
import std.stdio, std.string, std.algorithm, std.range, std.conv;
 
Line 992:
perms[0][maxCode - code].write;
}
}</langsyntaxhighlight>
{{out}}
<pre>DBAC
Line 1,002:
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang="lisp">
;; use the obvious methos
(lib 'list) ; for (permutations) function
Line 1,017:
(set-substract (make-set all-perms) (make-set perms))
→ { DBAC }
</syntaxhighlight>
</lang>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule RC do
def find_miss_perm(head, perms) do
all_permutations(head) -- perms
Line 1,037:
"CBAD", "ABDC", "ADBC", "BDCA", "DCBA", "BACD", "BADC", "BDAC", "CBDA", "DBCA", "DCAB"]
 
IO.inspect RC.find_miss_perm( hd(perms), perms )</langsyntaxhighlight>
 
{{out}}
Line 1,046:
=={{header|Erlang}}==
The obvious method. It seems fast enough (no waiting time).
<syntaxhighlight lang="erlang">
<lang Erlang>
-module( find_missing_permutation ).
 
Line 1,063:
is_different( [_H] ) -> true;
is_different( [H | T] ) -> not lists:member(H, T) andalso is_different( T ).
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,071:
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
<lang ERRE>
PROGRAM MISSING
 
Line 1,105:
PRINT("Solution is: ";SOL$)
END PROGRAM
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,113:
=={{header|Factor}}==
Permutations are read in via STDIN.
<langsyntaxhighlight lang="factor">USING: io math.combinatorics sequences sets ;
 
"ABCD" all-permutations lines diff first print</langsyntaxhighlight>
{{out}}
<pre>
Line 1,126:
'''Method:''' Read the permutations in as hexadecimal numbers, exclusive ORing them together gives the answer.
(This solution assumes that none of the permutations is defined as a Forth word.)
<langsyntaxhighlight lang="forth"> hex
ABCD CABD xor ACDB xor DACB xor BCDA xor ACBD xor
ADCB xor CDAB xor DABC xor BCAD xor CADB xor CDBA xor
Line 1,132:
BADC xor BDAC xor CBDA xor DBCA xor DCAB xor
cr .( Missing permutation: ) u.
decimal</langsyntaxhighlight>
{{out}}
<pre>Missing permutation: DBAC ok</pre>
Line 1,138:
=={{header|Fortran}}==
'''Work-around''' to let it run properly with some bugged versions (e.g. 4.3.2) of gfortran: remove the ''parameter'' attribute to the array list.
<langsyntaxhighlight lang="fortran">program missing_permutation
 
implicit none
Line 1,153:
write (*, *)
 
end program missing_permutation</langsyntaxhighlight>
{{out}}
<pre>DBAC</pre>
Line 1,159:
=={{header|FreeBASIC}}==
===Simple count===
<langsyntaxhighlight lang="freebasic">' version 30-03-2017
' compile with: fbc -s console
 
Line 1,195:
Print : Print "hit any key to end program"
Sleep
End</langsyntaxhighlight>
{{out}}
<pre>The missing permutation is : DBAC</pre>
===Add the value's===
<langsyntaxhighlight lang="freebasic">' version 30-03-2017
' compile with: fbc -s console
 
Line 1,232:
Print : Print "hit any key to end program"
Sleep
End</langsyntaxhighlight>
<pre>output is same as the first version</pre>
===Using Xor===
<langsyntaxhighlight lang="freebasic">' version 30-03-2017
' compile with: fbc -s console
 
Line 1,261:
Print : Print "hit any key to end program"
Sleep
End</langsyntaxhighlight>
<pre>Output is the same as the first version</pre>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap"># our deficient list
L :=
[ "ABCD", "CABD", "ACDB", "DACB", "BCDA",
Line 1,281:
# convert back to letters
s := "ABCD";
List(v, p -> List(p, i -> s[i]));</langsyntaxhighlight>
 
=={{header|Go}}==
Alternate method suggested by task description:
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,331:
}
fmt.Println(string(b))
}</langsyntaxhighlight>
Xor method suggested by Raku contributor:
<langsyntaxhighlight lang="go">func main() {
b := make([]byte, len(given[0]))
for _, p := range given {
Line 1,341:
}
fmt.Println(string(b))
}</langsyntaxhighlight>
{{out}} in either case:
<pre>
Line 1,349:
=={{header|Groovy}}==
Solution:
<langsyntaxhighlight lang="groovy">def fact = { n -> [1,(1..<(n+1)).inject(1) { prod, i -> prod * i }].max() }
def missingPerms
missingPerms = {List elts, List perms ->
Line 1,357:
: missingPerms(elts - e, ePerms).collect { [e] + it }
}.sum()
}</langsyntaxhighlight>
 
Test:
<langsyntaxhighlight lang="groovy">def e = 'ABCD' as List
def p = ['ABCD', 'CABD', 'ACDB', 'DACB', 'BCDA', 'ACBD', 'ADCB', 'CDAB', 'DABC', 'BCAD', 'CADB', 'CDBA',
'CBAD', 'ABDC', 'ADBC', 'BDCA', 'DCBA', 'BACD', 'BADC', 'BDAC', 'CBDA', 'DBCA', 'DCAB'].collect { it as List }
 
def mp = missingPerms(e, p)
mp.each { println it }</langsyntaxhighlight>
 
{{out}}
Line 1,373:
====Difference between two lists====
{{works with|GHC|7.10.3}}
<langsyntaxhighlight lang="haskell">import Data.List ((\\), permutations, nub)
import Control.Monad (join)
 
Line 1,409:
 
main :: IO ()
main = print $ missingPerm deficientPermsList</langsyntaxhighlight>
{{Out}}
<pre>["DBAC"]</pre>
Line 1,416:
Another, more statistical, approach is to return the least common letter in each of the four columns. (If all permutations were present, letter frequencies would not vary).
 
<langsyntaxhighlight lang="haskell">import Data.List (minimumBy, group, sort, transpose)
import Data.Ord (comparing)
 
Line 1,452:
 
main :: IO ()
main = print $ missingPerm deficientPermsList</langsyntaxhighlight>
{{Out}}
<pre>"DBAC"</pre>
Line 1,460:
{{Trans|JavaScript}}
{{Trans|Python}}
<langsyntaxhighlight lang="haskell">import Data.Char (chr, ord)
import Data.Bits (xor)
 
Line 1,494:
 
main :: IO ()
main = putStrLn $ missingPerm deficientPermsList</langsyntaxhighlight>
{{Out}}
<pre>DBAC</pre>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight Iconlang="icon">link strings # for permutes
 
procedure main()
Line 1,510:
write("The difference is : ")
every write(!givens, " ")
end</langsyntaxhighlight>
 
The approach above generates a full set of permutations and calculates the difference. Changing the two commented lines to the three below will calculate on the fly and would be more efficient for larger data sets.
 
<langsyntaxhighlight Iconlang="icon">every x := permutes("ABCD") do # generate all permutations
if member(givens,x) then delete(givens,x) # remove givens as they are generated
else insert(givens,x) # add back any not given</langsyntaxhighlight>
 
A still more efficient version is:
<langsyntaxhighlight Iconlang="icon">link strings
procedure main()
Line 1,530:
if not member(givens, p) then write(p)
end</langsyntaxhighlight>
 
{{libheader|Icon Programming Library}}
Line 1,537:
=={{header|J}}==
'''Solution:'''
<langsyntaxhighlight Jlang="j">permutations=: A.~ i.@!@#
missingPerms=: -.~ permutations @ {.</langsyntaxhighlight>
'''Use:'''
<pre>data=: >;: 'ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA'
Line 1,550:
Or the above could be a single definition that works the same way:
 
<langsyntaxhighlight Jlang="j">missingPerms=: -.~ (A.~ i.@!@#) @ {. </langsyntaxhighlight>
 
Or the equivalent explicit (cf. tacit above) definition:
<langsyntaxhighlight Jlang="j">missingPerms=: monad define
item=. {. y
y -.~ item A.~ i.! #item
)</langsyntaxhighlight>
 
Or, the solution could be obtained without defining an independent program:
 
<langsyntaxhighlight Jlang="j"> data -.~ 'ABCD' A.~ i.!4
DBAC</langsyntaxhighlight>
 
Here, <code>'ABCD'</code> represents the values being permuted (their order does not matter), and <code>4</code> is how many of them we have.
Line 1,567:
Yet another alternative expression, which uses parentheses instead of the [http://www.jsoftware.com/help/dictionary/d220v.htm passive operator] (<code>~</code>), would be:
 
<langsyntaxhighlight Jlang="j"> ((i.!4) A. 'ABCD') -. data
DBAC</langsyntaxhighlight>
 
Of course the task suggests that the missing permutation can be found without generating all permutations. And of course that is doable:
 
<langsyntaxhighlight Jlang="j"> 'ABCD'{~,I.@(= <./)@(#/.~)@('ABCD' , ])"1 |:perms
DBAC</langsyntaxhighlight>
 
However, that's actually a false economy - not only does this approach take more code to implement (at least, in J) but we are already dealing with a data structure of approximately the size of all permutations. So what is being saved by this supposedly "more efficient" approach? Not much... (Still, perhaps this exercise is useful as an illustration of some kind of advertising concept?)
 
We could use parity, as suggested in the task hints:
<langsyntaxhighlight Jlang="j"> ,(~.#~2|(#/.~))"1|:data
DBAC</langsyntaxhighlight>
 
We could use arithmetic, as suggested in the task hints:
<langsyntaxhighlight Jlang="j"> ({.data){~|(->./)+/({.i.])data
DBAC</langsyntaxhighlight>
 
=={{header|Java}}==
Line 1,589:
Following needs: [[User:Margusmartsepp/Contributions/Java/Utils.java|Utils.java]]
 
<langsyntaxhighlight lang="java">import java.util.ArrayList;
 
import com.google.common.base.Joiner;
Line 1,608:
System.out.println(joiner.join(cs));
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,615:
Alternate version, based on checksumming each position:
 
<langsyntaxhighlight lang="java">public class FindMissingPermutation
{
public static void main(String[] args)
Line 1,638:
System.out.println("Missing permutation: " + missingPermutation.toString());
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
Line 1,646:
 
The permute() function taken from http://snippets.dzone.com/posts/show/1032
<langsyntaxhighlight lang="javascript">permute = function(v, m){ //v1.0
for(var p = -1, j, k, f, r, l = v.length, q = 1, i = l + 1; --i; q *= i);
for(x = [new Array(l), new Array(l), new Array(l), new Array(l)], j = q, k = l + 1, i = -1;
Line 1,665:
 
missing = all.filter(function(elem) {return list.indexOf(elem) == -1});
print(missing); // ==> DBAC</langsyntaxhighlight>
 
====Functional====
 
<langsyntaxhighlight JavaScriptlang="javascript">(function (strList) {
 
// [a] -> [[a]]
Line 1,708:
'ABCD\nCABD\nACDB\nDACB\nBCDA\nACBD\nADCB\nCDAB\nDABC\nBCAD\nCADB\n\
CDBA\nCBAD\nABDC\nADBC\nBDCA\nDCBA\nBACD\nBADC\nBDAC\nCBDA\nDBCA\nDCAB'
);</langsyntaxhighlight>
 
{{Out}}
 
<langsyntaxhighlight JavaScriptlang="javascript">["DBAC"]</langsyntaxhighlight>
 
===ES6===
====Statistical====
=====Using a dictionary=====
<langsyntaxhighlight JavaScriptlang="javascript">(() => {
'use strict';
 
Line 1,749:
 
// --> 'DBAC'
})();</langsyntaxhighlight>
 
{{Out}}
Line 1,757:
=====Composing functional primitives=====
{{Trans|Haskell}}
<langsyntaxhighlight JavaScriptlang="javascript">(() => {
'use strict';
 
Line 1,852:
 
// -> "DBAC"
})();</langsyntaxhighlight>
{{Out}}
<pre>DBAC</pre>
Line 1,858:
====XOR====
Folding an xor operator over the list of character codes:
<langsyntaxhighlight javaScriptlang="javascript">(() => {
'use strict';
 
Line 1,896:
 
return main()
})();</langsyntaxhighlight>
{{Out}}
<pre>DBAC</pre>
Line 1,920:
If your version of jq has transpose/0, the definition given here
(which is the same as in [[Matrix_Transpose#jq]]) may be omitted.
<langsyntaxhighlight lang="jq">def transpose:
if (.[0] | length) == 0 then []
else [map(.[0])] + (map(.[1:]) | transpose)
Line 1,941:
# encode a string (e.g. "ABCD") as an array (e.g. [0,1,2,3]):
def encode_string: [explode[] - 65];</langsyntaxhighlight>
 
'''The task''':
<langsyntaxhighlight lang="jq">map(encode_string) | transpose | map(parities | decode) | join("")</langsyntaxhighlight>
 
{{Out}}
<langsyntaxhighlight lang="sh">$ jq -R . Find_the_missing_permutation.txt | jq -s -f Find_the_missing_permutation.jq
"DBAC"</langsyntaxhighlight>
 
=={{header|Julia}}==
Line 1,955:
=== Obvious method ===
Calculate all possible permutations and return the first not included in the array.
<langsyntaxhighlight lang="julia">using BenchmarkTools, Combinatorics
 
function missingperm(arr::Vector)
Line 1,967:
"CADB", "CDBA", "CBAD", "ABDC", "ADBC", "BDCA", "DCBA", "BACD", "BADC", "BDAC",
"CBDA", "DBCA", "DCAB"]
@show missingperm(arr)</langsyntaxhighlight>
 
{{out}}
Line 1,974:
=== Alternative method 1 ===
{{trans|Python}}
<langsyntaxhighlight lang="julia">function missingperm1(arr::Vector{<:AbstractString})
missperm = string()
for pos in 1:length(arr[1])
Line 1,986:
return missperm
end
</syntaxhighlight>
</lang>
 
=== Alternative method 2 ===
{{trans|Raku}}
<langsyntaxhighlight lang="julia">function missingperm2(arr::Vector)
len = length(arr[1])
xorval = zeros(UInt8, len)
Line 2,006:
@btime missingperm1(arr)
@btime missingperm2(arr)
</langsyntaxhighlight>{{out}}
<pre>
missingperm(arr) = "DBAC"
Line 2,017:
 
=={{header|K}}==
<langsyntaxhighlight Klang="k"> split:{1_'(&x=y)_ x:y,x}
 
g: ("ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB")
Line 2,040:
p2@&~p2 _lin p
"DBAC"</langsyntaxhighlight>
 
Alternative approach:
<langsyntaxhighlight Klang="k">
table:{b@<b:(x@*:'a),'#:'a:=x}
,/"ABCD"@&:'{5=(table p[;x])[;1]}'!4
"DBAC"</langsyntaxhighlight>
 
Third approach (where p is the given set of permutations):
<syntaxhighlight lang="k">
<lang K>
,/p2@&~(p2:{x@m@&n=(#?:)'m:!n#n:#x}[*p]) _lin p
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.2
 
fun <T> permute(input: List<T>): List<List<T>> {
Line 2,087:
for (perm in missing) println(perm.joinToString(""))
}
}</langsyntaxhighlight>
 
{{out}}
Line 2,096:
=={{header|Lua}}==
Using the popular Penlight extension module - https://luarocks.org/modules/steved/penlight
<langsyntaxhighlight Lualang="lua">local permute, tablex = require("pl.permute"), require("pl.tablex")
local permList, pStr = {
"ABCD", "CABD", "ACDB", "DACB", "BCDA", "ACBD", "ADCB", "CDAB",
Line 2,105:
pStr = table.concat(perm)
if not tablex.find(permList, pStr) then print(pStr) end
end</langsyntaxhighlight>
{{out}}
<pre>DBAC</pre>
 
=={{header|Maple}}==
<langsyntaxhighlight Maplelang="maple">lst := ["ABCD","CABD","ACDB","DACB","BCDA","ACBD","ADCB","CDAB","DABC","BCAD","CADB","CDBA","CBAD","ABDC","ADBC","BDCA","DCBA","BACD","BADC","BDAC","CBDA","DBCA","DCAB"]:
perm := table():
for letter in "ABCD" do
Line 2,120:
end do:
end do:
print(StringTools:-Join(ListTools:-Flatten([indices(perm)], 4)[sort(map(x->60-x, ListTools:-Flatten([entries(perm)],4)),'output=permutation')], "")):</langsyntaxhighlight>
{{Out|Output}}
<pre>"DBAC"</pre>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">ProvidedSet = {"ABCD" , "CABD" , "ACDB" , "DACB" , "BCDA" , "ACBD",
"ADCB" , "CDAB", "DABC", "BCAD" , "CADB", "CDBA" , "CBAD" , "ABDC",
"ADBC" , "BDCA", "DCBA" , "BACD", "BADC", "BDAC" , "CBDA", "DBCA", "DCAB"};
Line 2,132:
 
 
->{"DBAC"}</langsyntaxhighlight>
 
=={{header|MATLAB}}==
This solution is designed to work on a column vector of strings. This will not work with a cell array or row vector of strings.
 
<langsyntaxhighlight MATLABlang="matlab">function perm = findMissingPerms(list)
 
permsList = perms(list(1,:)); %Generate all permutations of the 4 letters
Line 2,163:
end %for
end %fingMissingPerms</langsyntaxhighlight>
 
{{out}}
<langsyntaxhighlight MATLABlang="matlab">>> list = ['ABCD';
'CABD';
'ACDB';
Line 2,220:
ans =
 
DBAC</langsyntaxhighlight>
 
=={{header|Nim}}==
{{trans|Python}}
<langsyntaxhighlight lang="nim">import strutils
 
proc missingPermutation(arr: openArray[string]): string =
Line 2,242:
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB""".splitWhiteSpace()
 
echo missingPermutation(given)</langsyntaxhighlight>
{{out}}
<pre>DBAC</pre>
Line 2,249:
 
some utility functions:
<langsyntaxhighlight lang="ocaml">(* insert x at all positions into li and return the list of results *)
let rec insert x = function
| [] -> [[x]]
Line 2,266:
(* convert a char list to a string *)
let string_of_chars cl =
String.concat "" (List.map (String.make 1) cl)</langsyntaxhighlight>
 
resolve the task:
 
<langsyntaxhighlight lang="ocaml">let deficient_perms = [
"ABCD";"CABD";"ACDB";"DACB";
"BCDA";"ACBD";"ADCB";"CDAB";
Line 2,285:
let results = List.filter (fun v -> not(List.mem v deficient_perms)) perms
 
let () = List.iter print_endline results</langsyntaxhighlight>
 
Alternate method : if we had all permutations,
Line 2,293:
of the number of occurences of each letter.
The following program works with permutations of at least 3 letters:
<langsyntaxhighlight lang="ocaml">let array_of_perm s =
let n = String.length s in
Array.init n (fun i -> int_of_char s.[i] - 65);;
Line 2,322:
 
find_missing deficient_perms;;
(* - : string = "DBAC" *)</langsyntaxhighlight>
 
=={{header|Octave}}==
<langsyntaxhighlight lang="octave">given = [ 'ABCD';'CABD';'ACDB';'DACB'; ...
'BCDA';'ACBD';'ADCB';'CDAB'; ...
'DABC';'BCAD';'CADB';'CDBA'; ...
Line 2,339:
bits(there) = 0;
missing = dec2base(find(bits)-1,'ABCD')
</syntaxhighlight>
</lang>
 
=={{header|Oz}}==
Using constraint programming for this problem may be a bit overkill...
<langsyntaxhighlight lang="oz">declare
GivenPermutations =
["ABCD" "CABD" "ACDB" "DACB" "BCDA" "ACBD" "ADCB" "CDAB" "DABC" "BCAD" "CADB" "CDBA"
Line 2,362:
{System.showInfo "Missing: "#P}
end
end</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">v=["ABCD","CABD","ACDB","DACB","BCDA","ACBD","ADCB","CDAB","DABC","BCAD","CADB","CDBA","CBAD","ABDC","ADBC","BDCA","DCBA","BACD","BADC","BDAC","CBDA","DBCA","DCAB"];
v=apply(u->permtonum(apply(n->n-64,Vec(Vecsmall(u)))),v);
t=numtoperm(4, binomial(4!,2)-sum(i=1,#v,v[i]));
Strchr(apply(n->n+64,t))</langsyntaxhighlight>
{{out}}
<pre>%1 = "DBAC"</pre>
Line 2,374:
=={{header|Pascal}}==
like [[c]], summation, and [[Raku]] XORing
<langsyntaxhighlight lang="pascal">program MissPerm;
{$MODE DELPHI} //for result
 
Line 2,436:
writeln(CountOccurences,' is missing');
writeln(CheckXOR,' is missing');
end.</langsyntaxhighlight>{{out}}<pre>DBAC is missing
DBAC is missing</pre>
 
Line 2,444:
the first missing rotation is the target.
 
<langsyntaxhighlight Perllang="perl">sub check_perm {
my %hash; @hash{@_} = ();
for my $s (@_) { exists $hash{$_} or return $_
Line 2,453:
@perms = qw(ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB);
print check_perm(@perms), "\n";</langsyntaxhighlight>
 
{{out}}
Line 2,463:
If the string XOR was of all the permutations, the result would be a string of nulls "\0",
since one is missing, it is the result of XOR of all the rest :)
<langsyntaxhighlight lang="perl">print eval join '^', map "'$_'", <>;</langsyntaxhighlight>
or if you don't like eval...
<langsyntaxhighlight lang="perl">$\ ^= $_ while <>;
print '';</langsyntaxhighlight>
Every permutation has a "reverse", just take all reverses and remove the "normals".
<langsyntaxhighlight lang="perl">local $_ = join '', <>;
my %h = map { $_, '' } reverse =~ /\w+/g;
delete @h{ /\w+/g };
print %h, "\n";</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">perms</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"ABCD"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"CABD"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"ACDB"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"DACB"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"BCDA"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"ACBD"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"ADCB"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"CDAB"</span><span style="color: #0000FF;">,</span>
Line 2,523:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">r</span><span style="color: #0000FF;">})</span>
<span style="color: #000080;font-style:italic;">-- (relies on brute force(!) - but this is the only method that could be made to cope with &gt;1 omission)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 2,533:
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php"><?php
$finalres = Array();
function permut($arr,$result=array()){
Line 2,553:
permut($given);
print_r(array_diff($finalres,$givenPerms)); // Array ( [20] => DBAC )
</syntaxhighlight>
</lang>
 
=={{header|Picat}}==
Line 2,559:
 
All assume that the variables P1 and/or Perms has been defined:
<langsyntaxhighlight lang="picat"> P1 = ["ABCD","CABD","ACDB","DACB","BCDA","ACBD",
"ADCB","CDAB","DABC","BCAD","CADB","CDBA",
"CBAD","ABDC","ADBC","BDCA","DCBA","BACD",
Line 2,565:
Perms = permutations("ABCD"),
% ...
</syntaxhighlight>
</lang>
 
===Very imperative===
<langsyntaxhighlight Picatlang="picat"> % ...
Missing = _,
foreach(P in Perms, Missing = _)
Line 2,581:
end
end,
println(missing1=Missing).</langsyntaxhighlight>
 
===Somewhat less imperative===
<langsyntaxhighlight Picatlang="picat"> % ...
Missing2 = _,
foreach(P in Perms, Missing2 = _)
Line 2,591:
end
end,
println(missing2=Missing2).</langsyntaxhighlight>
 
===Using findall===
<langsyntaxhighlight Picatlang="picat"> % ...
println(missing3=difference(Perms,P1)).
 
difference(Xs,Ys) = findall(X,(member(X,Xs),not(member(X,Ys)))).</langsyntaxhighlight>
 
===findall approach as a one-liner===
<langsyntaxhighlight Picatlang="picat"> % ...
println(missing4=findall(X,(member(X,Perms),not(member(X,P1))))).</langsyntaxhighlight>
 
===Using ordsets===
The module <code>ordsets</code> must be imported,
<langsyntaxhighlight Picatlang="picat">import ordsets.
% ...
println(missing5=subtract(new_ordset(Perms),new_ordset(P1))).</langsyntaxhighlight>
 
===List comprehension===
List comprehension with <code>membchk/1</code> for the check)
<langsyntaxhighlight Picatlang="picat"> % ...
println(missing6=[P:P in Perms,not membchk(P,P1)])</langsyntaxhighlight>
 
===Using maps===
<langsyntaxhighlight Picatlang="picat"> % ...
Map = new_map(),
foreach(P in P1) Map.put(P,1) end,
println(missing7=[P: P in Perms, not Map.has_key(P)]).</langsyntaxhighlight>
 
==="Merge sort" variants===
"Merge sort" variants, using sorted lists. <code>zip/2</code> requires that the length of the two lists are the same, hence the "dummy".
<langsyntaxhighlight Picatlang="picat"> % ...
PermsSorted = Perms.sort(),
P1Sorted = P1.sort(),
Line 2,637:
 
% shorter
println(missing10=[P:{P,PP} in zip(PermsSorted,P1Sorted ++ ["DUMMY"]), P != PP].first()),</langsyntaxhighlight>
 
===Constraint modelling===
The <code>cp</code> module must be imported.
<langsyntaxhighlight Picatlang="picat">import cp.
 
% ...
Line 2,654:
solve(Missing3),
ABCD2 = "ABCD",
println(missing11=[ABCD2[I] : I in Missing3]).</langsyntaxhighlight>
 
===Matrix approach===
<langsyntaxhighlight Picatlang="picat"> % ...
PermsLen = Perms.length,
P1Len = P1.length,
Line 2,664:
A2[I,J] := 1
end,
println(missing12=[Perms[I] : I in 1..PermsLen, sum([A2[I,J] : J in 1..P1Len])=0]).</langsyntaxhighlight>
 
===Xor variant===
{{trans|Raku}}
<langsyntaxhighlight Picatlang="picat"> % ...
println(missing13=to_fstring("%X",reduce(^,[parse_term("0x"++P):P in P1]))).</langsyntaxhighlight>
 
===Count occurrences===
Count the character with the least occurrence (=5) for each positions (1..4). Some variants.
{{trans|K}}
<langsyntaxhighlight Picatlang="picat"> % ...
println(missing14=[[O:O=5 in Occ]:Occ in [occurrences([P[I]:P in P1]):I in 1..4]]),
 
Line 2,704:
% sort a map according to values
sort2(Map) = [K=V:_=(K=V) in sort([V=(K=V): K=V in Map])]
</syntaxhighlight>
</lang>
 
Running all these snippets:
Line 2,731:
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(setq *PermList
(mapcar chop
(quote
Line 2,745:
(rot L) )
(unless (member Lst *PermList) # Check
(prinl Lst) ) ) ) )</langsyntaxhighlight>
{{out}}
<pre>DBAC</pre>
Line 2,752:
 
{{works with|PowerShell|4.0}}
<syntaxhighlight lang="powershell">
<lang PowerShell>
function permutation ($array) {
function generate($n, $array, $A) {
Line 2,809:
)
$perm | where{-not $find.Contains($_)}
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
Line 2,816:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Procedure in_List(in.s)
Define.i i, j
Define.s a
Line 2,854:
Data.s "DABC","BCAD","CADB","CDBA","CBAD","ABDC","ADBC","BDCA"
Data.s "DCBA","BACD","BADC","BDAC","CBDA","DBCA","DCAB"
EndDataSection</langsyntaxhighlight>
 
Based on the [[Permutations#PureBasic|Permutations]] task,
the solution could be:
<langsyntaxhighlight PureBasiclang="purebasic">If OpenConsole()
NewList a.s()
findPermutations(a(), "ABCD", 4)
Line 2,872:
Print(#CRLF$ + "Press ENTER to exit"): Input()
EndIf</langsyntaxhighlight>
 
=={{header|Python}}==
===Python: Calculate difference when compared to all permutations===
{{works with|Python|2.6+}}
<langsyntaxhighlight lang="python">from itertools import permutations
 
given = '''ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
Line 2,884:
allPerms = [''.join(x) for x in permutations(given[0])]
 
missing = list(set(allPerms) - set(given)) # ['DBAC']</langsyntaxhighlight>
 
===Python:Counting lowest frequency character at each position===
Line 2,890:
i.e. it never needs to generate the full set of expected permutations.
 
<langsyntaxhighlight lang="python">
def missing_permutation(arr):
"Find the missing permutation in an array of N! - 1 permutations."
Line 2,921:
print missing_permutation(given)
</syntaxhighlight>
</lang>
 
===Python:Counting lowest frequency character at each position: functional===
Uses the same method as explained directly above,
but calculated in a more functional manner:
<langsyntaxhighlight lang="python">>>> from collections import Counter
>>> given = '''ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB'''.split()
>>> ''.join(Counter(x).most_common()[-1][0] for x in zip(*given))
'DBAC'
>>> </langsyntaxhighlight>
 
;Explanation
Line 2,940:
created by the call to <code>most_common()</code>
is the least common character.
<langsyntaxhighlight lang="python">>>> from pprint import pprint as pp
>>> pp(list(zip(*given)), width=120)
[('A', 'C', 'A', 'D', 'B', 'A', 'A', 'C', 'D', 'B', 'C', 'C', 'C', 'A', 'A', 'B', 'D', 'B', 'B', 'B', 'C', 'D', 'D'),
Line 2,957:
>>> ''.join([Counter(x).most_common()[-1][0] for x in zip(*given)])
'DBAC'
>>> </langsyntaxhighlight>
 
===Python:Folding XOR over the set of strings===
Surfacing the missing bits:
{{Trans|JavaScript}}
<langsyntaxhighlight Pythonlang="python">'''Find the missing permutation'''
 
from functools import reduce
Line 2,984:
[0, 0, 0, 0]
)
]))</langsyntaxhighlight>
{{Out}}
<pre>DBAC</pre>
Line 2,992:
Credit to [[#Raku|Raku]] for the method, and noting that the strings are valid hexadecimal numbers.
 
<langsyntaxhighlight Quackerylang="quackery"> $ "ABCD CABD ACDB DACB BCDA ACBD
ADCB CDAB DABC BCAD CADB CDBA
CBAD ABDC ADBC BDCA DCBA BACD
Line 3,001:
0 swap witheach ^
number$ echo$
base release</langsyntaxhighlight>
 
{{out}}
Line 3,009:
=={{header|R}}==
This uses the "combinat" package, which is a standard R package:
<syntaxhighlight lang="text">
library(combinat)
 
Line 3,022:
 
setdiff(perms3, incomplete)
</syntaxhighlight>
</lang>
 
{{out}}
Line 3,030:
 
=={{header|Racket}}==
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 3,066:
c))
;; -> '(D B A C)
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" perl6line>my @givens = <ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB>;
 
my @perms = <A B C D>.permutations.map: *.join;
 
.say when none(@givens) for @perms;</langsyntaxhighlight>
{{out}}<pre>DBAC</pre>
Of course, all of these solutions are working way too hard,
when you can just xor all the bits,
and the missing one will just pop right out:
<syntaxhighlight lang="raku" perl6line>say [~^] <ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB>;</langsyntaxhighlight>
{{out}}<pre>DBAC</pre>
 
=={{header|RapidQ}}==
<syntaxhighlight lang="vb">
<lang vb>
Dim PList as QStringList
PList.addItems "ABCD", "CABD", "ACDB", "DACB", "BCDA", "ACBD", "ADCB", "CDAB"
Line 3,110:
showmessage MPerm
'= DBAC
</syntaxhighlight>
</lang>
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX pgm finds one or more missing permutations from an internal list & displays them.*/
list= 'ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA',
"DCBA BACD BADC BDAC CBDA DBCA DCAB" /*list that is missing one permutation.*/
Line 3,141:
call permSet ?+1 /*call self recursively. */
end /*x*/
return</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default input:}}
<pre>
Line 3,148:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
list = "ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB"
Line 3,162:
next
next
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,170:
=={{header|Ruby}}==
{{works with|Ruby|2.0+}}
<langsyntaxhighlight lang="ruby">given = %w{
ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB
Line 3,177:
all = given[0].chars.permutation.collect(&:join)
puts "missing: #{all - given}"</langsyntaxhighlight>
{{out}}
<pre>
Line 3,184:
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">list$ = "ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB"
 
for a = asc("A") to asc("D")
Line 3,199:
next c
next b
next a</langsyntaxhighlight>
{{out}}
<pre>DBAC missing</pre>
Line 3,206:
{{trans|Go}}
Xor method suggested by Raku contributor:
<langsyntaxhighlight lang="rust">const GIVEN_PERMUTATIONS: [&str; 23] = [
"ABCD",
"CABD",
Line 3,245:
}
 
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,254:
{{libheader|Scala}}
{{works with|Scala|2.8}}
<langsyntaxhighlight lang="scala">def fat(n: Int) = (2 to n).foldLeft(1)(_*_)
def perm[A](x: Int, a: Seq[A]): Seq[A] = if (x == 0) a else {
val n = a.size
Line 3,293:
DBCA
DCAB""".stripMargin.split("\n")
println(findMissingPerm(perms(0), perms))</langsyntaxhighlight>
 
===Scala 2.9.x===
{{works with|Scala|2.9.1}}
<langsyntaxhighlight Scalalang="scala">println("missing perms: "+("ABCD".permutations.toSet
--"ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB".stripMargin.split(" ").toSet))</langsyntaxhighlight>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
const func string: missingPermutation (in array string: perms) is func
Line 3,333:
"ADCB", "CDAB", "DABC", "BCAD", "CADB", "CDBA", "CBAD", "ABDC", "ADBC",
"BDCA", "DCBA", "BACD", "BADC", "BDAC", "CBDA", "DBCA", "DCAB")));
end func;</langsyntaxhighlight>
 
{{out}}
Line 3,342:
=={{header|Sidef}}==
{{trans|Perl}}
<langsyntaxhighlight lang="ruby">func check_perm(arr) {
var hash = Hash()
hash.set_keys(arr...)
Line 3,356:
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB)
 
say check_perm(perms)</langsyntaxhighlight>
{{out}}
<pre>
Line 3,363:
 
=={{header|TI-83 BASIC}}==
<langsyntaxhighlight lang="ti83b">"ABCDCABDACDBDACBBCDAACBDADCBCDABDABCBCADCADBCDBACBADABDCADBCBDCADCBABACDBADCBDACCBDADBCADCAB"→Str0
"ABCD"→Str1
length(Str0)→L
Line 3,396:
sub(Str4,2,4)→Str4
Disp "MISSING"
Disp Str4</langsyntaxhighlight>
 
=={{header|Tcl}}==
{{tcllib|struct::list}}
<langsyntaxhighlight lang="tcl">
package require struct::list
 
Line 3,414:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Ursala}}==
Line 3,420:
and needn't be reinvented, but its definition is shown here in the interest of
comparison with other solutions.
<langsyntaxhighlight Ursalalang="ursala">permutations = ~&itB^?a\~&aNC *=ahPfatPRD refer ^C/~&a ~&ar&& ~&arh2falrtPXPRD</langsyntaxhighlight>
The <code>~&j</code> operator computes set differences.
<langsyntaxhighlight Ursalalang="ursala">#import std
#show+
 
Line 3,450:
CBDA
DBCA
DCAB]-</langsyntaxhighlight>
{{out}}
<pre>
Line 3,458:
=={{header|VBScript}}==
Uses the 3rd method approach by adding the columns.
<syntaxhighlight lang="vb">
<lang vb>
arrp = Array("ABCD", "CABD", "ACDB", "DACB", "BCDA", "ACBD",_
"ADCB", "CDAB", "DABC", "BCAD", "CADB", "CDBA",_
Line 3,483:
 
WScript.StdOut.WriteLine missing
</syntaxhighlight>
</lang>
 
{{Out}}
Line 3,492:
{{libheader|Wren-set}}
{{libheader|Wren-perm}}
<langsyntaxhighlight lang="ecmascript">import "./set" for Set
import "./perm" for Perm
 
Line 3,516:
System.print("There are %(missing.count) missing permutations, namely:\n")
System.print(missing)
}</langsyntaxhighlight>
 
{{out}}
Line 3,527:
missperm <missperm.txt
 
<langsyntaxhighlight XPL0lang="xpl0">code HexIn=26, HexOut=27;
int P, I;
[P:= 0;
for I:= 1 to 24-1 do P:= P xor HexIn(1);
HexOut(0, P);
]</langsyntaxhighlight>
 
{{out}}
Line 3,541:
=={{header|zkl}}==
Since I just did the "generate the permutations" task, I'm going to use it to do the brute force solution.
<langsyntaxhighlight lang="zkl">var data=L("ABCD","CABD","ACDB","DACB","BCDA","ACBD","ADCB","CDAB",
"DABC","BCAD","CADB","CDBA","CBAD","ABDC","ADBC","BDCA",
"DCBA","BACD","BADC","BDAC","CBDA","DBCA","DCAB");
Utils.Helpers.permute(["A".."D"]).apply("concat").copy().remove(data.xplode());</langsyntaxhighlight>
Copy creates a read/write list from a read only list.
xplode() pushes all elements of data as parameters to remove.
Line 3,553:
 
=={{header|ZX Spectrum Basic}}==
<langsyntaxhighlight lang="zxbasic">10 LET l$="ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB"
20 LET length=LEN l$
30 FOR a= CODE "A" TO CODE "D"
Line 3,566:
120 NEXT i
130 PRINT x$;" is missing"
140 NEXT d: NEXT c: NEXT b: NEXT a</langsyntaxhighlight>
10,327

edits