Last active
September 22, 2016 03:16
[2016-09-21] Challenge #284 [Intermediate] Punch Card Creator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>JS Bin</title> | |
<script src="https://code.jquery.com/jquery-3.1.0.js"></script> | |
</head> | |
<body> | |
<div id="output"></div> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Hello, world! | |
________________________________________________________________ | |
/HELLO,WORLD! | |
12 / OO O | |
11| OOO OOO O | |
0| OO | |
1| | |
2| O | |
3| OO O O | |
4| O | |
5| O | |
6| O OO | |
7| | |
8| O O O | |
9| O | |
|__________________________________________________________________ | |
This is Reddit's r/dailyprogrammer challenge. | |
________________________________________________________________ | |
/THISISREDDIT'SR/DAILYPROGRAMMERCHALLENGE. | |
12 / OO O OOOO OOO O O O OOO O OOO | |
11| O O O OOO O OO O OO O | |
0| O O O O O O O | |
1| O O O O | |
2| O O O | |
3| O O O O OO O | |
4| OO O OO | |
5| O O O OO O | |
6| O | |
7| O O O | |
8| O O O O O | |
9| O O O O O O O O O | |
|__________________________________________________________________ | |
WRITE (6,7) FORMAT(13H HELLO, WORLD) STOP END | |
________________________________________________________________ | |
/WRITE(6,7)FORMAT(13HHELLO,WORLD)STOPEND | |
12 / O OO O O O OOO O O O | |
11| O O OOO O OOO OOO O OO O | |
0| O O O O OO OO | |
1| O O | |
2| O | |
3| O O O OO O O O | |
4| O O O O | |
5| OO OO O O O OO | |
6| O OO O OO O | |
7| O | |
8| O O O O OO O O | |
9| OO O O | |
|__________________________________________________________________ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// [2016-09-21] Challenge #284 [Intermediate] Punch Card Creator | |
// https://www.reddit.com/r/dailyprogrammer/comments/53sw7z/20160921_challenge_284_intermediate_punch_card/ | |
// Demo: https://jsbin.com/sapubiberi/edit?js,output | |
// Kory Becker http://primaryobjects.com | |
// | |
var deck = ''; | |
deck += 'DEC9 &-0123456789ABCDEFGHIJKLMNOPQR/STUVWXYZ:#@\'="[.<(+^!$*);\\],%_>?\n'; | |
deck += ' ________________________________________________________________ \n'; | |
deck += ' /&-0123456789ABCDEFGHIJKLMNOPQR/STUVWXYZ:#@\'="[.<(+^!$*);\\],%_>?\n'; | |
deck += '12 / O OOOOOOOOO OOOOOO \n'; | |
deck += '11| O OOOOOOOOO OOOOOO \n'; | |
deck += ' 0| O OOOOOOOOO OOOOOO \n'; | |
deck += ' 1| O O O O \n'; | |
deck += ' 2| O O O O O O O O \n'; | |
deck += ' 3| O O O O O O O O \n'; | |
deck += ' 4| O O O O O O O O \n'; | |
deck += ' 5| O O O O O O O O \n'; | |
deck += ' 6| O O O O O O O O \n'; | |
deck += ' 7| O O O O O O O O \n'; | |
deck += ' 8| O O O O OOOOOOOOOOOOOOOOOOOOOOOO \n'; | |
deck += ' 9| O O O O \n'; | |
deck += ' |__________________________________________________________________ \n'; | |
function initialize(deck) { | |
// Read string layout and assign to hash. | |
var deckHash = {}; | |
var rowNum = 0; | |
deck.split('\n').forEach(function(row) { | |
// Skip first 2 rows. | |
if (rowNum > 1) { | |
if (rowNum == 2) { | |
// Read characters (keys). | |
var parts = row.split(/ +\//); | |
parts[1].split('').forEach(function(char) { | |
deckHash[char] = []; | |
}); | |
console.log('Processed ' + Object.keys(deckHash).length + ' instructions.'); | |
} | |
else { | |
// Process encodings (values). Start at column 5. | |
var keys = Object.keys(deckHash); | |
for (var col=5; col<row.length - 1; col++) { | |
if (row[col] == 'O') { | |
deckHash[keys[col - 5]].push(rowNum - 3); | |
} | |
} | |
} | |
} | |
rowNum++; | |
}); | |
return deckHash; | |
} | |
function setCharAt(str,index,chr) { | |
if(index > str.length-1) return str; | |
return str.substr(0,index) + chr + str.substr(index+1); | |
} | |
function encode(text, deck) { | |
var card = ''; | |
card += ' ________________________________________________________________\n'; | |
card += ' /* \n'; | |
card += '12 / \n'; | |
card += '11| \n'; | |
card += ' 0| \n'; | |
card += ' 1| \n'; | |
card += ' 2| \n'; | |
card += ' 3| \n'; | |
card += ' 4| \n'; | |
card += ' 5| \n'; | |
card += ' 6| \n'; | |
card += ' 7| \n'; | |
card += ' 8| \n'; | |
card += ' 9| \n'; | |
card += ' |__________________________________________________________________\n'; | |
text = text.toUpperCase().replace(/ /g, ''); | |
card = card.replace('*', text); | |
var rowNum = 0; | |
card.split('\n').forEach(function(row) { | |
var origRow = row; | |
if (rowNum > 1 && rowNum < 14) { | |
for (var col=0; col<text.length; col++) { | |
var char = text[col]; | |
deck[char].forEach(function(index) { | |
if (rowNum - 2 == index) { | |
row = setCharAt(row, col + 5, 'O'); | |
} | |
}); | |
} | |
} | |
card = card.replace(origRow, row); | |
rowNum++; | |
}); | |
return card; | |
} | |
// Initialize our deck. | |
var deckHash = initialize(deck); | |
// Setup input. | |
var input = [ | |
'Hello, world!', | |
'This is Reddit\'s r/dailyprogrammer challenge.', | |
'WRITE (6,7) FORMAT(13H HELLO, WORLD) STOP END' | |
]; | |
// Encode a punch card for each input. | |
input.forEach(function(test) { | |
var card = encode(test, deckHash); | |
$('#output').append('<b>' + test + '</b>'); | |
$('#output').append('<pre>' + card + '</pre>'); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment