जावा - ५२२ ४३४ २२। 213 वर्ण
व्यवस्थित रूप से सभी संभावित पूर्णांक n-tuples को सीधा गुणा करके जाँचता है जब तक कि एक काम नहीं मिलता है।
फंक्शन संवर्धित मैट्रिक्स, ए, ट्रायल सॉल्यूशन वेक्टर, x और डायमेंशन, n, इनपुट के रूप में लेता है - सॉल्यूशन सॉल्यूशन वेक्टर, x। ध्यान दें कि वेक्टर x वास्तव में संभव समाधानों के माध्यम से कदम उठाने में मदद करने के आयाम से बड़ा है। (यदि मैंने वेरिएबल A, x, n, j, k, s को उदाहरण के चर के रूप में घोषित किया, तो फ़ंक्शन कुल 182 के लिए 31 चार्ट छोटा होगा - लेकिन ऐसा लगता है कि नियमों को बहुत दूर झुकाना पसंद है।)
int[]Z(int[][]A,int[]x,int n){int j,k,s;for(;;){for(j=0;j<n;j++){for(k=s=0;k<n;s+=A[j][k]*x[k++]);if(s!=A[j][n])j+=n;}if(j==n)return x;for(j=0;j<=n;j++)if(x[j]!=x[n]||j==n){x[j]++;for(k=0;k<j;x[k++]=-x[n]);j=n;}}}
परीक्षण के लिए कार्यक्रम (कुछ हद तक असंयमी):
import java.util.*;
class MatrixSolver{
public MatrixSolver() {
Scanner p=new Scanner(System.in); //initialize everything from stdin
int j,k,n=p.nextInt(),A[][]=new int[n][n+1],x[]=new int[n+1];
for(j=0;j<n;j++)for(k=0;k<=n;A[j][k++]=p.nextInt());
x=Z(A,x,n); //call the magic function
for(j=0;j<n;j++) System.out.print(x[j]+" "); //print the output
}
public static void main(String[]args){
new MatrixSolver();
}
int[]Z(int[][]A,int[]x,int n){
int j,k,s;
for(;;){
for(j=0;j<n;j++){ //multiply each row of matrix by trial solution and check to see if it is correct
for(k=s=0;k<n;s+=A[j][k]*x[k++]);
if(s!=A[j][n])j+=n;
}
if(j==n)return x; //if it is correct return the trial solution
for(j=0;j<=n;j++)if(x[j]!=x[n]||j==n){//calculate the next trial solution
x[j]++;
for(k=0;k<j;x[k++]=-x[n]);
j=n;
}
}
}
}
कार्यक्रम स्टड से इनपुट लेता है क्योंकि अंतरिक्ष अलग पूर्णांक निम्नानुसार है: पहला, समस्या का आयाम, दूसरा, पंक्ति के साथ संवर्धित मैट्रिक्स की प्रविष्टियां।
नमूना रन:
$java -jar MatrixSolver.jar
3 2 1 -1 8 -3 -1 2 -11 -2 1 2 -3
2 3 -1
मैंने छोरों और "जनता" के बारे में विक्टर की सलाह का पालन करते हुए कई पात्रों का मुंडन किया, अलग-अलग के बजाय संवर्धित मैट्रिक्स में आरएचएस का भंडारण किया, और प्रत्येक नए परीक्षण समाधान की पीढ़ी को सरल बनाने के लिए मेरे परीक्षण समाधान में एक अतिरिक्त प्रविष्टि जोड़ दी। ओपी ने यह भी कहा कि एक फ़ंक्शन पर्याप्त है - पूरे कार्यक्रम को गिनने की आवश्यकता नहीं है।