Lägger till eller lägger till? beror

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

Brain-flak blir ett år gammalt i morgon! För att hedra det är födelsedagen, har vi en födelsedagsfest i PPCG-stil, där flera användare lägger in frågor som rör hjärnflak! Hjälp oss att fira! :)


Brain-flak är ett esoteriskt språk jag skrev där alla kommandon är parenteser och alla parenteser måste vara helt matchade. Att låna min egen definition :

  • För denna utmaning är en "konsol" någon av dessa tecken: ()[]{}<> .

  • Ett par parentes anses vara "matchade" om öppnings- och stängningsfästena är i rätt ordning och har inga tecken inuti dem, till exempel

    ()
    []{} 

    Eller om varje delelement inuti det också matchas.

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

    Subelements kan också nästas flera lager djupt.

    [(){<><>[()]}<>()]<[{((()))}]> 
  • En sträng anses vara "helt matchad" om och endast om:

    1. Varje enskild karaktär är en konsol,

    2. Varje par parentes har rätt öppnings- och stängningsfäste och i rätt ordning

För att fira hjärnflakens första födelsedag handlar dagens utmaning om att ta en obalanserad uppsättning parentes och bestämma vilka typer av operationer som behövs för att göra den till en bra hjärnflak.

  • Till exempel (( är inte giltig hjärnflakkod, men om vi lägger till )) blir den (()) , som är helt balanserad, och därmed gäller hjärnflak. Det gör den här inmatningen appendable .

  • På samma sätt är >} inte giltigt, men vi kan förordna {< till det för att göra {<>} , vilket är giltigt. Det gör det här prependable .

  • Vissa ingångar är lite mer komplicerade. Till exempel, )][({ kan inte göras rent endast genom att lägga till eller förpenga. Men det can göras giltigt genom att lägga ut [( och bifoga })] . Därför är denna ingång både prependable och appendable .

  • Slutligen kan vissa ingångar aldrig göras giltig hjärnflikk kod med någon kombination av tillägg eller prepending. Till exempel kan (> aldrig göras giltigt. (Förutbestämning < skapar <(> och bifogad ) skapar (>) , varav ingen är giltiga) Därför är denna ingång varken tilläggbar eller förbeställbar.

För dagens utmaning måste du skriva ett program eller en funktion som tar en rad parentes och bestämmer om strängen är

appendable
prependable
both
neither 

Du kan välja vilka värden du använder för att representera för varje enskilt fall. Till exempel utmatar 1, 2, 3, 4 eller 'a', 'p', 'b', 'n' eller 1, 'foo', 3.1415, -17 eller vad som är bra. Så länge varje produkt är distinct och consistent , så är det bra. Du must dock tydligt ange vilken produkt som motsvarar vilket fall.

Du kan returnera det här värdet i vilket format som är mest lämpligt (till exempel, retur från en funktion, utskrift till STDOUT, modifiering av argument, skrivning till en fil etc.).

Du kan anta att ingången aldrig kommer att vara giltig hjärnflik eller tom.

exempel

Följande ingångar är alla prependable :

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

Dessa är alla appendable :

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

Dessa är both :

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

Och det här är inte neither alla:

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

Som vanligt är detta , så standardmolekyler gäller och det kortaste svaret i byte vinner!


Denna utmaning är särskilt svår i hjärnflak, så maximal brownie pekar på varje svar som skrivs i hjärnflak. :)

6 Answers


Jonathan Allan 04/29/2017.

Jelly , 33 32 37 35 34 bytes

buggen hittade, hemsk fixa +5 byte, bättre fixa - 2 byte, med ett knep av Adnan såg jag här för -1 mer.

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

Returvärden:

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

(Ogiltig inmatning returnerar falska resultat, även om giltigt Brain-flack returnerar [] .)

Try it online! - En testpaket (skriv ut mushed representationer, så 20 för [2,0] , och ignorerar linjer som innehåller någon - ).


Cows quack 04/29/2017.

Näthinnan , 41 40 41 bytes

1 byte saved thanks to @MartinEnder

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

Prova det online!

  • Förbeställbar är 1
  • Appendable är 0
  • Båda är 10
  • Ingen är 01

redigeringar

  • Gick 1 byte för att fixa felet märkt av @Neil

Neil 04/29/2017.

Batch, 337 byte

@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% 

Outputs ] för prepend, [ för append, ][ för båda, [] för varken.


Ørjan Johansen 04/29/2017.

Haskell , 115 108 byte

REDIGERA:

  • -7 byte: Använd fler vakter.
 (""#)
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 

Prova det online!

Använd som (""#) "))" . Resultaten ges som:

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

Hur det fungerar

  • Utmatningskodningen väljs så att ett behov av att förordnas signaleras genom att det andra elementet av resultatet släpps för resten, om någon, medan en fullständig felpassning signaleras genom att släppa alla dem.
  • s#d analyserar en återstående sträng d , med en sträng / stapel s av förväntade stängningsfästen.
    • s#"" linjen kontrollerar om alla stängningsfästen har hittats i slutet av strängen, annars behövs tillägg.
    • Den första gren av s#(c:d) kontrollerar om nästa tecken c är en öppningsfäste, och om så lämnar motsvarande stängningsfäste på stapeln för rekursionen.
    • Annars, om stapeln innehåller stängningsfästen, kontrollerar den andra grenen om den översta matchar nästa tecken, och om inte, returnerar en tom lista i stället för att återgå.
    • Slutligen, i den sista filialen är stapeln tom, och vi har en oöverträffad stängningsfäste som kan fixas genom att lägga ut, innan återanvändning.

ETHproductions 04/29/2017.

Japt , 44 bytes

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

Outputs 1 för prependable, 3 for appendable, 13 för båda och 31 för varken.

Testa det på nätet! eller verifiera alla testfall samtidigt.

Hur det fungerar

=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 => appendable,

2 => prependable,

12 => båda,

0 => varken

Testfall


HighResolutionMusic.com - Download Hi-Res Songs

1 Alan Walker

Different World flac

Alan Walker. 2018. Writer: Shy Nodi;Alan Walker;Fredrik Borch Olsen;James Njie;Marcus Arnbekk;Gunnar Greve Pettersen;K-391;Corsak;Shy Martin;Magnus Bertelsen.
2

Tell Me It's Over

3 Ariana Grande

​Thank U, Next flac

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

Wait Another Day flac

Mesto. 2018.
5 Anne-Marie

Rewrite The Stars flac

Anne-Marie. 2018. Writer: Benj Pasek;Justin Paul.
6 Rita Ora

Let You Love Me flac

Rita Ora. 2018. Writer: Rita Ora;Easyfun;Fred Gibson;Noonie Bao;LotusIV;Ilsey Juber.
7 Conor Maynard

How You Love Me flac

Conor Maynard. 2018. Writer: Yoshi Breen;Thom Bridges;Hardwell;Rik Annema;Conor Maynard;Cimo Fränkel;Snoop Dogg.
8 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
9 ZAYN

There You Are flac

ZAYN. 2018. Writer: Joe Garrett;Levi Lennox;Michael Hannides;Anthony Hannides;ZAYN.
10 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
11 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
12 Bastille

Grip flac

Bastille. 2018. Writer: Dan Smith;Espen Berg;Joakim Haukaas;Mark Crew;Simen Eriksrud;Thomas Eriksen.
13 Ariana Grande

Imagine flac

Ariana Grande. 2018. Writer: Jameel Roberts;Priscilla Renea;Happy Perez;Andrew "Pop" Wansel;Ariana Grande.
14 Mark Ronson

Nothing Breaks Like A Heart flac

Mark Ronson. 2018. Writer: Thomas Brenneck;Maxime Picard;Ilsey Juber;Conor Szymanski;Clement Picard;Mark Ronson;Miley Cyrus.
15 ZAYN

Good Years flac

ZAYN. 2018. Writer: Anthony Hannides;Khaled Rohaim;Michael Hannides;ZAYN;Herbie Crichlow.
16 The Chainsmokers

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
17 Clean Bandit

Mama flac

Clean Bandit. 2018. Writer: Jason Evigan;Jack Patterson;Grace Chatto;Ellie Goulding;Caroline Ailin.
18 Halsey

Without Me (Illenium Remix) flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
19 Martin Garrix

Dreamer (Nicky Romero Remix) flac

Martin Garrix. 2018. Writer: Yury Parkhomenko;Aleksandr Parkhomenko;Ilsey Juber;Brian Lee;Mike Yung;Martin Garrix.
20 Julian Jordan

Glitch flac

Julian Jordan. 2018.

Related questions

Hot questions

Language

Popular Tags