Past of maakt u zich klaar? Hangt er van af

DJMcMayhem 04/29/2017. 6 answers, 427 views
code-golf string balanced-string classification brain-flak

Brain-flak wordt morgen een jaar oud! Ter ere van zijn verjaardag hebben we een verjaardagsfeest in PPCG-stijl, waar verschillende gebruikers vragen stellen over hersenkrakers! Help ons vieren! :)


Brain-flak is een esoterische taal die ik heb geschreven waarbij alle commando's tussen haakjes staan ​​en alle haakjes volledig moeten overeenkomen. Om mijn eigen definitie te lenen:

  • Ten behoeve van deze uitdaging is een "haakje" een van deze tekens: ()[]{}<> .

  • Een paar haakjes wordt als "aangepast" beschouwd als de openings- en sluithaken in de juiste volgorde staan ​​en geen tekens bevatten, zoals

    ()
    []{} 

    Of als elk subelement dat erin zit ook overeenkomt.

    [()()()()]
    {<[]>}
    (()()) 

    Subelementen kunnen ook meerdere lagen diep worden genest.

    [(){<><>[()]}<>()]<[{((()))}]> 
  • Een tekenreeks wordt beschouwd als "Volledig passend", indien en alleen als:

    1. Elk personage is een haakje,

    2. Elk paar beugels heeft de juiste beugel voor openen en sluiten en in de juiste volgorde

Ter ere van de eerste verjaardag van hersenkraken, gaat de uitdaging van vandaag over het nemen van een ongebalanceerde set van haakjes, en het bepalen welke soorten operaties nodig zijn om het tot een hersenschudding te maken.

  • Bijvoorbeeld, (( is geen geldige brain-flak-code, maar als we eraan toevoegen )) , wordt het (()) , dat volledig gebalanceerd is en daarom een ​​geldig hersenschild is. Dat maakt deze invoer appendable .

  • Evenzo is >} niet geldig, maar we kunnen er {< voor gebruiken om {<>} , wat geldig is. Dat maakt deze invoer prependable .

  • Sommige ingangen zijn iets gecompliceerder. Bijvoorbeeld:) )][({ kan niet geldig worden gemaakt door alleen maar toe te voegen of vooraf te gaan, maar het can geldig worden gemaakt door [( en toevoegen })] prependable . Daarom is deze invoer zowel prependable als prependable .

  • Ten slotte kunnen sommige ingangen nooit geldige hersenspuitcode worden gemaakt door een combinatie van toevoegen of prependeren. Bijvoorbeeld, (> kan nooit geldig worden gemaakt. (Voorbereidend < creëert <(> , en toevoegend ) maakt (>) , die geen van beide geldig zijn) Daarom is deze invoer niet aanhangbaar of voorvoegbaar.

Voor de uitdaging van vandaag moet je een programma of functie schrijven die een reeks haakjes neemt en bepaalt of de reeks is

appendable
prependable
both
neither 

U kunt kiezen voor welke waarden u voor elke zaak representeert. Bijvoorbeeld, het uitvoeren van 1, 2, 3, 4 , of 'a', 'p', 'b', 'n' , of 1, 'foo', 3.1415, -17 of wat dan ook in orde is. Zolang elke output distinct en consistent , is dat prima. U must echter duidelijk aangeven welke uitgang overeenkomt met welk geval.

U kunt deze waarde retourneren in elk formaat dat het geschiktst is (bijvoorbeeld terugkeren van een functie, afdrukken naar STDOUT, wijzigen van argumenten, schrijven naar een bestand, enz.).

Je kunt aannemen dat de input nooit geldig hersenschudding of leeg is.

Voorbeelden

De volgende ingangen zijn allemaal prependable :

))
(((()()())))}
)>}]
()[]{}<>) 

Deze zijn allemaal appendable :

(({}{})
((((
([]()())(
{<<{ 

Dit zijn both :

))((
>()[(()){
>{ 

En dit zijn allemaal neither :

)(}
{(((()()()))>[}
((((((((((>((((((((((<>()] 

Zoals gebruikelijk is dit , dus standaard mazen zijn van toepassing, en het kortste antwoord in bytes wint!


Deze uitdaging is vooral moeilijk in hersenschudding, dus maximale brownie wijst naar elk antwoord geschreven in hersenschudding. :)

5 Comments
1 Erik the Outgolfer 04/29/2017
maximum brownie points Ik denk dat het aanbieden van maximale browniepunten en cookies in plaats daarvan Brain-Flaking deze uitdaging meer dan alleen browniepunten zou aanmoedigen, omdat ik het niet triviaal vind in any taal dan ook, laat staan ​​Brain-Flak. : P
Jonathan Allan 04/29/2017
Ter info: allebei de testen eindigen met open haakjes, alle beide tests eindigen met korte haakjes.
1 orlp 04/29/2017
Ik zou zeggen dat 'beide' de verkeerde term is. Een tekenreeks als ][ is not toevoegbaar, omdat niets dat u kunt toevoegen, het geldig kan maken. Het is evenmin prependable. Het is ... 'invoegbaar'! Je kunt het in een string invoegen om de hele geldige Brainflak te maken.
Funky Computer Man 04/30/2017
Zijn al gebalanceerde snaren beide of geen van beide?
DJMcMayhem 04/30/2017
@wheatwizard Gebalanceerde strings worden niet als invoer gegeven. You can assume that the input will never be valid brain-flak or empty.

6 Answers


Jonathan Allan 04/29/2017.

Jelly , 33 32 37 35 34 bytes

bug gevonden, vreselijke oplossing +5 bytes, betere oplossing - 2 bytes, met behulp van een list van Adnan's die ik hier voor -1 meer heb gezien.

“({[<“)}]>”Z;@WœṣF¥/µÐLO‘&2µIṀ>0ȯQ 

Retourwaarden:

prepends [2]
 appends [0]
    both [2,0]
 neither 1 

(Ongeldige invoer retourneert valse resultaten, hoewel geldige Brain-flack retourneert [] .)

Try it online! - een testsuite (drukt mushed-representaties af, dus 20 voor [2,0] , en negeert regels die een - ).


Cows quack 04/29/2017.

Retina , 41 40 41 bytes

1 byte saved thanks to @MartinEnder

+`\(\)|\[]|{}|<>[]})>]+
1
\W+
0
...+
01 

Probeer het online!

  • Preubleable is 1
  • Aan te vullen is 0
  • Beide zijn 10
  • Geen is 01

bewerkingen

  • Verkregen 1 byte om bug op te lossen die werd opgemerkt door @Neil
5 comments
Martin Ender♦ 04/29/2017
[]})>] slaat een byte op.
Cows quack 04/29/2017
@MartinEnder Ah, het is omdat tekensets niet leeg kunnen zijn, bedankt!
Neil 04/29/2017
Dit werkt niet voor alle niet-aanhangbare ingangen, bijvoorbeeld (][) . Ik denk dat het kan worden gerepareerd voor een prijs van één byte door 101 te veranderen in ...+ .
Cows quack 04/29/2017
@Neil Bedankt voor het opmerken van de bug, ik vraag me af of er dergelijke gevallen ook bij Both zijn
Neil 04/29/2017
Nee, ik denk dat 10 de enige geldige combinatie is voor Both .

Neil 04/29/2017.

Batch, 337 bytes

@echo off
set/ps=
:g
set "t=%s:<>=%
set "t=%t:()=%
set "t=%t:[]=%
set "t=%t:{}=%
if not "%t%"=="%s%" set "s=%t%"&goto g
set "s=%s:<=[%
set s=%s:>=]%
set s=%s:(=[%
set s=%s:)=]%
set s=%s:{=[%
set s=%s:}=]%
:l
if %s:~,2%==]] set s=%s:~1%&goto l
:r
if %s:~-2%==[[ set s=%s:~,-1%&goto l
if not _%s:~2%==_ set s=[]
echo %s% 

Uitgangen ] voor prepend, [ voor toevoegen, ][ voor beiden, [] voor geen van beide.


Ørjan Johansen 04/29/2017.

Haskell , 115 108 bytes

BEWERK:

  • -7 bytes: gebruik meer bewakers.
 (""#)
s#""=[s>"",1>0]
s#(c:d)|Just a<-lookup c$zip"([{<"")]}>"=(a:s)#d|(a:b)<-s=[1|a==c]>>b#d|0<1=take 1$s#d 

Probeer het online!

Gebruik like (""#) "))" . Resultaten worden gegeven als:

 [False,True]: needs nothing
[False]: prependable
[True,True]: appendable
[True]: both
[]: neither 

Hoe het werkt

  • De uitvoercodering wordt zo gekozen dat een behoefte om vooraf te gaan wordt gesignaleerd door het tweede element van het resultaat voor de rest te laten vallen, indien aanwezig, terwijl een volledige misaanpassing wordt gesignaleerd door ze allemaal te laten vallen.
  • s#d parseert een resterende string d , gegeven een string / stack s van verwachte sluitingshaken.
    • De regel s#"" controleert of alle afsluitende haakjes aan het einde van de tekenreeks zijn gevonden, anders is toevoegen vereist.
    • De eerste tak van s#(c:d) controleert of het volgende teken c een openingsbeugel is en, als dat zo is, de bijbehorende sluitingsbeugel op de stapel verlaat voor de recursie.
    • Anders, als de stapel afsluitende haakjes bevat, controleert de tweede tak of de bovenste overeenkomt met het volgende teken, en als dat niet het geval is, wordt een lege lijst geretourneerd in plaats van teruggestuurd.
    • Ten slotte is in de laatste vertakking de stapel leeg en hebben we een niet-overeenkomende sluitingsbeugel die vóór verzending kan worden opgelost door deze vooraf te plaatsen.

ETHproductions 04/29/2017.

Japt , 44 bytes

=Ue"%(%)|%[]|\{}|<>" ®c -1&2|1})f31 |UfD |Ug 

Uitgangen 1 voor voorvoegsel, 3 voor bijlagen, 13 voor beide en 31 voor geen van beide.

Test het online! of Controleer alle testgevallen tegelijk.

Hoe het werkt

=Ue"%(%)|%[]|\{}|<>" ®   c -1&2|1})f31 |UfD |Ug
U=Ue"%(%)|%[]|\{}|<>" mZ{Zc -1&2|1})f31 |UfD |Ug

                    // "(((()()())))}"  "([({}{})"    ">()[(()){"  "((((<>()]"
Ue"%(%)|%[]|\{}|<>" // Recursively remove all instances of "()", "[]", "{}", and "<>" from U.
                    // "}"              "(["          ">[{"        "((((]"
mZ{Zc -1&2|1}       // Replace each char Z with (Z.charCodeAt() - 1) & 2 | 1.
                    // "1"              "33"          "133"        "33331"
U=                  // Save the result in U.
f31 |UfD |Ug        // Match all instances of "31" and "13" (D = 13) and bitwise-OR the results with the first char.
                    // null|null|1      null|null|3   null|13|1    31|null|3
                    // 1                3             13           31
                    // Implicit: output result of last expression 

Jörg Hülsermann 06/04/2017.

PHP, 137 bytes

for($c=1;$c;)$a=preg_replace("#<>|\(\)|\[\]|\{\}#","",$a=&$argn,-1,$c);echo($a=preg_replace(["#[]})>]+#","#[[{(<]+#"],[1,2],$a))<13?$a:0; 

1 => aanhangbaar,

2 => vooraf in te stellen,

12 => beide,

0 => geen van beiden

testcases

2 comments
Cyoce 06/04/2017
"Zolang elke output verschillend en consistent, dat prima". Dit lijkt geen consistente waarde te hebben voor geen van beide.
Jörg Hülsermann 06/04/2017
@Cyoce Het is nu opgelost

HighResolutionMusic.com - Download Hi-Res Songs

1 The Chainsmokers

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
2 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
3 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
4 Anne-Marie

Rewrite The Stars flac

Anne-Marie. 2018. Writer: Benj Pasek;Justin Paul.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
6 Nicki Minaj

No Candle No Light flac

Nicki Minaj. 2018. Writer: Denisia “Blu June” Andrews;Kathryn Ostenberg;Brittany "Chi" Coney;Brian Lee;TJ Routon;Tushar Apte;ZAYN;Nicki Minaj.
7 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
8 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
9 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
10 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
11 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
12 Brooks

Limbo flac

Brooks. 2018.
13 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
14 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
15 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
16 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
17 Rita Ora

Velvet Rope flac

Rita Ora. 2018.
18 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
19 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
20 Erika Sirola

Speechless flac

Erika Sirola. 2018. Writer: Teemu Brunila;Stefan Dabruck;Jürgen Dohr;Guido Kramer;Dennis Bierbrodt;Chris Braide;Robin Schulz.

Related questions

Hot questions

Language

Popular Tags