Fejtörő – „csak guruknak”…

Kezdőlap Fórumok Programozás Fejtörő – „csak guruknak”…

10 bejegyzés megtekintése - 51-60 / 121
  • Szerző
    Bejegyzés
  • #2104355
    uzsolt
    Felhasználó
      NagyEsta wrote:
      A -k kapcsolót még nem is használtam. Pedig nem rossz.

      Én se használtam addig, amíg nem volt rá szükségem 🙂

      #2104356
      uzsolt
      Felhasználó
        NagyEsta wrote:
        A -k kapcsolót még nem is használtam. Pedig nem rossz.

        Én se használtam addig, amíg nem volt rá szükségem 🙂

        #2104357
        gabaman
        Felhasználó

          Volt szabad 5 percem, úgyhoy összedobtam egy kis bash scriptet.  ;D  Lassan már 3 hete dobta fel a témát Vizsla, de mindenki csak kóstolgatja a bash változatot, most itt egy komplex implementáció:

          halmaz.sh

          Code:
          #!/bin/sh

          TMP1=”temp.1.txt”
          TMP2=”temp.2.txt”
          BEVITEL=1
          KEZDO=1
          ELVALASZTO=”.”

          function rendezes {
                  if ! [ -f $1 ]
                  then
                          echo „A(z) $1 fájl nem létezik!”
                          exit 2
                  fi
                  cat $1 | sort -u >$2
          }

          function rendezes_karakterlanc {
                  if ! [ -f $1 ]
                  then
                          echo „A(z) $1 fájl nem létezik!”
                          exit 2
                  fi
                  cat $1 |
                          sed -e ‘s/”([^”]*)”[ t]*/1n/g’ |
                          grep ‘[^n]’ |
                          sort -u >$2
          }

          function numerikus_rendezes {
                  O1=$KEZDO
                  O2=`expr $O1 + 1`
                  O3=`expr $O1 + 2`
                  if ! [ -f $1 ]
                  then
                          echo „A(z) $1 fájl nem létezik!”
                          exit 2
                  fi
                  cat $1 | sort -u -t $ELVALASZTO -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
          }

          function numerikus_rendezes_karakterlanc {
                  O1=$KEZDO
                  O2=`expr $O1 + 1`
                  O3=`expr $O1 + 2`
                  if ! [ -f $1 ]
                  then
                          echo „A(z) $1 fájl nem létezik!”
                          exit 2
                  fi
                  cat $1 |
                          sed -e ‘s/”([^”]*)”[ t]*/1n/g’ | grep ‘[^n]’ |
                          sort -u -t ‘$ELVALASZTO’ -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
          }

          function kivon {
                  $RENDEZES $1 $TMP1
                  $RENDEZES $2 $TMP2
                  diff -u $TMP1 $TMP2 |
                          grep -v „^—” |
                          grep „^-„|
                          cut -b 2- |
                          sort -u >$3
                  rm -f $TMP1 $TMP2
          }

          function unio {
                  if test „$LANC” = „”
                  then
                          cat $1 $2 >$TMP1
                  else
                          cat $1 $2 | tr ‘n’ ‘ ‘>$TMP1
                  fi
                  $RENDEZES $TMP1 $3
                  rm -f $TMP1
          }

          function metszet {
                  $RENDEZES $1 $TMP1
                  $RENDEZES $2 $TMP2
                  diff -u $TMP1 $TMP2 |
                          grep „^ ” |
                          cut -b 2- |
                          sort -u >$3
                  rm -f $TMP1 $TMP2
          }

          function segitseg {
                  echo „Használat: $0 [opciók] — ”
                  echo „”
                  echo ”  Műveletek:”
                  echo ”    –kivon”
                  echo ”    –unio”
                  echo ”    –metszet”
                  echo „”
                  echo ”  Opciók:”
                  echo ”    -l  Karakterlánc bemenet”
                  echo ”    -n  Numerikus bemenet”
                  echo ”    -t  Elválasztó (csak numerikus bemenetnél)”
                  echo ”    -k  Kezdő oszlop (csak numerikus bemenetnél)”
                  echo ”    -v  Bőbeszédű kimenet”
                  echo „”
                  echo ”  Példa: $0 A–kivon B C”
                  echo „”
                  exit 1
          }

          if test $# -le 4
          then
                  segitseg
          fi

          for i in $*
          do
                  if test „$PARANCS” = „elvalaszto”
                  then
                          ELVALASZTO=”$i”
                  elif test „$PARANCS” = „kezdo”
                  then
                          KEZDO=”$i”
                  else
                          case $i in
                                  -l) LANC=_karakterlanc ;;
                                  -n) NRENDEZ=numerikus_ ;;
                                  -t) if test „$NRENDEZ” = „”
                                      then
                                              echo „Csak numerikus bemenetet lehet elválasztani!”
                                              exit 3
                                      else
                                              PARANCS=elvalaszto
                                      fi ;;
                                  -k) if test „$NRENDEZ” = „”
                                      then
                                              echo „Csak numerikus bemenetnél lehet kezdő kulcsot megadni!”
                                              exit 3
                                      else
                                              PARANCS=kezdo
                                      fi ;;
                                  –kivon) MUVELET=kivon
                                          if test „$BEVITEL” != 2
                                          then
                                              segitseg
                                          fi ;;
                                  –unio) MUVELET=unio
                                          if test „$BEVITEL” != 2
                                          then
                                              segitseg
                                          fi ;;
                                  –metszet) MUVELET=metszet
                                          if test „$BEVITEL” != 2
                                          then
                                              segitseg
                                          fi ;;
                                  -v) NYOMTAT=1 ;;
                                  -h) segitseg ;;
                                  –help) segitseg ;;
                                  -?) segitseg ;;
                                  *) if test „$PARANCS” != „”
                                    then
                                              segitseg
                                    else
                                              case $BEVITEL in
                                                      1) FORRAS1=$i
                                                        BEVITEL=2 ;;
                                                      2) FORRAS2=$i
                                                        BEVITEL=3 ;;
                                                      3) KIMENET=$i
                                                        BEVITEL=4 ;;
                                                      *) segitseg ;;
                                              esac
                                    fi;;
                          esac

                  fi
          done

          RENDEZES=${NRENDEZ}rendezes${LANC}
          $MUVELET $FORRAS1 $FORRAS2 $KIMENET

          if test „$LANC” != „”
          then
                  mv $KIMENET $TMP1
                  cat $TMP1 |
                          sed -e ‘s/([^n]*)/”1″/g’ |
                          tr ‘n’ ‘ ‘ >$KIMENET
                  echo „” >>$KIMENET
                  rm -f $TMP1
          fi

          if test „$NYOMTAT” = „1”
          then
                  echo „”
                  echo „Művelet: $MUVELET”
                  echo „”
                  echo „Forrás 1 (A):”
                  echo „————-”
                  cat $FORRAS1
                  echo „”
                  echo „Forrás 2 (B):”
                  echo „————-”
                  cat $FORRAS2
                  echo „”
                  echo „Eredmény (C):”
                  echo „————-”
                  cat $KIMENET
                  echo „”
          fi

          Nincs különösebben tesztelve, tényleg csak gyorsan összedobtam. Viszont szándékosan kihagytam a leírást (megjegyzéseket), hogy pontosan mi mit csinál. Akit érdekel, jó kis móka kibogozni.

          Az általam tesztelt eredmények:

          Code:
          $ ./halmaz.sh -v A1 –metszet B1 C

          Művelet: metszet

          Forrás 1 (A):
          ————-
          1.1.3.fc6
          1.1.5.fc6
          1.2.3.fc6
          2.1.4.fc6
          1.10.5.fc6

          Forrás 2 (B):
          ————-
          1.1.3.fc6
          1.1.5.fc6
          1.2.3.fc6
          2.1.7.fc6

          Eredmény (C):
          ————-
          1.1.3.fc6
          1.1.5.fc6
          1.2.3.fc6

          és

          Code:
          $ ./halmaz.sh -l -v A –metszet B C

          Művelet: metszet

          Forrás 1 (A):
          ————-
          „1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.4.fc6” „1.10.5.fc6”

          Forrás 2 (B):
          ————-
          „1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.7.fc6”

          Eredmény (C):
          ————-
          „1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6”

          #2104358
          gabaman
          Felhasználó

            Volt szabad 5 percem, úgyhoy összedobtam egy kis bash scriptet.  ;D  Lassan már 3 hete dobta fel a témát Vizsla, de mindenki csak kóstolgatja a bash változatot, most itt egy komplex implementáció:

            halmaz.sh

            Code:
            #!/bin/sh

            TMP1=”temp.1.txt”
            TMP2=”temp.2.txt”
            BEVITEL=1
            KEZDO=1
            ELVALASZTO=”.”

            function rendezes {
                    if ! [ -f $1 ]
                    then
                            echo „A(z) $1 fájl nem létezik!”
                            exit 2
                    fi
                    cat $1 | sort -u >$2
            }

            function rendezes_karakterlanc {
                    if ! [ -f $1 ]
                    then
                            echo „A(z) $1 fájl nem létezik!”
                            exit 2
                    fi
                    cat $1 |
                            sed -e ‘s/”([^”]*)”[ t]*/1n/g’ |
                            grep ‘[^n]’ |
                            sort -u >$2
            }

            function numerikus_rendezes {
                    O1=$KEZDO
                    O2=`expr $O1 + 1`
                    O3=`expr $O1 + 2`
                    if ! [ -f $1 ]
                    then
                            echo „A(z) $1 fájl nem létezik!”
                            exit 2
                    fi
                    cat $1 | sort -u -t $ELVALASZTO -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
            }

            function numerikus_rendezes_karakterlanc {
                    O1=$KEZDO
                    O2=`expr $O1 + 1`
                    O3=`expr $O1 + 2`
                    if ! [ -f $1 ]
                    then
                            echo „A(z) $1 fájl nem létezik!”
                            exit 2
                    fi
                    cat $1 |
                            sed -e ‘s/”([^”]*)”[ t]*/1n/g’ | grep ‘[^n]’ |
                            sort -u -t ‘$ELVALASZTO’ -k ${O1},${O1}n -k ${O2},${O2}n -k ${O3},${O3}n >$2
            }

            function kivon {
                    $RENDEZES $1 $TMP1
                    $RENDEZES $2 $TMP2
                    diff -u $TMP1 $TMP2 |
                            grep -v „^—” |
                            grep „^-„|
                            cut -b 2- |
                            sort -u >$3
                    rm -f $TMP1 $TMP2
            }

            function unio {
                    if test „$LANC” = „”
                    then
                            cat $1 $2 >$TMP1
                    else
                            cat $1 $2 | tr ‘n’ ‘ ‘>$TMP1
                    fi
                    $RENDEZES $TMP1 $3
                    rm -f $TMP1
            }

            function metszet {
                    $RENDEZES $1 $TMP1
                    $RENDEZES $2 $TMP2
                    diff -u $TMP1 $TMP2 |
                            grep „^ ” |
                            cut -b 2- |
                            sort -u >$3
                    rm -f $TMP1 $TMP2
            }

            function segitseg {
                    echo „Használat: $0 [opciók] — ”
                    echo „”
                    echo ”  Műveletek:”
                    echo ”    –kivon”
                    echo ”    –unio”
                    echo ”    –metszet”
                    echo „”
                    echo ”  Opciók:”
                    echo ”    -l  Karakterlánc bemenet”
                    echo ”    -n  Numerikus bemenet”
                    echo ”    -t  Elválasztó (csak numerikus bemenetnél)”
                    echo ”    -k  Kezdő oszlop (csak numerikus bemenetnél)”
                    echo ”    -v  Bőbeszédű kimenet”
                    echo „”
                    echo ”  Példa: $0 A–kivon B C”
                    echo „”
                    exit 1
            }

            if test $# -le 4
            then
                    segitseg
            fi

            for i in $*
            do
                    if test „$PARANCS” = „elvalaszto”
                    then
                            ELVALASZTO=”$i”
                    elif test „$PARANCS” = „kezdo”
                    then
                            KEZDO=”$i”
                    else
                            case $i in
                                    -l) LANC=_karakterlanc ;;
                                    -n) NRENDEZ=numerikus_ ;;
                                    -t) if test „$NRENDEZ” = „”
                                        then
                                                echo „Csak numerikus bemenetet lehet elválasztani!”
                                                exit 3
                                        else
                                                PARANCS=elvalaszto
                                        fi ;;
                                    -k) if test „$NRENDEZ” = „”
                                        then
                                                echo „Csak numerikus bemenetnél lehet kezdő kulcsot megadni!”
                                                exit 3
                                        else
                                                PARANCS=kezdo
                                        fi ;;
                                    –kivon) MUVELET=kivon
                                            if test „$BEVITEL” != 2
                                            then
                                                segitseg
                                            fi ;;
                                    –unio) MUVELET=unio
                                            if test „$BEVITEL” != 2
                                            then
                                                segitseg
                                            fi ;;
                                    –metszet) MUVELET=metszet
                                            if test „$BEVITEL” != 2
                                            then
                                                segitseg
                                            fi ;;
                                    -v) NYOMTAT=1 ;;
                                    -h) segitseg ;;
                                    –help) segitseg ;;
                                    -?) segitseg ;;
                                    *) if test „$PARANCS” != „”
                                      then
                                                segitseg
                                      else
                                                case $BEVITEL in
                                                        1) FORRAS1=$i
                                                          BEVITEL=2 ;;
                                                        2) FORRAS2=$i
                                                          BEVITEL=3 ;;
                                                        3) KIMENET=$i
                                                          BEVITEL=4 ;;
                                                        *) segitseg ;;
                                                esac
                                      fi;;
                            esac

                    fi
            done

            RENDEZES=${NRENDEZ}rendezes${LANC}
            $MUVELET $FORRAS1 $FORRAS2 $KIMENET

            if test „$LANC” != „”
            then
                    mv $KIMENET $TMP1
                    cat $TMP1 |
                            sed -e ‘s/([^n]*)/”1″/g’ |
                            tr ‘n’ ‘ ‘ >$KIMENET
                    echo „” >>$KIMENET
                    rm -f $TMP1
            fi

            if test „$NYOMTAT” = „1”
            then
                    echo „”
                    echo „Művelet: $MUVELET”
                    echo „”
                    echo „Forrás 1 (A):”
                    echo „————-”
                    cat $FORRAS1
                    echo „”
                    echo „Forrás 2 (B):”
                    echo „————-”
                    cat $FORRAS2
                    echo „”
                    echo „Eredmény (C):”
                    echo „————-”
                    cat $KIMENET
                    echo „”
            fi

            Nincs különösebben tesztelve, tényleg csak gyorsan összedobtam. Viszont szándékosan kihagytam a leírást (megjegyzéseket), hogy pontosan mi mit csinál. Akit érdekel, jó kis móka kibogozni.

            Az általam tesztelt eredmények:

            Code:
            $ ./halmaz.sh -v A1 –metszet B1 C

            Művelet: metszet

            Forrás 1 (A):
            ————-
            1.1.3.fc6
            1.1.5.fc6
            1.2.3.fc6
            2.1.4.fc6
            1.10.5.fc6

            Forrás 2 (B):
            ————-
            1.1.3.fc6
            1.1.5.fc6
            1.2.3.fc6
            2.1.7.fc6

            Eredmény (C):
            ————-
            1.1.3.fc6
            1.1.5.fc6
            1.2.3.fc6

            és

            Code:
            $ ./halmaz.sh -l -v A –metszet B C

            Művelet: metszet

            Forrás 1 (A):
            ————-
            „1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.4.fc6” „1.10.5.fc6”

            Forrás 2 (B):
            ————-
            „1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6” „2.1.7.fc6”

            Eredmény (C):
            ————-
            „1.1.3.fc6” „1.1.5.fc6” „1.2.3.fc6”

            #2104359
            uzsolt
            Felhasználó

              Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni. Részeredmények miatt meg nem álltam neki.
              Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott 🙁

              #2104360
              uzsolt
              Felhasználó

                Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni. Részeredmények miatt meg nem álltam neki.
                Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott 🙁

                #2104361
                gabaman
                Felhasználó

                  Elég sokat használom a diff-et, így „kéznél volt”. Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit. Most már illik jobban odafigyelni a minőségre is, ahol a modularitás, a hibák lekezelése, bővíthetőség és a helyes működés könnyű ellenőrzése a főbb szempontok.

                  #2104362
                  gabaman
                  Felhasználó

                    Elég sokat használom a diff-et, így „kéznél volt”. Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit. Most már illik jobban odafigyelni a minőségre is, ahol a modularitás, a hibák lekezelése, bővíthetőség és a helyes működés könnyű ellenőrzése a főbb szempontok.

                    #2104363
                    pointux
                    Felhasználó

                      „Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni.”
                      Na, most ez a megoldás, – ha jól látom – már a két feladatnak a kombinációja…
                      Egy kis kis file ellenőrzéssel, paraméter kezeléssel, ami viszont nem is volt kötelező feladat. (Habár az már amúgy is csuklógyakorlat…)

                      „Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott”
                      Látod, hogy mit tesz, amikor egyesek olvasgatják a man oldalakat…

                      „Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit.”
                      Hiihi…
                      Meg egyébként is… csak magad miatt is. :)))

                      #2104364
                      pointux
                      Felhasználó

                        „Vizsla feladatával nekem a legfőbb bajom az volt, hogy túl összetett, tehát már az elején látszódott, hogy sokat kell vele molyolni.”
                        Na, most ez a megoldás, – ha jól látom – már a két feladatnak a kombinációja…
                        Egy kis kis file ellenőrzéssel, paraméter kezeléssel, ami viszont nem is volt kötelező feladat. (Habár az már amúgy is csuklógyakorlat…)

                        „Ez a diff-es megoldás nagyon cseles, nekem eszembe se jutott”
                        Látod, hogy mit tesz, amikor egyesek olvasgatják a man oldalakat…

                        „Egy picit keveselltem is a megoldás méretét, ezért körítettem hozzá egy kicsit.”
                        Hiihi…
                        Meg egyébként is… csak magad miatt is. :)))

                      10 bejegyzés megtekintése - 51-60 / 121
                      • Be kell jelentkezni a hozzászóláshoz.