| _target_: flow_modules.aiflows.FunSearchFlowModule.EvaluatorFlow.instantiate_from_default_config |
|
|
| py_file: |2- |
| """Problem Description: |
| Serval has a string s that only consists of 0 and 1 of length n. The i-th character of s is denoted as s_i, where 1\leq i\leq n. |
| Serval can perform the following operation called Inversion Magic on the string s: |
| Choose an segment [l, r] (1\leq l\leq r\leq n). For l\leq i\leq r, change s_i into 1 if s_i is 0, and change s_i into 0 if s_i is 1. |
| For example, let s be 010100 and the segment [2,5] is chosen. The string s will be 001010 after performing the Inversion Magic. |
| Serval wants to make s a palindrome after performing Inversion Magic exactly once. Help him to determine whether it is possible. |
| A string is a palindrome iff it reads the same backwards as forwards. For example, 010010 is a palindrome but 10111 is not. |
| |
| Input Description: |
| Input |
| Each test contains multiple test cases. The first line contains the number of test cases t (1\leq t\leq 10^4). The description of the test cases follows. |
| The first line of each test case contains a single integer n (2\leq n\leq 10^5) — the length of string s. |
| The second line of each test case contains a binary string s of length n. Only characters 0 and 1 can appear in s. |
| It's guaranteed that the sum of n over all test cases does not exceed 2\cdot 10^5. |
|
|
| Output Description: |
| Output |
| For each test case, print Yes if s can be a palindrome after performing Inversion Magic exactly once, and print No if not. |
| You can output Yes and No in any case (for example, strings yEs, yes, Yes and YES will be recognized as a positive response). |
|
|
| Public Tests: |
| Test 1: |
| Input: ['1', '4', '1001'] |
| Output: 'YES' |
| Test 2: |
| Input: ['1', '5', '10010'] |
| Output: 'YES' |
| Test 3: |
| Input: ['1', '7', '0111011'] |
| Output: 'NO' |
|
|
| """ |
| |
| |
| import ast |
| import itertools |
| import numpy as np |
| from typing import List |
| |
| def solve(solve_function: str,input: List[str], expected_output: str) -> str: |
| """function used to run the solve function on input *kwargs and return the the predicted output |
| |
| :param solve_function: the function to run (the solve function below as a string) |
| :type solve_function: str |
| :param kwargs: the inputs to the solve function |
| :type kwargs: List[str] |
| """ |
| local_namespace = {} |
| exec(solve_function,local_namespace) |
| found_name, program_name = get_function_name_from_code(solve_function) |
| |
| if not found_name: |
| raise ValueError(f"Function name not found in program: {solve_function}") |
| |
| solve_fn = local_namespace.get(program_name) |
| |
| prediction = solve_fn(input) |
| |
| prediction = prediction.split() |
| expected_output = expected_output.split() |
| |
| if len(prediction) != len(expected_output): |
| raise ValueError(f"Invalid Format of prediction") |
| |
| for i in range(len(prediction)): |
| if prediction[i] != expected_output[i]: |
| return False |
| |
| return True |
|
|
| def evaluate(solve_function: str, tests_inputs: List[str], expected_outputs: str) -> float: |
| """Returns the score of the solve function we're evolving based on the tests_inputs and expected_outputs. |
| Scores are between 0 and 1, unless the program fails to run, in which case the score is -1. |
| """ |
| if solve(solve_function,tests_inputs,expected_outputs) == True: |
| return 1.0 |
| return 0.0 |
|
|
|
|
| def get_function_name_from_code(code): |
| tree = ast.parse(code) |
| for node in ast.walk(tree): |
| if isinstance(node, ast.FunctionDef): |
| return True, node.name |
|
|
| |
| return False, None |
|
|
|
|
| function_to_run_name: evaluate |
| test_inputs: |
|
|
| test_1: |
| tests_inputs: ['1', '4', '1001'] |
| expected_outputs: 'YES' |
| test_2: |
| tests_inputs: ['1', '5', '10010'] |
| expected_outputs: 'YES' |
| test_3: |
| tests_inputs: ['1', '7', '0111011'] |
| expected_outputs: 'NO' |
| test_4: |
| tests_inputs: ['3', '4', '1001', '5', '10010', '7', '0111011', ''] |
| expected_outputs: 'YES\nYES\nNO\n' |
|
|
| timeout_seconds: 10 |
| run_error_score: -1 |
| use_test_input_as_key: false |