Playing Pickomino

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












10












$begingroup$


In the game Pickomino, there are several tiles lying in the middle of the table, each with a different positive integer on them. Each turn, the players roll dices in a certain way and get a score, which is a nonnegative integer.



Now the player takes the tile with the highest number that is still lower or equal to their score, removing the tile from the middle and adding it to their stack. If this is not possible because all numbers in the middle are higher than the player's score, the player loses the topmost tile from their stack (which was added latest), which is returned to the middle. If the player has no tiles left, nothing happens.



The challenge



Simulate a player playing the game against themselves. You get a list of the tiles in the middle and a list of the scores that the player got. Return a list of the tiles of the player after all turns have been evaluated.



Challenge rules



  • You can assume that the list with the tiles is ordered and doesn't contain any integer twice.

  • You can take both lists of input in any order you want

  • The output has to keep the order of the tiles on the stack, but you can decide whether the list is sorted from top to bottom or from bottom to top.

General rules



  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Adding an explanation for you answer is recommended.

Example



(taken from the 6th testcase)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]


First score is 22, so take the highest tile in the middle <= 22, which is 22 itself.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]


Next score is 22, so take the highest tile in the middle <= 22. Because 22 is already taken, the player has to take 21.



Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]


Next score is 22, but all numbers <= 22 are already taken. Therefore, the player loses the topmost tile on the stack (21), which is returned into the middle.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]


Next scores are 23, 21 and 24, so the player takes these tiles from the middle.



Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]


The player busts and scores zero. Therefore, the tile with the number 24 (topmost on the stack) is returned into the middle.



Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]


The last score is 22, but all tiles <= 22 are already taken, so the player loses the topmost tile on the stack (21).



Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]


Test cases



(with the topmost tile last in the output list)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores:
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]

Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]

Tiles:
Scores: [4, 6, 1, 6]
Output:



Sandbox










share|improve this question









$endgroup$











  • $begingroup$
    Can we assume there are no tiles with a value of zero in the middle?
    $endgroup$
    – Embodiment of Ignorance
    Feb 6 at 23:06










  • $begingroup$
    @EmbodimentofIgnorance It says "positive integer", so yes.
    $endgroup$
    – Ørjan Johansen
    Feb 6 at 23:10










  • $begingroup$
    Since the tiles are unique, would it be acceptable to take them as a bitmask?
    $endgroup$
    – Arnauld
    Feb 7 at 0:10











  • $begingroup$
    @TRITICIMAGVS Yes, if the middle pile is empty, the player cannot take a tile from the middle, so they lose a tile (if they have one)
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13










  • $begingroup$
    @Arnauld That is acceptable
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13















10












$begingroup$


In the game Pickomino, there are several tiles lying in the middle of the table, each with a different positive integer on them. Each turn, the players roll dices in a certain way and get a score, which is a nonnegative integer.



Now the player takes the tile with the highest number that is still lower or equal to their score, removing the tile from the middle and adding it to their stack. If this is not possible because all numbers in the middle are higher than the player's score, the player loses the topmost tile from their stack (which was added latest), which is returned to the middle. If the player has no tiles left, nothing happens.



The challenge



Simulate a player playing the game against themselves. You get a list of the tiles in the middle and a list of the scores that the player got. Return a list of the tiles of the player after all turns have been evaluated.



Challenge rules



  • You can assume that the list with the tiles is ordered and doesn't contain any integer twice.

  • You can take both lists of input in any order you want

  • The output has to keep the order of the tiles on the stack, but you can decide whether the list is sorted from top to bottom or from bottom to top.

General rules



  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Adding an explanation for you answer is recommended.

Example



(taken from the 6th testcase)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]


First score is 22, so take the highest tile in the middle <= 22, which is 22 itself.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]


Next score is 22, so take the highest tile in the middle <= 22. Because 22 is already taken, the player has to take 21.



Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]


Next score is 22, but all numbers <= 22 are already taken. Therefore, the player loses the topmost tile on the stack (21), which is returned into the middle.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]


Next scores are 23, 21 and 24, so the player takes these tiles from the middle.



Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]


The player busts and scores zero. Therefore, the tile with the number 24 (topmost on the stack) is returned into the middle.



Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]


The last score is 22, but all tiles <= 22 are already taken, so the player loses the topmost tile on the stack (21).



Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]


Test cases



(with the topmost tile last in the output list)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores:
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]

Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]

Tiles:
Scores: [4, 6, 1, 6]
Output:



Sandbox










share|improve this question









$endgroup$











  • $begingroup$
    Can we assume there are no tiles with a value of zero in the middle?
    $endgroup$
    – Embodiment of Ignorance
    Feb 6 at 23:06










  • $begingroup$
    @EmbodimentofIgnorance It says "positive integer", so yes.
    $endgroup$
    – Ørjan Johansen
    Feb 6 at 23:10










  • $begingroup$
    Since the tiles are unique, would it be acceptable to take them as a bitmask?
    $endgroup$
    – Arnauld
    Feb 7 at 0:10











  • $begingroup$
    @TRITICIMAGVS Yes, if the middle pile is empty, the player cannot take a tile from the middle, so they lose a tile (if they have one)
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13










  • $begingroup$
    @Arnauld That is acceptable
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13













10












10








10





$begingroup$


In the game Pickomino, there are several tiles lying in the middle of the table, each with a different positive integer on them. Each turn, the players roll dices in a certain way and get a score, which is a nonnegative integer.



Now the player takes the tile with the highest number that is still lower or equal to their score, removing the tile from the middle and adding it to their stack. If this is not possible because all numbers in the middle are higher than the player's score, the player loses the topmost tile from their stack (which was added latest), which is returned to the middle. If the player has no tiles left, nothing happens.



The challenge



Simulate a player playing the game against themselves. You get a list of the tiles in the middle and a list of the scores that the player got. Return a list of the tiles of the player after all turns have been evaluated.



Challenge rules



  • You can assume that the list with the tiles is ordered and doesn't contain any integer twice.

  • You can take both lists of input in any order you want

  • The output has to keep the order of the tiles on the stack, but you can decide whether the list is sorted from top to bottom or from bottom to top.

General rules



  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Adding an explanation for you answer is recommended.

Example



(taken from the 6th testcase)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]


First score is 22, so take the highest tile in the middle <= 22, which is 22 itself.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]


Next score is 22, so take the highest tile in the middle <= 22. Because 22 is already taken, the player has to take 21.



Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]


Next score is 22, but all numbers <= 22 are already taken. Therefore, the player loses the topmost tile on the stack (21), which is returned into the middle.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]


Next scores are 23, 21 and 24, so the player takes these tiles from the middle.



Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]


The player busts and scores zero. Therefore, the tile with the number 24 (topmost on the stack) is returned into the middle.



Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]


The last score is 22, but all tiles <= 22 are already taken, so the player loses the topmost tile on the stack (21).



Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]


Test cases



(with the topmost tile last in the output list)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores:
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]

Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]

Tiles:
Scores: [4, 6, 1, 6]
Output:



Sandbox










share|improve this question









$endgroup$




In the game Pickomino, there are several tiles lying in the middle of the table, each with a different positive integer on them. Each turn, the players roll dices in a certain way and get a score, which is a nonnegative integer.



Now the player takes the tile with the highest number that is still lower or equal to their score, removing the tile from the middle and adding it to their stack. If this is not possible because all numbers in the middle are higher than the player's score, the player loses the topmost tile from their stack (which was added latest), which is returned to the middle. If the player has no tiles left, nothing happens.



The challenge



Simulate a player playing the game against themselves. You get a list of the tiles in the middle and a list of the scores that the player got. Return a list of the tiles of the player after all turns have been evaluated.



Challenge rules



  • You can assume that the list with the tiles is ordered and doesn't contain any integer twice.

  • You can take both lists of input in any order you want

  • The output has to keep the order of the tiles on the stack, but you can decide whether the list is sorted from top to bottom or from bottom to top.

General rules



  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Adding an explanation for you answer is recommended.

Example



(taken from the 6th testcase)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]


First score is 22, so take the highest tile in the middle <= 22, which is 22 itself.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]


Next score is 22, so take the highest tile in the middle <= 22. Because 22 is already taken, the player has to take 21.



Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]


Next score is 22, but all numbers <= 22 are already taken. Therefore, the player loses the topmost tile on the stack (21), which is returned into the middle.



Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]


Next scores are 23, 21 and 24, so the player takes these tiles from the middle.



Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]


The player busts and scores zero. Therefore, the tile with the number 24 (topmost on the stack) is returned into the middle.



Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]


The last score is 22, but all tiles <= 22 are already taken, so the player loses the topmost tile on the stack (21).



Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]


Test cases



(with the topmost tile last in the output list)



Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores:
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output:

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]

Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]

Tiles:
Scores: [4, 6, 1, 6]
Output:



Sandbox







code-golf game






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Feb 6 at 22:04









Black Owl KaiBlack Owl Kai

69011




69011











  • $begingroup$
    Can we assume there are no tiles with a value of zero in the middle?
    $endgroup$
    – Embodiment of Ignorance
    Feb 6 at 23:06










  • $begingroup$
    @EmbodimentofIgnorance It says "positive integer", so yes.
    $endgroup$
    – Ørjan Johansen
    Feb 6 at 23:10










  • $begingroup$
    Since the tiles are unique, would it be acceptable to take them as a bitmask?
    $endgroup$
    – Arnauld
    Feb 7 at 0:10











  • $begingroup$
    @TRITICIMAGVS Yes, if the middle pile is empty, the player cannot take a tile from the middle, so they lose a tile (if they have one)
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13










  • $begingroup$
    @Arnauld That is acceptable
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13
















  • $begingroup$
    Can we assume there are no tiles with a value of zero in the middle?
    $endgroup$
    – Embodiment of Ignorance
    Feb 6 at 23:06










  • $begingroup$
    @EmbodimentofIgnorance It says "positive integer", so yes.
    $endgroup$
    – Ørjan Johansen
    Feb 6 at 23:10










  • $begingroup$
    Since the tiles are unique, would it be acceptable to take them as a bitmask?
    $endgroup$
    – Arnauld
    Feb 7 at 0:10











  • $begingroup$
    @TRITICIMAGVS Yes, if the middle pile is empty, the player cannot take a tile from the middle, so they lose a tile (if they have one)
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13










  • $begingroup$
    @Arnauld That is acceptable
    $endgroup$
    – Black Owl Kai
    Feb 7 at 9:13















$begingroup$
Can we assume there are no tiles with a value of zero in the middle?
$endgroup$
– Embodiment of Ignorance
Feb 6 at 23:06




$begingroup$
Can we assume there are no tiles with a value of zero in the middle?
$endgroup$
– Embodiment of Ignorance
Feb 6 at 23:06












$begingroup$
@EmbodimentofIgnorance It says "positive integer", so yes.
$endgroup$
– Ørjan Johansen
Feb 6 at 23:10




$begingroup$
@EmbodimentofIgnorance It says "positive integer", so yes.
$endgroup$
– Ørjan Johansen
Feb 6 at 23:10












$begingroup$
Since the tiles are unique, would it be acceptable to take them as a bitmask?
$endgroup$
– Arnauld
Feb 7 at 0:10





$begingroup$
Since the tiles are unique, would it be acceptable to take them as a bitmask?
$endgroup$
– Arnauld
Feb 7 at 0:10













$begingroup$
@TRITICIMAGVS Yes, if the middle pile is empty, the player cannot take a tile from the middle, so they lose a tile (if they have one)
$endgroup$
– Black Owl Kai
Feb 7 at 9:13




$begingroup$
@TRITICIMAGVS Yes, if the middle pile is empty, the player cannot take a tile from the middle, so they lose a tile (if they have one)
$endgroup$
– Black Owl Kai
Feb 7 at 9:13












$begingroup$
@Arnauld That is acceptable
$endgroup$
– Black Owl Kai
Feb 7 at 9:13




$begingroup$
@Arnauld That is acceptable
$endgroup$
– Black Owl Kai
Feb 7 at 9:13










11 Answers
11






active

oldest

votes


















3












$begingroup$


Haskell, 119 111 104 103 bytes



1 byte saved thanks to Ørjan Johansen





(#)=span.(<)
(a%(b:c))d|(g,e:h)<-b#d=(e:a)%c$g++h|g:h<-a,(i,j)<-g#d=h%c$i++g:j|1>0=a%c$d
(a%b)c=a
(%)


Try it online!



Assumes the tiles are sorted in descending order.



Not much fancy going on here. The first argument is the players pile, the second their scores and the third is the pile in the middle.






share|improve this answer











$endgroup$








  • 1




    $begingroup$
    This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
    $endgroup$
    – Ørjan Johansen
    Feb 6 at 23:21











  • $begingroup$
    @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
    $endgroup$
    – Sriotchilism O'Zaic
    Feb 6 at 23:27










  • $begingroup$
    Save a byte with (#)=span.(<).
    $endgroup$
    – Ørjan Johansen
    Feb 6 at 23:49










  • $begingroup$
    @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
    $endgroup$
    – Sriotchilism O'Zaic
    Feb 7 at 0:02


















3












$begingroup$

Japt, 24 bytes



Oof! That didn't work out as well as I thought it would!



Takes input in reverse order.



®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤


Try it or run all test cases on TIO



®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤ :Implicit input of N=[U=scores, V=tiles]
® :Map each Z in U
= : Reassign to Z
Va : 0-based index of last element in V (-1 if not found)
§Z : Less than or equal to Z
) : End reassignment
Ì : Sign of difference with -1 (1 if found, 0 if not)
? : If truthy (not zero)
Np : Push to N
VjZ : Remove and return the element at index Z in V
: : Else
Vp : Push to V
No : Pop the last element of N
) : End Push
n : Sort V
à :End map
N¤ :Slice the first 2 elements (the original inputs) off N





share|improve this answer











$endgroup$




















    2












    $begingroup$


    Perl 6, 89 bytes





    my@x;@^a;@^b>>.&@x,;@x


    Try it online!



    I think there's a few more bytes to be golfed off this...






    share|improve this answer









    $endgroup$




















      2












      $begingroup$


      C# (Visual C# Interactive Compiler), 159 158 154 bytes





      Called as f(tiles)(scores)



      n=>m=>var s=new Stack<int>();m.Add(0);n.ForEach(k=>var a=m.Except(s).Where(x=>x<=k).Max();if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a););return s;


      If only System.Void is actually a return type and not just a placeholder for reflection. I would be able to replace if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a); with var t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);, saving two bytes.



      Try it online!



      //Function taking in a list and returning
      //another function that takes in another list and returns a stack
      n=>m=>
      //Initialize the stack
      var s=new Stack<int>();
      //Add a zero to the tiles, to ensure no exceptions appear due to accessing
      //non-existent elements in an empty collection later
      //when we try to filter it later and getting the biggest element
      m.Add(0);
      //Iterate through our scores
      n.ForEach(k=>
      //Create a variable called a, which we will use later
      var a=
      //Get all the elements in the middle that haven't appeared in our stack
      m.Except(s).
      //And throw away all elements that are bigger than our current score
      Where(x=>x<=k).
      //And get the biggest element there, and that is now the value of a
      //Without the m.Add(0), we would get an exception here
      Max();
      //Self-explanatory, if a is less than 1 aka if a equals 0
      //Checks if all elements in the middle are bigger than our score
      //Except for our self added 0, of course
      if(a<1)
      //Add 0 to the middle if the stack is empty
      //Remember, zeros don't affect the list
      m.Add(s.Count<1?0:
      //Else pop the stack and add that to the middle
      s.Pop());
      //If a isn't 0, add a to the stack
      else s.Push(a););
      //Afterwards, return the stack
      return s;





      share|improve this answer











      $endgroup$




















        2












        $begingroup$


        Ruby, 77 bytes





        ->t,s,r=s.mapi;r


        Try it online!






        share|improve this answer









        $endgroup$




















          2












          $begingroup$


          JavaScript (Node.js), 80 bytes



          Same logic as the ES6 version, but takes the tiles as a BigInt bitmask and the scores as an array of BigInts.





          m=>s=>s.map(g=x=>!x||m>>x&1n?m^=1n<<(x?r.push(x)&&x:r.pop()||~x):g(--x),r=)&&r


          Try it online!




          JavaScript (ES6),  100 98 94  87 bytes



          Takes input as (tiles)(scores). The tiles can be passed in any order.





          t=>s=>s.map(g=x=>m[x]?m[x?r.push(x)&&x:r.pop()]^=1:g(x-1),t.map(x=>m[x]=1,m=[r=]))&&r


          Try it online!



          Commented



          t => s => // t = tiles; s = scores
          s.map(g = x => // for each score x in s:
          m[x] ? // if m[x] is set:
          m[ // update the 'middle':
          x ? // if x is not equal to 0:
          r.push(x) && x // push x in the stack r and yield x
          : // else:
          r.pop() // pop the last value from the stack
          // (may be undefined if the stack is empty)
          ] ^= 1 // toggle the corresponding flag in m
          : // else:
          g(x - 1), // try again with x - 1
          t.map(x => // initialization of the 'middle': for each value x in t:
          m[x] = 1, // set m[x]
          m = [r = ] // the stack r is stored as the first entry of m,
          // which ensures that g will always stop when x = 0
          ) // end of initialization
          ) && r // end of main loop; return r





          share|improve this answer











          $endgroup$




















            1












            $begingroup$


            Charcoal, 35 bytes



            Fη«≔⌈Φ講κιι¿ι«≔Φθ⁻κιθ⊞υι»¿υ⊞θ⊟υ»Iυ


            Try it online! Link is to verbose version of code. Explanation:



            Fη«


            Loop over the scores.



            ≔⌈Φ講κιι


            Look for the highest available tile.



            ¿ι«


            If it exists then...



            ≔Φθ⁻κιθ


            ... remove the tile from the middle...



            ⊞υι


            ... and add it to the stack.



            »¿υ


            Otherwise, if the stack is not empty...



            ⊞θ⊟υ


            Remove the latest tile from the stack and return it to the middle.



            »Iυ


            Print the resulting stack from oldest to newest.






            share|improve this answer









            $endgroup$




















              1












              $begingroup$


              Python 2, 120 bytes





              m,s=input()
              t=
              for n in s:
              i=[v for v in m if v<=n]
              if i:v=max(i);t+=[v];m.remove(v)
              else:m+=t and[t.pop()]
              print t


              Try it online!






              share|improve this answer









              $endgroup$




















                1












                $begingroup$


                05AB1E, 27 22 bytes



                vÐy>‹ÏDgĀià©K®sësª])¨


                Try it online or verify all test cases.



                Explanation:





                v # Loop `y` over the (implicit) input-list of scores:
                Ð # Triplicate the tiles list (takes it as implicit input in the first iteration)
                y>‹ # Check for each if `y` <= the value in the tiles list
                Ï # Only leave the values at the truthy indices
                D # Duplicate the remaining tiles
                ¯Êi # If this list is not empty:
                à # Pop the list, and push its maximum
                © # Store it in the register, without popping
                K # Remove it from the tiles list
                ® # Push the maximum again
                s # Swap the maximum and tiles-list on the stack
                ë # Else:
                # Remove the duplicated empty tiles-list from the stack
                sª # Add the last tile to the tiles-list
                ] # Close the if-else and loop
                ) # Wrap everything on the stack into a list
                ¨ # Remove the last item (the tiles-list)
                # (and output the result implicitly)





                share|improve this answer











                $endgroup$




















                  1












                  $begingroup$

                  Pyth, 32 bytes



                  VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y


                  Try it online here, or verify all the test cases at once here.



                  There must be room for improvement here somewhere - any suggestions would be much appreciated!



                  VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y Implicit: Q=input 1 (middle), E=input 2 (scores), Y=
                  VE ; For each score, as N, in the second input:
                  f Q Filter Q, keeping elements T where:
                  !>TN T is not greater than N
                  (less than or equal is the only standard inequality without a token in Pyth, grrr)
                  +0 Prepend 0 to the filtered list
                  eS Take the largest of the above (_e_nd of _S_orted list)
                  J Store the above in J
                  ? If the above is truthy:
                  aYJ Append J to Y
                  e Take last element of Y (i.e. J)
                  =-Q Remove that element from Q and assign the result back to Q
                  Else:
                  |Y]0 Yield Y, or [0] if Y is empty
                  .) Pop the last element from the above (mutates Y)
                  aQ Append the popped value to Q
                  Y Print Y





                  share|improve this answer









                  $endgroup$




















                    1












                    $begingroup$

                    Perl 5 -apl -MList:Util=max, 97 bytes



                    $_=$".<>;for$i(@F)(($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s:$s=~s/ d+$//?$_:$G).=$&$_=$s;s/ //


                    TIO



                    reads scores and tiles on next line and prints output.



                    How




                    • -apl : -p to loop over lines and print, -a autosplit, -l to chomp from input and add newline character to output


                    • $_=$".<> : to read next line (tiles) and prepend a space into default var $_


                    • for$i(@F) ... loop $i over @F fields of current line (scores)


                    • ( .. ? .. : .. ).=$& append previous match to ternary l-value


                    • ($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s in case max value found and removed from tiles ($_) l-value is scores ($s)


                    • $s=~s/ d+$//?$_ otherwise if last number could be removed from scores it's tiles


                    • :$G finally it's garbage because can't occur


                    • $_=$s;s/ // to set scores to default var, and remove leading space





                    share|improve this answer









                    $endgroup$












                      Your Answer





                      StackExchange.ifUsing("editor", function ()
                      return StackExchange.using("mathjaxEditing", function ()
                      StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
                      StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
                      );
                      );
                      , "mathjax-editing");

                      StackExchange.ifUsing("editor", function ()
                      StackExchange.using("externalEditor", function ()
                      StackExchange.using("snippets", function ()
                      StackExchange.snippets.init();
                      );
                      );
                      , "code-snippets");

                      StackExchange.ready(function()
                      var channelOptions =
                      tags: "".split(" "),
                      id: "200"
                      ;
                      initTagRenderer("".split(" "), "".split(" "), channelOptions);

                      StackExchange.using("externalEditor", function()
                      // Have to fire editor after snippets, if snippets enabled
                      if (StackExchange.settings.snippets.snippetsEnabled)
                      StackExchange.using("snippets", function()
                      createEditor();
                      );

                      else
                      createEditor();

                      );

                      function createEditor()
                      StackExchange.prepareEditor(
                      heartbeatType: 'answer',
                      autoActivateHeartbeat: false,
                      convertImagesToLinks: false,
                      noModals: true,
                      showLowRepImageUploadWarning: true,
                      reputationToPostImages: null,
                      bindNavPrevention: true,
                      postfix: "",
                      imageUploader:
                      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                      allowUrls: true
                      ,
                      onDemand: true,
                      discardSelector: ".discard-answer"
                      ,immediatelyShowMarkdownHelp:true
                      );



                      );













                      draft saved

                      draft discarded


















                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f179588%2fplaying-pickomino%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown

























                      11 Answers
                      11






                      active

                      oldest

                      votes








                      11 Answers
                      11






                      active

                      oldest

                      votes









                      active

                      oldest

                      votes






                      active

                      oldest

                      votes









                      3












                      $begingroup$


                      Haskell, 119 111 104 103 bytes



                      1 byte saved thanks to Ørjan Johansen





                      (#)=span.(<)
                      (a%(b:c))d|(g,e:h)<-b#d=(e:a)%c$g++h|g:h<-a,(i,j)<-g#d=h%c$i++g:j|1>0=a%c$d
                      (a%b)c=a
                      (%)


                      Try it online!



                      Assumes the tiles are sorted in descending order.



                      Not much fancy going on here. The first argument is the players pile, the second their scores and the third is the pile in the middle.






                      share|improve this answer











                      $endgroup$








                      • 1




                        $begingroup$
                        This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:21











                      • $begingroup$
                        @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 6 at 23:27










                      • $begingroup$
                        Save a byte with (#)=span.(<).
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:49










                      • $begingroup$
                        @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 7 at 0:02















                      3












                      $begingroup$


                      Haskell, 119 111 104 103 bytes



                      1 byte saved thanks to Ørjan Johansen





                      (#)=span.(<)
                      (a%(b:c))d|(g,e:h)<-b#d=(e:a)%c$g++h|g:h<-a,(i,j)<-g#d=h%c$i++g:j|1>0=a%c$d
                      (a%b)c=a
                      (%)


                      Try it online!



                      Assumes the tiles are sorted in descending order.



                      Not much fancy going on here. The first argument is the players pile, the second their scores and the third is the pile in the middle.






                      share|improve this answer











                      $endgroup$








                      • 1




                        $begingroup$
                        This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:21











                      • $begingroup$
                        @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 6 at 23:27










                      • $begingroup$
                        Save a byte with (#)=span.(<).
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:49










                      • $begingroup$
                        @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 7 at 0:02













                      3












                      3








                      3





                      $begingroup$


                      Haskell, 119 111 104 103 bytes



                      1 byte saved thanks to Ørjan Johansen





                      (#)=span.(<)
                      (a%(b:c))d|(g,e:h)<-b#d=(e:a)%c$g++h|g:h<-a,(i,j)<-g#d=h%c$i++g:j|1>0=a%c$d
                      (a%b)c=a
                      (%)


                      Try it online!



                      Assumes the tiles are sorted in descending order.



                      Not much fancy going on here. The first argument is the players pile, the second their scores and the third is the pile in the middle.






                      share|improve this answer











                      $endgroup$




                      Haskell, 119 111 104 103 bytes



                      1 byte saved thanks to Ørjan Johansen





                      (#)=span.(<)
                      (a%(b:c))d|(g,e:h)<-b#d=(e:a)%c$g++h|g:h<-a,(i,j)<-g#d=h%c$i++g:j|1>0=a%c$d
                      (a%b)c=a
                      (%)


                      Try it online!



                      Assumes the tiles are sorted in descending order.



                      Not much fancy going on here. The first argument is the players pile, the second their scores and the third is the pile in the middle.







                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited Feb 7 at 0:01

























                      answered Feb 6 at 22:59









                      Sriotchilism O'ZaicSriotchilism O'Zaic

                      35.2k10159369




                      35.2k10159369







                      • 1




                        $begingroup$
                        This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:21











                      • $begingroup$
                        @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 6 at 23:27










                      • $begingroup$
                        Save a byte with (#)=span.(<).
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:49










                      • $begingroup$
                        @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 7 at 0:02












                      • 1




                        $begingroup$
                        This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:21











                      • $begingroup$
                        @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 6 at 23:27










                      • $begingroup$
                        Save a byte with (#)=span.(<).
                        $endgroup$
                        – Ørjan Johansen
                        Feb 6 at 23:49










                      • $begingroup$
                        @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
                        $endgroup$
                        – Sriotchilism O'Zaic
                        Feb 7 at 0:02







                      1




                      1




                      $begingroup$
                      This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
                      $endgroup$
                      – Ørjan Johansen
                      Feb 6 at 23:21





                      $begingroup$
                      This cannot be right because sort is ascending. The TIO test case never hits that branch, though. I strongly recommend testing all cases every time when iterating like this.
                      $endgroup$
                      – Ørjan Johansen
                      Feb 6 at 23:21













                      $begingroup$
                      @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
                      $endgroup$
                      – Sriotchilism O'Zaic
                      Feb 6 at 23:27




                      $begingroup$
                      @ØrjanJohansen Thanks! Fixed now. At least I don't have to import any longer!
                      $endgroup$
                      – Sriotchilism O'Zaic
                      Feb 6 at 23:27












                      $begingroup$
                      Save a byte with (#)=span.(<).
                      $endgroup$
                      – Ørjan Johansen
                      Feb 6 at 23:49




                      $begingroup$
                      Save a byte with (#)=span.(<).
                      $endgroup$
                      – Ørjan Johansen
                      Feb 6 at 23:49












                      $begingroup$
                      @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
                      $endgroup$
                      – Sriotchilism O'Zaic
                      Feb 7 at 0:02




                      $begingroup$
                      @ØrjanJohansen Change made. Funny thing is I tried that earlier and thought that it added a byte.
                      $endgroup$
                      – Sriotchilism O'Zaic
                      Feb 7 at 0:02











                      3












                      $begingroup$

                      Japt, 24 bytes



                      Oof! That didn't work out as well as I thought it would!



                      Takes input in reverse order.



                      ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤


                      Try it or run all test cases on TIO



                      ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤ :Implicit input of N=[U=scores, V=tiles]
                      ® :Map each Z in U
                      = : Reassign to Z
                      Va : 0-based index of last element in V (-1 if not found)
                      §Z : Less than or equal to Z
                      ) : End reassignment
                      Ì : Sign of difference with -1 (1 if found, 0 if not)
                      ? : If truthy (not zero)
                      Np : Push to N
                      VjZ : Remove and return the element at index Z in V
                      : : Else
                      Vp : Push to V
                      No : Pop the last element of N
                      ) : End Push
                      n : Sort V
                      Ã :End map
                      N¤ :Slice the first 2 elements (the original inputs) off N





                      share|improve this answer











                      $endgroup$

















                        3












                        $begingroup$

                        Japt, 24 bytes



                        Oof! That didn't work out as well as I thought it would!



                        Takes input in reverse order.



                        ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤


                        Try it or run all test cases on TIO



                        ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤ :Implicit input of N=[U=scores, V=tiles]
                        ® :Map each Z in U
                        = : Reassign to Z
                        Va : 0-based index of last element in V (-1 if not found)
                        §Z : Less than or equal to Z
                        ) : End reassignment
                        Ì : Sign of difference with -1 (1 if found, 0 if not)
                        ? : If truthy (not zero)
                        Np : Push to N
                        VjZ : Remove and return the element at index Z in V
                        : : Else
                        Vp : Push to V
                        No : Pop the last element of N
                        ) : End Push
                        n : Sort V
                        Ã :End map
                        N¤ :Slice the first 2 elements (the original inputs) off N





                        share|improve this answer











                        $endgroup$















                          3












                          3








                          3





                          $begingroup$

                          Japt, 24 bytes



                          Oof! That didn't work out as well as I thought it would!



                          Takes input in reverse order.



                          ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤


                          Try it or run all test cases on TIO



                          ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤ :Implicit input of N=[U=scores, V=tiles]
                          ® :Map each Z in U
                          = : Reassign to Z
                          Va : 0-based index of last element in V (-1 if not found)
                          §Z : Less than or equal to Z
                          ) : End reassignment
                          Ì : Sign of difference with -1 (1 if found, 0 if not)
                          ? : If truthy (not zero)
                          Np : Push to N
                          VjZ : Remove and return the element at index Z in V
                          : : Else
                          Vp : Push to V
                          No : Pop the last element of N
                          ) : End Push
                          n : Sort V
                          Ã :End map
                          N¤ :Slice the first 2 elements (the original inputs) off N





                          share|improve this answer











                          $endgroup$



                          Japt, 24 bytes



                          Oof! That didn't work out as well as I thought it would!



                          Takes input in reverse order.



                          ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤


                          Try it or run all test cases on TIO



                          ®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤ :Implicit input of N=[U=scores, V=tiles]
                          ® :Map each Z in U
                          = : Reassign to Z
                          Va : 0-based index of last element in V (-1 if not found)
                          §Z : Less than or equal to Z
                          ) : End reassignment
                          Ì : Sign of difference with -1 (1 if found, 0 if not)
                          ? : If truthy (not zero)
                          Np : Push to N
                          VjZ : Remove and return the element at index Z in V
                          : : Else
                          Vp : Push to V
                          No : Pop the last element of N
                          ) : End Push
                          n : Sort V
                          Ã :End map
                          N¤ :Slice the first 2 elements (the original inputs) off N






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Feb 7 at 13:56

























                          answered Feb 6 at 23:31









                          ShaggyShaggy

                          19.5k21667




                          19.5k21667





















                              2












                              $begingroup$


                              Perl 6, 89 bytes





                              my@x;@^a;@^b>>.&@x,;@x


                              Try it online!



                              I think there's a few more bytes to be golfed off this...






                              share|improve this answer









                              $endgroup$

















                                2












                                $begingroup$


                                Perl 6, 89 bytes





                                my@x;@^a;@^b>>.&@x,;@x


                                Try it online!



                                I think there's a few more bytes to be golfed off this...






                                share|improve this answer









                                $endgroup$















                                  2












                                  2








                                  2





                                  $begingroup$


                                  Perl 6, 89 bytes





                                  my@x;@^a;@^b>>.&@x,;@x


                                  Try it online!



                                  I think there's a few more bytes to be golfed off this...






                                  share|improve this answer









                                  $endgroup$




                                  Perl 6, 89 bytes





                                  my@x;@^a;@^b>>.&@x,;@x


                                  Try it online!



                                  I think there's a few more bytes to be golfed off this...







                                  share|improve this answer












                                  share|improve this answer



                                  share|improve this answer










                                  answered Feb 7 at 0:41









                                  Jo KingJo King

                                  24k357123




                                  24k357123





















                                      2












                                      $begingroup$


                                      C# (Visual C# Interactive Compiler), 159 158 154 bytes





                                      Called as f(tiles)(scores)



                                      n=>m=>var s=new Stack<int>();m.Add(0);n.ForEach(k=>var a=m.Except(s).Where(x=>x<=k).Max();if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a););return s;


                                      If only System.Void is actually a return type and not just a placeholder for reflection. I would be able to replace if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a); with var t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);, saving two bytes.



                                      Try it online!



                                      //Function taking in a list and returning
                                      //another function that takes in another list and returns a stack
                                      n=>m=>
                                      //Initialize the stack
                                      var s=new Stack<int>();
                                      //Add a zero to the tiles, to ensure no exceptions appear due to accessing
                                      //non-existent elements in an empty collection later
                                      //when we try to filter it later and getting the biggest element
                                      m.Add(0);
                                      //Iterate through our scores
                                      n.ForEach(k=>
                                      //Create a variable called a, which we will use later
                                      var a=
                                      //Get all the elements in the middle that haven't appeared in our stack
                                      m.Except(s).
                                      //And throw away all elements that are bigger than our current score
                                      Where(x=>x<=k).
                                      //And get the biggest element there, and that is now the value of a
                                      //Without the m.Add(0), we would get an exception here
                                      Max();
                                      //Self-explanatory, if a is less than 1 aka if a equals 0
                                      //Checks if all elements in the middle are bigger than our score
                                      //Except for our self added 0, of course
                                      if(a<1)
                                      //Add 0 to the middle if the stack is empty
                                      //Remember, zeros don't affect the list
                                      m.Add(s.Count<1?0:
                                      //Else pop the stack and add that to the middle
                                      s.Pop());
                                      //If a isn't 0, add a to the stack
                                      else s.Push(a););
                                      //Afterwards, return the stack
                                      return s;





                                      share|improve this answer











                                      $endgroup$

















                                        2












                                        $begingroup$


                                        C# (Visual C# Interactive Compiler), 159 158 154 bytes





                                        Called as f(tiles)(scores)



                                        n=>m=>var s=new Stack<int>();m.Add(0);n.ForEach(k=>var a=m.Except(s).Where(x=>x<=k).Max();if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a););return s;


                                        If only System.Void is actually a return type and not just a placeholder for reflection. I would be able to replace if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a); with var t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);, saving two bytes.



                                        Try it online!



                                        //Function taking in a list and returning
                                        //another function that takes in another list and returns a stack
                                        n=>m=>
                                        //Initialize the stack
                                        var s=new Stack<int>();
                                        //Add a zero to the tiles, to ensure no exceptions appear due to accessing
                                        //non-existent elements in an empty collection later
                                        //when we try to filter it later and getting the biggest element
                                        m.Add(0);
                                        //Iterate through our scores
                                        n.ForEach(k=>
                                        //Create a variable called a, which we will use later
                                        var a=
                                        //Get all the elements in the middle that haven't appeared in our stack
                                        m.Except(s).
                                        //And throw away all elements that are bigger than our current score
                                        Where(x=>x<=k).
                                        //And get the biggest element there, and that is now the value of a
                                        //Without the m.Add(0), we would get an exception here
                                        Max();
                                        //Self-explanatory, if a is less than 1 aka if a equals 0
                                        //Checks if all elements in the middle are bigger than our score
                                        //Except for our self added 0, of course
                                        if(a<1)
                                        //Add 0 to the middle if the stack is empty
                                        //Remember, zeros don't affect the list
                                        m.Add(s.Count<1?0:
                                        //Else pop the stack and add that to the middle
                                        s.Pop());
                                        //If a isn't 0, add a to the stack
                                        else s.Push(a););
                                        //Afterwards, return the stack
                                        return s;





                                        share|improve this answer











                                        $endgroup$















                                          2












                                          2








                                          2





                                          $begingroup$


                                          C# (Visual C# Interactive Compiler), 159 158 154 bytes





                                          Called as f(tiles)(scores)



                                          n=>m=>var s=new Stack<int>();m.Add(0);n.ForEach(k=>var a=m.Except(s).Where(x=>x<=k).Max();if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a););return s;


                                          If only System.Void is actually a return type and not just a placeholder for reflection. I would be able to replace if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a); with var t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);, saving two bytes.



                                          Try it online!



                                          //Function taking in a list and returning
                                          //another function that takes in another list and returns a stack
                                          n=>m=>
                                          //Initialize the stack
                                          var s=new Stack<int>();
                                          //Add a zero to the tiles, to ensure no exceptions appear due to accessing
                                          //non-existent elements in an empty collection later
                                          //when we try to filter it later and getting the biggest element
                                          m.Add(0);
                                          //Iterate through our scores
                                          n.ForEach(k=>
                                          //Create a variable called a, which we will use later
                                          var a=
                                          //Get all the elements in the middle that haven't appeared in our stack
                                          m.Except(s).
                                          //And throw away all elements that are bigger than our current score
                                          Where(x=>x<=k).
                                          //And get the biggest element there, and that is now the value of a
                                          //Without the m.Add(0), we would get an exception here
                                          Max();
                                          //Self-explanatory, if a is less than 1 aka if a equals 0
                                          //Checks if all elements in the middle are bigger than our score
                                          //Except for our self added 0, of course
                                          if(a<1)
                                          //Add 0 to the middle if the stack is empty
                                          //Remember, zeros don't affect the list
                                          m.Add(s.Count<1?0:
                                          //Else pop the stack and add that to the middle
                                          s.Pop());
                                          //If a isn't 0, add a to the stack
                                          else s.Push(a););
                                          //Afterwards, return the stack
                                          return s;





                                          share|improve this answer











                                          $endgroup$




                                          C# (Visual C# Interactive Compiler), 159 158 154 bytes





                                          Called as f(tiles)(scores)



                                          n=>m=>var s=new Stack<int>();m.Add(0);n.ForEach(k=>var a=m.Except(s).Where(x=>x<=k).Max();if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a););return s;


                                          If only System.Void is actually a return type and not just a placeholder for reflection. I would be able to replace if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a); with var t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);, saving two bytes.



                                          Try it online!



                                          //Function taking in a list and returning
                                          //another function that takes in another list and returns a stack
                                          n=>m=>
                                          //Initialize the stack
                                          var s=new Stack<int>();
                                          //Add a zero to the tiles, to ensure no exceptions appear due to accessing
                                          //non-existent elements in an empty collection later
                                          //when we try to filter it later and getting the biggest element
                                          m.Add(0);
                                          //Iterate through our scores
                                          n.ForEach(k=>
                                          //Create a variable called a, which we will use later
                                          var a=
                                          //Get all the elements in the middle that haven't appeared in our stack
                                          m.Except(s).
                                          //And throw away all elements that are bigger than our current score
                                          Where(x=>x<=k).
                                          //And get the biggest element there, and that is now the value of a
                                          //Without the m.Add(0), we would get an exception here
                                          Max();
                                          //Self-explanatory, if a is less than 1 aka if a equals 0
                                          //Checks if all elements in the middle are bigger than our score
                                          //Except for our self added 0, of course
                                          if(a<1)
                                          //Add 0 to the middle if the stack is empty
                                          //Remember, zeros don't affect the list
                                          m.Add(s.Count<1?0:
                                          //Else pop the stack and add that to the middle
                                          s.Pop());
                                          //If a isn't 0, add a to the stack
                                          else s.Push(a););
                                          //Afterwards, return the stack
                                          return s;






                                          share|improve this answer














                                          share|improve this answer



                                          share|improve this answer








                                          edited Feb 7 at 5:44

























                                          answered Feb 6 at 23:20









                                          Embodiment of IgnoranceEmbodiment of Ignorance

                                          1,348121




                                          1,348121





















                                              2












                                              $begingroup$


                                              Ruby, 77 bytes





                                              ->t,s,r=s.mapi;r


                                              Try it online!






                                              share|improve this answer









                                              $endgroup$

















                                                2












                                                $begingroup$


                                                Ruby, 77 bytes





                                                ->t,s,r=s.mapi;r


                                                Try it online!






                                                share|improve this answer









                                                $endgroup$















                                                  2












                                                  2








                                                  2





                                                  $begingroup$


                                                  Ruby, 77 bytes





                                                  ->t,s,r=s.mapi;r


                                                  Try it online!






                                                  share|improve this answer









                                                  $endgroup$




                                                  Ruby, 77 bytes





                                                  ->t,s,r=s.mapi;r


                                                  Try it online!







                                                  share|improve this answer












                                                  share|improve this answer



                                                  share|improve this answer










                                                  answered Feb 7 at 10:04









                                                  Kirill L.Kirill L.

                                                  4,9151525




                                                  4,9151525





















                                                      2












                                                      $begingroup$


                                                      JavaScript (Node.js), 80 bytes



                                                      Same logic as the ES6 version, but takes the tiles as a BigInt bitmask and the scores as an array of BigInts.





                                                      m=>s=>s.map(g=x=>!x||m>>x&1n?m^=1n<<(x?r.push(x)&&x:r.pop()||~x):g(--x),r=)&&r


                                                      Try it online!




                                                      JavaScript (ES6),  100 98 94  87 bytes



                                                      Takes input as (tiles)(scores). The tiles can be passed in any order.





                                                      t=>s=>s.map(g=x=>m[x]?m[x?r.push(x)&&x:r.pop()]^=1:g(x-1),t.map(x=>m[x]=1,m=[r=]))&&r


                                                      Try it online!



                                                      Commented



                                                      t => s => // t = tiles; s = scores
                                                      s.map(g = x => // for each score x in s:
                                                      m[x] ? // if m[x] is set:
                                                      m[ // update the 'middle':
                                                      x ? // if x is not equal to 0:
                                                      r.push(x) && x // push x in the stack r and yield x
                                                      : // else:
                                                      r.pop() // pop the last value from the stack
                                                      // (may be undefined if the stack is empty)
                                                      ] ^= 1 // toggle the corresponding flag in m
                                                      : // else:
                                                      g(x - 1), // try again with x - 1
                                                      t.map(x => // initialization of the 'middle': for each value x in t:
                                                      m[x] = 1, // set m[x]
                                                      m = [r = ] // the stack r is stored as the first entry of m,
                                                      // which ensures that g will always stop when x = 0
                                                      ) // end of initialization
                                                      ) && r // end of main loop; return r





                                                      share|improve this answer











                                                      $endgroup$

















                                                        2












                                                        $begingroup$


                                                        JavaScript (Node.js), 80 bytes



                                                        Same logic as the ES6 version, but takes the tiles as a BigInt bitmask and the scores as an array of BigInts.





                                                        m=>s=>s.map(g=x=>!x||m>>x&1n?m^=1n<<(x?r.push(x)&&x:r.pop()||~x):g(--x),r=)&&r


                                                        Try it online!




                                                        JavaScript (ES6),  100 98 94  87 bytes



                                                        Takes input as (tiles)(scores). The tiles can be passed in any order.





                                                        t=>s=>s.map(g=x=>m[x]?m[x?r.push(x)&&x:r.pop()]^=1:g(x-1),t.map(x=>m[x]=1,m=[r=]))&&r


                                                        Try it online!



                                                        Commented



                                                        t => s => // t = tiles; s = scores
                                                        s.map(g = x => // for each score x in s:
                                                        m[x] ? // if m[x] is set:
                                                        m[ // update the 'middle':
                                                        x ? // if x is not equal to 0:
                                                        r.push(x) && x // push x in the stack r and yield x
                                                        : // else:
                                                        r.pop() // pop the last value from the stack
                                                        // (may be undefined if the stack is empty)
                                                        ] ^= 1 // toggle the corresponding flag in m
                                                        : // else:
                                                        g(x - 1), // try again with x - 1
                                                        t.map(x => // initialization of the 'middle': for each value x in t:
                                                        m[x] = 1, // set m[x]
                                                        m = [r = ] // the stack r is stored as the first entry of m,
                                                        // which ensures that g will always stop when x = 0
                                                        ) // end of initialization
                                                        ) && r // end of main loop; return r





                                                        share|improve this answer











                                                        $endgroup$















                                                          2












                                                          2








                                                          2





                                                          $begingroup$


                                                          JavaScript (Node.js), 80 bytes



                                                          Same logic as the ES6 version, but takes the tiles as a BigInt bitmask and the scores as an array of BigInts.





                                                          m=>s=>s.map(g=x=>!x||m>>x&1n?m^=1n<<(x?r.push(x)&&x:r.pop()||~x):g(--x),r=)&&r


                                                          Try it online!




                                                          JavaScript (ES6),  100 98 94  87 bytes



                                                          Takes input as (tiles)(scores). The tiles can be passed in any order.





                                                          t=>s=>s.map(g=x=>m[x]?m[x?r.push(x)&&x:r.pop()]^=1:g(x-1),t.map(x=>m[x]=1,m=[r=]))&&r


                                                          Try it online!



                                                          Commented



                                                          t => s => // t = tiles; s = scores
                                                          s.map(g = x => // for each score x in s:
                                                          m[x] ? // if m[x] is set:
                                                          m[ // update the 'middle':
                                                          x ? // if x is not equal to 0:
                                                          r.push(x) && x // push x in the stack r and yield x
                                                          : // else:
                                                          r.pop() // pop the last value from the stack
                                                          // (may be undefined if the stack is empty)
                                                          ] ^= 1 // toggle the corresponding flag in m
                                                          : // else:
                                                          g(x - 1), // try again with x - 1
                                                          t.map(x => // initialization of the 'middle': for each value x in t:
                                                          m[x] = 1, // set m[x]
                                                          m = [r = ] // the stack r is stored as the first entry of m,
                                                          // which ensures that g will always stop when x = 0
                                                          ) // end of initialization
                                                          ) && r // end of main loop; return r





                                                          share|improve this answer











                                                          $endgroup$




                                                          JavaScript (Node.js), 80 bytes



                                                          Same logic as the ES6 version, but takes the tiles as a BigInt bitmask and the scores as an array of BigInts.





                                                          m=>s=>s.map(g=x=>!x||m>>x&1n?m^=1n<<(x?r.push(x)&&x:r.pop()||~x):g(--x),r=)&&r


                                                          Try it online!




                                                          JavaScript (ES6),  100 98 94  87 bytes



                                                          Takes input as (tiles)(scores). The tiles can be passed in any order.





                                                          t=>s=>s.map(g=x=>m[x]?m[x?r.push(x)&&x:r.pop()]^=1:g(x-1),t.map(x=>m[x]=1,m=[r=]))&&r


                                                          Try it online!



                                                          Commented



                                                          t => s => // t = tiles; s = scores
                                                          s.map(g = x => // for each score x in s:
                                                          m[x] ? // if m[x] is set:
                                                          m[ // update the 'middle':
                                                          x ? // if x is not equal to 0:
                                                          r.push(x) && x // push x in the stack r and yield x
                                                          : // else:
                                                          r.pop() // pop the last value from the stack
                                                          // (may be undefined if the stack is empty)
                                                          ] ^= 1 // toggle the corresponding flag in m
                                                          : // else:
                                                          g(x - 1), // try again with x - 1
                                                          t.map(x => // initialization of the 'middle': for each value x in t:
                                                          m[x] = 1, // set m[x]
                                                          m = [r = ] // the stack r is stored as the first entry of m,
                                                          // which ensures that g will always stop when x = 0
                                                          ) // end of initialization
                                                          ) && r // end of main loop; return r






                                                          share|improve this answer














                                                          share|improve this answer



                                                          share|improve this answer








                                                          edited Feb 7 at 12:26

























                                                          answered Feb 6 at 23:40









                                                          ArnauldArnauld

                                                          77.4k694324




                                                          77.4k694324





















                                                              1












                                                              $begingroup$


                                                              Charcoal, 35 bytes



                                                              Fη«≔⌈Φ講κιι¿ι«≔Φθ⁻κιθ⊞υι»¿υ⊞θ⊟υ»Iυ


                                                              Try it online! Link is to verbose version of code. Explanation:



                                                              Fη«


                                                              Loop over the scores.



                                                              ≔⌈Φ講κιι


                                                              Look for the highest available tile.



                                                              ¿ι«


                                                              If it exists then...



                                                              ≔Φθ⁻κιθ


                                                              ... remove the tile from the middle...



                                                              ⊞υι


                                                              ... and add it to the stack.



                                                              »¿υ


                                                              Otherwise, if the stack is not empty...



                                                              ⊞θ⊟υ


                                                              Remove the latest tile from the stack and return it to the middle.



                                                              »Iυ


                                                              Print the resulting stack from oldest to newest.






                                                              share|improve this answer









                                                              $endgroup$

















                                                                1












                                                                $begingroup$


                                                                Charcoal, 35 bytes



                                                                Fη«≔⌈Φ講κιι¿ι«≔Φθ⁻κιθ⊞υι»¿υ⊞θ⊟υ»Iυ


                                                                Try it online! Link is to verbose version of code. Explanation:



                                                                Fη«


                                                                Loop over the scores.



                                                                ≔⌈Φ講κιι


                                                                Look for the highest available tile.



                                                                ¿ι«


                                                                If it exists then...



                                                                ≔Φθ⁻κιθ


                                                                ... remove the tile from the middle...



                                                                ⊞υι


                                                                ... and add it to the stack.



                                                                »¿υ


                                                                Otherwise, if the stack is not empty...



                                                                ⊞θ⊟υ


                                                                Remove the latest tile from the stack and return it to the middle.



                                                                »Iυ


                                                                Print the resulting stack from oldest to newest.






                                                                share|improve this answer









                                                                $endgroup$















                                                                  1












                                                                  1








                                                                  1





                                                                  $begingroup$


                                                                  Charcoal, 35 bytes



                                                                  Fη«≔⌈Φ講κιι¿ι«≔Φθ⁻κιθ⊞υι»¿υ⊞θ⊟υ»Iυ


                                                                  Try it online! Link is to verbose version of code. Explanation:



                                                                  Fη«


                                                                  Loop over the scores.



                                                                  ≔⌈Φ講κιι


                                                                  Look for the highest available tile.



                                                                  ¿ι«


                                                                  If it exists then...



                                                                  ≔Φθ⁻κιθ


                                                                  ... remove the tile from the middle...



                                                                  ⊞υι


                                                                  ... and add it to the stack.



                                                                  »¿υ


                                                                  Otherwise, if the stack is not empty...



                                                                  ⊞θ⊟υ


                                                                  Remove the latest tile from the stack and return it to the middle.



                                                                  »Iυ


                                                                  Print the resulting stack from oldest to newest.






                                                                  share|improve this answer









                                                                  $endgroup$




                                                                  Charcoal, 35 bytes



                                                                  Fη«≔⌈Φ講κιι¿ι«≔Φθ⁻κιθ⊞υι»¿υ⊞θ⊟υ»Iυ


                                                                  Try it online! Link is to verbose version of code. Explanation:



                                                                  Fη«


                                                                  Loop over the scores.



                                                                  ≔⌈Φ講κιι


                                                                  Look for the highest available tile.



                                                                  ¿ι«


                                                                  If it exists then...



                                                                  ≔Φθ⁻κιθ


                                                                  ... remove the tile from the middle...



                                                                  ⊞υι


                                                                  ... and add it to the stack.



                                                                  »¿υ


                                                                  Otherwise, if the stack is not empty...



                                                                  ⊞θ⊟υ


                                                                  Remove the latest tile from the stack and return it to the middle.



                                                                  »Iυ


                                                                  Print the resulting stack from oldest to newest.







                                                                  share|improve this answer












                                                                  share|improve this answer



                                                                  share|improve this answer










                                                                  answered Feb 7 at 0:25









                                                                  NeilNeil

                                                                  81.3k745178




                                                                  81.3k745178





















                                                                      1












                                                                      $begingroup$


                                                                      Python 2, 120 bytes





                                                                      m,s=input()
                                                                      t=
                                                                      for n in s:
                                                                      i=[v for v in m if v<=n]
                                                                      if i:v=max(i);t+=[v];m.remove(v)
                                                                      else:m+=t and[t.pop()]
                                                                      print t


                                                                      Try it online!






                                                                      share|improve this answer









                                                                      $endgroup$

















                                                                        1












                                                                        $begingroup$


                                                                        Python 2, 120 bytes





                                                                        m,s=input()
                                                                        t=
                                                                        for n in s:
                                                                        i=[v for v in m if v<=n]
                                                                        if i:v=max(i);t+=[v];m.remove(v)
                                                                        else:m+=t and[t.pop()]
                                                                        print t


                                                                        Try it online!






                                                                        share|improve this answer









                                                                        $endgroup$















                                                                          1












                                                                          1








                                                                          1





                                                                          $begingroup$


                                                                          Python 2, 120 bytes





                                                                          m,s=input()
                                                                          t=
                                                                          for n in s:
                                                                          i=[v for v in m if v<=n]
                                                                          if i:v=max(i);t+=[v];m.remove(v)
                                                                          else:m+=t and[t.pop()]
                                                                          print t


                                                                          Try it online!






                                                                          share|improve this answer









                                                                          $endgroup$




                                                                          Python 2, 120 bytes





                                                                          m,s=input()
                                                                          t=
                                                                          for n in s:
                                                                          i=[v for v in m if v<=n]
                                                                          if i:v=max(i);t+=[v];m.remove(v)
                                                                          else:m+=t and[t.pop()]
                                                                          print t


                                                                          Try it online!







                                                                          share|improve this answer












                                                                          share|improve this answer



                                                                          share|improve this answer










                                                                          answered Feb 7 at 8:05









                                                                          TFeldTFeld

                                                                          15.5k21247




                                                                          15.5k21247





















                                                                              1












                                                                              $begingroup$


                                                                              05AB1E, 27 22 bytes



                                                                              vÐy>‹ÏDgĀià©K®sësª])¨


                                                                              Try it online or verify all test cases.



                                                                              Explanation:





                                                                              v # Loop `y` over the (implicit) input-list of scores:
                                                                              Ð # Triplicate the tiles list (takes it as implicit input in the first iteration)
                                                                              y>‹ # Check for each if `y` <= the value in the tiles list
                                                                              Ï # Only leave the values at the truthy indices
                                                                              D # Duplicate the remaining tiles
                                                                              ¯Êi # If this list is not empty:
                                                                              à # Pop the list, and push its maximum
                                                                              © # Store it in the register, without popping
                                                                              K # Remove it from the tiles list
                                                                              ® # Push the maximum again
                                                                              s # Swap the maximum and tiles-list on the stack
                                                                              ë # Else:
                                                                              # Remove the duplicated empty tiles-list from the stack
                                                                              sª # Add the last tile to the tiles-list
                                                                              ] # Close the if-else and loop
                                                                              ) # Wrap everything on the stack into a list
                                                                              ¨ # Remove the last item (the tiles-list)
                                                                              # (and output the result implicitly)





                                                                              share|improve this answer











                                                                              $endgroup$

















                                                                                1












                                                                                $begingroup$


                                                                                05AB1E, 27 22 bytes



                                                                                vÐy>‹ÏDgĀià©K®sësª])¨


                                                                                Try it online or verify all test cases.



                                                                                Explanation:





                                                                                v # Loop `y` over the (implicit) input-list of scores:
                                                                                Ð # Triplicate the tiles list (takes it as implicit input in the first iteration)
                                                                                y>‹ # Check for each if `y` <= the value in the tiles list
                                                                                Ï # Only leave the values at the truthy indices
                                                                                D # Duplicate the remaining tiles
                                                                                ¯Êi # If this list is not empty:
                                                                                à # Pop the list, and push its maximum
                                                                                © # Store it in the register, without popping
                                                                                K # Remove it from the tiles list
                                                                                ® # Push the maximum again
                                                                                s # Swap the maximum and tiles-list on the stack
                                                                                ë # Else:
                                                                                # Remove the duplicated empty tiles-list from the stack
                                                                                sª # Add the last tile to the tiles-list
                                                                                ] # Close the if-else and loop
                                                                                ) # Wrap everything on the stack into a list
                                                                                ¨ # Remove the last item (the tiles-list)
                                                                                # (and output the result implicitly)





                                                                                share|improve this answer











                                                                                $endgroup$















                                                                                  1












                                                                                  1








                                                                                  1





                                                                                  $begingroup$


                                                                                  05AB1E, 27 22 bytes



                                                                                  vÐy>‹ÏDgĀià©K®sësª])¨


                                                                                  Try it online or verify all test cases.



                                                                                  Explanation:





                                                                                  v # Loop `y` over the (implicit) input-list of scores:
                                                                                  Ð # Triplicate the tiles list (takes it as implicit input in the first iteration)
                                                                                  y>‹ # Check for each if `y` <= the value in the tiles list
                                                                                  Ï # Only leave the values at the truthy indices
                                                                                  D # Duplicate the remaining tiles
                                                                                  ¯Êi # If this list is not empty:
                                                                                  à # Pop the list, and push its maximum
                                                                                  © # Store it in the register, without popping
                                                                                  K # Remove it from the tiles list
                                                                                  ® # Push the maximum again
                                                                                  s # Swap the maximum and tiles-list on the stack
                                                                                  ë # Else:
                                                                                  # Remove the duplicated empty tiles-list from the stack
                                                                                  sª # Add the last tile to the tiles-list
                                                                                  ] # Close the if-else and loop
                                                                                  ) # Wrap everything on the stack into a list
                                                                                  ¨ # Remove the last item (the tiles-list)
                                                                                  # (and output the result implicitly)





                                                                                  share|improve this answer











                                                                                  $endgroup$




                                                                                  05AB1E, 27 22 bytes



                                                                                  vÐy>‹ÏDgĀià©K®sësª])¨


                                                                                  Try it online or verify all test cases.



                                                                                  Explanation:





                                                                                  v # Loop `y` over the (implicit) input-list of scores:
                                                                                  Ð # Triplicate the tiles list (takes it as implicit input in the first iteration)
                                                                                  y>‹ # Check for each if `y` <= the value in the tiles list
                                                                                  Ï # Only leave the values at the truthy indices
                                                                                  D # Duplicate the remaining tiles
                                                                                  ¯Êi # If this list is not empty:
                                                                                  à # Pop the list, and push its maximum
                                                                                  © # Store it in the register, without popping
                                                                                  K # Remove it from the tiles list
                                                                                  ® # Push the maximum again
                                                                                  s # Swap the maximum and tiles-list on the stack
                                                                                  ë # Else:
                                                                                  # Remove the duplicated empty tiles-list from the stack
                                                                                  sª # Add the last tile to the tiles-list
                                                                                  ] # Close the if-else and loop
                                                                                  ) # Wrap everything on the stack into a list
                                                                                  ¨ # Remove the last item (the tiles-list)
                                                                                  # (and output the result implicitly)






                                                                                  share|improve this answer














                                                                                  share|improve this answer



                                                                                  share|improve this answer








                                                                                  edited Feb 7 at 9:33

























                                                                                  answered Feb 7 at 9:14









                                                                                  Kevin CruijssenKevin Cruijssen

                                                                                  39.3k560203




                                                                                  39.3k560203





















                                                                                      1












                                                                                      $begingroup$

                                                                                      Pyth, 32 bytes



                                                                                      VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y


                                                                                      Try it online here, or verify all the test cases at once here.



                                                                                      There must be room for improvement here somewhere - any suggestions would be much appreciated!



                                                                                      VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y Implicit: Q=input 1 (middle), E=input 2 (scores), Y=
                                                                                      VE ; For each score, as N, in the second input:
                                                                                      f Q Filter Q, keeping elements T where:
                                                                                      !>TN T is not greater than N
                                                                                      (less than or equal is the only standard inequality without a token in Pyth, grrr)
                                                                                      +0 Prepend 0 to the filtered list
                                                                                      eS Take the largest of the above (_e_nd of _S_orted list)
                                                                                      J Store the above in J
                                                                                      ? If the above is truthy:
                                                                                      aYJ Append J to Y
                                                                                      e Take last element of Y (i.e. J)
                                                                                      =-Q Remove that element from Q and assign the result back to Q
                                                                                      Else:
                                                                                      |Y]0 Yield Y, or [0] if Y is empty
                                                                                      .) Pop the last element from the above (mutates Y)
                                                                                      aQ Append the popped value to Q
                                                                                      Y Print Y





                                                                                      share|improve this answer









                                                                                      $endgroup$

















                                                                                        1












                                                                                        $begingroup$

                                                                                        Pyth, 32 bytes



                                                                                        VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y


                                                                                        Try it online here, or verify all the test cases at once here.



                                                                                        There must be room for improvement here somewhere - any suggestions would be much appreciated!



                                                                                        VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y Implicit: Q=input 1 (middle), E=input 2 (scores), Y=
                                                                                        VE ; For each score, as N, in the second input:
                                                                                        f Q Filter Q, keeping elements T where:
                                                                                        !>TN T is not greater than N
                                                                                        (less than or equal is the only standard inequality without a token in Pyth, grrr)
                                                                                        +0 Prepend 0 to the filtered list
                                                                                        eS Take the largest of the above (_e_nd of _S_orted list)
                                                                                        J Store the above in J
                                                                                        ? If the above is truthy:
                                                                                        aYJ Append J to Y
                                                                                        e Take last element of Y (i.e. J)
                                                                                        =-Q Remove that element from Q and assign the result back to Q
                                                                                        Else:
                                                                                        |Y]0 Yield Y, or [0] if Y is empty
                                                                                        .) Pop the last element from the above (mutates Y)
                                                                                        aQ Append the popped value to Q
                                                                                        Y Print Y





                                                                                        share|improve this answer









                                                                                        $endgroup$















                                                                                          1












                                                                                          1








                                                                                          1





                                                                                          $begingroup$

                                                                                          Pyth, 32 bytes



                                                                                          VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y


                                                                                          Try it online here, or verify all the test cases at once here.



                                                                                          There must be room for improvement here somewhere - any suggestions would be much appreciated!



                                                                                          VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y Implicit: Q=input 1 (middle), E=input 2 (scores), Y=
                                                                                          VE ; For each score, as N, in the second input:
                                                                                          f Q Filter Q, keeping elements T where:
                                                                                          !>TN T is not greater than N
                                                                                          (less than or equal is the only standard inequality without a token in Pyth, grrr)
                                                                                          +0 Prepend 0 to the filtered list
                                                                                          eS Take the largest of the above (_e_nd of _S_orted list)
                                                                                          J Store the above in J
                                                                                          ? If the above is truthy:
                                                                                          aYJ Append J to Y
                                                                                          e Take last element of Y (i.e. J)
                                                                                          =-Q Remove that element from Q and assign the result back to Q
                                                                                          Else:
                                                                                          |Y]0 Yield Y, or [0] if Y is empty
                                                                                          .) Pop the last element from the above (mutates Y)
                                                                                          aQ Append the popped value to Q
                                                                                          Y Print Y





                                                                                          share|improve this answer









                                                                                          $endgroup$



                                                                                          Pyth, 32 bytes



                                                                                          VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y


                                                                                          Try it online here, or verify all the test cases at once here.



                                                                                          There must be room for improvement here somewhere - any suggestions would be much appreciated!



                                                                                          VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y Implicit: Q=input 1 (middle), E=input 2 (scores), Y=
                                                                                          VE ; For each score, as N, in the second input:
                                                                                          f Q Filter Q, keeping elements T where:
                                                                                          !>TN T is not greater than N
                                                                                          (less than or equal is the only standard inequality without a token in Pyth, grrr)
                                                                                          +0 Prepend 0 to the filtered list
                                                                                          eS Take the largest of the above (_e_nd of _S_orted list)
                                                                                          J Store the above in J
                                                                                          ? If the above is truthy:
                                                                                          aYJ Append J to Y
                                                                                          e Take last element of Y (i.e. J)
                                                                                          =-Q Remove that element from Q and assign the result back to Q
                                                                                          Else:
                                                                                          |Y]0 Yield Y, or [0] if Y is empty
                                                                                          .) Pop the last element from the above (mutates Y)
                                                                                          aQ Append the popped value to Q
                                                                                          Y Print Y






                                                                                          share|improve this answer












                                                                                          share|improve this answer



                                                                                          share|improve this answer










                                                                                          answered Feb 7 at 11:37









                                                                                          SokSok

                                                                                          4,067925




                                                                                          4,067925





















                                                                                              1












                                                                                              $begingroup$

                                                                                              Perl 5 -apl -MList:Util=max, 97 bytes



                                                                                              $_=$".<>;for$i(@F)(($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s:$s=~s/ d+$//?$_:$G).=$&$_=$s;s/ //


                                                                                              TIO



                                                                                              reads scores and tiles on next line and prints output.



                                                                                              How




                                                                                              • -apl : -p to loop over lines and print, -a autosplit, -l to chomp from input and add newline character to output


                                                                                              • $_=$".<> : to read next line (tiles) and prepend a space into default var $_


                                                                                              • for$i(@F) ... loop $i over @F fields of current line (scores)


                                                                                              • ( .. ? .. : .. ).=$& append previous match to ternary l-value


                                                                                              • ($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s in case max value found and removed from tiles ($_) l-value is scores ($s)


                                                                                              • $s=~s/ d+$//?$_ otherwise if last number could be removed from scores it's tiles


                                                                                              • :$G finally it's garbage because can't occur


                                                                                              • $_=$s;s/ // to set scores to default var, and remove leading space





                                                                                              share|improve this answer









                                                                                              $endgroup$

















                                                                                                1












                                                                                                $begingroup$

                                                                                                Perl 5 -apl -MList:Util=max, 97 bytes



                                                                                                $_=$".<>;for$i(@F)(($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s:$s=~s/ d+$//?$_:$G).=$&$_=$s;s/ //


                                                                                                TIO



                                                                                                reads scores and tiles on next line and prints output.



                                                                                                How




                                                                                                • -apl : -p to loop over lines and print, -a autosplit, -l to chomp from input and add newline character to output


                                                                                                • $_=$".<> : to read next line (tiles) and prepend a space into default var $_


                                                                                                • for$i(@F) ... loop $i over @F fields of current line (scores)


                                                                                                • ( .. ? .. : .. ).=$& append previous match to ternary l-value


                                                                                                • ($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s in case max value found and removed from tiles ($_) l-value is scores ($s)


                                                                                                • $s=~s/ d+$//?$_ otherwise if last number could be removed from scores it's tiles


                                                                                                • :$G finally it's garbage because can't occur


                                                                                                • $_=$s;s/ // to set scores to default var, and remove leading space





                                                                                                share|improve this answer









                                                                                                $endgroup$















                                                                                                  1












                                                                                                  1








                                                                                                  1





                                                                                                  $begingroup$

                                                                                                  Perl 5 -apl -MList:Util=max, 97 bytes



                                                                                                  $_=$".<>;for$i(@F)(($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s:$s=~s/ d+$//?$_:$G).=$&$_=$s;s/ //


                                                                                                  TIO



                                                                                                  reads scores and tiles on next line and prints output.



                                                                                                  How




                                                                                                  • -apl : -p to loop over lines and print, -a autosplit, -l to chomp from input and add newline character to output


                                                                                                  • $_=$".<> : to read next line (tiles) and prepend a space into default var $_


                                                                                                  • for$i(@F) ... loop $i over @F fields of current line (scores)


                                                                                                  • ( .. ? .. : .. ).=$& append previous match to ternary l-value


                                                                                                  • ($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s in case max value found and removed from tiles ($_) l-value is scores ($s)


                                                                                                  • $s=~s/ d+$//?$_ otherwise if last number could be removed from scores it's tiles


                                                                                                  • :$G finally it's garbage because can't occur


                                                                                                  • $_=$s;s/ // to set scores to default var, and remove leading space





                                                                                                  share|improve this answer









                                                                                                  $endgroup$



                                                                                                  Perl 5 -apl -MList:Util=max, 97 bytes



                                                                                                  $_=$".<>;for$i(@F)(($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s:$s=~s/ d+$//?$_:$G).=$&$_=$s;s/ //


                                                                                                  TIO



                                                                                                  reads scores and tiles on next line and prints output.



                                                                                                  How




                                                                                                  • -apl : -p to loop over lines and print, -a autosplit, -l to chomp from input and add newline character to output


                                                                                                  • $_=$".<> : to read next line (tiles) and prepend a space into default var $_


                                                                                                  • for$i(@F) ... loop $i over @F fields of current line (scores)


                                                                                                  • ( .. ? .. : .. ).=$& append previous match to ternary l-value


                                                                                                  • ($m=max grep$_<=$i,/d+/g)&&s/ $mb//?$s in case max value found and removed from tiles ($_) l-value is scores ($s)


                                                                                                  • $s=~s/ d+$//?$_ otherwise if last number could be removed from scores it's tiles


                                                                                                  • :$G finally it's garbage because can't occur


                                                                                                  • $_=$s;s/ // to set scores to default var, and remove leading space






                                                                                                  share|improve this answer












                                                                                                  share|improve this answer



                                                                                                  share|improve this answer










                                                                                                  answered Feb 7 at 12:12









                                                                                                  Nahuel FouilleulNahuel Fouilleul

                                                                                                  2,62529




                                                                                                  2,62529



























                                                                                                      draft saved

                                                                                                      draft discarded
















































                                                                                                      If this is an answer to a challenge…



                                                                                                      • …Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.


                                                                                                      • …Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
                                                                                                        Explanations of your answer make it more interesting to read and are very much encouraged.


                                                                                                      • …Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.


                                                                                                      More generally…



                                                                                                      • …Please make sure to answer the question and provide sufficient detail.


                                                                                                      • …Avoid asking for help, clarification or responding to other answers (use comments instead).




                                                                                                      draft saved


                                                                                                      draft discarded














                                                                                                      StackExchange.ready(
                                                                                                      function ()
                                                                                                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f179588%2fplaying-pickomino%23new-answer', 'question_page');

                                                                                                      );

                                                                                                      Post as a guest















                                                                                                      Required, but never shown





















































                                                                                                      Required, but never shown














                                                                                                      Required, but never shown












                                                                                                      Required, but never shown







                                                                                                      Required, but never shown

































                                                                                                      Required, but never shown














                                                                                                      Required, but never shown












                                                                                                      Required, but never shown







                                                                                                      Required, but never shown






                                                                                                      Popular posts from this blog

                                                                                                      How to check contact read email or not when send email to Individual?

                                                                                                      Bahrain

                                                                                                      Postfix configuration issue with fips on centos 7; mailgun relay