Quiz Lab
Quiz Lab
Music
Pop Music
Type in answers that appear in a list
Type in answers that appear in a list
Classic
Can you name the songs ranked at positions 50-1 in Pitchfork's Top 200 Songs of the 2010s?
By Cryptus
17m
50 Questions
20 Plays20 Plays
20 Plays
Comments
Give Quiz Kudos
Give Quiz Kudos
-
SporcleCryptus · Pitchfork's Top 200 of the 2010s 50-1
")$objective.click(() => {window.onClickObjective(reckoningQuestObjective.quest_number, reckoningQuestObjective.objective_number, reckoningQuestObjective.quest_id, reckoningQuestObjective.objective_id, $objective);});if (!window.mweb) {$j('#snark').hide();$objective.insertAfter($j('#gameOverMsg'));} else if (is_flagship_app_view) {$j('#snark').html();$objective.appendTo($j('#snark'));} else {$objective.appendTo($j('#reckoning .stats-wrapper'));}} else if (showSnark) {var snark = getSnark(userPct);var attachSnarkModalListener = false;if (snark !== '') {snark = ""+snark+"";if (!window.mweb) {if (false) {attachSnarkModalListener = true;snark += "";} else {snark += "";}}} else {$j('#snark').hide();}$j('#snark').html(snark);if(attachSnarkModalListener){ $j('#hide-snark-open-confirmation-modal').on('click', function () { var modalArgs = {title: 'Hide These Messages?',message: 'Are you sure you want to hide post-quiz messages?', onYes: function(remodal){ $j.ajax({ type: "GET", url: "/ajax/user_settings.php", data: {s: 0}, success: function(response) { if (response.success) { $j('#snark').hide(); remodal.close(); } else { if (response.responseJSON.message) { remodal.$modal.find('#confirmation-error').html(response.responseJSON.message); remodal.$modal.find('#confirmation-error').show(); } else { remodal.$modal.find('#confirmation-error').html('There was an error saving your preferences. Please contact feedback if you continue to see this issue.'); remodal.$modal.find('#confirmation-error').show(); } } }, error: function(response) { if (response.responseJSON.message) { remodal.$modal.find('#confirmation-error').html(response.responseJSON.message); remodal.$modal.find('#confirmation-error').show(); } else { remodal.$modal.find('#confirmation-error').html('There was an error saving your preferences. Please contact feedback if you continue to see this issue.'); remodal.$modal.find('#confirmation-error').show(); } } }); } }; SporcleLib.Modal._openConfirmationModal(modalArgs); }); }} else {$j('#snark').hide();}// Update get reckoning with playlist infovar playlistData;if (mweb) {playlistData = typeof window.playlist === 'object' && window.playlist.hasOwnProperty('games') ? window.playlist : null;} else {playlistData = window.Sporcle.gameData.playlist ? window.Sporcle.gameData.playlist.vm.data : null;}if (playlistData) {playlistReckoning(playlistData, userPct, false && !stopwatch);}$j('#playGameBar').addClass('reckoning');$j('#reckonBox').show();if (mweb) {/* mobile games only */$j('#reckoning-numright').html(numRight);$j('#reckoning-time').html(displayTime(timerSecs));if (stopwatch) {$j('#reckoning-time-title').text("Stopwatch");$j('#reckoning-time, #reckoning-score').addClass('timePast');}var checkToOpenFlorinPlayGoalModal = () => {if (userPct == 0) {return;}if (!florinsPlayGoalData) {return;}var openModal = false;if (florinsPlayGoalData.reward_claimable) {openModal = true;} else if (florinsPlayGoalData.curr_streak + 1 == florinsPlayGoalData.goal_days && florinsPlayGoalData.plays_today == 0) {// First play of the day, this should complete their play goalopenModal = true;}if (openModal) { window.SporcleLib.Modal.openFlorinPlayGoalModal({ // Fudge these values to be at the goal, since we haven't necessarily logged this play yet and it might be the 7th curr_streak : florinsPlayGoalData.goal_days, reward_claimable : true, plays_today : florinsPlayGoalData.plays_today + 1, goal_days : florinsPlayGoalData.goal_days, reward_amount : florinsPlayGoalData.reward_amount, })}}if (is_flagship_app_view) {let animations = window.animations;let hapticType = 'success';let completeMsg;let animConfig = {animationData : animations.checkmark,loop : true,playSegments : [[0, 30], [31, 75]]};if (userPct == 1) {animConfig.animationData = animations.perfectScore;animConfig.playSegments = [[0, 14], [15, 75]];completeMsg = "Perfect Score!";} else if (timerSecs == 0) {hapticType = 'error';animConfig.animationData = animations.outOfTime;animConfig.playSegments = [[0, 14], [15, 75]];completeMsg = "Out of Time!";} else if (_spks && !didGiveUp) {hapticType = 'error';animConfig.animationData = animations.bomb;animConfig.playSegments = [[0, 14], [15, 75]];completeMsg = "You Hit a Mine!";}window.SporcleLib.Modal.openModalFromTpl($j('#post-game-modal-tpl').html(), {show_loading : false,onInit : (modal) => {let $modal = modal.$modal; $modal.attr('id', 'postGameModal'); postGameAnim = lottie.loadAnimation({container : $modal.find('#postGameIcon')[0],animationData : animConfig.animationData,loop : animConfig.loop,autoplay : false});$modal.find('.modal-close').on('click', () => {window.continuePostQuiz();}); $modal.find('#completeMsg').html(completeMsg); $modal.find('#postPct').html(roundPercentScore(userPct));$modal.find('#postCorrect').html($j('#reckoning-score').text());if (snark) {$modal.find('#snark').html(snark);} else {$modal.find('#snark').hide();}setTimeout(() => {postGameAnim.playSegments(animConfig.playSegments, true);// if (hapticType) {// setTimeout(() => {// window.SporcleApp.api.playHaptic(hapticType);// }, 150);// }}, 150);},onClose : () => {// Need this delay because if we open a new modal right as the close animation finishes,// Then the modal events get confused and the "onOpen" callback never gets calledsetTimeout(() => {checkToOpenFlorinPlayGoalModal();}, 50);}});} else {checkToOpenFlorinPlayGoalModal();}}$j('#playGameBox').empty().hide();$j('#postGameBox').show();}function toggleshow() {showans = !showans;}function roundPercentScore(pctScore) {return _.round(100 * pctScore);}function updateBadge(userPct) {var earned = false;if (quizBadge && userPct > 0) { if (quizBadge.criteria && quizBadge.criteria.length) { var requiredCount = quizBadge.criteria.length; var earnedCount = 0; //Loop through possible badge criteria to see if we earned them quizBadge.criteria.forEach(function (criterion) { var comparison = parseInt(criterion.compare); if(criterion.name === 'percent'){ if ((comparison === 0 && userPct === parseFloat(criterion.value)) || //'0' means percent needs to equal (comparison === 1 && userPct > parseFloat(criterion.value)) || //'1' means percent needs to be greater than (comparison === -1 && userPct < parseFloat(criterion.value)) //'-1' means percent needs to be less than (at the time of writing, no badge exists like this) ) { earnedCount++; } } else if (criterion.name === 'month'){ var d = new Date(); //getMonth() starts at 0 if((d.getMonth() + 1 == criterion.value && comparison === 0) || (d.getMonth() + 1 > criterion.value && comparison === 1) || (d.getMonth() + 1 < criterion.value && comparison === -1) ){ earnedCount++; } } else if (criterion.name === 'day'){ var d = new Date(); if((d.getDate() == criterion.value && comparison === 0) || (d.getDate() > criterion.value && comparison === 1) || (d.getDate() < criterion.value && comparison === -1) ){ earnedCount++; } } else if (criterion.name === 'day_of_the_week'){ var d = new Date(); if((d.getDay() == criterion.value && comparison === 0) || (d.getDay() > criterion.value && comparison === 1) || (d.getDay() < criterion.value && comparison === -1) ){ earnedCount++; } } else if (criterion.name === 'avg_percent' && typeof averageScore !== 'undefined') {var roundedUserPct = _.round(userPct, 2); //matches backend precision in badge trackervar roundedAvgPct = _.round(averageScore, 2);if((roundedUserPct == roundedAvgPct && comparison === 0) || (roundedUserPct > roundedAvgPct && comparison === 1) || (roundedUserPct < roundedAvgPct && comparison === -1) ){ earnedCount++; } }}); earned = earnedCount == requiredCount;} else {earned = true;}} if (earned) {quizBadge.condition_earned = true;quizBadge.achieved_count++; var spliceIndex = null;_(quizBadge.remaining_conditions).each(function(condition, index) {if (quizBadge.condition_id == condition.condition_id) {spliceIndex = index;}});_(quizBadge.conditions).each(function(condition, index) {if (quizBadge.condition_id == condition.condition_id) {condition.earned = true;}});if (spliceIndex !== null) {quizBadge.remaining_conditions.splice(spliceIndex, 1); quizBadge.condition_earned_date = (new Date()).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' });; }if (quizBadge.remaining_conditions.length === 0 ) {if (quizBadge.badge_earned && quizBadge.levelable) {quizBadge.achieved_count = 0;quizBadge.level++;var currDate = new Date();quizBadge.last_level_date = window.SporcleLib.getMonthString(currDate.getMonth()) + ' ' + currDate.getDate() + ', ' + currDate.getFullYear();} else {quizBadge.badge_earned = true;var currDate = new Date();quizBadge.earned_date = window.SporcleLib.getMonthString(currDate.getMonth()) + ' ' + currDate.getDate() + ', ' + currDate.getFullYear();if (quizBadge.levelable) {quizBadge.level = 1;quizBadge.last_level_date = window.SporcleLib.getMonthString(currDate.getMonth()) + ' ' + currDate.getDate() + ', ' + currDate.getFullYear();quizBadge.achieved_count = 0;}}}if (badgeTooltip) {badgeTooltip.deactivate();}if (badgeTooltipRightRail) {badgeTooltipRightRail.deactivate();}var template = _.template($j('#quiz-badge-template').html());if (window.mweb) {$j('#main-wrapper .quiz-badge').replaceWith($j(template(quizBadge)));} else {quizBadge.tooltip_trigger_id = 'quiz-badge-art';$j('#main-quiz-content .quiz-badge').replaceWith($j(template(quizBadge)));quizBadge.tooltip_trigger_id = 'quiz-badge-art-right-rail';$j('#right-rail .quiz-badge').replaceWith($j(template(quizBadge)));if (!quizBadge.badge_earned) {if (window.setupUnearnedBadgeTooltip) {window.setupUnearnedBadgeTooltip($j('#quiz-badge-art'), quizBadge);window.setupUnearnedBadgeTooltip($j('#quiz-badge-art-right-rail'), quizBadge);} else {var conditionsTemp = _.template($j('#badge-conditions-template').html());var tooltipHtml = $j(conditionsTemp(quizBadge));const badgeTooltipOptions = { //this should match /sporcle-ui/tooltips/functionalTooltipstarget : true,tipJoint : 'bottom middle',showOn : 'mouseover',hideTriggers : ['target','tip'],stemLength : 8,stemBase : 12,hideOn : 'mouseout',removeElementsOnHide : true,background : 'white',borderColor : '#d8d8d8',borderWidth : 1,shadowOffset : [3,3],shadowBlur : 10,showEffect : 'slide',showEffectDuration : 0.1,hideEffectDuration : 0.3,className : 'badge-tooltip',shadowColor : 'rgba(0,0,0,0.25)'};badgeTooltip = new Opentip('#quiz-badge-art', tooltipHtml.html(), badgeTooltipOptions);badgeTooltipRightRail = new Opentip('#quiz-badge-art-right-rail', tooltipHtml.html(), badgeTooltipOptions);}} else {if (window.setupEarnedBadgeTooltip) {window.setupEarnedBadgeTooltip($j('#quiz-badge-art'), quizBadge);window.setupEarnedBadgeTooltip($j('#quiz-badge-art-right-rail'), quizBadge);}}}}}function showHintTooltip(x, y, hint) {$hint = $j('#hintTooltip');if ($hint.length == 0) {$hint = $j('
' +'
' +'
' +'
' +'
' +'
').appendTo($j('body'));}if (hint) {var $afterContainer = $hint.find('.afterContainer');var $after = $hint.find('.after');// Set to max width before resize$afterContainer.css({width: '120px'});$hint.show();// Set tooltip text to hint$after.html(hint);// Get width of tooltip with textvar width = Math.ceil($after[0].offsetWidth) + 1;var leftShift = 0;if (mweb) {// Make sure the tooltip doesn't go off either side of the screenvar leftBound = 51;var rightBound = $j('body').width() - 71;var buf = 11;// Shift based on width of textvar shiftLimit = Math.max(width/2 - 20, 0);if (x < leftBound) {// Too close to left edge of screenleftShift = -shiftLimit;x = Math.max(x, buf);} else if (x > rightBound) {// Too close to right edge of screenleftShift = shiftLimit;x = Math.min(x, $j('body').width() - buf);}}// Set the position of the hint$hint.css({left: x + 'px',top: y + 'px',});// Set outer container size and position$afterContainer.css({width: width + 'px',left: '-' + ((width / 2) + leftShift) + 'px'});} else {$hint.hide();}}function getRandomColor() {var r = Math.round(Math.random() * 255);var g = Math.round(Math.random() * 255);var b = Math.round(Math.random() * 255);return 'rgb(' + r + ',' + g + ',' + b + ')';}function hintTooltipIsDisplayed() {return $j('#hintTooltip').is(':visible');}function getCurrentHintText() {return $j('#hintTooltip .afterContainer .after').text();}// This is used to yield execution to the main javascript thread so that we can break longer running tasks into smaller tasks.// See here: https://web.dev/articles/optimize-long-tasks?utm_source=devtoolsfunction yieldToMain () {return new Promise(resolve => {setTimeout(resolve, 0);});}async function runStartCode(stopwatch) {if (typeof gamePageIsLoaded != "undefined" && gamePageIsLoaded) {if (window.startTriggered) {return;} else {window.startTriggered = true;}if (typeof stopwatch !== 'undefined') {if (stopwatch) {window.selectTimerSetting('stopwatch');} else {window.selectTimerSetting('timer');}}// The `startGame` function does a lot, so we want to yield execution both before and after this call. Yielding before// will allow the existing task to finish, freeing up the runtime to move to the next thing in the message queue before startGame// executes. Yielding after will do the same, before we perform the rest of the actions related to starting a quiz.await yieldToMain();await startGame(1020);await yieldToMain();callSPHooks('postStart');}}function callSPHooks(name) {if (typeof _spHooks != 'undefined') {var hlen = _spHooks[name].length;for (var i = 0; i < hlen; i++) {_spHooks[name][i]();}}}
0/50
Quiz is untimed. Quiz plays in practice mode will not be counted towards challenge completion or badge progress.
17:00
|
|