Время домашнее задание! Найдите мне младшую четную цифру в строке

12

Еще один блестящий вопрос от Stack Overflow превратился в вызов !

Напишите программу, которая:

  1. Принимает строку в качестве пользовательского ввода (не передается по каналу или аргумент командной строки). Тип данных ввода должен быть строкой, если язык автоматически выявляется при вводе, он должен быть приведен к строке.
  2. Находит индекс (на основе 0 или 1) первой младшей четной цифры .
  3. Печатает 2 целых числа , индекс и младшую четную цифру .
  4. Если четной цифры нет , верните -1 в качестве индекса, второе число может быть любым.
  5. Для целей этого ноль не является четным .

Тестовые примеры, учитывая строку слева, выводят значения справа:

25376  -->  0,2
523726 -->  1,2
583746 -->  4,4
53771  --> -1,0
_4___2 -->  5,2

Победитель: это программа с наименьшим количеством символов. Нет бонусов, нет штрафов.

edit: (о stdin) Я облажался с пользовательской вводной частью, в основном нет данных о трубопроводе и аргументов командной строки. Вы должны предоставить пользователю какую-либо подсказку в самой программе.

Сообщество
источник
4
Что делать, если младшее четное целое число имеет две цифры? Хорошо, это была шутка.
Доктор Велизарий
5
Что не так с STDIN?
Джон Дворак
1
@JanDvorak Потому что произвольные правила, вот почему.
7
Почему ограничение нуля не является четным? Это кажется довольно странным.
Изи
3
Ваши требования к вводу данных на самом деле не имеют смысла: для большинства систем ввод поступает из стандартного ввода, независимо от того, вызван ли он программой или нет. Независимо от того, введен ли ввод или нет, программа не контролируется. - Если ваша цель состояла в том, чтобы пользователи создавали интерактивную программу, то вы должны были быть точными в отношении ввода и вывода (включая форматирование) и требуемого взаимодействия.
MtnViewMark

Ответы:

6

Golfscript, 26 (28) символов

'#{gets}'.'246'&8+$1<.@\?

Пример:

;'583746'
.'246'&8+$1<.@\?
#44

;'53771'
.'246'&8+$1<.@\?
#8-1

живой тест: http://golfscript.apphb.com/?c=Oyc1Mzc3MScKLicyNDYnJjgrJDE8LjA9QD8%3D

Объяснение:

  • '#{gets}'является побегом к ruby ​​для удовлетворения требований ввода / вывода; STDIN предполагается пустым
  • . клонирует вход
  • '246'&8+находит, какие четные цифры присутствуют во входных данных, за исключением того, 8что всегда сохраняется
  • $1< сортирует список, затем берет первую цифру, но сохраняет ее как строку
  • .@\?упорядочивает стек {цифра, ввод, цифра}, затем находит цифру на входе; спасибо @peterTaylor за то, что заметил меня подпись [array, array] ?.

На этот раз я был очень смел с интерпретацией спецификаций; а именно:

  • Спецификация не требует, в каком порядке выводятся целые числа; Используйте предложение другого @ peter :x?xдля исправления (мне не нравятся временные переменные.
  • Спецификация не требует какого-либо разделителя между двумя целыми числами; поскольку найденная цифра всегда является одной цифрой, это не имеет большого значения. Если это так, добавьте n@(который также выполняет обмен), n\(который не выполняет) или ]`(который форматирует вывод как ["8" -1]).
Джон дворак
источник
Это не сумасшедшие требования, это произвольные требования: P
Кроме того, спецификация требует, чтобы индекс был первым, но я не могу прочитать GolfScript достаточно хорошо, чтобы сказать, если вы этого не сделали
@LegoStormtroopr единственная точка спецификации, в которой упоминается порядок, это # ​​4: «Если четной цифры нет, верните -1 в качестве индекса, второе число может быть любым». № 3 не указывает порядок; как насчет смелости "без разделителя"?
Джон Дворак
О, хватит, вы правы, сэр! Я упомянул два числа для вывода, но не порядок. Я исправлюсь!
Вы можете заменить .0=@?с .@\?или :x?xсохранить один символ и избежать сомнений по поводу заказа. Хорошее использование 8как запасной вариант.
Питер Тейлор
5

APL (37)

(По умолчанию 1, но подчиняется ⎕IO)

{×⍴m←⍵/⍨⍵∊'2468':z,⍨⍵⍳⍕z←⌊/⍎¨m⋄¯1,0}⍞

Объяснение:

  • : читать ввод пользователя
  • m←⍵/⍨⍵∊'2468': удалить все символы, которые нет 2468, сохранить в m.
  • ×⍴m: посмотреть, есть ли
  • :: Если так:
    • z←⌊/⍎¨m: оцените каждый символ в m, найдите наименьшее число и сохраните в z.
    • z,⍨⍵⍳⍕z: вернуть индекс zв , а затем z.
  • : Если не:
    • ¯1,0: возвращение (-1, 0)
Мэринус
источник
1
Ух ты, я победил APL (не с решением J, но все же ...)
Джон Дворжак
Объяснение? APL так самоочевиден ...;)
german_guy
3

Python 3, 69

объединяя идеи отсюда .

s=input();print(([(s.find(x),x)for x in'2468'if x in s]+[(-1,0)])[0]) 
Был ли я
источник
Мне нравится использование строки, а не списка, и полученное в результате упущение (теперь удаленных) `кавычек.
SimonT
@boothby Я думаю, вы не заметили, что я использую Python 3. В Python 3 input () Принимает строку как ввод пользователя.
Васи
@SimonT `(обратные метки) - это не просто кавычки. Это устаревший псевдоним для repr () в Python 2. Но он больше не доступен в Python 3. Итак, если я хочу использовать `` для чего-то в Python 3, я должен написать repr (что-то), что стоит еще 4 символа. Вот почему я от этого избавляюсь;)
Васи
@ Да, да, моя ошибка.
Boothby
@ Васи, да, спасибо. Я знал об этом и под «теперь удаленным» я фактически имел в виду удаленный как часть языка в целом. Приветствия.
SimonT
3

Рубин, 60 знаков

x=gets.chars.sort.find{|c|c=~/[2468]/};p x ?$_.index(x):-1,x
  • $_содержит последний вход прочитан gets.
  • pвызывает inspectаргументы и печатает результаты.
rightfold
источник
3

Perl - - 94 - 53 символов (или 48)

Вместо index()подхода, основанного на нуле, мы используем posи начинаем с одного; нет CPAN. Запустите его, perl -nEи он будет ждать ввода (который он также может получить STDIN).

Первая //операция match ( ) работает со значением по умолчанию ( $_) из входных данных, сравнивая с заданными четными числами, sortпомещая совпадения в массив, а затем сохраняя их в «скалярном списке» ($m). В скалярном контексте значение списка отсортированного массива составляет один элемент в длину и, следовательно, состоит из самой младшей четной цифры в числе.

Выделив младшую четную совпадающую цифру, мы затем используем $mвторую операцию сопоставления, которая найдет первое вхождение значения $mв исходной строке. Мы все еще используем здесь значение по умолчанию $_и сохраняем совпадение с содержимым $min $1(причина ()обхода $mво втором выражении). После этого posи sayсделайте все остальное (и в меньшем количестве символов, чем indexи print).

perl -nE'($m)=sort/[2468]/g;/($m)/g;$1?say pos.",$1":say"-1,0"'
33467
3,4

Если порядок вывода или запятые не имеют значения, можно сократить эти 5 символов:

($m)=sort/[2468]/g;/($m)/g;$1?say$1.pos:say"-10"

В моей предыдущей попытке я бросился и сделал ошибку - я просто хотел победить python и ruby ​​(но не смог) ... вздох.

Поздравляю победителя и других участников за их крутые решения - особенно perl6:-) Возможная адаптация этого подхода в Perl6 может быть использована " .comb(предложено на freenode Масаком и др. ).

$_=get;my $n=.comb(/<[2468]>/).min;/$n/;say $/.from//-1,",$/"
Г. Сито
источник
Был настолько сосредоточен на избиении python / ruby, что я опубликовал один лайнер, который не работал, когда не было четных чисел: охотно использовал более раннюю версию из моей $SHELLистории для «победы». Эта рабочая версия до смешного длинна и смущает. Служит мне правильно: буду сокращать позже, чтобы избежать позора :-(
G. Cito
более старый взлом:if(/[2468]/){for$i(2,4,6,8){if(index($_,$i)>-1){say$i,",",index($_,$i)+1;last}}}else{say"0,-1"}
G. Cito
2
Хорошо, но есть место для дальнейшего игры в гольф: ($m)=sort/[2468]/g;/$m/g;say$&?pos.",$&":"-1,0"(47 + 1 байт, AFAIK -nстоит дополнительный байт).
Хайко Обердик
NB. posвозвращает смещение. Таким образом, в вашем примере он возвращает индекс на основе 1.
draegtun
@ Draegtun Упс :-) спасибо. @Heiko правда , что: выключатели должны рассчитывать иначе perl«s -Mбы выиграть каждый раз ;-)
Г. ЦИТО
3

Perl 6, 37 55 60 символов

$_=get;say m/<{~.comb(/<[2468]>/).min}>/.from//-1,',',$/.Int

РЕДАКТИРОВАТЬ: я неправильно понял вопрос в первый раз. Это обновление должно быть правильным. Он находит наименьшее число 2,4,6 или 8, которое содержит входные данные, и затем сопоставляет регулярные выражения с входными данными с этим наименьшим числом. $/.fromполучает позицию совпадения и ',', $/.Intявляется запятой плюс само совпадение, или 0, если текст не совпадает.

Пока вы здесь, отправляйтесь в голосование против Г. Сито , который помог мне исправить мою запись в комментариях и на irc :)

Mouq
источник
1
К сожалению, это печатает первое четное число (2468), найденное и не самое низкое :( Примечание. Также существует проблема, $/.fromкогда ничего не найдено (это может быть ошибка в моей старой версии Rakudo). Вот вариант вашего решения, которое работает ( для меня!) my$x=get;for 2,4,6,8 ->$n{if $x~~/$n/ {say $/.from,",$/";exit}};say "-1 0"; Приходит на 75 символов, но я уверен, что может быть найдено более короткое решение
perl6
@draegtun ... Я сделал аналогичную ошибку с моей попыткой perl5 вчера (см. ниже). Мое исправление добавило 70 символов! Только что обновил версию с ~ 50 символами - что, кажется, работает. Я думаю, что если вы отсортируете все четные цифры числа, то сможете выполнить сопоставление, используя (сейчас) первую цифру в сортировке, и убедитесь, что у вас есть самая низкая и первая. Я прав?
Г. Сито
@ G.Cito выглядит хорошо для меня и уже +1 ваш ответ. Я вижу способ сбрить несколько символов, но вижу, что Хейко сделал даже лучше, чем я собирался предложить!
draegtun
@draegtun О, черт, я тогда совершенно неправильно понял вопрос :( Большое спасибо! Я
обновлю
@mouq Вот подход , который использует один и тот же подход, что и perl5 примера я разместил ниже my $n; $_="333992";$n=.comb(/<[2468]>/).min;/$n/;say $/.from//-1,",$/". Я узнал около .comb20 минут назад, и мне это уже нравится :-)
G. Cito
2

J, 44 знака

echo(;{&i){._1,~(#~(#i)&>)'2468'i.~i=.1!:1]1

выводит последний символ ввода, если четная цифра не найдена

Пример:

   echo(;{&i){._1,~(#~(#i)&>)'2468'i.~i=.1!:1]1
523726
+-+-+
|1|2|
+-+-+
   echo(;{&i){._1,~(#~(#i)&>)'2468'i.~i=.1!:1]1
53771
+--+-+
|_1|1|
+--+-+

Объяснение:

  • echo ... i=.1!:1]1это вход / выход. Намного дольше, чем я хочу. Вклад также спрятан i.
  • '2468'i.~ находит первое вхождение каждой четной цифры на входе, возвращая длину ввода, если цифра не может быть найдена
  • (#~(#i)&>)гласит «выберите по длине ввода больше, чем это»; другими словами, выберите те индексы, которые указывают на вход. Намного дольше, чем я хочу.
  • _1,~добавляет -1 к спине. Подчеркивание - это способ представления отрицательных значений J.
  • {. выбирает первый элемент
  • (;{&i)объединяет его с символом ввода в этой позиции в двух полях; так как мы объединяем число с символом, небоксирующая конкатенация ( ,) не подходит. Если требуется отображение без коробки, индекс необходимо ":сначала отформатировать ( ) по цене двух символов.
Джон дворак
источник
2

Python 2.7 - 76

Ссылочный ответ, который я полностью ожидаю, будет побежден. Но, чтобы начать людей:

s=raw_input()
print[(s.index(`e`),e)for e in[2,4,6,8]if`e`in s][:1]or(-1,0)

источник
3
вы можете сбрить персонажа, изменив indexна find; Вы также можете изменить [2,4,6,8]на 2,4,6,8(с пробелом впереди).
Джастин
4
Короче:print[(s.find(`e`),e)for e in 2,4,6,8if`e`in s+'8'][0]
grc
4
Я думаю, что вы нарушили свое собственное правило ... С каких пор raw_input не является stdin?
Cruncher
1
print[(s.index(c),c)for c in'2468'if c in s][0]or(-1,0)
Эрик
2

R, 104

y=as.integer(strsplit(scan(,""),"")[[1]]);z=which(!y%%2&y);a=z[which.min(y[z])];cat(a,"-1 0"[!sum(a)],y[a])

Примеры (в R индекс начинается с 1):

_4_502
6  2

_3_501
-1 0 

583746
5  4
Свен Хоэнштейн
источник
2

Powershell, 76 73 71

$s=read-host;2,4,6,8|%{if($i=$s.indexof("$_")+1){"$i,$_";break}};"-1,0"
  • $s=read-host сохраняет пользовательский ввод в $s
  • 2,4,6,8|%{...} запускает то, что внутри, {}для цифр 2,4,6 и 8
  • $i=$s.indexof("$_")+1 устанавливает $iна 1 основанный индекс цифры в $sили 0если цифра не найдена
  • if( $i=... ){...} условие будет истинным, когда $iнет0
  • "$i,$_";break выводит индекс и цифру и останавливает выполнение
  • "-1,0" иначе выводит -1,0
Данко Дурбич
источник
Это не выводит правильный индекс. В PowerShell, как и в тестовых примерах, приведенных для вопроса, индексы начинаются с нуля.
Изи
1
Правило № 2 говорит, что индекс может быть 0 или 1 на основе.
Данко Дурбич
Ой. Не заметил этого. В любом случае, вот вариант с нулями, который всего на 5 символов длиннее. $s=read-host;(2,4,6,8)|%{if(($i=$s.indexof("$_"))-gt-1){"$i,$_";break}};'-1,0'
Изи
Кроме того, я уверен, что круглые скобки 2,4,6,8не нужны.
Изи
Нулевой вариант можно сделать на 2 символа длиннее, если вы измените условие if на:if(1+($i=$s.indexof("$_")))
Данко Дурбич
2

C ++ 11, 173 (включая два символа новой строки)

Вот сжатая версия:

#include<iostream> 
#include<string> 
int main(){std::string s;std::cin>>s;for(char c:"2468")for(char&k:s)if(k==c){std::cout<<(&k-&s[0])<<','<<c;return 0;}std::cout<<"-1,8";}

Вот читаемая версия:

#include<iostream>
#include<string>
int main() {
    std::string s; // auto s = ""s; (since C++14: -3 characters)
    std::cin >> s;
    for (char c : "2468")
        for (char& k : s)
            if (k == c) {
                std::cout << (&k - &s[0]) << ',' << c;
                return 0;
            }
    std::cout << "-1,8";
}

Вот старая версия:

C ++ 11, 175 (включая два символа новой строки)

Вот сжатая версия:

#include<iostream>
#include<string>
int main(){std::string s;std::cin>>s;for(char c:"2468"){int i=s.find(c);if(i<s.size()){std::cout<<i<<','<<c;return 0;}}std::cout<<"-1,8";}

Вот читаемая версия:

#include<iostream>
#include<string>
int main() {
    std::string s;
    std::cin >> s;
    for (char c : "2468") {
        int i = s.find(c);
        if (i < s.size()) {
            std::cout << i << ',' << c; 
            return 0;
        }
    }
    std::cout << "-1,8";
}
башмак
источник
Попробуй #define o std::cout<<. Я думаю, что это урезает ваш код на 1 символ.
@ user2509848, нет, на самом деле это на 2 символа длиннее. Но все равно спасибо :)
Shoe
k==c?std::cout<<(...),throw 0:0;- условный оператор может заменить if, когда все, что вам нужно, это выражения. throwэто выражение, а также один символ короче return.
MSalters
1

C, 80 символов

main(){char a[81],b=strcspn((gets(a),a),"2468");printf("%d,%c",a[b]?b:-1,a[b]);}
Макаров
источник
1

C # - 124

Я немного опоздал на вечеринку

void Main(string[]a){var x=a[0].Where(w=>char.IsDigit(w));var y=x.Min();Console.Write(y%2==0?a[0].IndexOf(y)+","+y:"-1,0");}
jzm
источник
0

Хаскель, 79 персонажей

s&d=filter((==d).snd)$zip[-1..]$'0':s
main=interact$show.head.("24680">>=).(&)

Это работает немного быстро и свободно с форматированием вывода:

& echo 523726 | runhaskell 16083-LowEven.hs 
(1,'2')
& echo 583746 | runhaskell 16083-LowEven.hs 
(4,'4')
& echo 53771 | runhaskell 16083-LowEven.hs 
(-1,'0')
& echo _4___2 | runhaskell 16083-LowEven.hs 
(5,'2')
& echo 25376 | runhaskell 16083-LowEven.hs 
(0,'2')
MtnViewMark
источник
0

PowerShell: 145 103

Изменения от оригинала.
Удалено сообщение об ошибке для комментария от автора.

Код:

"$([array]::IndexOf(($s=(read-host)-split''|?{$_}),($x=$s|?{$_%2-eq0}|?{$_-gt0}|sort|select -f 1))),$x"

Прохождение:

"... "Все в кавычках будет включено в вывод.

$(... )Все, что находится в скобках, будет рассматриваться как команды, и вывод этого кода будет включен вместо самих команд.

[array]::IndexOf(... )Это используется для получения индекса элемента с массивом. Его первый параметр - это объект массива для поиска. Второй параметр - это объект, который нужно найти. Это только выводит индекс первого соответствующего элемента. Я попытался просто использовать IndexOfметод непосредственно против $s(например,: $s.IndexOf($x), но по какой-то причине мне это не удалось выяснить - он утверждает, что метод не существует для этого объекта.

(... )Выражение в скобках будет первым параметром для IndexOf.

$s= $ s будет переменной для хранения ввода пользователя.

(read-host)-split'' Получает пользовательский ввод и разбивает его на массив символов.

|?{$_}Отфильтровывает лишние пустые элементы массива, сгенерированные -split''.

,(... )Выражение в скобках будет вторым параметром для IndexOf.

$x= $ s будет переменной для хранения младшей четной цифры из пользовательского ввода.

$s|?{$_%2-eq0} Вытаскивает четные числа из $ s.

|?{$_-gt0} Обнуляет ноль.

|sort Сортирует оставшиеся объекты, порядок по умолчанию возрастает.

|select -f 1 Выбирает первый объект, который теперь будет самой низкой четной цифрой.

,$xПриведенный выше код выведет индекс нашей младшей четной цифры. Это добавляет запятую, а затем выводит саму цифру.

Примечания:

Это, возможно, немного растягивает правило № 4. Если четной цифры нет, на выходе не будет второго числа.

Кроме того, это приведет к возникновению некоторых не прекращающихся ошибок, если входные данные содержат нечисловые элементы. Сценарий все еще будет запускаться и давать правильный вывод, но вы можете установить $ErrorActionPreferenceего 'SilentlyContinue'перед запуском.

Iszi
источник
@ DankoDurbić Теперь, когда вы победили меня, не могли бы вы помочь мне понять, почему я не могу использовать $s.IndexOfздесь? Это давало мне ошибку, говоря, что метод не существует для этого объекта, хотя и $s|gmсказал, что он существует. Он работает в той системе, в которой я сейчас работаю, но не той, в которой я пытался сделать это ранее сегодня. Это проблема совместимости версий? Ранее система была PSv2, текущая - PSv4.
Изи
Вы $sесть string[], и $s.indexofне работает, потому что ...[System.String[]] doesn't contain a method named 'indexOf', что кажется разумным (я использую PS 2.0). $s|gmвозвращает членов System.String, а не System.String[]. Я не уверен, почему это так.
Данко Дурбич
0

vb.net (108c)

Sub Main()
t=ReadLine()                          '12c
For Each c In "2468"                  '20c  
i=t.IndexOf(c)                        '14c
If i>=0 Then Exit For                 '21c
Next                                  ' 4c
WriteLine("{0},{1}",i,If(i<0,0,t(i))) '37c
End Sub

Немного пахнет, потому что он использует динамические настройки VB. Опция Явное отключение и импорт System.Console .

Адам Спейт
источник
0

VB.net (193c) с использованием LINQ

Этот в первую очередь использует запрос LINQ.

Dim r = From d In "2468" Group Join q In ReadLine.Select(Function(c, p) New With {.c = c, .i = p})
                              On d Equals q.c Into g = Group
                                        Skip While g.Count = 0 ' 138c
WriteLine(If(r.Any,r(0).g(0).i&","&r(0).g(0).c,"-1,0"))        '  55c
Адам Спейт
источник
0

Golf-Basic 84, 91 символов

:L1/L1_L2i`L1:fpart(L1,2)2_L1:SortA(L1)@cumSum(L1)=length(L1):Thend`-1#d`cumSum(L1):Endd`L1
  • Убедитесь, что нет 0на входе (это не четное, кто сказал, что это должно быть нечетным?)
  • Получить вход в L1 (Список 1)
  • Модуль поиска петель 2 для каждого значения
  • Сортировка L1 от наименьшего к наивысшему
  • Выведите индекс (либо -1, либо накопленную сумму) и наименьшее число
Timtech
источник
0

Bourne shell (sh), 88 символов

(echo 88;sed 's/./\n&/g')|nl -v-1|awk '{print $2,$1}'|sed '/^[^2468]/d'|sort -n|head -n1

Я думал, что сделаю что-нибудь для обработки строк ради развлечения. Технически он читает из stdin, но если вы запустите его в интерактивном режиме, он запросит ввод данных, поскольку клавиатура является потоком stdin по умолчанию. Использует базовые команды оболочки, чтобы разделить ввод по строкам, пронумеровать их (используя малоизвестную nlутилиту), отфильтровать строки, соответствующие критериям, отсортировать их и вывести младшую цифру. Печатает, 88 -1если четная цифра не найдена.

Светляк
источник
0

С ++ - 223 221 Персонажи:

#include<iostream>
#include<string>using namespace std;
int main(){int s=9;int p=-1;string x;cout<<"Enter characters: ";cin>>x;for(int i=0;i<x.length();i++){int n=x[i]-48;if(n%2==0&n<s){s=n;p=i;}}cout<<p<<", "<<s;return 0;}

Читаемая версия:

#include<iostream>
#include<string>
using namespace std;

int main() {
    int s = 9;
    int p= - 1;
    string x;

    cout << "Enter characters: ";
    cin >> x;

    for (int i = 0; i < x.length(); i++) {
        int n = x[i] - 48;

        if (n % 2 == 0 & n < s) {
            s = n;
            p = i;
        }
    }

    cout << p << ", " << s;

    return 0;
}

Это долго, но не так плохо, как Java.


источник
На самом деле это 221 + 2 (символы новой строки), иначе он не скомпилируется.
Чистка обуви
Ой. Слово обнаружено только 221, я его поменяю.
0

Javascript 93 символа

b=prompt();((r=b.match(/[2468]/g)||[-1]).sort(function(a,b){return a-b})[0])+","+b.indexOf(r)

Получить все номера событий, отсортировать массив и распечатать первую цифру.

Фелипе Миоссо
источник
0

Mathematica, 157 знаков

f = Row@{If[(x = Min@#) == Infinity, -1, Position[#, x][[1, 1]]],
      ",", x} &[IntegerDigits@ToExpression@StringReplace[#,
       {"0" -> "1", x_?DigitQ :> x, _ -> "1"}] /. _?OddQ -> Infinity] &

inputs = {"25376", "523726", "583746", "53771", "_4___2"}

f /@ inputs // Column

1,2

2,2

5,4

-1, ∞

6,2

Крис Дегнен
источник
0

Юлия, 84

julia> f(a)=(for i=2:2:8;(k=search(a,'0'+i))==0||return(k,i);end;(-1,0))
julia> f(readline(STDIN))
583746
(5,4)
julia> f(readline(STDIN))
_4___2
(6,2)

Джулии действительно нужен более короткий способ получить информацию для игры в гольф. Я посчитал определение fи один звонок f. Индексирование, основанное на одном, объясняет, почему ответы отличаются от примеров.

GGGG
источник
0

JavaScript - 53 символа

for(y=prompt(x=0);x<8&&(i=y.indexOf(x+=2))<0;);x+''+i

Считывает ввод из приглашения и выводит (в консоль) младший четный символ, а затем (без разделителя) первый индекс этого символа; если нет ненулевых четных символов, то выводится 8-1.

mt0
источник
0

C, 110 символов

i,f,r,c,m=9;main(){while(r=getchar()>31){c=r-48;i++;if(c>=0&&~c&1&&c<m)m=c,f=i;}printf("%i,%i",m>8?-1:f-1,m);}

ungolfed:

i,f,r,c,m=9;
main(){
  while(r=getchar()>31){
    c=r-48;
    i++;
    if(c>=0&&~c&1&&c<m) m=c,f=i;
  }
  printf("%i,%i",m>8?-1:f-1,m);
}
MarcDefiant
источник
0

Javascript, 69

a=prompt(),b=[-1,9];for(i in a)if(+a[i]%2==0&&+a[i]<b[1])b=[+i,+a[i]]

Считывает значение, перебирает каждый символ, если числовое представление mod 2 равно 0, а число меньше того, что уже сохранено b, замените значения вb

Дэнни
источник
0

Реболь, 69

s: input for n 2 8 2[if f: find s n[print[index? f f/1]q]]print[-1 0]
draegtun
источник
0

Ruby 55

p gets.chars.sort*''=~/[2468]/?[$_.index($&),$&]:[-1,0]
daniero
источник
0

JavaScript / JQuery 149

Golfed

$(function(){
var i=prompt(),k=-1,n=0,c,e="2468";
while(n<i.length){c=i.charAt(n);k=e.indexOf(c);if(k>=0){break;}n++;}$('#d').append(k+","+n);
});

Полный источник

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<div id="d"></div>
<script type="text/javascript">
$(function(){
var i=prompt();
var k=-1;
var n=0;
var c;
var e="2468";
while(n<i.length){
c=i.charAt(n);
k=e.indexOf(c);
if(k>=0){
break;
}
n++;
}
$('#d').append(k+","+n);
});
</script>
</body>
</html>
bacchusbeale
источник