Kajol Patel Ответов: 2

Пожалуйста, преобразуйте мне этот код C++ в Python


#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

//template<typename T>
#define o_set(T) tree<T, null_type,greater<T>, rb_tree_tag,tree_order_statistics_node_update>
//member functions :
//use it like o_set(ll) x;  --> x.order.....
//-->for pair<ll,ll> : second element as index and for search use INT_MAX...
//1. order_of_key(k) : number of elements strictly lesser than k
//2. find_by_order(k) : k-th element in the set


#define fast ios::sync_with_stdio(false);cin.tie(0);cout<<setprecision(25)
#define pb push_back
#define I insert
#define F first
#define S second
#define digit(x) floor(log10(x))+1
const long long M1=1000000007;
const long long  M2=998244353;
#define L_MAX 1e18
using ll = long long;
using ld = long double;
using ii = pair<ll,ll>;
using matrix = vector<vector<ll>>;
using arr = vector<ll>;
using vs = vector<string>;
using pv = vector<ii>;
#define in1(x) scanf("%lld",&x)
#define in2(x,y) scanf("%lld %lld",&x,&y)
#define all(x) x.begin(),x.end()
#define debug(x) cerr << #x << " is " << x << endl;
template<typename T>
void showArr(T a){
    for(auto i : a) cout<<i<<" ";
    cout<<endl;
}
bool isValid(ll x,ll y,ll n,ll m){
    return (x>=0 and y>=0 and x<n and y<m);
}
ll power(ll a,ll n,ll m){
    ll ans=1;
    while(n>0){
        if(n&1){
            ans=(ans%m * a%m)%m;
        }
        n=n>>1;
        a=(a%m*a%m)%m;
    }
    return ans;
}
ll MMI(ll a,ll m){
    ll m0=m,y=0,x=1;
    if(m==1) return 0;
    while(a>1){
        ll q=a/m,t=m;
        m=a%m,a=t,t=y,y=x-q*y,x=t;
    }
    if(x<0) x+=m0;
    return x;
}

ll dx[]={-1,1,0,0},dy[]={0,0,-1,1};
//ll dx[]={-1,1,-1,1,0,0,-1,1} , dy[]={-1,1,0,0,-1,1,1,-1};
int main(){
    // #ifndef ONLINE_JUDGE
    //     freopen("input.txt", "r", stdin);
    //     freopen("output.txt", "w", stdout);
    // #endif
    fast;
    //,2,3,1,5,3,2,1,2,4,2,1,8,1,2
    arr a={3,1,2,3,6,2,3,6,2,3,6,3,2,3,6,2,3,4,3,2,5,4,2,1,2,1,2,3,1,2,6,2,3,6,2,3,6,3};
    bool ok=1;
    ll add=0;
    ll mx=0;
    for(auto i : a){
        
        if(ok)
            add+=i,ok=!ok;
        else{
            add-=i,ok=!ok;
        }
        mx=max(mx,add);
    }
    ll height=mx+3;//for daglo
    ok=1;
    arr d;
    for(auto i : a){
        if(ok){
            for(int j=0;j<i;j++){
                d.pb(1);
            }
            ok=!ok;
        }else{
            for(int j=0;j<i;j++){
                d.pb(-1);
            }
            ok=!ok;
        }
    }
    vector<vector<char>>ans(height,vector<char>((int)d.size()+1,' '));
    // cout<<height<<endl;
    ll sum=0;
    ll k=height;
    bool o=0;
    for(int i=0;i<(int)d.size();i++){
        sum+=d[i];
        if(d[i]==1){
            if(i>0 and d[i-1]==-1){
                k++;
            }
            ans[--k][i+o]='/'; 
        }else{
            if(d[i-1]==1){
                k--;
            }
            ans[++k][i+o]='\\';
        }
        if(sum==mx){
            o=1;
            ll l=k;
            ans[--l][i]='<',ans[l][i+2]='>';
            ans[--l][i]='/',ans[l][i+1]='|',ans[l][i+2]='\\';
            ans[--l][i+1]='o';
        }
        
    }
    for(auto i : ans){
        for(auto j : i)
            cout<<j;
        cout<<endl;
    }
    return 0;
}


Что я уже пробовал:

Я попробовал с морской змеей, но это не сработало.
Пожалуйста, помогите мне преобразовать этот код

Rick York

Это очень хороший пример высказывания: "макросы-это зло." Было ли это упражнением в запутывании кода?

2 Ответов

Рейтинг:
2

OriginalGriff

Это не служба преобразования кода: мы здесь не для того, чтобы переводить код для вас.
Даже если бы мы это сделали, то в конечном итоге вы получили бы не "хороший код" на целевом языке – они основаны на очень разных фреймворках, и то, что заставляет что-то работать на одном языке, не всегда "переводится" непосредственно на другой.
Таким образом, вы получаете очень плохой код, который трудно, если не невозможно поддерживать, который не может быть хорошо обновлен, и это вызовет у вас огромную головную боль, если оригинал будет изменен. И это будет кошмар для отладки, если он не будет работать "прямо из коробки".
Вместо этого используйте исходный код в качестве спецификации для нового приложения, написанного на целевом языке / фреймворке, и напишите его с нуля, используя оригинал в качестве "шаблона". Вы получите гораздо, гораздо лучший результат, который сэкономит вам много времени в долгосрочной перспективе.


Рейтинг:
1

KarstenK

Посетите какой-нибудь учебник по python, например Изучайте Python и изучите основной синтаксис.

Обычно вы можете имитировать поток кода программы на C++, если у вас есть аналогичные классы python, но я рекомендую вам переработать свой код с помощью классов и структур для объектов данных и избежать плохих определений.