Javascript는 Sudoku 솔루션_javascript 기술을 구현합니다.
Shengsheng에서 제가 작성한 Java 버전을 Javascript 버전으로 변경했습니다. 처음 작성하는 것이므로 매우 비전문적입니다. 죄송합니다. 아, 나는 얼마나 자유로운가.
var 스도쿠 = {
초기화: 함수(str) {
this.blank = [];
this.fixed = [];
this.cell = [];
this.trials=[];
for (i = 0; i var chr = str.charCodeAt(i);
if (chr == 48) {
this.cell[i] = 511;
this.blank.push(i);
} 그 밖의 {
this.cell[i] = 1 << 문자 - 49;
this.fixed.push(i);
}
}
},
showBoard: 함수() {
var 보드 = "";
for (var i = 0; i < 81; i ) {
if (i % 9 == 0) {
보드 = Board.concat("n");
}
보드 = 보드.concat("[");
for (var j = 0; j < 9; j ) {
if ((this.cell[i] >> j & 1) == 1) {
보드 = 보드.concat(String.fromCharCode(j 49));
}
}
보드 = 보드.concat("]");
}
반납판;
},
확인: 함수 () {
var 체크포인트 = [0, 12, 24, 28, 40, 52, 56, 68, 80];
for (체크포인트의 var i) {
var r, b, c;
r = b = c = this.cell[checkpoint[i]];
for (j = 0; j c ^= this.cell[this.getX(checkpoint[i])[j]];
b ^= this.cell[this.getX(checkpoint[i])[8 j]];
r ^= this.cell[this.getX(checkpoint[i])[16 j]];
}
if ((r & b & c) != 0x1FF) {
false를 반환합니다.
}
}
true를 반환합니다.
},
비트카운트: 함수 (i) {
var n = 0;
for (var j = 0; j if ((i >> j & 1) == 1)
;
}
n을 반환합니다;
},
numberOfTrailingZeros: 함수(i){
var n = 0;
for (var j = 0; j if ((i >> j & 1) ==0)
;
그렇지 않으면{
휴식;
}
}
n을 반환;
},
updateCandidates: 함수 () {
for (this.fixed의 var i) {
var opt = 0x1FF ^ this.cell[this.fixed[i]];
for (var j = 0; j this.cell[this.getX(this.fixed[i])[j]] &= 선택;
//!알림
if (this.cell[this.getX(this.fixed[i])[j]] == 0) {
//console.log("오류-0 후보:" x[this.fixed[i]][j]);
false를 반환합니다.
}
}
}
true를 반환합니다.
},
eekUniqueCandidate: 함수 () {
for (this.blank의 var bidx) {
var 행 = 0, 열 = 0, 상자 = 0;
for (i = 0; i 행 |= this.cell[this.getX(this.blank[bidx])[i]];
상자 |= this.cell[this.getX(this.blank[bidx])[8 i]];
col |= this.cell[this.getX(this.blank[bidx])[16 i]];
}
if (this.bitCount(this.cell[this.blank[bidx]] & ~row) == 1) {
this.cell[this.blank[bidx]] &= ~row;
계속;
}
if (this.bitCount(this.cell[this.blank[bidx]] & ~col) == 1) {
this.cell[this.blank[bidx]] &= ~col;
계속;
}
if (this.bitCount(this.cell[this.blank[bidx]] & ~box) == 1) {
this.cell[this.blank[bidx]] &= ~box;
}
}
},
검색Filledable: 함수 () {
this.fixed = [];
var _del=[];
for (var i in this.blank) {
if (this.bitCount(this.cell[this.blank[i]]) == 1) {
this.fixed.push(this.blank[i]);
//console.log("고정됨:" this.blank[i] "=>" this.cell[this.blank[i]]);
//this.blank.splice(i, 1);//루프에서 삭제하면 버그가 발생합니다
_del.push(i);
}
}
while(_del.length>0){
this.blank.splice(_del.pop(), 1);
}
},
eekMutexCell: 함수 () {
var 2 = [];
for (this.blank의 var n) {
if (this.bitCount(this.cell[this.blank[n]]) == 2) {
two.push(this.blank[n]);
}
}
for (var i = 0; i for (var j = i 1; j if (this.cell[two[i]] == this.cell[two[j]]) {
var opt = ~this.cell[two[i]];
if (parseInt(two[i] / 9) ==parseInt(two[j] / 9)) {
for (n = 0; n this.cell[this.getX(two[i])[n]] &= 선택;
}
}
if ((two[i] - two[j]) % 9 == 0) {
for (n = 8; n this.cell[this.getX(two[i])[n]] &= 선택;
}
}
if ((parseInt(two[i] / 27) * 3 parseInt(two[i] % 9 / 3)) == (parseInt(two[j] / 27) * 3 parseInt(two[j] % 9 / 3 ))) {
for (n = 16; n this.cell[this.getX(two[i])[n]] &= 선택;
}
}
this.cell[two[j]] = ~opt;
}
}
}
},
basicSolve: 함수 () {
하세요 {
if (!this.updateCandidates(this.fixed)) {
this.backForward();
}
this.seekUniqueCandidate();
this.seekMutexCell();
this.seekFilledable();
} while (this.fixed.length != 0);
return this.blank.length == 0;
},
setTrialCell: 함수() {
for (var i in this.blank) {
if (this.bitCount(this.cell[this.blank[i]]) == 2) {
var trialValue = 1 << this.numberOfTrailingZeros(this.cell[this.blank[i]]);
var waitValue = this.cell[this.blank[i]] ^ trialValue;
//console.log("try:[" this.blank[i] "]->" (this.numberOfTrailingZeros(trialValue) 1) "#" (this.numberOfTrailingZeros(waitingValue) 1));
this.cell[this.blank[i]] = trialValue;
this.trials.push(this.createTrialPoint(this.blank[i], waitValue, this.cell));
true를 반환합니다.
}
}
false를 반환합니다.
},
뒤로앞으로: function() {
if (this.trials.length==0) {
console.log("해결책이 없을 수도 있습니다!");
반품;
}
var back = this.trials.pop();
this.reset(back.data);
this.cell[back.idx] = back.val;
this.fixed.push(back.idx);
//console.log("back:[" back.idx "]->" (this.numberOfTrailingZeros(back.val) 1));
},
재설정: 함수(데이터) {
this.blank=[];
this.fixed=[];
this.cell=data.concat();
for (var i = 0; i if (this.bitCount(this.cell[i]) != 1) {
this.blank.push(i);
} 그 밖의 {
this.fixed.push(i);
}
}
},
trialSolve: 함수() {
while (this.blank.length!=0) {
if (this.setTrialCell()) {
this.basicSolve();
} 그 밖의 {
if (this.trials.length==0) {
//console.log("뒤로 갈 수 없습니다! 해결책이 없을 수도 있습니다!");
휴식;
} 그 밖의 {
this.backForward();
this.basicSolve();
}
}
}
},
재생: 함수() {
console.log(this.showBoard());
var start = new Date().getMilliseconds();
if (!this.basicSolve()) {
this.trialSolve();
}
var end = new Date().getMilliseconds();
console.log(this.showBoard());
if (this.check()) {
console.log("[" (끝 - 시작) "ms OK!]");
} 그 밖의 {
console.log("[" (end - start) "ms, 문제를 해결할 수 없나요?");
}
//return this.showBoard();
},
getX:함수(idx){
var neighbor=new Array(24);
var box=new 배열(0,1,2,9,10,11,18,19,20);
var r=parseInt(idx/9);
var c=idx%9;
var xs=parseInt(idx/27)*27 parseInt(idx%9/3)*3;
var i=0;
for(var n=0;n<9;n ){
if(n==c)계속;
이웃[i ]=r*9 n;
}
for(var n=0;n<9;n ){
if(n==r)계속;
이웃[i ]=c n*9;
}
for(var n=0;n<9;n ){
var t=xs 상자[n];
if(t==idx)continue;
이웃[i ]=t;
}
이웃을 돌려보내세요;
},
createTrialPoint:함수(idx, val, 보드) {
var tp = {};
tp.idx = idx;
tp.val = 발;
tp.data =board.concat();
tp를 돌려주세요;
}
};
//Sudoku.init("000000500000008300600100000080093000000000020700000000058000000000200017090000060");
//Sudoku.init("530070000600195000098000060800060003400803001700020006060000280000419005000080079");
Sudoku.init("800000000003600000070090200050007000000045700000100030001000068008500010090000400");
Sudoku.play();
以上就是关于使는javascript实现数独解법적전체부대码了,希望大家能够喜欢。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
